From 5b97140309c6218a2141002a8f2666c1d7737008 Mon Sep 17 00:00:00 2001 From: HyungKyu Song Date: Sat, 16 Feb 2013 00:06:51 +0900 Subject: [PATCH] Tizen 2.0 Release --- AUTHORS | 30 + COPYING | 8 + ChangeLog | 54 + INSTALL | 2 + Lib/BC/BC.txt | 1 + Lib/MS/MS.TXT | 1 + Makefile | 793 + Makefile.am | 31 + Makefile.in | 793 + NEWS | 0 Projects/BorlandC_5.5/lcms2.rc | 30 + Projects/BorlandC_5.5/lcmsdll.lk | 29 + Projects/BorlandC_5.5/lcmsdll.lst | 27 + Projects/BorlandC_5.5/mklcmsdll.bat | 14 + Projects/VC2008/jpegicc/jpegicc.vcproj | 211 + Projects/VC2008/lcms2.rc | 113 + Projects/VC2008/lcms2.sln | Bin 0 -> 14242 bytes Projects/VC2008/lcms2_DLL/lcms2_DLL.vcproj | 326 + Projects/VC2008/lcms2_static/lcms2_static.vcproj | 277 + Projects/VC2008/linkicc/linkicc.vcproj | 205 + Projects/VC2008/psicc/psicc.vcproj | 205 + Projects/VC2008/resource.h | 16 + Projects/VC2008/testbed/testbed.vcproj | 203 + Projects/VC2008/tiffdiff/tiffdiff.vcproj | 207 + Projects/VC2008/tifficc/tifficc.vcproj | 211 + Projects/VC2008/transicc/transicc.vcproj | 209 + Projects/VC2010/jpegicc/jpegicc.vcproj | 211 + Projects/VC2010/jpegicc/jpegicc.vcxproj | 117 + Projects/VC2010/jpegicc/jpegicc.vcxproj.filters | 31 + Projects/VC2010/lcms2.rc | 113 + Projects/VC2010/lcms2.sln | Bin 0 -> 12090 bytes Projects/VC2010/lcms2_DLL/lcms2_DLL.vcproj | 326 + Projects/VC2010/lcms2_DLL/lcms2_DLL.vcxproj | 143 + .../VC2010/lcms2_DLL/lcms2_DLL.vcxproj.filters | 115 + Projects/VC2010/lcms2_static/lcms2_static.vcproj | 277 + Projects/VC2010/lcms2_static/lcms2_static.vcxproj | 120 + .../lcms2_static/lcms2_static.vcxproj.filters | 102 + Projects/VC2010/linkicc/linkicc.vcproj | 205 + Projects/VC2010/linkicc/linkicc.vcxproj | 107 + Projects/VC2010/linkicc/linkicc.vcxproj.filters | 28 + Projects/VC2010/psicc/psicc.vcproj | 205 + Projects/VC2010/psicc/psicc.vcxproj | 107 + Projects/VC2010/psicc/psicc.vcxproj.filters | 28 + Projects/VC2010/resource.h | 16 + Projects/VC2010/testbed/testbed.vcproj | 203 + Projects/VC2010/testbed/testbed.vcxproj | 113 + Projects/VC2010/testbed/testbed.vcxproj.filters | 22 + Projects/VC2010/tiffdiff/tiffdiff.vcproj | 207 + Projects/VC2010/tiffdiff/tiffdiff.vcxproj | 114 + Projects/VC2010/tiffdiff/tiffdiff.vcxproj.filters | 28 + Projects/VC2010/tifficc/tifficc.vcproj | 211 + Projects/VC2010/tifficc/tifficc.vcxproj | 116 + Projects/VC2010/tifficc/tifficc.vcxproj.filters | 33 + Projects/VC2010/transicc/transicc.vcproj | 209 + Projects/VC2010/transicc/transicc.vcxproj | 110 + Projects/VC2010/transicc/transicc.vcxproj.filters | 33 + Projects/mac/.DS_Store | Bin 0 -> 6148 bytes Projects/mac/._.DS_Store | Bin 0 -> 4096 bytes Projects/mac/LittleCMS/.DS_Store | Bin 0 -> 6148 bytes Projects/mac/LittleCMS/._.DS_Store | Bin 0 -> 4096 bytes .../mac/LittleCMS/English.lproj/InfoPlist.strings | Bin 0 -> 148 bytes Projects/mac/LittleCMS/Info.plist | 26 + .../LittleCMS/LittleCMS.xcodeproj/mariama.mode1v3 | 1448 ++ .../LittleCMS/LittleCMS.xcodeproj/mariama.pbxuser | 339 + .../LittleCMS/LittleCMS.xcodeproj/project.pbxproj | 490 + Projects/mac/LittleCMS/LittleCMS_Prefix.pch | 5 + Projects/mac/LittleCMS/TestBed-Info.plist | 22 + README.1ST | 2 + aclocal.m4 | 9418 +++++++++ autogen.sh | 92 + bin/Bin.txt | 1 + config.guess | 1501 ++ config.status | 0 config.sub | 1705 ++ configure | 19183 +++++++++++++++++++ configure.ac | 285 + debian/changelog | 99 + debian/compat | 1 + debian/control | 63 + debian/copyright | 43 + debian/liblcms2-2.install | 1 + debian/liblcms2-2.symbols | 367 + debian/liblcms2-dev.docs | 1 + debian/liblcms2-dev.install | 4 + debian/liblcms2-utils.install | 2 + debian/liblcms2-utils.manpages | 3 + debian/man/linkicc.1 | 89 + debian/man/psicc.1 | 40 + debian/man/transicc.1 | 60 + debian/patches/lcms-endian.patch | 15 + debian/patches/lcms2-ocloexec.patch | 40 + debian/patches/lcms2-visibility.patch | 16 + debian/patches/series | 4 + debian/rules | 48 + debian/source/format | 1 + debian/watch | 10 + depcomp | 522 + doc/LittleCMS2.3 API.pdf | Bin 0 -> 1129599 bytes doc/LittleCMS2.3 Plugin API.pdf | Bin 0 -> 492002 bytes doc/LittleCMS2.3 tutorial.pdf | Bin 0 -> 736326 bytes doc/src.zip | Bin 0 -> 416448 bytes include/Makefile | 471 + include/Makefile.am | 7 + include/Makefile.in | 471 + include/lcms2.h | 1768 ++ include/lcms2_plugin.h | 535 + install-sh | 520 + lcms2.pc | 11 + lcms2.pc.in | 11 + liblcms2-utils.manifest | 8 + liblcms2.manifest | 5 + libtool | 10280 ++++++++++ ltmain.sh | 9687 ++++++++++ missing | 353 + packaging/baselibs.conf | 6 + packaging/lcms-endian.patch | 15 + packaging/lcms2-ocloexec.patch | 40 + packaging/lcms2-visibility.patch | 16 + packaging/lcms2.spec | 175 + src/.deps/cmscam02.Plo | 1 + src/.deps/cmscgats.Plo | 1 + src/.deps/cmscnvrt.Plo | 1 + src/.deps/cmserr.Plo | 1 + src/.deps/cmsgamma.Plo | 1 + src/.deps/cmsgmt.Plo | 1 + src/.deps/cmsintrp.Plo | 1 + src/.deps/cmsio0.Plo | 1 + src/.deps/cmsio1.Plo | 1 + src/.deps/cmslut.Plo | 1 + src/.deps/cmsmd5.Plo | 1 + src/.deps/cmsmtrx.Plo | 1 + src/.deps/cmsnamed.Plo | 1 + src/.deps/cmsopt.Plo | 1 + src/.deps/cmspack.Plo | 1 + src/.deps/cmspcs.Plo | 1 + src/.deps/cmsplugin.Plo | 1 + src/.deps/cmsps2.Plo | 1 + src/.deps/cmssamp.Plo | 1 + src/.deps/cmssm.Plo | 1 + src/.deps/cmstypes.Plo | 1 + src/.deps/cmsvirt.Plo | 1 + src/.deps/cmswtpnt.Plo | 1 + src/.deps/cmsxform.Plo | 1 + src/Makefile | 583 + src/Makefile.am | 31 + src/Makefile.in | 583 + src/cmscam02.c | 483 + src/cmscgats.c | 2693 +++ src/cmscnvrt.c | 1057 + src/cmserr.c | 430 + src/cmsgamma.c | 1160 ++ src/cmsgmt.c | 590 + src/cmsintrp.c | 1463 ++ src/cmsio0.c | 1735 ++ src/cmsio1.c | 897 + src/cmslut.c | 1734 ++ src/cmsmd5.c | 317 + src/cmsmtrx.c | 176 + src/cmsnamed.c | 900 + src/cmsopt.c | 1657 ++ src/cmspack.c | 2813 +++ src/cmspcs.c | 926 + src/cmsplugin.c | 612 + src/cmsps2.c | 1600 ++ src/cmssamp.c | 266 + src/cmssm.c | 735 + src/cmstypes.c | 5394 ++++++ src/cmsvirt.c | 1148 ++ src/cmswtpnt.c | 351 + src/cmsxform.c | 815 + src/lcms2.def | 309 + src/lcms2_internal.h | 634 + testbed/.deps/testcms2.Po | 1 + testbed/Makefile | 510 + testbed/Makefile.am | 31 + testbed/Makefile.in | 510 + testbed/bad.icc | 21 + testbed/test1.icc | Bin 0 -> 557536 bytes testbed/test2.icc | Bin 0 -> 654496 bytes testbed/test3.icc | Bin 0 -> 28484 bytes testbed/test4.icc | Bin 0 -> 61020 bytes testbed/test5.icc | Bin 0 -> 3240 bytes testbed/testcms2.c | 7788 ++++++++ testbed/testthread.cpp | 52 + testbed/toosmall.icc | Bin 0 -> 158 bytes utils/common/utils.h | 103 + utils/common/vprf.c | 333 + utils/common/xgetopt.c | 75 + utils/delphi/delphidemo.dpr | 13 + utils/delphi/delphidemo.dproj | 114 + utils/delphi/delphidemo.res | Bin 0 -> 876 bytes utils/delphi/demo1.dfm | Bin 0 -> 4400 bytes utils/delphi/demo1.pas | 322 + utils/delphi/lcms2.dll | Bin 0 -> 334848 bytes utils/delphi/lcms2dll.pas | 2108 ++ utils/jpgicc/.deps/iccjpeg.Po | 1 + utils/jpgicc/.deps/jpgicc.Po | 1 + utils/jpgicc/.deps/vprf.Po | 1 + utils/jpgicc/.deps/xgetopt.Po | 1 + utils/jpgicc/Makefile | 650 + utils/jpgicc/Makefile.am | 22 + utils/jpgicc/Makefile.in | 650 + utils/jpgicc/iccjpeg.c | 248 + utils/jpgicc/iccjpeg.h | 73 + utils/jpgicc/jpgicc.1 | 79 + utils/jpgicc/jpgicc.c | 1268 ++ utils/linkicc/.deps/linkicc.Po | 1 + utils/linkicc/.deps/vprf.Po | 1 + utils/linkicc/.deps/xgetopt.Po | 1 + utils/linkicc/Makefile | 571 + utils/linkicc/Makefile.am | 19 + utils/linkicc/Makefile.in | 571 + utils/linkicc/linkicc.1 | 90 + utils/linkicc/linkicc.c | 384 + utils/matlab/icctrans.c | 724 + utils/matlab/lcms_rsp | 27 + utils/psicc/.deps/psicc.Po | 1 + utils/psicc/.deps/vprf.Po | 1 + utils/psicc/.deps/xgetopt.Po | 1 + utils/psicc/Makefile | 570 + utils/psicc/Makefile.am | 19 + utils/psicc/Makefile.in | 570 + utils/psicc/psicc.1 | 41 + utils/psicc/psicc.c | 228 + utils/samples/Makefile.am | 19 + utils/samples/Makefile.in | 611 + utils/samples/itufax.c | 138 + utils/samples/mkcmy.c | 170 + utils/samples/mkgrayer.c | 93 + utils/samples/mktiff8.c | 150 + utils/samples/roundtrip.c | 88 + utils/samples/vericc.c | 65 + utils/samples/wtpt.1 | 28 + utils/samples/wtpt.c | 94 + utils/tificc/.deps/tificc.Po | 1 + utils/tificc/.deps/vprf.Po | 1 + utils/tificc/.deps/xgetopt.Po | 1 + utils/tificc/Makefile | 648 + utils/tificc/Makefile.am | 25 + utils/tificc/Makefile.in | 648 + utils/tificc/tifdiff.c | 708 + utils/tificc/tificc.1 | 100 + utils/tificc/tificc.c | 1130 ++ utils/transicc/.deps/transicc.Po | 1 + utils/transicc/.deps/vprf.Po | 1 + utils/transicc/.deps/xgetopt.Po | 1 + utils/transicc/Makefile | 571 + utils/transicc/Makefile.am | 19 + utils/transicc/Makefile.in | 571 + utils/transicc/transicc.1 | 61 + utils/transicc/transicc.c | 1205 ++ 251 files changed, 126030 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Lib/BC/BC.txt create mode 100644 Lib/MS/MS.TXT create mode 100644 Makefile create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 Projects/BorlandC_5.5/lcms2.rc create mode 100644 Projects/BorlandC_5.5/lcmsdll.lk create mode 100644 Projects/BorlandC_5.5/lcmsdll.lst create mode 100644 Projects/BorlandC_5.5/mklcmsdll.bat create mode 100644 Projects/VC2008/jpegicc/jpegicc.vcproj create mode 100644 Projects/VC2008/lcms2.rc create mode 100755 Projects/VC2008/lcms2.sln create mode 100644 Projects/VC2008/lcms2_DLL/lcms2_DLL.vcproj create mode 100644 Projects/VC2008/lcms2_static/lcms2_static.vcproj create mode 100644 Projects/VC2008/linkicc/linkicc.vcproj create mode 100644 Projects/VC2008/psicc/psicc.vcproj create mode 100644 Projects/VC2008/resource.h create mode 100644 Projects/VC2008/testbed/testbed.vcproj create mode 100644 Projects/VC2008/tiffdiff/tiffdiff.vcproj create mode 100644 Projects/VC2008/tifficc/tifficc.vcproj create mode 100644 Projects/VC2008/transicc/transicc.vcproj create mode 100644 Projects/VC2010/jpegicc/jpegicc.vcproj create mode 100644 Projects/VC2010/jpegicc/jpegicc.vcxproj create mode 100644 Projects/VC2010/jpegicc/jpegicc.vcxproj.filters create mode 100644 Projects/VC2010/lcms2.rc create mode 100755 Projects/VC2010/lcms2.sln create mode 100644 Projects/VC2010/lcms2_DLL/lcms2_DLL.vcproj create mode 100644 Projects/VC2010/lcms2_DLL/lcms2_DLL.vcxproj create mode 100644 Projects/VC2010/lcms2_DLL/lcms2_DLL.vcxproj.filters create mode 100644 Projects/VC2010/lcms2_static/lcms2_static.vcproj create mode 100644 Projects/VC2010/lcms2_static/lcms2_static.vcxproj create mode 100644 Projects/VC2010/lcms2_static/lcms2_static.vcxproj.filters create mode 100644 Projects/VC2010/linkicc/linkicc.vcproj create mode 100644 Projects/VC2010/linkicc/linkicc.vcxproj create mode 100644 Projects/VC2010/linkicc/linkicc.vcxproj.filters create mode 100644 Projects/VC2010/psicc/psicc.vcproj create mode 100644 Projects/VC2010/psicc/psicc.vcxproj create mode 100644 Projects/VC2010/psicc/psicc.vcxproj.filters create mode 100644 Projects/VC2010/resource.h create mode 100644 Projects/VC2010/testbed/testbed.vcproj create mode 100644 Projects/VC2010/testbed/testbed.vcxproj create mode 100644 Projects/VC2010/testbed/testbed.vcxproj.filters create mode 100644 Projects/VC2010/tiffdiff/tiffdiff.vcproj create mode 100644 Projects/VC2010/tiffdiff/tiffdiff.vcxproj create mode 100644 Projects/VC2010/tiffdiff/tiffdiff.vcxproj.filters create mode 100644 Projects/VC2010/tifficc/tifficc.vcproj create mode 100644 Projects/VC2010/tifficc/tifficc.vcxproj create mode 100644 Projects/VC2010/tifficc/tifficc.vcxproj.filters create mode 100644 Projects/VC2010/transicc/transicc.vcproj create mode 100644 Projects/VC2010/transicc/transicc.vcxproj create mode 100644 Projects/VC2010/transicc/transicc.vcxproj.filters create mode 100755 Projects/mac/.DS_Store create mode 100755 Projects/mac/._.DS_Store create mode 100755 Projects/mac/LittleCMS/.DS_Store create mode 100755 Projects/mac/LittleCMS/._.DS_Store create mode 100755 Projects/mac/LittleCMS/English.lproj/InfoPlist.strings create mode 100644 Projects/mac/LittleCMS/Info.plist create mode 100644 Projects/mac/LittleCMS/LittleCMS.xcodeproj/mariama.mode1v3 create mode 100644 Projects/mac/LittleCMS/LittleCMS.xcodeproj/mariama.pbxuser create mode 100644 Projects/mac/LittleCMS/LittleCMS.xcodeproj/project.pbxproj create mode 100644 Projects/mac/LittleCMS/LittleCMS_Prefix.pch create mode 100644 Projects/mac/LittleCMS/TestBed-Info.plist create mode 100644 README.1ST create mode 100644 aclocal.m4 create mode 100755 autogen.sh create mode 100644 bin/Bin.txt create mode 100755 config.guess create mode 100644 config.status create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.ac create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/liblcms2-2.install create mode 100644 debian/liblcms2-2.symbols create mode 100644 debian/liblcms2-dev.docs create mode 100644 debian/liblcms2-dev.install create mode 100644 debian/liblcms2-utils.install create mode 100644 debian/liblcms2-utils.manpages create mode 100644 debian/man/linkicc.1 create mode 100644 debian/man/psicc.1 create mode 100644 debian/man/transicc.1 create mode 100644 debian/patches/lcms-endian.patch create mode 100644 debian/patches/lcms2-ocloexec.patch create mode 100644 debian/patches/lcms2-visibility.patch create mode 100644 debian/patches/series create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/watch create mode 100755 depcomp create mode 100755 doc/LittleCMS2.3 API.pdf create mode 100755 doc/LittleCMS2.3 Plugin API.pdf create mode 100755 doc/LittleCMS2.3 tutorial.pdf create mode 100755 doc/src.zip create mode 100644 include/Makefile create mode 100644 include/Makefile.am create mode 100644 include/Makefile.in create mode 100644 include/lcms2.h create mode 100644 include/lcms2_plugin.h create mode 100755 install-sh create mode 100644 lcms2.pc create mode 100644 lcms2.pc.in create mode 100644 liblcms2-utils.manifest create mode 100644 liblcms2.manifest create mode 100755 libtool create mode 100755 ltmain.sh create mode 100755 missing create mode 100644 packaging/baselibs.conf create mode 100644 packaging/lcms-endian.patch create mode 100644 packaging/lcms2-ocloexec.patch create mode 100644 packaging/lcms2-visibility.patch create mode 100644 packaging/lcms2.spec create mode 100644 src/.deps/cmscam02.Plo create mode 100644 src/.deps/cmscgats.Plo create mode 100644 src/.deps/cmscnvrt.Plo create mode 100644 src/.deps/cmserr.Plo create mode 100644 src/.deps/cmsgamma.Plo create mode 100644 src/.deps/cmsgmt.Plo create mode 100644 src/.deps/cmsintrp.Plo create mode 100644 src/.deps/cmsio0.Plo create mode 100644 src/.deps/cmsio1.Plo create mode 100644 src/.deps/cmslut.Plo create mode 100644 src/.deps/cmsmd5.Plo create mode 100644 src/.deps/cmsmtrx.Plo create mode 100644 src/.deps/cmsnamed.Plo create mode 100644 src/.deps/cmsopt.Plo create mode 100644 src/.deps/cmspack.Plo create mode 100644 src/.deps/cmspcs.Plo create mode 100644 src/.deps/cmsplugin.Plo create mode 100644 src/.deps/cmsps2.Plo create mode 100644 src/.deps/cmssamp.Plo create mode 100644 src/.deps/cmssm.Plo create mode 100644 src/.deps/cmstypes.Plo create mode 100644 src/.deps/cmsvirt.Plo create mode 100644 src/.deps/cmswtpnt.Plo create mode 100644 src/.deps/cmsxform.Plo create mode 100644 src/Makefile create mode 100644 src/Makefile.am create mode 100644 src/Makefile.in create mode 100644 src/cmscam02.c create mode 100644 src/cmscgats.c create mode 100644 src/cmscnvrt.c create mode 100644 src/cmserr.c create mode 100644 src/cmsgamma.c create mode 100644 src/cmsgmt.c create mode 100644 src/cmsintrp.c create mode 100644 src/cmsio0.c create mode 100644 src/cmsio1.c create mode 100644 src/cmslut.c create mode 100644 src/cmsmd5.c create mode 100644 src/cmsmtrx.c create mode 100644 src/cmsnamed.c create mode 100644 src/cmsopt.c create mode 100644 src/cmspack.c create mode 100644 src/cmspcs.c create mode 100644 src/cmsplugin.c create mode 100644 src/cmsps2.c create mode 100644 src/cmssamp.c create mode 100644 src/cmssm.c create mode 100644 src/cmstypes.c create mode 100644 src/cmsvirt.c create mode 100644 src/cmswtpnt.c create mode 100644 src/cmsxform.c create mode 100644 src/lcms2.def create mode 100644 src/lcms2_internal.h create mode 100644 testbed/.deps/testcms2.Po create mode 100644 testbed/Makefile create mode 100644 testbed/Makefile.am create mode 100644 testbed/Makefile.in create mode 100644 testbed/bad.icc create mode 100755 testbed/test1.icc create mode 100755 testbed/test2.icc create mode 100755 testbed/test3.icc create mode 100755 testbed/test4.icc create mode 100755 testbed/test5.icc create mode 100644 testbed/testcms2.c create mode 100644 testbed/testthread.cpp create mode 100755 testbed/toosmall.icc create mode 100644 utils/common/utils.h create mode 100644 utils/common/vprf.c create mode 100644 utils/common/xgetopt.c create mode 100755 utils/delphi/delphidemo.dpr create mode 100755 utils/delphi/delphidemo.dproj create mode 100755 utils/delphi/delphidemo.res create mode 100755 utils/delphi/demo1.dfm create mode 100755 utils/delphi/demo1.pas create mode 100755 utils/delphi/lcms2.dll create mode 100755 utils/delphi/lcms2dll.pas create mode 100644 utils/jpgicc/.deps/iccjpeg.Po create mode 100644 utils/jpgicc/.deps/jpgicc.Po create mode 100644 utils/jpgicc/.deps/vprf.Po create mode 100644 utils/jpgicc/.deps/xgetopt.Po create mode 100644 utils/jpgicc/Makefile create mode 100644 utils/jpgicc/Makefile.am create mode 100644 utils/jpgicc/Makefile.in create mode 100644 utils/jpgicc/iccjpeg.c create mode 100644 utils/jpgicc/iccjpeg.h create mode 100644 utils/jpgicc/jpgicc.1 create mode 100644 utils/jpgicc/jpgicc.c create mode 100644 utils/linkicc/.deps/linkicc.Po create mode 100644 utils/linkicc/.deps/vprf.Po create mode 100644 utils/linkicc/.deps/xgetopt.Po create mode 100644 utils/linkicc/Makefile create mode 100644 utils/linkicc/Makefile.am create mode 100644 utils/linkicc/Makefile.in create mode 100644 utils/linkicc/linkicc.1 create mode 100644 utils/linkicc/linkicc.c create mode 100755 utils/matlab/icctrans.c create mode 100755 utils/matlab/lcms_rsp create mode 100644 utils/psicc/.deps/psicc.Po create mode 100644 utils/psicc/.deps/vprf.Po create mode 100644 utils/psicc/.deps/xgetopt.Po create mode 100644 utils/psicc/Makefile create mode 100644 utils/psicc/Makefile.am create mode 100644 utils/psicc/Makefile.in create mode 100644 utils/psicc/psicc.1 create mode 100644 utils/psicc/psicc.c create mode 100644 utils/samples/Makefile.am create mode 100644 utils/samples/Makefile.in create mode 100644 utils/samples/itufax.c create mode 100644 utils/samples/mkcmy.c create mode 100644 utils/samples/mkgrayer.c create mode 100644 utils/samples/mktiff8.c create mode 100644 utils/samples/roundtrip.c create mode 100755 utils/samples/vericc.c create mode 100644 utils/samples/wtpt.1 create mode 100644 utils/samples/wtpt.c create mode 100644 utils/tificc/.deps/tificc.Po create mode 100644 utils/tificc/.deps/vprf.Po create mode 100644 utils/tificc/.deps/xgetopt.Po create mode 100644 utils/tificc/Makefile create mode 100644 utils/tificc/Makefile.am create mode 100644 utils/tificc/Makefile.in create mode 100644 utils/tificc/tifdiff.c create mode 100644 utils/tificc/tificc.1 create mode 100644 utils/tificc/tificc.c create mode 100644 utils/transicc/.deps/transicc.Po create mode 100644 utils/transicc/.deps/vprf.Po create mode 100644 utils/transicc/.deps/xgetopt.Po create mode 100644 utils/transicc/Makefile create mode 100644 utils/transicc/Makefile.am create mode 100644 utils/transicc/Makefile.in create mode 100644 utils/transicc/transicc.1 create mode 100644 utils/transicc/transicc.c diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..ffac189 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,30 @@ + +Main Author +------------ +Marti Maria + + +Contributors +------------ +Bob Friesenhahn +Kai-Uwe Behrmann +Stuart Nixon +Jordi Vilar +Richard Hughes +Auke Nauta +Chris Evans +Lorenzo Ridolfi +Robin Watts +Shawn Pedersen +Andrew Brygin +Samuli Suominen +Florian Höch +Aurelien Jarno + +Special Thanks +-------------- +Jan Morovic +Jos Vernon (WebSupergoo) +Harald Schneider (Maxon) +Christian Albrecht +Dimitrios Anastassakis diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..fda5c9e --- /dev/null +++ b/COPYING @@ -0,0 +1,8 @@ +Little CMS +Copyright (c) 1998-2011 Marti Maria Saguer + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..b71c278 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,54 @@ +2.0 Major version bump +----------------------- + +Fixed a bug on V2 CHAD construction, affects absolute colorimetric intent +Fixed a bug that prevented linkicc to work +Fixed a bug on transicc that made profiles with output colorants info to malfunction +Fixed a bug on Lab + Alpha float formatters, added such predefined formatters as well +Added cmsChangeBufferFormat for backwards compatibility +Added UTILS_UNUSED_PARAMETER for samples +Added a check on jpgicc for NULL transforms +Fixed VC2010, VC2008 projects +Added cmsTagLinkedTo +Fixed some typos in error messages +Peliminary Delphi wrapper +Fixed a bug in tificc in floating point formats +Fixed a bug in device link creation on v4 profiles +Fixed a bug in psid and profile sequence tags +Fixed memory leaks on when recovering from errors +Fixed an issue on curve inversion +Fixed several integer overflow and other integrity checks, thanks to Chris Evans +linkicc now stores the rendering intent in the profile header +Fixed delphi interface +Added Duotone support (Bilinear interpolation) +Fixed a bug on curve reversing when source curves have few points +Added bound check in floating point interpolation + +2.1 Maintenance release +----------------------- + +Fixed severa bugs in absolute colorimetric intent +Removed pthreads need +Updated linkicc to 2.1, cleanup +Fixed some potential issues as NULL dereferencing +Fixed GBD bug (out of bounds memory overwrite) +changed memmove to memcpy in cache for xput improvement +Profiles with weird curves are not prone to p`relinearization optimization. +Added functions to retrieve formatters from transforms +Fixed a bug that made crash black preservation on CMYK2CMYK devicelinks +Added named color functionality +Fixed a bug in black preservation and sligtly non-monotonic curves +Added dictionary metatag support +Fixed a bug on ReadRAWtag +Pascal unit now is supported by Free Pascal Compiler + + +2.2 Maintenance release +----------------------- + +Fixed a 0 byte allocation issue in _cmsCreateSubAllocChunk +Fixed encoding for floating point tags in Lab/XYZ +Fixed Absolute colorimetric intent issues +Fixed a bug on the range of data in transicc, when colorant tag is specified +Adding a memory alignment macro for CGATS parser +Updated to ICC spec 4.3 \ No newline at end of file diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..2e5ee4a --- /dev/null +++ b/INSTALL @@ -0,0 +1,2 @@ + + Please see the documentation in doc folder diff --git a/Lib/BC/BC.txt b/Lib/BC/BC.txt new file mode 100644 index 0000000..146228d --- /dev/null +++ b/Lib/BC/BC.txt @@ -0,0 +1 @@ +BC \ No newline at end of file diff --git a/Lib/MS/MS.TXT b/Lib/MS/MS.TXT new file mode 100644 index 0000000..32dfbc9 --- /dev/null +++ b/Lib/MS/MS.TXT @@ -0,0 +1 @@ +MS \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..332b8c3 --- /dev/null +++ b/Makefile @@ -0,0 +1,793 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# +# Top-Level Makefile for building LittleCMS 2 +# + + +pkgdatadir = $(datadir)/lcms2 +pkgincludedir = $(includedir)/lcms2 +pkglibdir = $(libdir)/lcms2 +pkglibexecdir = $(libexecdir)/lcms2 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = arm-unknown-linux-gnueabi +host_triplet = arm-unknown-linux-gnueabi +subdir = . +DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/lcms2.pc.in \ + $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ + config.guess config.sub depcomp install-sh ltmain.sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = lcms2.pc +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).zip +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoconf +AUTOHEADER = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoheader +AUTOMAKE = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall +CPP = gcc -std=gnu99 -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DPACKAGE_NAME=\"lcms2\" -DPACKAGE_TARNAME=\"lcms2\" -DPACKAGE_VERSION=\"2.3\" -DPACKAGE_STRING=\"lcms2\ 2.3\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHasJPEG=1 -DHasZLIB=1 -DHasTIFF=1 -DHAVE_TIFFCONF_H=1 +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JPEGICC_DEPLIBS = -ljpeg -lm +LCMS_LIB_DEPLIBS = -lm +LD = /usr/arm-linux-gnueabi/bin/ld +LDFLAGS = +LIBOBJS = +LIBRARY_AGE = 0 +LIBRARY_CURRENT = 2 +LIBRARY_REVISION = 3 +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltmain.sh +LIB_JPEG = -ljpeg +LIB_MATH = -lm +LIB_TIFF = -ltiff +LIB_ZLIB = -lz +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = lcms2 +PACKAGE_BUGREPORT = +PACKAGE_NAME = lcms2 +PACKAGE_STRING = lcms2 2.3 +PACKAGE_TARNAME = lcms2 +PACKAGE_URL = +PACKAGE_VERSION = 2.3 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TIFFICC_DEPLIBS = -ltiff -ljpeg -lz -lm +VERSION = 2.3 +abs_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +abs_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +abs_top_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +abs_top_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = arm-unknown-linux-gnueabi +build_alias = +build_cpu = arm +build_os = linux-gnueabi +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = arm-unknown-linux-gnueabi +host_alias = +host_cpu = arm +host_os = linux-gnueabi +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +inline = +install_sh = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = +top_builddir = . +top_srcdir = . + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7.2 dist-zip foreign + +# Directories containing Makefiles to 'make' +SUBDIRS = src include utils/tificc utils/transicc utils/linkicc utils/jpgicc utils/psicc testbed + +# Additional files to distribute +EXTRA_DIST = AUTHORS COPYING ChangeLog doc Projects include bin Lib INSTALL NEWS README.1ST lcms2.pc.in +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = lcms2.pc +all: all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: # $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): +lcms2.pc: $(top_builddir)/config.status $(srcdir)/lcms2.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool clean-local ctags ctags-recursive dist dist-all \ + dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ dist-xz \ + dist-zip distcheck distclean distclean-generic \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-pkgconfigDATA + + +# Make sure get rid of VC stuff... +clean-local: + find Projects -name "*.user" | xargs rm -rf + find Projects -name "Release" | xargs rm -rf + find Projects -name "Debug" | xargs rm -rf + find Projects -name "*.aps" | xargs rm -rf + find Projects -name "*.suo" | xargs rm -rf + find Projects -name "*.log" | xargs rm -rf + find Projects -name "*.sdf" | xargs rm -rf + find Projects -name "*.opensdf" | xargs rm -rf + find Projects -name "*.log" | xargs rm -rf + find Projects -name "ipch" | xargs rm -rf + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..188e819 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,31 @@ +# +# Top-Level Makefile for building LittleCMS 2 +# + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7.2 dist-zip foreign + +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ + +# Directories containing Makefiles to 'make' +SUBDIRS = src include utils/tificc utils/transicc utils/linkicc utils/jpgicc utils/psicc testbed + +# Additional files to distribute +EXTRA_DIST = AUTHORS COPYING ChangeLog doc Projects include bin Lib INSTALL NEWS README.1ST lcms2.pc.in + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = lcms2.pc + +# Make sure get rid of VC stuff... +clean-local: + find Projects -name "*.user" | xargs rm -rf + find Projects -name "Release" | xargs rm -rf + find Projects -name "Debug" | xargs rm -rf + find Projects -name "*.aps" | xargs rm -rf + find Projects -name "*.suo" | xargs rm -rf + find Projects -name "*.log" | xargs rm -rf + find Projects -name "*.sdf" | xargs rm -rf + find Projects -name "*.opensdf" | xargs rm -rf + find Projects -name "*.log" | xargs rm -rf + find Projects -name "ipch" | xargs rm -rf diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..2cab7a5 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,793 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Top-Level Makefile for building LittleCMS 2 +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/lcms2.pc.in \ + $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ + config.guess config.sub depcomp install-sh ltmain.sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = lcms2.pc +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).zip +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ +LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRARY_AGE = @LIBRARY_AGE@ +LIBRARY_CURRENT = @LIBRARY_CURRENT@ +LIBRARY_REVISION = @LIBRARY_REVISION@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIB_JPEG = @LIB_JPEG@ +LIB_MATH = @LIB_MATH@ +LIB_TIFF = @LIB_TIFF@ +LIB_ZLIB = @LIB_ZLIB@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +inline = @inline@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7.2 dist-zip foreign + +# Directories containing Makefiles to 'make' +SUBDIRS = src include utils/tificc utils/transicc utils/linkicc utils/jpgicc utils/psicc testbed + +# Additional files to distribute +EXTRA_DIST = AUTHORS COPYING ChangeLog doc Projects include bin Lib INSTALL NEWS README.1ST lcms2.pc.in +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = lcms2.pc +all: all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): +lcms2.pc: $(top_builddir)/config.status $(srcdir)/lcms2.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool clean-local ctags ctags-recursive dist dist-all \ + dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ dist-xz \ + dist-zip distcheck distclean distclean-generic \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-pkgconfigDATA + + +# Make sure get rid of VC stuff... +clean-local: + find Projects -name "*.user" | xargs rm -rf + find Projects -name "Release" | xargs rm -rf + find Projects -name "Debug" | xargs rm -rf + find Projects -name "*.aps" | xargs rm -rf + find Projects -name "*.suo" | xargs rm -rf + find Projects -name "*.log" | xargs rm -rf + find Projects -name "*.sdf" | xargs rm -rf + find Projects -name "*.opensdf" | xargs rm -rf + find Projects -name "*.log" | xargs rm -rf + find Projects -name "ipch" | xargs rm -rf + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/Projects/BorlandC_5.5/lcms2.rc b/Projects/BorlandC_5.5/lcms2.rc new file mode 100644 index 0000000..c5e9299 --- /dev/null +++ b/Projects/BorlandC_5.5/lcms2.rc @@ -0,0 +1,30 @@ + + +1 VERSIONINFO +FILEVERSION 2, 3, 0, 0 +PRODUCTVERSION 2, 3, 0, 0 +FILEOS VOS_NT_WINDOWS32 +FILETYPE VFT_DLL +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "CompanyName", "Marti Maria\000\000" + VALUE "FileDescription", "lcms color engine\000" + VALUE "FileVersion", "2.03\000\000" + VALUE "InternalName", "lcms2\000" + VALUE "LegalCopyright", "Copyright © Marti Maria 2011\000\000" + VALUE "OriginalFilename", "lcms2.dll\000" + } + + } + + BLOCK "VarFileInfo" + { + VALUE "Translation", 0x409, 1252 + } + +} + + diff --git a/Projects/BorlandC_5.5/lcmsdll.lk b/Projects/BorlandC_5.5/lcmsdll.lk new file mode 100644 index 0000000..ceb5726 --- /dev/null +++ b/Projects/BorlandC_5.5/lcmsdll.lk @@ -0,0 +1,29 @@ +/x/aa/c/Tpd C0D32.OBJ+ +cmscam02.obj+ +cmscgats.obj+ +cmscnvrt.obj+ +cmserr.obj+ +cmsgamma.obj+ +cmsgmt.obj+ +cmsintrp.obj+ +cmsio0.obj+ +cmsio1.obj+ +cmslut.obj+ +cmsmd5.obj+ +cmsmtrx.obj+ +cmsnamed.obj+ +cmsopt.obj+ +cmspack.obj+ +cmspcs.obj+ +cmsplugin.obj+ +cmsps2.obj+ +cmssamp.obj+ +cmssm.obj+ +cmstypes.obj+ +cmsvirt.obj+ +cmswtpnt.obj+ +cmsxform.obj +..\..\bin\lcms2.dll + +cw32mt.lib import32.lib +..\..\src\lcms2.def \ No newline at end of file diff --git a/Projects/BorlandC_5.5/lcmsdll.lst b/Projects/BorlandC_5.5/lcmsdll.lst new file mode 100644 index 0000000..87ce458 --- /dev/null +++ b/Projects/BorlandC_5.5/lcmsdll.lst @@ -0,0 +1,27 @@ +-5 -C -DCMS_DLL -DCMS_DLL_BUILD +-I..\..\include -K -O2 -a8 -d -ff -w -wucp -wsig -wdef -wnod -wamb +-OS -RT- -R- -tWM -tWD -w- -x- -c +..\..\src\cmscam02.c +..\..\src\cmscgats.c +..\..\src\cmscnvrt.c +..\..\src\cmserr.c +..\..\src\cmsgamma.c +..\..\src\cmsgmt.c +..\..\src\cmsintrp.c +..\..\src\cmsio0.c +..\..\src\cmsio1.c +..\..\src\cmslut.c +..\..\src\cmsmd5.c +..\..\src\cmsmtrx.c +..\..\src\cmsnamed.c +..\..\src\cmsopt.c +..\..\src\cmspack.c +..\..\src\cmspcs.c +..\..\src\cmsplugin.c +..\..\src\cmsps2.c +..\..\src\cmssamp.c +..\..\src\cmssm.c +..\..\src\cmstypes.c +..\..\src\cmsvirt.c +..\..\src\cmswtpnt.c +..\..\src\cmsxform.c diff --git a/Projects/BorlandC_5.5/mklcmsdll.bat b/Projects/BorlandC_5.5/mklcmsdll.bat new file mode 100644 index 0000000..6db2f72 --- /dev/null +++ b/Projects/BorlandC_5.5/mklcmsdll.bat @@ -0,0 +1,14 @@ +@echo off +echo. +echo This will build the littlecms DLL using Borland C 5.5 compiler. +echo. +echo Press Ctrl-C to abort, or +pause +bcc32 @lcmsdll.lst +if errorlevel 0 ilink32 @lcmsdll.lk +if errorlevel 0 brc32 -fe ..\..\bin\lcms2.dll lcms2.rc +del *.obj +del *.res +echo Done! + + diff --git a/Projects/VC2008/jpegicc/jpegicc.vcproj b/Projects/VC2008/jpegicc/jpegicc.vcproj new file mode 100644 index 0000000..9c2fe6f --- /dev/null +++ b/Projects/VC2008/jpegicc/jpegicc.vcproj @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2008/lcms2.rc b/Projects/VC2008/lcms2.rc new file mode 100644 index 0000000..d9dc87a --- /dev/null +++ b/Projects/VC2008/lcms2.rc @@ -0,0 +1,113 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Spanish (Modern) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESN) +#ifdef _WIN32 +LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN +#pragma code_page(1252) +#endif //_WIN32 + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +1 VERSIONINFO + FILEVERSION 2,3,0,0 + PRODUCTVERSION 2,3,0,0 + FILEFLAGSMASK 0x0L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "Comments", "\0" + VALUE "CompanyName", "Marti Maria\0" + VALUE "FileDescription", "lcms color engine\0" + VALUE "FileVersion", "2.3\0" + VALUE "InternalName", "lcms\0" + VALUE "LegalCopyright", "Copyright (©) Marti Maria 2011\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "lcms2.dll\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "LittleCMS color engine\0" + VALUE "ProductVersion", "2, 0, 3, 0\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // !_MAC + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // Spanish (Modern) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Projects/VC2008/lcms2.sln b/Projects/VC2008/lcms2.sln new file mode 100755 index 0000000000000000000000000000000000000000..a1083ad786b2ffd085b700c76172972b974386ac GIT binary patch literal 14242 zcmeHOO>f&q5S^_S~q9}*kXiyY4GKF++iT#o2}{(dIk$uDvx=W-_-xyN=XTlrqz!genYawgX} zI)Uv$E@0cJqYbPNu<`f?mKFA{Wi7AN{sw)0LQCDx8b|lvJO|R39=5)4$P9Y}d=_X=+d>^hs<#>bvdv)EHj!Aq zqPLg8@*}qA=zR^uTX~P~3mo&Rs@BtrS5N)~uG<~Ptj%YP6Jz|D46(%+F_J{aK)X_V zu}t6*VH;sP#@-0HhVUE0YlIdneERSwLPqRJ%5gZ^#Y1P}Mdj=QXK%6H;5zvC9C_fi zW!HMEa=xv!(&HQ5KV#;}r&2ToO4x?h~S29rKP&9VHB{J+L0({ZN(h{7T!LDa?&fgI%3Fg66&4&ph!~F!2I;d~I)wjjH z{tT?*+NM0Gm+hR@%N856sHY`36N6D>d?K(*bA`;BU?bb;wE&NJcBojGC??LpG~NyR z2WBA#<<-Z2&Fdf4n(ae{S7qy|l#gwk8iP$Kc)=Az9~|Or&6NV##aU>Kv*grR&F5S- zbIqpbC~}E2{}kVc*=oNzm8~rK4968`wo<6t^EGJZX=By|jGBWR12AZ~n~#pc7IKWM z2HqjLN+65KHm(==+%<&<=P%whIo}|CdIeD*e(mi*?_K3)%ZmdAOu`*(xS zmER`#{MB6j>$MAPro6i5kx;l?`Ro#xojdLH>N9qA7)^P#`{#NMiO-eaCiwi-u>I?` z3v8ymx^xi=mn)xL;<9t6onC#$t`4IquXg`juOacd^4kQTzh71S>$MAPro6gz5ek

$MAPro6gz5ek + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2008/lcms2_static/lcms2_static.vcproj b/Projects/VC2008/lcms2_static/lcms2_static.vcproj new file mode 100644 index 0000000..1f08970 --- /dev/null +++ b/Projects/VC2008/lcms2_static/lcms2_static.vcproj @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2008/linkicc/linkicc.vcproj b/Projects/VC2008/linkicc/linkicc.vcproj new file mode 100644 index 0000000..d5531ac --- /dev/null +++ b/Projects/VC2008/linkicc/linkicc.vcproj @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2008/psicc/psicc.vcproj b/Projects/VC2008/psicc/psicc.vcproj new file mode 100644 index 0000000..65c1afc --- /dev/null +++ b/Projects/VC2008/psicc/psicc.vcproj @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2008/resource.h b/Projects/VC2008/resource.h new file mode 100644 index 0000000..344dcda --- /dev/null +++ b/Projects/VC2008/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by lcms.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/Projects/VC2008/testbed/testbed.vcproj b/Projects/VC2008/testbed/testbed.vcproj new file mode 100644 index 0000000..c2d7db7 --- /dev/null +++ b/Projects/VC2008/testbed/testbed.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2008/tiffdiff/tiffdiff.vcproj b/Projects/VC2008/tiffdiff/tiffdiff.vcproj new file mode 100644 index 0000000..fae9150 --- /dev/null +++ b/Projects/VC2008/tiffdiff/tiffdiff.vcproj @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2008/tifficc/tifficc.vcproj b/Projects/VC2008/tifficc/tifficc.vcproj new file mode 100644 index 0000000..1ec7f74 --- /dev/null +++ b/Projects/VC2008/tifficc/tifficc.vcproj @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2008/transicc/transicc.vcproj b/Projects/VC2008/transicc/transicc.vcproj new file mode 100644 index 0000000..446738a --- /dev/null +++ b/Projects/VC2008/transicc/transicc.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2010/jpegicc/jpegicc.vcproj b/Projects/VC2010/jpegicc/jpegicc.vcproj new file mode 100644 index 0000000..c8e9396 --- /dev/null +++ b/Projects/VC2010/jpegicc/jpegicc.vcproj @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2010/jpegicc/jpegicc.vcxproj b/Projects/VC2010/jpegicc/jpegicc.vcxproj new file mode 100644 index 0000000..f6d8578 --- /dev/null +++ b/Projects/VC2010/jpegicc/jpegicc.vcxproj @@ -0,0 +1,117 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {62812507-F926-4968-96A9-17678460AD90} + jpegicc + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + ..\..\..\bin\ + $(Configuration)\ + true + ..\..\..\bin\ + $(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + $(IncludePath);;C:\jpeg-8b + $(LibraryPath);;C:\jpeg-8b + $(IncludePath);;C:\jpeg-8b + $(LibraryPath);;C:\jpeg-8b + + + + Disabled + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + libjpeg.lib;%(AdditionalDependencies) + true + Console + MachineX86 + + + + + Full + true + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + true + + + Level3 + ProgramDatabase + Speed + true + true + + + libjpeg.lib;%(AdditionalDependencies) + true + Console + true + true + MachineX86 + + + + + + + + + + + {71dede59-3f1e-486b-a899-4283000f76b5} + false + + + + + + \ No newline at end of file diff --git a/Projects/VC2010/jpegicc/jpegicc.vcxproj.filters b/Projects/VC2010/jpegicc/jpegicc.vcxproj.filters new file mode 100644 index 0000000..a05c36d --- /dev/null +++ b/Projects/VC2010/jpegicc/jpegicc.vcxproj.filters @@ -0,0 +1,31 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/Projects/VC2010/lcms2.rc b/Projects/VC2010/lcms2.rc new file mode 100644 index 0000000..1eb4e04 --- /dev/null +++ b/Projects/VC2010/lcms2.rc @@ -0,0 +1,113 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Spanish (Modern) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESN) +#ifdef _WIN32 +LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN +#pragma code_page(1252) +#endif //_WIN32 + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +1 VERSIONINFO + FILEVERSION 2,3,0,0 + PRODUCTVERSION 2,3,0,0 + FILEFLAGSMASK 0x0L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "Comments", "\0" + VALUE "CompanyName", "Marti Maria\0" + VALUE "FileDescription", "lcms color engine\0" + VALUE "FileVersion", "2.3\0" + VALUE "InternalName", "lcms\0" + VALUE "LegalCopyright", "Copyright © Marti Maria 2011\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "lcms2.dll\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "LittleCMS color engine\0" + VALUE "ProductVersion", "2, 0, 3, 0\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // !_MAC + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // Spanish (Modern) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Projects/VC2010/lcms2.sln b/Projects/VC2010/lcms2.sln new file mode 100755 index 0000000000000000000000000000000000000000..e851ef0a93c8473c02ad55a17c769976153cb76b GIT binary patch literal 12090 zcmd5?!EW0|5S?oZH`?&VP~-`h-*kMe$pvgq{*=u#k<$rzs$_e>;{De$h$ zSt_USNbs4Mc_jEA!FP_&6z3`YRzSQo7|GcZjIX822JKZ#Tz+nlCD(}Q6^>%2%!blR ze)iisKPl!o!CV)Z*$CeWz88iyGBtyROfkk2v=g+*%N)lP{!9F&myO|Z@N)}R-XVih zd4-ug$5C)}c;y1Rse9{O<%R`j?h>HMs~1wYKBg<-(5!@S90pTTamMr9?iWYAv@URF4pnDY!= zu^t>pE0T!JB1(5l+1cIvHa(OF`4EHVES98GZ~U@FJ_nLFeoGtALz0Zw>zY#7Z9 zt23}hoeqzPrMIZN8+lXXsA|2CYFp=L3TAT5k#%VZK3H>D#mN*|n&K+6Xlj(kC(S9& znMbVbe8RAP9TPuAE#?!PHM*!rb$eO03s0S;Q?N6~JV%)Kc$X*Vm^t}kZK4WUi^vF> zV^!j_`V1b-D=L$DcsyF$uf%-*a|J`y6>MqOt2KPTXA^s@P*m6wTu^yqWEr1lmc1$1 zA!n@UR+r4lF}UQhG8s2V&*Ne5{XvZ?Ef>&dQNeUhxF({eavWR*C1_1xvz%}pz-q*t zv#X~O@{DUEt^`iu&)$5_`8fFr&yy`ycU;@D%0H2P%gfyg)2?k#u=cI4cF)b4m#d#Q zSOc@>GE2A)eu44Wx<-pD;QKFYO0Ehw2P4^gKS2&`faVe7eU?8k)*a@M?pCAjYp$Lj zG5gHX%i4<`zu{h7sb2!!#&JLWx;Dc8ee1pV?`_wuI@5N1{rX95h5L1J;5*KP8i|mr z^??%C0WzF#FgJK(*q|a_BkuOiqdC_7V4EWk`7XCMZ)yK8E}K2a!B;)AOP%WY^ge}_ z!p2m;-vBl8Fs{0PKlps{ZG$h|+hcgW_JPe6S6>~8h07PuK5^-}(@n1-xog7cimUEl z>NO@lUwqr(3-=2~c)j+4%@tRlE@I*G#j{UbdhT@7Ye?>zFuLNZ`3w8p7+f4{WZu`g9QsmoJ`u;?i@c zn_fe5*M!j(SKYtVYfOB;__o0p?!R8)_1XtES6qF%h=t1+&pvVKxzkOrA-QY9=!&cE zU+Og`K3{y>;S2SD));z?kIfZVzb@k7^2M`HTzc+w)oVEJnlQTJs{8NjH6A`+eB0m) zw+A4+Ui-l2imOi-v2gj~*(WYNce?2{BzH|1U2)a@OTEU#=ZmioU-umy^}RKA4>R}j xeK0#DxDUJ7m)*RF=4b3$SfgKk#9y%&hjzP@VTHXH&*8J&?fYpngF_!i=RbA0mk0m= literal 0 HcmV?d00001 diff --git a/Projects/VC2010/lcms2_DLL/lcms2_DLL.vcproj b/Projects/VC2010/lcms2_DLL/lcms2_DLL.vcproj new file mode 100644 index 0000000..b3f9f25 --- /dev/null +++ b/Projects/VC2010/lcms2_DLL/lcms2_DLL.vcproj @@ -0,0 +1,326 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2010/lcms2_DLL/lcms2_DLL.vcxproj b/Projects/VC2010/lcms2_DLL/lcms2_DLL.vcxproj new file mode 100644 index 0000000..ec180ca --- /dev/null +++ b/Projects/VC2010/lcms2_DLL/lcms2_DLL.vcxproj @@ -0,0 +1,143 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {8C51BE48-ADB8-4089-A9EC-F6BF993A0548} + lcms2_DLL + Win32Proj + + + + DynamicLibrary + Unicode + true + + + DynamicLibrary + Unicode + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + ..\..\..\bin\ + $(Configuration)\ + true + ..\..\..\bin\ + $(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ../../../include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + EditAndContinue + + + ..\..\..\src\lcms2.def + true + Windows + MachineX86 + ../../../bin/lcms2d.dll + + + + + Full + true + Speed + true + true + true + ../../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + true + + + Level4 + ProgramDatabase + true + OnlyExplicitInline + + + ..\..\..\src\lcms2.def + true + Windows + true + true + MachineX86 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Projects/VC2010/lcms2_DLL/lcms2_DLL.vcxproj.filters b/Projects/VC2010/lcms2_DLL/lcms2_DLL.vcxproj.filters new file mode 100644 index 0000000..fc64fa4 --- /dev/null +++ b/Projects/VC2010/lcms2_DLL/lcms2_DLL.vcxproj.filters @@ -0,0 +1,115 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Source Files + + + Resource Files + + + + + Resource Files + + + + + Source Files + + + \ No newline at end of file diff --git a/Projects/VC2010/lcms2_static/lcms2_static.vcproj b/Projects/VC2010/lcms2_static/lcms2_static.vcproj new file mode 100644 index 0000000..1f08970 --- /dev/null +++ b/Projects/VC2010/lcms2_static/lcms2_static.vcproj @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2010/lcms2_static/lcms2_static.vcxproj b/Projects/VC2010/lcms2_static/lcms2_static.vcxproj new file mode 100644 index 0000000..c611473 --- /dev/null +++ b/Projects/VC2010/lcms2_static/lcms2_static.vcxproj @@ -0,0 +1,120 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {71DEDE59-3F1E-486B-A899-4283000F76B5} + lcms2_static + Win32Proj + + + + StaticLibrary + Unicode + true + + + StaticLibrary + Unicode + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + ..\..\..\Lib\MS\ + $(Configuration)\ + ..\..\..\Lib\MS\ + $(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ../../../include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level4 + EditAndContinue + + + + + + + Full + true + ../../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + MultiThreaded + true + + + Level4 + ProgramDatabase + Speed + true + true + OnlyExplicitInline + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Projects/VC2010/lcms2_static/lcms2_static.vcxproj.filters b/Projects/VC2010/lcms2_static/lcms2_static.vcxproj.filters new file mode 100644 index 0000000..a2af6e7 --- /dev/null +++ b/Projects/VC2010/lcms2_static/lcms2_static.vcxproj.filters @@ -0,0 +1,102 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Source Files + + + \ No newline at end of file diff --git a/Projects/VC2010/linkicc/linkicc.vcproj b/Projects/VC2010/linkicc/linkicc.vcproj new file mode 100644 index 0000000..d5531ac --- /dev/null +++ b/Projects/VC2010/linkicc/linkicc.vcproj @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2010/linkicc/linkicc.vcxproj b/Projects/VC2010/linkicc/linkicc.vcxproj new file mode 100644 index 0000000..6bd9ebc --- /dev/null +++ b/Projects/VC2010/linkicc/linkicc.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {FBFBE1DC-DB84-4BA1-9552-B4780F457849} + linkicc + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + ..\..\..\bin\ + $(Configuration)\ + true + ..\..\..\bin\ + $(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level4 + EditAndContinue + + + true + Console + MachineX86 + + + + + MaxSpeed + true + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + + + + + + + + {71dede59-3f1e-486b-a899-4283000f76b5} + false + + + + + + \ No newline at end of file diff --git a/Projects/VC2010/linkicc/linkicc.vcxproj.filters b/Projects/VC2010/linkicc/linkicc.vcxproj.filters new file mode 100644 index 0000000..95c77cd --- /dev/null +++ b/Projects/VC2010/linkicc/linkicc.vcxproj.filters @@ -0,0 +1,28 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/Projects/VC2010/psicc/psicc.vcproj b/Projects/VC2010/psicc/psicc.vcproj new file mode 100644 index 0000000..65c1afc --- /dev/null +++ b/Projects/VC2010/psicc/psicc.vcproj @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2010/psicc/psicc.vcxproj b/Projects/VC2010/psicc/psicc.vcxproj new file mode 100644 index 0000000..b200db1 --- /dev/null +++ b/Projects/VC2010/psicc/psicc.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {EF6A8851-65FE-46F5-B9EF-14F0B671F693} + psicc + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + ..\..\..\bin\ + $(Configuration)\ + true + ..\..\..\bin\ + $(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level4 + EditAndContinue + + + true + Console + MachineX86 + + + + + MaxSpeed + true + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + + + + + + + + {71dede59-3f1e-486b-a899-4283000f76b5} + false + + + + + + \ No newline at end of file diff --git a/Projects/VC2010/psicc/psicc.vcxproj.filters b/Projects/VC2010/psicc/psicc.vcxproj.filters new file mode 100644 index 0000000..c42429d --- /dev/null +++ b/Projects/VC2010/psicc/psicc.vcxproj.filters @@ -0,0 +1,28 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/Projects/VC2010/resource.h b/Projects/VC2010/resource.h new file mode 100644 index 0000000..7655978 --- /dev/null +++ b/Projects/VC2010/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by lcms2.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/Projects/VC2010/testbed/testbed.vcproj b/Projects/VC2010/testbed/testbed.vcproj new file mode 100644 index 0000000..c2d7db7 --- /dev/null +++ b/Projects/VC2010/testbed/testbed.vcproj @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2010/testbed/testbed.vcxproj b/Projects/VC2010/testbed/testbed.vcxproj new file mode 100644 index 0000000..15988b5 --- /dev/null +++ b/Projects/VC2010/testbed/testbed.vcxproj @@ -0,0 +1,113 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {928A3A2B-46EF-4279-959C-513B3652FF0E} + testbed + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Configuration)\ + true + ..\..\..\testbed\ + $(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + ..\..\..\testbed\ + + + + Disabled + ../../../include;../../../src;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + true + Console + MachineX86 + false + + + + + Full + true + Speed + true + true + ../../../include;../../../src;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + false + true + NotSet + + + Level3 + ProgramDatabase + Cdecl + + + true + Console + true + true + MachineX86 + false + + + + + {71dede59-3f1e-486b-a899-4283000f76b5} + false + + + + + + + + + \ No newline at end of file diff --git a/Projects/VC2010/testbed/testbed.vcxproj.filters b/Projects/VC2010/testbed/testbed.vcxproj.filters new file mode 100644 index 0000000..21cbdd4 --- /dev/null +++ b/Projects/VC2010/testbed/testbed.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + \ No newline at end of file diff --git a/Projects/VC2010/tiffdiff/tiffdiff.vcproj b/Projects/VC2010/tiffdiff/tiffdiff.vcproj new file mode 100644 index 0000000..281c491 --- /dev/null +++ b/Projects/VC2010/tiffdiff/tiffdiff.vcproj @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2010/tiffdiff/tiffdiff.vcxproj b/Projects/VC2010/tiffdiff/tiffdiff.vcxproj new file mode 100644 index 0000000..210d812 --- /dev/null +++ b/Projects/VC2010/tiffdiff/tiffdiff.vcxproj @@ -0,0 +1,114 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {75B91835-CCD7-48BE-A606-A9C997D5DBEE} + tiffdiff + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + ..\..\..\bin\ + $(Configuration)\ + true + ..\..\..\bin\ + $(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + $(IncludePath);;C:\tiff-3.9.4\libtiff + $(LibraryPath);;C:\tiff-3.9.4\libtiff + $(IncludePath);;C:\tiff-3.9.4\libtiff + $(LibraryPath);;C:\tiff-3.9.4\libtiff + + + + Disabled + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level4 + EditAndContinue + + + libtiff.lib;%(AdditionalDependencies) + true + Console + MachineX86 + + + + + MaxSpeed + true + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + libtiff.lib;%(AdditionalDependencies) + true + Console + true + true + MachineX86 + $(OutDir)$(TargetName)$(TargetExt) + + + + + + + + + + {71dede59-3f1e-486b-a899-4283000f76b5} + false + + + + + + \ No newline at end of file diff --git a/Projects/VC2010/tiffdiff/tiffdiff.vcxproj.filters b/Projects/VC2010/tiffdiff/tiffdiff.vcxproj.filters new file mode 100644 index 0000000..b7f9a80 --- /dev/null +++ b/Projects/VC2010/tiffdiff/tiffdiff.vcxproj.filters @@ -0,0 +1,28 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/Projects/VC2010/tifficc/tifficc.vcproj b/Projects/VC2010/tifficc/tifficc.vcproj new file mode 100644 index 0000000..1453de5 --- /dev/null +++ b/Projects/VC2010/tifficc/tifficc.vcproj @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2010/tifficc/tifficc.vcxproj b/Projects/VC2010/tifficc/tifficc.vcxproj new file mode 100644 index 0000000..cd63de0 --- /dev/null +++ b/Projects/VC2010/tifficc/tifficc.vcxproj @@ -0,0 +1,116 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {2256DE16-ED92-4A6F-9C54-F65BB61E64A2} + tifficc + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + ..\..\..\bin\ + $(Configuration)\ + true + ..\..\..\bin\ + $(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + $(IncludePath);C:\tiff-3.9.4\libtiff + $(LibraryPath);C:\tiff-3.9.4\libtiff + $(IncludePath);C:\tiff-3.9.4\libtiff + $(LibraryPath);C:\tiff-3.9.4\libtiff + + + + Disabled + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + EditAndContinue + + + libtiff.lib;%(AdditionalDependencies) + true + Console + MachineX86 + + + + + MaxSpeed + true + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + ProgramDatabase + + + libtiff.lib;%(AdditionalDependencies) + true + Console + true + true + MachineX86 + + + + + + + + + + + + + {71dede59-3f1e-486b-a899-4283000f76b5} + false + + + + + + \ No newline at end of file diff --git a/Projects/VC2010/tifficc/tifficc.vcxproj.filters b/Projects/VC2010/tifficc/tifficc.vcxproj.filters new file mode 100644 index 0000000..2e0e44d --- /dev/null +++ b/Projects/VC2010/tifficc/tifficc.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + \ No newline at end of file diff --git a/Projects/VC2010/transicc/transicc.vcproj b/Projects/VC2010/transicc/transicc.vcproj new file mode 100644 index 0000000..446738a --- /dev/null +++ b/Projects/VC2010/transicc/transicc.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/VC2010/transicc/transicc.vcxproj b/Projects/VC2010/transicc/transicc.vcxproj new file mode 100644 index 0000000..e7f66e1 --- /dev/null +++ b/Projects/VC2010/transicc/transicc.vcxproj @@ -0,0 +1,110 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {9EE22D66-C849-474C-9ED5-C3E141DAB160} + transicc + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + ..\..\..\bin\ + $(Configuration)\ + true + ..\..\..\bin\ + $(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + EditAndContinue + + + true + Console + MachineX86 + + + + + MaxSpeed + true + ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + true + + + Level4 + ProgramDatabase + + + true + Console + true + true + MachineX86 + + + + + + + + + + + + + {71dede59-3f1e-486b-a899-4283000f76b5} + false + + + + + + \ No newline at end of file diff --git a/Projects/VC2010/transicc/transicc.vcxproj.filters b/Projects/VC2010/transicc/transicc.vcxproj.filters new file mode 100644 index 0000000..3d45443 --- /dev/null +++ b/Projects/VC2010/transicc/transicc.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + \ No newline at end of file diff --git a/Projects/mac/.DS_Store b/Projects/mac/.DS_Store new file mode 100755 index 0000000000000000000000000000000000000000..0d084a32d9bcdd9cda9993621b4c3dd1d27e5fbd GIT binary patch literal 6148 zcmeHKJx{|x41I2jRK${z@n$CY2dB1dFm+->-<HY<&bO`F%$>|x(ZY_thN7N(huDKyQCO}0-?a4Qb5M@ z#eB+N^4{9}IqkKHeoOx`)|PUH&LMyUZN;a1bxGe@mmOQfLTA3viE$86UBW_v-%#Ki DF5@3l literal 0 HcmV?d00001 diff --git a/Projects/mac/._.DS_Store b/Projects/mac/._.DS_Store new file mode 100755 index 0000000000000000000000000000000000000000..338bd7ba27b62046d75470a7732f6f1b01806cb5 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMh9H2BNBh0QSWmV*mgE literal 0 HcmV?d00001 diff --git a/Projects/mac/LittleCMS/.DS_Store b/Projects/mac/LittleCMS/.DS_Store new file mode 100755 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMh9H2BNBh0QSWmV*mgE literal 0 HcmV?d00001 diff --git a/Projects/mac/LittleCMS/English.lproj/InfoPlist.strings b/Projects/mac/LittleCMS/English.lproj/InfoPlist.strings new file mode 100755 index 0000000000000000000000000000000000000000..045f111f6b26468358b8cd444d58dae837aa5f18 GIT binary patch literal 148 zcmW-a%?g4*6h_b5rx;qgs0WZX2|`eAe1b>?Ni*^X?BT1!Fx>g>eD~aMzCRA61TKu+ zxzW?{p`q4W)i;yQ$Wsk!>wWgs+V6Qqeqz>rNN + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + LittleCMS + CFBundleIconFile + + CFBundleIdentifier + com.apple.carbonframeworktemplate + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CFBundleShortVersionString + 1.01 + CSResourcesFileMapped + + + diff --git a/Projects/mac/LittleCMS/LittleCMS.xcodeproj/mariama.mode1v3 b/Projects/mac/LittleCMS/LittleCMS.xcodeproj/mariama.mode1v3 new file mode 100644 index 0000000..aabb78c --- /dev/null +++ b/Projects/mac/LittleCMS/LittleCMS.xcodeproj/mariama.mode1v3 @@ -0,0 +1,1448 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCProjectFormatConflictsModule + Name + Project Format Conflicts List + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + BundleLoadPath + + MaxInstances + n + Module + XCSnapshotModule + Name + Snapshots Tool + + + BundlePath + /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1v3 + FavBarConfig + + PBXProjectModuleGUID + 546B299810AC669D0054D33A + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1v3 + MajorVersion + 33 + MinorVersion + 0 + Name + Default + Notifications + + + XCObserverAutoDisconnectKey + + XCObserverDefintionKey + + PBXStatusErrorsKey + 0 + + XCObserverFactoryKey + XCPerspectivesSpecificationIdentifier + XCObserverGUIDKey + XCObserverProjectIdentifier + XCObserverNotificationKey + PBXStatusBuildStateMessageNotification + XCObserverTargetKey + XCMainBuildResultsModuleGUID + XCObserverTriggerKey + awakenModuleWithObserver: + XCObserverValidationKey + + PBXStatusErrorsKey + 2 + + + + XCObserverAutoDisconnectKey + + XCObserverDefintionKey + + PBXStatusWarningsKey + 0 + + XCObserverFactoryKey + XCPerspectivesSpecificationIdentifier + XCObserverGUIDKey + XCObserverProjectIdentifier + XCObserverNotificationKey + PBXStatusBuildStateMessageNotification + XCObserverTargetKey + XCMainBuildResultsModuleGUID + XCObserverTriggerKey + awakenModuleWithObserver: + XCObserverValidationKey + + PBXStatusWarningsKey + 2 + + + + OpenEditors + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-target-popup + active-buildstyle-popup + action + NSToolbarFlexibleSpaceItem + buildOrClean + build-and-goOrGo + com.apple.ide.PBXToolbarStopButton + get-info + toggle-editor + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 389 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C37FABC05509CD000000102 + E2644B35053B69B200211256 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {389, 970}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {406, 988}} + GroupTreeTableConfiguration + + MainColumn + 389 + + RubberWindowFrame + 0 149 1600 1029 0 0 1600 1178 + + Module + PBXSmartGroupTreeModule + Proportion + 406pt + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + cmsio0.c + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + cmsio0.c + _historyCapacity + 0 + bookmark + 546B2A0110AC6C9E0054D33A + history + + 546B29DA10AC6B6E0054D33A + 546B29DB10AC6B6E0054D33A + 546B29F510AC6C480054D33A + 546B29F710AC6C480054D33A + + prevStack + + 546B29E010AC6B6E0054D33A + 546B29E110AC6B6E0054D33A + 546B29E210AC6B6E0054D33A + 546B29E310AC6B6E0054D33A + + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {1189, 19}} + RubberWindowFrame + 0 149 1600 1029 0 0 1600 1178 + + Module + PBXNavigatorGroup + Proportion + 19pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 24}, {1189, 964}} + RubberWindowFrame + 0 149 1600 1029 0 0 1600 1178 + + Module + XCDetailModule + Proportion + 964pt + + + Proportion + 1189pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 546B29FF10AC6C9E0054D33A + 1CE0B1FE06471DED0097A5F4 + 546B2A0010AC6C9E0054D33A + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.defaultV3 + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.shortV3 + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 279735424.79254502 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + /Users/mariama/lcms-2.0/Projects/mac/LittleCMS/LittleCMS.xcodeproj + + WindowString + 0 149 1600 1029 0 0 1600 1178 + WindowToolsV3 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + RunUnitTests + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {897, 417}} + RubberWindowFrame + 645 150 897 912 0 0 1600 1178 + + Module + PBXNavigatorGroup + Proportion + 417pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1013 + + GeometryConfiguration + + Frame + {{0, 422}, {897, 449}} + RubberWindowFrame + 645 150 897 912 0 0 1600 1178 + + Module + PBXBuildResultsModule + Proportion + 449pt + + + Proportion + 871pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 546B297610AC61DD0054D33A + 546B297710AC61DD0054D33A + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.buildV3 + WindowString + 645 150 897 912 0 0 1600 1178 + WindowToolGUID + 546B297610AC61DD0054D33A + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debugger + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {316, 185}} + {{316, 0}, {378, 185}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 185}} + {{0, 185}, {694, 196}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {694, 381}} + PBXDebugSessionStackFrameViewKey + + DebugVariablesTableConfiguration + + Name + 120 + Value + 85 + Summary + 148 + + Frame + {{316, 0}, {378, 185}} + RubberWindowFrame + 406 715 694 422 0 0 1600 1178 + + RubberWindowFrame + 406 715 694 422 0 0 1600 1178 + + Module + PBXDebugSessionModule + Proportion + 381pt + + + Proportion + 381pt + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + + TableOfContents + + 1CD10A99069EF8BA00B06720 + 546B29C910AC6A970054D33A + 1C162984064C10D400B95A72 + 546B29CA10AC6A970054D33A + 546B29CB10AC6A970054D33A + 546B29CC10AC6A970054D33A + 546B29CD10AC6A970054D33A + 546B29CE10AC6A970054D33A + + ToolbarConfiguration + xcode.toolbar.config.debugV3 + WindowString + 406 715 694 422 0 0 1600 1178 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + + + + Identifier + windowTool.find + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD0528D0623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {781, 167}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 50% + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{8, 0}, {773, 254}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXProjectFindModule + Proportion + 50% + + + Proportion + 428pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C530D57069F1CE1000CFCEE + 1C530D58069F1CE1000CFCEE + 1C530D59069F1CE1000CFCEE + 1CDD528C0622207200134675 + 1C530D5A069F1CE1000CFCEE + 1CE0B1FE06471DED0097A5F4 + 1CD0528E0623707200166675 + + WindowString + 62 385 781 470 0 0 1440 878 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + 0 + + + Identifier + MENUSEPARATOR + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debuggerConsole + IsVertical + + Layout + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {814, 470}} + RubberWindowFrame + 406 626 814 511 0 0 1600 1178 + + Module + PBXDebugCLIModule + Proportion + 470pt + + + Proportion + 470pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + + TableOfContents + + 1C78EAAD065D492600B07095 + 546B29CF10AC6A970054D33A + 1C78EAAC065D492600B07095 + + ToolbarConfiguration + xcode.toolbar.config.consoleV3 + WindowString + 406 626 814 511 0 0 1600 1178 + WindowToolGUID + 1C78EAAD065D492600B07095 + WindowToolIsVisible + + + + Identifier + windowTool.snapshots + Layout + + + Dock + + + Module + XCSnapshotModule + Proportion + 100% + + + Proportion + 100% + + + Name + Snapshots + ServiceClasses + + XCSnapshotModule + + StatusbarIsVisible + Yes + ToolbarConfiguration + xcode.toolbar.config.snapshots + WindowString + 315 824 300 550 0 0 1440 878 + WindowToolIsVisible + Yes + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + Identifier + windowTool.breakpoints + IsVertical + 0 + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 0 + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 3 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpointsV3 + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + 1 + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimatorV3 + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.projectFormatConflicts + Layout + + + Dock + + + Module + XCProjectFormatConflictsModule + Proportion + 100% + + + Proportion + 100% + + + Name + Project Format Conflicts + ServiceClasses + + XCProjectFormatConflictsModule + + StatusbarIsVisible + 0 + WindowContentMinSize + 450 300 + WindowString + 50 850 472 307 0 0 1440 877 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + Identifier + windowTool.refactoring + IncludeInToolsMenu + 0 + Layout + + + Dock + + + BecomeActive + 1 + GeometryConfiguration + + Frame + {0, 0}, {500, 335} + RubberWindowFrame + {0, 0}, {500, 335} + + Module + XCRefactoringModule + Proportion + 100% + + + Proportion + 100% + + + Name + Refactoring + ServiceClasses + + XCRefactoringModule + + WindowString + 200 200 500 356 0 0 1920 1200 + + + + diff --git a/Projects/mac/LittleCMS/LittleCMS.xcodeproj/mariama.pbxuser b/Projects/mac/LittleCMS/LittleCMS.xcodeproj/mariama.pbxuser new file mode 100644 index 0000000..8991514 --- /dev/null +++ b/Projects/mac/LittleCMS/LittleCMS.xcodeproj/mariama.pbxuser @@ -0,0 +1,339 @@ +// !$*UTF8*$! +{ + 0867D690FE84028FC02AAC07 /* Project object */ = { + activeArchitecture = ppc; + activeBuildConfigurationName = Release; + activeExecutable = 546B29A410AC677E0054D33A /* testbed */; + activeTarget = 8D07F2BC0486CC7A007CD1D0 /* LittleCMS */; + addToTargets = ( + 546B29A210AC677E0054D33A /* testbed */, + ); + codeSenseManager = 546B293010AC5E210054D33A /* Code sense */; + executables = ( + 546B29A410AC677E0054D33A /* testbed */, + ); + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXBookmarksDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXBookmarksDataSource_NameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 200, + 200, + 760, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXBookmarksDataSource_LocationID, + PBXBookmarksDataSource_NameID, + PBXBookmarksDataSource_CommentsID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 300, + 840, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXErrorsWarningsDataSource_TypeID, + PBXErrorsWarningsDataSource_MessageID, + PBXErrorsWarningsDataSource_LocationID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 22, + 300, + 838, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXExecutablesDataSource_ActiveFlagID, + PBXExecutablesDataSource_NameID, + PBXExecutablesDataSource_CommentsID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 950, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXFindDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFindDataSource_LocationID; + PBXFileTableDataSourceColumnWidthsKey = ( + 200, + 964, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFindDataSource_MessageID, + PBXFindDataSource_LocationID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXSymbolsDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXSymbolsDataSource_SymbolNameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 16, + 200, + 50, + 890, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXSymbolsDataSource_SymbolTypeIconID, + PBXSymbolsDataSource_SymbolNameID, + PBXSymbolsDataSource_SymbolTypeID, + PBXSymbolsDataSource_ReferenceNameID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.XCSCMDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 20, + 926, + 20, + 48.16259765625, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_SCM_ColumnID, + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 910, + 60, + 20, + 48, + 43, + 43, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXTargetDataSource_PrimaryAttribute, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 279735424; + PBXWorkspaceStateSaveDate = 279735424; + }; + perUserProjectItems = { + 546B29DA10AC6B6E0054D33A /* PBXTextBookmark */ = 546B29DA10AC6B6E0054D33A /* PBXTextBookmark */; + 546B29DB10AC6B6E0054D33A /* PBXTextBookmark */ = 546B29DB10AC6B6E0054D33A /* PBXTextBookmark */; + 546B29E010AC6B6E0054D33A /* PBXTextBookmark */ = 546B29E010AC6B6E0054D33A /* PBXTextBookmark */; + 546B29E110AC6B6E0054D33A /* PBXTextBookmark */ = 546B29E110AC6B6E0054D33A /* PBXTextBookmark */; + 546B29E210AC6B6E0054D33A /* PBXTextBookmark */ = 546B29E210AC6B6E0054D33A /* PBXTextBookmark */; + 546B29E310AC6B6E0054D33A /* PBXTextBookmark */ = 546B29E310AC6B6E0054D33A /* PBXTextBookmark */; + 546B29F510AC6C480054D33A /* PBXTextBookmark */ = 546B29F510AC6C480054D33A /* PBXTextBookmark */; + 546B29F710AC6C480054D33A /* PBXTextBookmark */ = 546B29F710AC6C480054D33A /* PBXTextBookmark */; + 546B2A0110AC6C9E0054D33A /* PBXTextBookmark */ = 546B2A0110AC6C9E0054D33A /* PBXTextBookmark */; + }; + sourceControlManager = 546B292F10AC5E210054D33A /* Source Control */; + userBuildSettings = { + }; + }; + 546B292F10AC5E210054D33A /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + }; + }; + 546B293010AC5E210054D33A /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 546B293810AC5E4A0054D33A /* cmsio0.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1128, 23044}}"; + sepNavSelRange = "{25921, 0}"; + sepNavVisRange = "{0, 0}"; + }; + }; + 546B296B10AC5EAA0054D33A /* TestBed-Info.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1128, 522}}"; + sepNavSelRange = "{172, 5}"; + sepNavVisRange = "{0, 671}"; + }; + }; + 546B299D10AC672A0054D33A /* RunUnitTests */ = { + isa = PBXFileReference; + lastKnownFileType = text.script.sh; + name = RunUnitTests; + path = /Developer/Tools/RunUnitTests; + sourceTree = ""; + }; + 546B29A210AC677E0054D33A /* testbed */ = { + activeExec = 0; + executables = ( + 546B29A410AC677E0054D33A /* testbed */, + ); + }; + 546B29A410AC677E0054D33A /* testbed */ = { + isa = PBXExecutable; + activeArgIndices = ( + ); + argumentStrings = ( + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 0; + configStateDict = { + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = testbed; + savedGlobals = { + }; + sourceDirectories = ( + ); + variableFormatDictionary = { + }; + }; + 546B29AD10AC68410054D33A /* testcms2.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {710, 93590}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 1115}"; + sepNavWindowFrame = "{{61, 247}, {1099, 884}}"; + }; + }; + 546B29DA10AC6B6E0054D33A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 546B299D10AC672A0054D33A /* RunUnitTests */; + name = "RunUnitTests: 298"; + rLen = 5; + rLoc = 9244; + rType = 0; + vrLen = 172; + vrLoc = 9140; + }; + 546B29DB10AC6B6E0054D33A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 546B29AD10AC68410054D33A /* testcms2.c */; + name = "testcms2.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1115; + vrLoc = 0; + }; + 546B29E010AC6B6E0054D33A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 546B299D10AC672A0054D33A /* RunUnitTests */; + name = "RunUnitTests: 298"; + rLen = 5; + rLoc = 9244; + rType = 0; + vrLen = 172; + vrLoc = 9140; + }; + 546B29E110AC6B6E0054D33A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 546B296B10AC5EAA0054D33A /* TestBed-Info.plist */; + name = "TestBed-Info.plist: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 662; + vrLoc = 0; + }; + 546B29E210AC6B6E0054D33A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 546B29AD10AC68410054D33A /* testcms2.c */; + name = "testcms2.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1115; + vrLoc = 0; + }; + 546B29E310AC6B6E0054D33A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 546B293810AC5E4A0054D33A /* cmsio0.c */; + name = "cmsio0.c: 845"; + rLen = 0; + rLoc = 25921; + rType = 0; + vrLen = 982; + vrLoc = 25453; + }; + 546B29F510AC6C480054D33A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 546B296B10AC5EAA0054D33A /* TestBed-Info.plist */; + name = "TestBed-Info.plist: 5"; + rLen = 5; + rLoc = 172; + rType = 0; + vrLen = 671; + vrLoc = 0; + }; + 546B29F710AC6C480054D33A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 546B293810AC5E4A0054D33A /* cmsio0.c */; + name = "cmsio0.c: 845"; + rLen = 0; + rLoc = 25921; + rType = 0; + vrLen = 1922; + vrLoc = 0; + }; + 546B2A0110AC6C9E0054D33A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 546B293810AC5E4A0054D33A /* cmsio0.c */; + name = "cmsio0.c: 845"; + rLen = 0; + rLoc = 25921; + rType = 0; + vrLen = 0; + vrLoc = 0; + }; + 8D07F2BC0486CC7A007CD1D0 /* LittleCMS */ = { + activeExec = 0; + }; +} diff --git a/Projects/mac/LittleCMS/LittleCMS.xcodeproj/project.pbxproj b/Projects/mac/LittleCMS/LittleCMS.xcodeproj/project.pbxproj new file mode 100644 index 0000000..a9fa0a5 --- /dev/null +++ b/Projects/mac/LittleCMS/LittleCMS.xcodeproj/project.pbxproj @@ -0,0 +1,490 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 44; + objects = { + +/* Begin PBXBuildFile section */ + 546B294910AC5E4A0054D33A /* cmscam02.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293110AC5E4A0054D33A /* cmscam02.c */; }; + 546B294A10AC5E4A0054D33A /* cmscgats.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293210AC5E4A0054D33A /* cmscgats.c */; }; + 546B294B10AC5E4A0054D33A /* cmscnvrt.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293310AC5E4A0054D33A /* cmscnvrt.c */; }; + 546B294C10AC5E4A0054D33A /* cmserr.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293410AC5E4A0054D33A /* cmserr.c */; }; + 546B294D10AC5E4A0054D33A /* cmsgamma.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293510AC5E4A0054D33A /* cmsgamma.c */; }; + 546B294E10AC5E4A0054D33A /* cmsgmt.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293610AC5E4A0054D33A /* cmsgmt.c */; }; + 546B294F10AC5E4A0054D33A /* cmsintrp.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293710AC5E4A0054D33A /* cmsintrp.c */; }; + 546B295010AC5E4A0054D33A /* cmsio0.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293810AC5E4A0054D33A /* cmsio0.c */; }; + 546B295110AC5E4A0054D33A /* cmsio1.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293910AC5E4A0054D33A /* cmsio1.c */; }; + 546B295210AC5E4A0054D33A /* cmslut.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293A10AC5E4A0054D33A /* cmslut.c */; }; + 546B295310AC5E4A0054D33A /* cmsmd5.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293B10AC5E4A0054D33A /* cmsmd5.c */; }; + 546B295410AC5E4A0054D33A /* cmsmtrx.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293C10AC5E4A0054D33A /* cmsmtrx.c */; }; + 546B295510AC5E4A0054D33A /* cmsnamed.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293D10AC5E4A0054D33A /* cmsnamed.c */; }; + 546B295610AC5E4A0054D33A /* cmsopt.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293E10AC5E4A0054D33A /* cmsopt.c */; }; + 546B295710AC5E4A0054D33A /* cmspack.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B293F10AC5E4A0054D33A /* cmspack.c */; }; + 546B295810AC5E4A0054D33A /* cmspcs.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294010AC5E4A0054D33A /* cmspcs.c */; }; + 546B295910AC5E4A0054D33A /* cmsplugin.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294110AC5E4A0054D33A /* cmsplugin.c */; }; + 546B295A10AC5E4A0054D33A /* cmsps2.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294210AC5E4A0054D33A /* cmsps2.c */; }; + 546B295B10AC5E4A0054D33A /* cmssamp.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294310AC5E4A0054D33A /* cmssamp.c */; }; + 546B295C10AC5E4A0054D33A /* cmssm.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294410AC5E4A0054D33A /* cmssm.c */; }; + 546B295D10AC5E4A0054D33A /* cmstypes.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294510AC5E4A0054D33A /* cmstypes.c */; }; + 546B295E10AC5E4A0054D33A /* cmsvirt.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294610AC5E4A0054D33A /* cmsvirt.c */; }; + 546B295F10AC5E4A0054D33A /* cmswtpnt.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294710AC5E4A0054D33A /* cmswtpnt.c */; }; + 546B296010AC5E4A0054D33A /* cmsxform.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B294810AC5E4A0054D33A /* cmsxform.c */; }; + 546B296310AC5E600054D33A /* lcms2.h in Headers */ = {isa = PBXBuildFile; fileRef = 546B296110AC5E600054D33A /* lcms2.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 546B296410AC5E600054D33A /* lcms2_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 546B296210AC5E600054D33A /* lcms2_plugin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 546B29AE10AC68410054D33A /* testcms2.c in Sources */ = {isa = PBXBuildFile; fileRef = 546B29AD10AC68410054D33A /* testcms2.c */; }; + 8D07F2BE0486CC7A007CD1D0 /* LittleCMS_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 32BAE0B70371A74B00C91783 /* LittleCMS_Prefix.pch */; settings = {ATTRIBUTES = (Private, ); }; }; + 8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; + 8D07F2C40486CC7A007CD1D0 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB77AAFE841565C02AAC07 /* Carbon.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 546B29A710AC67870054D33A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0; + remoteInfo = LittleCMS; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 08FB77AAFE841565C02AAC07 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; + 32BAE0B70371A74B00C91783 /* LittleCMS_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LittleCMS_Prefix.pch; sourceTree = ""; }; + 546B293110AC5E4A0054D33A /* cmscam02.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmscam02.c; path = ../../../src/cmscam02.c; sourceTree = SOURCE_ROOT; }; + 546B293210AC5E4A0054D33A /* cmscgats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmscgats.c; path = ../../../src/cmscgats.c; sourceTree = SOURCE_ROOT; }; + 546B293310AC5E4A0054D33A /* cmscnvrt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmscnvrt.c; path = ../../../src/cmscnvrt.c; sourceTree = SOURCE_ROOT; }; + 546B293410AC5E4A0054D33A /* cmserr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmserr.c; path = ../../../src/cmserr.c; sourceTree = SOURCE_ROOT; }; + 546B293510AC5E4A0054D33A /* cmsgamma.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsgamma.c; path = ../../../src/cmsgamma.c; sourceTree = SOURCE_ROOT; }; + 546B293610AC5E4A0054D33A /* cmsgmt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsgmt.c; path = ../../../src/cmsgmt.c; sourceTree = SOURCE_ROOT; }; + 546B293710AC5E4A0054D33A /* cmsintrp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsintrp.c; path = ../../../src/cmsintrp.c; sourceTree = SOURCE_ROOT; }; + 546B293810AC5E4A0054D33A /* cmsio0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsio0.c; path = ../../../src/cmsio0.c; sourceTree = SOURCE_ROOT; }; + 546B293910AC5E4A0054D33A /* cmsio1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsio1.c; path = ../../../src/cmsio1.c; sourceTree = SOURCE_ROOT; }; + 546B293A10AC5E4A0054D33A /* cmslut.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmslut.c; path = ../../../src/cmslut.c; sourceTree = SOURCE_ROOT; }; + 546B293B10AC5E4A0054D33A /* cmsmd5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsmd5.c; path = ../../../src/cmsmd5.c; sourceTree = SOURCE_ROOT; }; + 546B293C10AC5E4A0054D33A /* cmsmtrx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsmtrx.c; path = ../../../src/cmsmtrx.c; sourceTree = SOURCE_ROOT; }; + 546B293D10AC5E4A0054D33A /* cmsnamed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsnamed.c; path = ../../../src/cmsnamed.c; sourceTree = SOURCE_ROOT; }; + 546B293E10AC5E4A0054D33A /* cmsopt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsopt.c; path = ../../../src/cmsopt.c; sourceTree = SOURCE_ROOT; }; + 546B293F10AC5E4A0054D33A /* cmspack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmspack.c; path = ../../../src/cmspack.c; sourceTree = SOURCE_ROOT; }; + 546B294010AC5E4A0054D33A /* cmspcs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmspcs.c; path = ../../../src/cmspcs.c; sourceTree = SOURCE_ROOT; }; + 546B294110AC5E4A0054D33A /* cmsplugin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsplugin.c; path = ../../../src/cmsplugin.c; sourceTree = SOURCE_ROOT; }; + 546B294210AC5E4A0054D33A /* cmsps2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsps2.c; path = ../../../src/cmsps2.c; sourceTree = SOURCE_ROOT; }; + 546B294310AC5E4A0054D33A /* cmssamp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmssamp.c; path = ../../../src/cmssamp.c; sourceTree = SOURCE_ROOT; }; + 546B294410AC5E4A0054D33A /* cmssm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmssm.c; path = ../../../src/cmssm.c; sourceTree = SOURCE_ROOT; }; + 546B294510AC5E4A0054D33A /* cmstypes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmstypes.c; path = ../../../src/cmstypes.c; sourceTree = SOURCE_ROOT; }; + 546B294610AC5E4A0054D33A /* cmsvirt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsvirt.c; path = ../../../src/cmsvirt.c; sourceTree = SOURCE_ROOT; }; + 546B294710AC5E4A0054D33A /* cmswtpnt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmswtpnt.c; path = ../../../src/cmswtpnt.c; sourceTree = SOURCE_ROOT; }; + 546B294810AC5E4A0054D33A /* cmsxform.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cmsxform.c; path = ../../../src/cmsxform.c; sourceTree = SOURCE_ROOT; }; + 546B296110AC5E600054D33A /* lcms2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lcms2.h; path = ../../../include/lcms2.h; sourceTree = SOURCE_ROOT; }; + 546B296210AC5E600054D33A /* lcms2_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lcms2_plugin.h; path = ../../../include/lcms2_plugin.h; sourceTree = SOURCE_ROOT; }; + 546B296B10AC5EAA0054D33A /* TestBed-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TestBed-Info.plist"; sourceTree = ""; }; + 546B29A310AC677E0054D33A /* testbed */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testbed; sourceTree = BUILT_PRODUCTS_DIR; }; + 546B29AC10AC682F0054D33A /* lcms2_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lcms2_internal.h; path = ../../../src/lcms2_internal.h; sourceTree = SOURCE_ROOT; }; + 546B29AD10AC68410054D33A /* testcms2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testcms2.c; path = ../../../testbed/testcms2.c; sourceTree = SOURCE_ROOT; }; + 8D07F2C70486CC7A007CD1D0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 8D07F2C80486CC7A007CD1D0 /* LittleCMS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LittleCMS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 546B29A110AC677E0054D33A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8D07F2C30486CC7A007CD1D0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D07F2C40486CC7A007CD1D0 /* Carbon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 034768DDFF38A45A11DB9C8B /* Products */ = { + isa = PBXGroup; + children = ( + 8D07F2C80486CC7A007CD1D0 /* LittleCMS.framework */, + 546B29A310AC677E0054D33A /* testbed */, + ); + name = Products; + sourceTree = ""; + }; + 0867D691FE84028FC02AAC07 /* LittleCMS */ = { + isa = PBXGroup; + children = ( + 08FB77ACFE841707C02AAC07 /* Source */, + 089C1665FE841158C02AAC07 /* Resources */, + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, + 034768DDFF38A45A11DB9C8B /* Products */, + 546B296B10AC5EAA0054D33A /* TestBed-Info.plist */, + ); + name = LittleCMS; + sourceTree = ""; + }; + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 08FB77AAFE841565C02AAC07 /* Carbon.framework */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; + 089C1665FE841158C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D07F2C70486CC7A007CD1D0 /* Info.plist */, + 089C1666FE841158C02AAC07 /* InfoPlist.strings */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77ACFE841707C02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 546B29AD10AC68410054D33A /* testcms2.c */, + 546B29AC10AC682F0054D33A /* lcms2_internal.h */, + 546B296110AC5E600054D33A /* lcms2.h */, + 546B296210AC5E600054D33A /* lcms2_plugin.h */, + 546B293110AC5E4A0054D33A /* cmscam02.c */, + 546B293210AC5E4A0054D33A /* cmscgats.c */, + 546B293310AC5E4A0054D33A /* cmscnvrt.c */, + 546B293410AC5E4A0054D33A /* cmserr.c */, + 546B293510AC5E4A0054D33A /* cmsgamma.c */, + 546B293610AC5E4A0054D33A /* cmsgmt.c */, + 546B293710AC5E4A0054D33A /* cmsintrp.c */, + 546B293810AC5E4A0054D33A /* cmsio0.c */, + 546B293910AC5E4A0054D33A /* cmsio1.c */, + 546B293A10AC5E4A0054D33A /* cmslut.c */, + 546B293B10AC5E4A0054D33A /* cmsmd5.c */, + 546B293C10AC5E4A0054D33A /* cmsmtrx.c */, + 546B293D10AC5E4A0054D33A /* cmsnamed.c */, + 546B293E10AC5E4A0054D33A /* cmsopt.c */, + 546B293F10AC5E4A0054D33A /* cmspack.c */, + 546B294010AC5E4A0054D33A /* cmspcs.c */, + 546B294110AC5E4A0054D33A /* cmsplugin.c */, + 546B294210AC5E4A0054D33A /* cmsps2.c */, + 546B294310AC5E4A0054D33A /* cmssamp.c */, + 546B294410AC5E4A0054D33A /* cmssm.c */, + 546B294510AC5E4A0054D33A /* cmstypes.c */, + 546B294610AC5E4A0054D33A /* cmsvirt.c */, + 546B294710AC5E4A0054D33A /* cmswtpnt.c */, + 546B294810AC5E4A0054D33A /* cmsxform.c */, + 32BAE0B70371A74B00C91783 /* LittleCMS_Prefix.pch */, + ); + name = Source; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 8D07F2BD0486CC7A007CD1D0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D07F2BE0486CC7A007CD1D0 /* LittleCMS_Prefix.pch in Headers */, + 546B296310AC5E600054D33A /* lcms2.h in Headers */, + 546B296410AC5E600054D33A /* lcms2_plugin.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 546B29A210AC677E0054D33A /* testbed */ = { + isa = PBXNativeTarget; + buildConfigurationList = 546B29AB10AC67C30054D33A /* Build configuration list for PBXNativeTarget "testbed" */; + buildPhases = ( + 546B29A010AC677E0054D33A /* Sources */, + 546B29A110AC677E0054D33A /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 546B29A810AC67870054D33A /* PBXTargetDependency */, + ); + name = testbed; + productName = testbed; + productReference = 546B29A310AC677E0054D33A /* testbed */; + productType = "com.apple.product-type.tool"; + }; + 8D07F2BC0486CC7A007CD1D0 /* LittleCMS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "LittleCMS" */; + buildPhases = ( + 8D07F2BD0486CC7A007CD1D0 /* Headers */, + 8D07F2BF0486CC7A007CD1D0 /* Resources */, + 8D07F2C10486CC7A007CD1D0 /* Sources */, + 8D07F2C30486CC7A007CD1D0 /* Frameworks */, + 8D07F2C50486CC7A007CD1D0 /* Rez */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = LittleCMS; + productInstallPath = "$(HOME)/Library/Frameworks"; + productName = LittleCMS; + productReference = 8D07F2C80486CC7A007CD1D0 /* LittleCMS.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0867D690FE84028FC02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "LittleCMS" */; + compatibilityVersion = "Xcode 3.0"; + hasScannedForEncodings = 1; + mainGroup = 0867D691FE84028FC02AAC07 /* LittleCMS */; + productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D07F2BC0486CC7A007CD1D0 /* LittleCMS */, + 546B29A210AC677E0054D33A /* testbed */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D07F2BF0486CC7A007CD1D0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 8D07F2C50486CC7A007CD1D0 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 546B29A010AC677E0054D33A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 546B29AE10AC68410054D33A /* testcms2.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8D07F2C10486CC7A007CD1D0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 546B294910AC5E4A0054D33A /* cmscam02.c in Sources */, + 546B294A10AC5E4A0054D33A /* cmscgats.c in Sources */, + 546B294B10AC5E4A0054D33A /* cmscnvrt.c in Sources */, + 546B294C10AC5E4A0054D33A /* cmserr.c in Sources */, + 546B294D10AC5E4A0054D33A /* cmsgamma.c in Sources */, + 546B294E10AC5E4A0054D33A /* cmsgmt.c in Sources */, + 546B294F10AC5E4A0054D33A /* cmsintrp.c in Sources */, + 546B295010AC5E4A0054D33A /* cmsio0.c in Sources */, + 546B295110AC5E4A0054D33A /* cmsio1.c in Sources */, + 546B295210AC5E4A0054D33A /* cmslut.c in Sources */, + 546B295310AC5E4A0054D33A /* cmsmd5.c in Sources */, + 546B295410AC5E4A0054D33A /* cmsmtrx.c in Sources */, + 546B295510AC5E4A0054D33A /* cmsnamed.c in Sources */, + 546B295610AC5E4A0054D33A /* cmsopt.c in Sources */, + 546B295710AC5E4A0054D33A /* cmspack.c in Sources */, + 546B295810AC5E4A0054D33A /* cmspcs.c in Sources */, + 546B295910AC5E4A0054D33A /* cmsplugin.c in Sources */, + 546B295A10AC5E4A0054D33A /* cmsps2.c in Sources */, + 546B295B10AC5E4A0054D33A /* cmssamp.c in Sources */, + 546B295C10AC5E4A0054D33A /* cmssm.c in Sources */, + 546B295D10AC5E4A0054D33A /* cmstypes.c in Sources */, + 546B295E10AC5E4A0054D33A /* cmsvirt.c in Sources */, + 546B295F10AC5E4A0054D33A /* cmswtpnt.c in Sources */, + 546B296010AC5E4A0054D33A /* cmsxform.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 546B29A810AC67870054D33A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8D07F2BC0486CC7A007CD1D0 /* LittleCMS */; + targetProxy = 546B29A710AC67870054D33A /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C1667FE841158C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 4FADC24308B4156D00ABE55E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = LittleCMS_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Frameworks"; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + PRODUCT_NAME = LittleCMS; + WRAPPER_EXTENSION = framework; + ZERO_LINK = YES; + }; + name = Debug; + }; + 4FADC24408B4156D00ABE55E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = LittleCMS_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Frameworks"; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + PRODUCT_NAME = LittleCMS; + WRAPPER_EXTENSION = framework; + }; + name = Release; + }; + 4FADC24708B4156D00ABE55E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINK_WITH_STANDARD_LIBRARIES = YES; + MACH_O_TYPE = mh_execute; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; + STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static; + }; + name = Debug; + }; + 4FADC24808B4156D00ABE55E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINK_WITH_STANDARD_LIBRARIES = YES; + MACH_O_TYPE = mh_execute; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; + STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static; + }; + name = Release; + }; + 546B29A510AC677F0054D33A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = ( + "-framework", + Carbon, + "-framework", + LittleCMS, + ); + PREBINDING = NO; + PRODUCT_NAME = testbed; + ZERO_LINK = YES; + }; + name = Debug; + }; + 546B29A610AC677F0054D33A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = ( + "-framework", + Carbon, + "-framework", + LittleCMS, + ); + PREBINDING = NO; + PRODUCT_NAME = testbed; + ZERO_LINK = NO; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "LittleCMS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FADC24308B4156D00ABE55E /* Debug */, + 4FADC24408B4156D00ABE55E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "LittleCMS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FADC24708B4156D00ABE55E /* Debug */, + 4FADC24808B4156D00ABE55E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 546B29AB10AC67C30054D33A /* Build configuration list for PBXNativeTarget "testbed" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 546B29A510AC677F0054D33A /* Debug */, + 546B29A610AC677F0054D33A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0867D690FE84028FC02AAC07 /* Project object */; +} diff --git a/Projects/mac/LittleCMS/LittleCMS_Prefix.pch b/Projects/mac/LittleCMS/LittleCMS_Prefix.pch new file mode 100644 index 0000000..40cdb9b --- /dev/null +++ b/Projects/mac/LittleCMS/LittleCMS_Prefix.pch @@ -0,0 +1,5 @@ +// +// Prefix header for all source files of the 'LittleCMS' target in the 'LittleCMS' project. +// + +#include diff --git a/Projects/mac/LittleCMS/TestBed-Info.plist b/Projects/mac/LittleCMS/TestBed-Info.plist new file mode 100644 index 0000000..aed5b9f --- /dev/null +++ b/Projects/mac/LittleCMS/TestBed-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.yourcompany.TestBed + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CSResourcesFileMapped + yes + + diff --git a/README.1ST b/README.1ST new file mode 100644 index 0000000..2e5ee4a --- /dev/null +++ b/README.1ST @@ -0,0 +1,2 @@ + + Please see the documentation in doc folder diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..a9f53ea --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,9418 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_REPLACE_SHELLFNS + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) + + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) + + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) + + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS + +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) + +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) + +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3294 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4]) +m4_define([LT_PACKAGE_REVISION], [1.3294]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4' +macro_revision='1.3294' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) + +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..5c62310 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,92 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +DIE=0 + +(test -f $srcdir/configure.ac) || { + echo -n "**Error**: Directory $srcdir does not look like the" + echo " top-level package directory" + exit 1 +} + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have autoconf installed." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +(grep "^LT_INIT" $srcdir/configure.ac >/dev/null) && { + (libtool --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have libtool installed." + echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" + DIE=1 + } +} + +(automake --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have automake installed." + echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" + DIE=1 + NO_AUTOMAKE=yes +} + +# if no automake, don't bother testing for aclocal +test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: Missing aclocal. The version of automake" + echo "installed doesn't appear recent enough." + echo "You can get automake from ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +if test "$DIE" -eq 1; then + exit 1 +fi + +if test -z "$*"; then + echo "**Warning**: I am going to run configure with no arguments." + echo "If you wish to pass any to it, please specify them on the" + echo $0 " command line." + echo +fi + +case $CC in +xlc ) + am_opt=--include-deps;; +esac + + aclocalinclude="$ACLOCAL_FLAGS" + + if grep "^LT_INIT" configure.ac >/dev/null; then + if test -z "$NO_LIBTOOLIZE" ; then + echo "Running libtoolize..." + libtoolize --force --copy + fi + fi + echo "Running aclocal $aclocalinclude ..." + aclocal $aclocalinclude + if grep "^AC_CONFIG_HEADERS" configure.ac >/dev/null; then + echo "Running autoheader..." + autoheader + fi + echo "Running automake --add-missing --gnu -Wno-portability $am_opt ..." + automake --add-missing --gnu -Wno-portability $am_opt + echo "Running autoconf ..." + autoconf + +conf_flags="--enable-maintainer-mode" + +if test x$NOCONFIGURE = x; then + echo "Running $srcdir/configure $conf_flags $@ ..." + $srcdir/configure $conf_flags "$@" \ + && echo "Now type make to compile." || exit 1 +else + echo "Skipping configure process." +fi diff --git a/bin/Bin.txt b/bin/Bin.txt new file mode 100644 index 0000000..a8dac7a --- /dev/null +++ b/bin/Bin.txt @@ -0,0 +1 @@ +Bin \ No newline at end of file diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..dc84c68 --- /dev/null +++ b/config.guess @@ -0,0 +1,1501 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-11-20' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.status b/config.status new file mode 100644 index 0000000..e69de29 diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..2a55a50 --- /dev/null +++ b/config.sub @@ -0,0 +1,1705 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-11-20' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..7e14486 --- /dev/null +++ b/configure @@ -0,0 +1,19183 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for lcms2 2.3. +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='lcms2' +PACKAGE_TARNAME='lcms2' +PACKAGE_VERSION='2.3' +PACKAGE_STRING='lcms2 2.3' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +TIFFICC_DEPLIBS +JPEGICC_DEPLIBS +LCMS_LIB_DEPLIBS +LIB_TIFF +HasTIFF_FALSE +HasTIFF_TRUE +LIB_ZLIB +HasZLIB_FALSE +HasZLIB_TRUE +LIB_JPEG +HasJPEG_FALSE +HasJPEG_TRUE +LIB_MATH +inline +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +LIBTOOL_DEPS +CXXCPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +LIBTOOL +OBJDUMP +DLLTOOL +AS +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBRARY_AGE +LIBRARY_REVISION +LIBRARY_CURRENT +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +with_jpeg +with_tiff +with_zlib +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_maintainer_mode +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +CXX +CXXFLAGS +CCC +CXXCPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures lcms2 2.3 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/lcms2] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of lcms2 2.3:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --without-jpeg disable JPEG support + --without-tiff disable TIFF support + --without-zlib disable ZLIB support + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +lcms2 configure 2.3 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by lcms2 $as_me 2.3, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5 ; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# +# Libtool library revision control info +# See the libtool documentation under the heading "Libtool's versioning +# system" in order to understand the meaning of these fields +# +# Here are a set of rules to help you update your library version +# information: +# +# 1. Start with version information of `0:0:0' for each libtool library. +# 2. Update the version information only immediately before a public +# release of your software. More frequent updates are unnecessary, and +# only guarantee that the current interface number gets larger faster. +# 3. If the library source code has changed at all since the last update, +# then increment revision (`c:r:a' becomes `c:r+1:a'). +# 4. If any interfaces have been added, removed, or changed since the last +# update, increment current, and set revision to 0. +# 5. If any interfaces have been added since the last public release, then +# increment age. +# 6. If any interfaces have been removed since the last public release, +# then set age to 0. +# +LIBRARY_CURRENT=2 +LIBRARY_REVISION=3 +LIBRARY_AGE=0 + + +# Obtain system type by running config.guess +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='lcms2' + VERSION='2.3' + + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + +# Disable JPEG. + +# Check whether --with-jpeg was given. +if test "${with_jpeg+set}" = set; then : + withval=$with_jpeg; with_jpeg=$withval +else + with_jpeg='yes' +fi + + +# Disable TIFF. + +# Check whether --with-tiff was given. +if test "${with_tiff+set}" = set; then : + withval=$with_tiff; with_tiff=$withval +else + with_tiff='yes' +fi + + +# Disable ZLIB + +# Check whether --with-zlib was given. +if test "${with_zlib+set}" = set; then : + withval=$with_zlib; with_zlib=$withval +else + with_zlib='yes' +fi + + +# Check for programs +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5 ; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5 ; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5 ; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + case $ac_cv_prog_cc_stdc in #( + no) : + ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if ${ac_cv_prog_cc_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + + +#AM_PROG_LD +#AC_SUBST(LD) +#AC_PROG_INSTALL +#AC_PROG_MAKE_SET +#AC_PROG_LN_S + +# +# Tests for Windows +# + + + +# Configure libtool +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4' +macro_revision='1.3294' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf + + + + + +# Set options + + + + enable_dlopen=no + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + lt_prog_compiler_pic='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + +# Add configure option --enable-maintainer-mode which enables dependency +# checking and generation useful to package maintainers. This is made an +# option to avoid confusing end users. + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +# If the C compiler supports the keyword inline, do nothing. Otherwise +# define inline to __inline__ or __inline if it accepts one of those, +# otherwise define inline to be empty. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + + +# If words are stored with the most significant byte first (like +# Motorola and SPARC CPUs), define `WORDS_BIGENDIAN'. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + + +# +# Find math library +# +LIB_MATH='' +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 +$as_echo_n "checking for sqrt in -lm... " >&6; } +if ${ac_cv_lib_m_sqrt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sqrt (); +int +main () +{ +return sqrt (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_sqrt=yes +else + ac_cv_lib_m_sqrt=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 +$as_echo "$ac_cv_lib_m_sqrt" >&6; } +if test "x$ac_cv_lib_m_sqrt" = xyes; then : + LIB_MATH="-lm" +fi + +LIBS="$LIB_MATH $LIBS" + + +# +# Check for JPEG +# +have_jpeg='no' +LIB_JPEG='' +if test ! "$with_jpeg" = 'no' +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG support " >&5 +$as_echo_n "checking for JPEG support ... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + failed=0; + passed=0; + ac_fn_c_check_header_mongrel "$LINENO" "jconfig.h" "ac_cv_header_jconfig_h" "$ac_includes_default" +if test "x$ac_cv_header_jconfig_h" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "jerror.h" "ac_cv_header_jerror_h" "$ac_includes_default" +if test "x$ac_cv_header_jerror_h" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "jmorecfg.h" "ac_cv_header_jmorecfg_h" "$ac_includes_default" +if test "x$ac_cv_header_jmorecfg_h" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" +if test "x$ac_cv_header_jpeglib_h" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_read_header in -ljpeg" >&5 +$as_echo_n "checking for jpeg_read_header in -ljpeg... " >&6; } +if ${ac_cv_lib_jpeg_jpeg_read_header+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljpeg $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char jpeg_read_header (); +int +main () +{ +return jpeg_read_header (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_jpeg_jpeg_read_header=yes +else + ac_cv_lib_jpeg_jpeg_read_header=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_read_header" >&5 +$as_echo "$ac_cv_lib_jpeg_jpeg_read_header" >&6; } +if test "x$ac_cv_lib_jpeg_jpeg_read_header" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + +# Test for compatible JPEG library +if test ! "$ac_cv_jpeg_version_ok" = 'yes' ; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG library is version 6b or later" >&5 +$as_echo_n "checking for JPEG library is version 6b or later... " >&6; } +if ${ac_cv_jpeg_version_ok+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ + +#if JPEG_LIB_VERSION < 62 +#error IJG JPEG library must be version 6b or newer! +#endif +return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_jpeg_version_ok='yes' +else + ac_cv_jpeg_version_ok='no' +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_jpeg_version_ok" >&5 +$as_echo "$ac_cv_jpeg_version_ok" >&6; } +if test "$ac_cv_jpeg_version_ok" = 'yes' ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + passed=`expr $passed + 1` +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + failed=`expr $failed + 1` +fi +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if JPEG package is complete" >&5 +$as_echo_n "checking if JPEG package is complete... " >&6; } + if test $passed -gt 0 + then + if test $failed -gt 0 + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no -- some components failed test" >&5 +$as_echo "no -- some components failed test" >&6; } + have_jpeg='no (failed tests)' + else + LIB_JPEG='-ljpeg' + LIBS="$LIB_JPEG $LIBS" + +$as_echo "#define HasJPEG 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + have_jpeg='yes' + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi +fi + if test "$have_jpeg" = 'yes'; then + HasJPEG_TRUE= + HasJPEG_FALSE='#' +else + HasJPEG_TRUE='#' + HasJPEG_FALSE= +fi + + + +# +# Check for ZLIB +# +have_zlib='no' +if test ! "$with_zlib" = 'no' || test ! "$with_png" = 'no' +then + LIB_ZLIB='' + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZLIB support " >&5 +$as_echo_n "checking for ZLIB support ... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + failed=0; + passed=0; + ac_fn_c_check_header_mongrel "$LINENO" "zconf.h" "ac_cv_header_zconf_h" "$ac_includes_default" +if test "x$ac_cv_header_zconf_h" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compress in -lz" >&5 +$as_echo_n "checking for compress in -lz... " >&6; } +if ${ac_cv_lib_z_compress+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char compress (); +int +main () +{ +return compress (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_compress=yes +else + ac_cv_lib_z_compress=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5 +$as_echo "$ac_cv_lib_z_compress" >&6; } +if test "x$ac_cv_lib_z_compress" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uncompress in -lz" >&5 +$as_echo_n "checking for uncompress in -lz... " >&6; } +if ${ac_cv_lib_z_uncompress+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uncompress (); +int +main () +{ +return uncompress (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_uncompress=yes +else + ac_cv_lib_z_uncompress=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_uncompress" >&5 +$as_echo "$ac_cv_lib_z_uncompress" >&6; } +if test "x$ac_cv_lib_z_uncompress" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for deflate in -lz" >&5 +$as_echo_n "checking for deflate in -lz... " >&6; } +if ${ac_cv_lib_z_deflate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char deflate (); +int +main () +{ +return deflate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_deflate=yes +else + ac_cv_lib_z_deflate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_deflate" >&5 +$as_echo "$ac_cv_lib_z_deflate" >&6; } +if test "x$ac_cv_lib_z_deflate" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5 +$as_echo_n "checking for inflate in -lz... " >&6; } +if ${ac_cv_lib_z_inflate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inflate (); +int +main () +{ +return inflate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_inflate=yes +else + ac_cv_lib_z_inflate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflate" >&5 +$as_echo "$ac_cv_lib_z_inflate" >&6; } +if test "x$ac_cv_lib_z_inflate" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzseek in -lz" >&5 +$as_echo_n "checking for gzseek in -lz... " >&6; } +if ${ac_cv_lib_z_gzseek+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gzseek (); +int +main () +{ +return gzseek (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_gzseek=yes +else + ac_cv_lib_z_gzseek=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzseek" >&5 +$as_echo "$ac_cv_lib_z_gzseek" >&6; } +if test "x$ac_cv_lib_z_gzseek" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gztell in -lz" >&5 +$as_echo_n "checking for gztell in -lz... " >&6; } +if ${ac_cv_lib_z_gztell+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gztell (); +int +main () +{ +return gztell (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_gztell=yes +else + ac_cv_lib_z_gztell=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gztell" >&5 +$as_echo "$ac_cv_lib_z_gztell" >&6; } +if test "x$ac_cv_lib_z_gztell" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ZLIB package is complete" >&5 +$as_echo_n "checking if ZLIB package is complete... " >&6; } + if test $passed -gt 0 + then + if test $failed -gt 0 + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no -- some components failed test" >&5 +$as_echo "no -- some components failed test" >&6; } + have_zlib='no (failed tests)' + else + LIB_ZLIB='-lz' + LIBS="$LIB_ZLIB $LIBS" + +$as_echo "#define HasZLIB 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + have_zlib='yes' + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi +fi + if test "$have_zlib" = 'yes'; then + HasZLIB_TRUE= + HasZLIB_FALSE='#' +else + HasZLIB_TRUE='#' + HasZLIB_FALSE= +fi + + + +# +# Check for TIFF +# +have_tiff='no' +LIB_TIFF='' +if test ! "$with_tiff" = 'no' +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFF support " >&5 +$as_echo_n "checking for TIFF support ... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + failed=0; + passed=0; + ac_fn_c_check_header_mongrel "$LINENO" "tiff.h" "ac_cv_header_tiff_h" "$ac_includes_default" +if test "x$ac_cv_header_tiff_h" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "tiffio.h" "ac_cv_header_tiffio_h" "$ac_includes_default" +if test "x$ac_cv_header_tiffio_h" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFOpen in -ltiff" >&5 +$as_echo_n "checking for TIFFOpen in -ltiff... " >&6; } +if ${ac_cv_lib_tiff_TIFFOpen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltiff $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char TIFFOpen (); +int +main () +{ +return TIFFOpen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_tiff_TIFFOpen=yes +else + ac_cv_lib_tiff_TIFFOpen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFOpen" >&5 +$as_echo "$ac_cv_lib_tiff_TIFFOpen" >&6; } +if test "x$ac_cv_lib_tiff_TIFFOpen" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFClientOpen in -ltiff" >&5 +$as_echo_n "checking for TIFFClientOpen in -ltiff... " >&6; } +if ${ac_cv_lib_tiff_TIFFClientOpen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltiff $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char TIFFClientOpen (); +int +main () +{ +return TIFFClientOpen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_tiff_TIFFClientOpen=yes +else + ac_cv_lib_tiff_TIFFClientOpen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFClientOpen" >&5 +$as_echo "$ac_cv_lib_tiff_TIFFClientOpen" >&6; } +if test "x$ac_cv_lib_tiff_TIFFClientOpen" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFIsByteSwapped in -ltiff" >&5 +$as_echo_n "checking for TIFFIsByteSwapped in -ltiff... " >&6; } +if ${ac_cv_lib_tiff_TIFFIsByteSwapped+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltiff $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char TIFFIsByteSwapped (); +int +main () +{ +return TIFFIsByteSwapped (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_tiff_TIFFIsByteSwapped=yes +else + ac_cv_lib_tiff_TIFFIsByteSwapped=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFIsByteSwapped" >&5 +$as_echo "$ac_cv_lib_tiff_TIFFIsByteSwapped" >&6; } +if test "x$ac_cv_lib_tiff_TIFFIsByteSwapped" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if TIFF package is complete" >&5 +$as_echo_n "checking if TIFF package is complete... " >&6; } + if test $passed -gt 0 + then + if test $failed -gt 0 + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no -- some components failed test" >&5 +$as_echo "no -- some components failed test" >&6; } + have_tiff='no (failed tests)' + else + LIB_TIFF='-ltiff' + LIBS="$LIB_TIFF $LIBS" + +$as_echo "#define HasTIFF 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + have_tiff='yes' + for ac_header in tiffconf.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "tiffconf.h" "ac_cv_header_tiffconf_h" "$ac_includes_default" +if test "x$ac_cv_header_tiffconf_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TIFFCONF_H 1 +_ACEOF + +fi + +done + + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi +fi + if test "$have_tiff" = 'yes'; then + HasTIFF_TRUE= + HasTIFF_FALSE='#' +else + HasTIFF_TRUE='#' + HasTIFF_FALSE= +fi + + + +# Libraries that the LCMS library depends on +LCMS_LIB_DEPLIBS="$LIB_MATH" +LCMS_LIB_DEPLIBS=`echo $LCMS_LIB_DEPLIBS | sed -e 's/ */ /g'` + + +# Libraries that the jpegicc program depends on +JPEGICC_DEPLIBS="$LIB_JPEG $LIB_MATH" +JPEGICC_DEPLIBS=`echo $JPEGICC_DEPLIBS | sed -e 's/ */ /g'` + + +# Libraries that the tifficc program depends on +TIFFICC_DEPLIBS="$LIB_TIFF $LIB_JPEG $LIB_ZLIB $LIB_MATH" +TIFFICC_DEPLIBS=`echo $TIFFICC_DEPLIBS | sed -e 's/ */ /g'` + + +LIBS='' + +# +# Perform substitutions +# +ac_config_files="$ac_config_files Makefile" + +ac_config_files="$ac_config_files lcms2.pc" + +ac_config_files="$ac_config_files include/Makefile" + +ac_config_files="$ac_config_files src/Makefile" + +ac_config_files="$ac_config_files utils/tificc/Makefile" + +ac_config_files="$ac_config_files utils/transicc/Makefile" + +ac_config_files="$ac_config_files utils/linkicc/Makefile" + +ac_config_files="$ac_config_files utils/jpgicc/Makefile" + +ac_config_files="$ac_config_files utils/psicc/Makefile" + +ac_config_files="$ac_config_files testbed/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +if test -z "${HasJPEG_TRUE}" && test -z "${HasJPEG_FALSE}"; then + as_fn_error $? "conditional \"HasJPEG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HasZLIB_TRUE}" && test -z "${HasZLIB_FALSE}"; then + as_fn_error $? "conditional \"HasZLIB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HasTIFF_TRUE}" && test -z "${HasTIFF_FALSE}"; then + as_fn_error $? "conditional \"HasTIFF\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by lcms2 $as_me 2.3, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +lcms2 config.status 2.3 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in AS \ +DLLTOOL \ +OBJDUMP \ +SHELL \ +ECHO \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_flag_spec_ld_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "lcms2.pc") CONFIG_FILES="$CONFIG_FILES lcms2.pc" ;; + "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "utils/tificc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/tificc/Makefile" ;; + "utils/transicc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/transicc/Makefile" ;; + "utils/linkicc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/linkicc/Makefile" ;; + "utils/jpgicc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/jpgicc/Makefile" ;; + "utils/psicc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/psicc/Makefile" ;; + "testbed/Makefile") CONFIG_FILES="$CONFIG_FILES testbed/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Assembler program. +AS=$lt_AS + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Object dumper program. +OBJDUMP=$lt_OBJDUMP + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..8e0b2b8 --- /dev/null +++ b/configure.ac @@ -0,0 +1,285 @@ +# +# LittleCMS 2 configure script +# + +AC_PREREQ(2.60) + +# +# Set the package name and version +# +AC_INIT(lcms2,2.3) + +# +# Libtool library revision control info +# See the libtool documentation under the heading "Libtool's versioning +# system" in order to understand the meaning of these fields +# +# Here are a set of rules to help you update your library version +# information: +# +# 1. Start with version information of `0:0:0' for each libtool library. +# 2. Update the version information only immediately before a public +# release of your software. More frequent updates are unnecessary, and +# only guarantee that the current interface number gets larger faster. +# 3. If the library source code has changed at all since the last update, +# then increment revision (`c:r:a' becomes `c:r+1:a'). +# 4. If any interfaces have been added, removed, or changed since the last +# update, increment current, and set revision to 0. +# 5. If any interfaces have been added since the last public release, then +# increment age. +# 6. If any interfaces have been removed since the last public release, +# then set age to 0. +# +LIBRARY_CURRENT=2 +LIBRARY_REVISION=3 +LIBRARY_AGE=0 + +AC_SUBST(LIBRARY_CURRENT)dnl +AC_SUBST(LIBRARY_REVISION)dnl +AC_SUBST(LIBRARY_AGE)dnl + +# Obtain system type by running config.guess +AC_CANONICAL_HOST + +AM_INIT_AUTOMAKE([foreign 1.7.2 no-define dist-zip]) + +# Disable JPEG. +AC_ARG_WITH(jpeg, + [ --without-jpeg disable JPEG support], + [with_jpeg=$withval], + [with_jpeg='yes']) + +# Disable TIFF. +AC_ARG_WITH(tiff, + [ --without-tiff disable TIFF support], + [with_tiff=$withval], + [with_tiff='yes']) + +# Disable ZLIB +AC_ARG_WITH(zlib, + [ --without-zlib disable ZLIB support], + [with_zlib=$withval], + [with_zlib='yes']) + +# Check for programs +AC_PROG_CC_STDC +AC_PROG_CPP +AC_PROG_CXX + +#AM_PROG_LD +#AC_SUBST(LD) +#AC_PROG_INSTALL +#AC_PROG_MAKE_SET +#AC_PROG_LN_S + +# +# Tests for Windows +# +AC_EXEEXT +AC_OBJEXT + +# Configure libtool +AC_ENABLE_SHARED +AC_ENABLE_STATIC +AC_LIBTOOL_WIN32_DLL +AC_LIBTOOL_SETUP +AC_PROG_LIBTOOL +AC_SUBST(LIBTOOL_DEPS) + +# Add configure option --enable-maintainer-mode which enables dependency +# checking and generation useful to package maintainers. This is made an +# option to avoid confusing end users. +AM_MAINTAINER_MODE + +# If the C compiler supports the keyword inline, do nothing. Otherwise +# define inline to __inline__ or __inline if it accepts one of those, +# otherwise define inline to be empty. +AC_C_INLINE +AC_SUBST(inline) + +# If words are stored with the most significant byte first (like +# Motorola and SPARC CPUs), define `WORDS_BIGENDIAN'. +AC_C_BIGENDIAN + +# +# Find math library +# +LIB_MATH='' +AC_CHECK_LIB(m,sqrt,LIB_MATH="-lm",,) +LIBS="$LIB_MATH $LIBS" +AC_SUBST(LIB_MATH) + +# +# Check for JPEG +# +have_jpeg='no' +LIB_JPEG='' +if test ! "$with_jpeg" = 'no' +then + AC_MSG_CHECKING(for JPEG support ) + AC_MSG_RESULT() + failed=0; + passed=0; + AC_CHECK_HEADER(jconfig.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) + AC_CHECK_HEADER(jerror.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) + AC_CHECK_HEADER(jmorecfg.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) + AC_CHECK_HEADER(jpeglib.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) + AC_CHECK_LIB(jpeg,jpeg_read_header,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) + +# Test for compatible JPEG library +if test ! "$ac_cv_jpeg_version_ok" = 'yes' ; then +AC_CACHE_CHECK(for JPEG library is version 6b or later, ac_cv_jpeg_version_ok, +[AC_TRY_COMPILE( +#include +#include +#include +, +changequote(<<, >>)dnl +<< +#if JPEG_LIB_VERSION < 62 +#error IJG JPEG library must be version 6b or newer! +#endif +return 0; +>>, +changequote([, ])dnl +ac_cv_jpeg_version_ok='yes', +ac_cv_jpeg_version_ok='no')]) +if test "$ac_cv_jpeg_version_ok" = 'yes' ; then + AC_MSG_RESULT(yes) + passed=`expr $passed + 1` +else + AC_MSG_RESULT(no) + failed=`expr $failed + 1` +fi +fi + AC_MSG_CHECKING(if JPEG package is complete) + if test $passed -gt 0 + then + if test $failed -gt 0 + then + AC_MSG_RESULT(no -- some components failed test) + have_jpeg='no (failed tests)' + else + LIB_JPEG='-ljpeg' + LIBS="$LIB_JPEG $LIBS" + AC_DEFINE(HasJPEG,1,Define if you have JPEG library) + AC_MSG_RESULT(yes) + have_jpeg='yes' + fi + else + AC_MSG_RESULT(no) + fi +fi +AM_CONDITIONAL(HasJPEG, test "$have_jpeg" = 'yes') +AC_SUBST(LIB_JPEG) + +# +# Check for ZLIB +# +have_zlib='no' +dnl PNG requires zlib so enable zlib check if PNG is requested +if test ! "$with_zlib" = 'no' || test ! "$with_png" = 'no' +then + LIB_ZLIB='' + AC_MSG_CHECKING(for ZLIB support ) + AC_MSG_RESULT() + failed=0; + passed=0; + AC_CHECK_HEADER(zconf.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) + AC_CHECK_HEADER(zlib.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) + AC_CHECK_LIB(z,compress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) + AC_CHECK_LIB(z,uncompress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) + AC_CHECK_LIB(z,deflate,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) + AC_CHECK_LIB(z,inflate,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) + AC_CHECK_LIB(z,gzseek,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) + AC_CHECK_LIB(z,gztell,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) + AC_MSG_CHECKING(if ZLIB package is complete) + if test $passed -gt 0 + then + if test $failed -gt 0 + then + AC_MSG_RESULT(no -- some components failed test) + have_zlib='no (failed tests)' + else + LIB_ZLIB='-lz' + LIBS="$LIB_ZLIB $LIBS" + AC_DEFINE(HasZLIB,1,Define if you have zlib compression library) + AC_MSG_RESULT(yes) + have_zlib='yes' + fi + else + AC_MSG_RESULT(no) + fi +fi +AM_CONDITIONAL(HasZLIB, test "$have_zlib" = 'yes') +AC_SUBST(LIB_ZLIB) + +# +# Check for TIFF +# +have_tiff='no' +LIB_TIFF='' +if test ! "$with_tiff" = 'no' +then + AC_MSG_CHECKING(for TIFF support ) + AC_MSG_RESULT() + failed=0; + passed=0; + AC_CHECK_HEADER(tiff.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) + AC_CHECK_HEADER(tiffio.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) + AC_CHECK_LIB(tiff,TIFFOpen,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) + AC_CHECK_LIB(tiff,TIFFClientOpen,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) + AC_CHECK_LIB(tiff,TIFFIsByteSwapped,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) + AC_MSG_CHECKING(if TIFF package is complete) + if test $passed -gt 0 + then + if test $failed -gt 0 + then + AC_MSG_RESULT(no -- some components failed test) + have_tiff='no (failed tests)' + else + LIB_TIFF='-ltiff' + LIBS="$LIB_TIFF $LIBS" + AC_DEFINE(HasTIFF,1,Define if you have TIFF library) + AC_MSG_RESULT(yes) + have_tiff='yes' + AC_CHECK_HEADERS(tiffconf.h) + fi + else + AC_MSG_RESULT(no) + fi +fi +AM_CONDITIONAL(HasTIFF, test "$have_tiff" = 'yes') +AC_SUBST(LIB_TIFF) + +# Libraries that the LCMS library depends on +LCMS_LIB_DEPLIBS="$LIB_MATH" +LCMS_LIB_DEPLIBS=`echo $LCMS_LIB_DEPLIBS | sed -e 's/ */ /g'` +AC_SUBST(LCMS_LIB_DEPLIBS) + +# Libraries that the jpegicc program depends on +JPEGICC_DEPLIBS="$LIB_JPEG $LIB_MATH" +JPEGICC_DEPLIBS=`echo $JPEGICC_DEPLIBS | sed -e 's/ */ /g'` +AC_SUBST(JPEGICC_DEPLIBS) + +# Libraries that the tifficc program depends on +TIFFICC_DEPLIBS="$LIB_TIFF $LIB_JPEG $LIB_ZLIB $LIB_MATH" +TIFFICC_DEPLIBS=`echo $TIFFICC_DEPLIBS | sed -e 's/ */ /g'` +AC_SUBST(TIFFICC_DEPLIBS) + +LIBS='' + +# +# Perform substitutions +# +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([lcms2.pc]) +AC_CONFIG_FILES([include/Makefile]) +AC_CONFIG_FILES([src/Makefile]) +AC_CONFIG_FILES([utils/tificc/Makefile]) +AC_CONFIG_FILES([utils/transicc/Makefile]) +AC_CONFIG_FILES([utils/linkicc/Makefile]) +AC_CONFIG_FILES([utils/jpgicc/Makefile]) +AC_CONFIG_FILES([utils/psicc/Makefile]) +AC_CONFIG_FILES([testbed/Makefile]) +AC_OUTPUT diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..450ad2e --- /dev/null +++ b/debian/changelog @@ -0,0 +1,99 @@ +lcms2 (2.3-6slp2) unstable; urgency=low + + * Changed libjpeg-devel to libjpeg-turbo-devel + * Git: slp/pkgs/l/lcms + * Tag: lcms2_2.3-6slp2 + + -- GangHeok Kim Wed, 31 Oct 2012 10:38:43 +0900 + +lcms2 (2.3-5slp2) unstable; urgency=low + + * Added license file + * Git: slp/pkgs/l/lcms + * Tag: lcms2_2.3-5slp2 + + -- GangHeok Kim Thu, 11 Oct 2012 18:18:26 +0900 + +lcms2 (2.3-4slp2) unstable; urgency=low + + * Fixed smack manifest file + * Git: slp/pkgs/l/lcms + * Tag: lcms2_2.3-4slp2 + + -- GangHeok Kim Mon, 24 Sep 2012 13:38:44 +0900 + +lcms2 (2.3-3slp2) unstable; urgency=low + + * Added default manifest file + * Git: slp/pkgs/l/lcms + * Tag: lcms2_2.3-3slp2 + + -- gpeegpee Fri, 21 Sep 2012 13:05:36 +0900 + +lcms2 (2.3-2slp2) unstable; urgency=low + + * Fixed package name in spec file(liblcms2) + * Git: slp/pkgs/l/lcms + * Tag: lcms2_2.3-2slp2 + + -- GangHeok Kim Thu, 19 Jul 2012 18:03:34 +0900 + +lcms2 (2.3-1slp2) unstable; urgency=low + + * Updated to version 2.3 + * Git: slp/pkgs/l/lcms + * Tag: lcms2_2.3-1slp2 + + -- GangHeok Kim Wed, 18 Jul 2012 21:26:03 +0900 + +lcms2 (2.2+git20110628-2ubuntu3) precise; urgency=low + + * Rebuild for libjpeg8. + + -- Colin Watson Tue, 18 Oct 2011 17:22:44 +0100 + +lcms2 (2.2+git20110628-2ubuntu2) oneiric; urgency=low + + * Convert library packages to multiarch. LP: #836004. + + -- Matthias Klose Sun, 28 Aug 2011 13:40:38 +0200 + +lcms2 (2.2+git20110628-2ubuntu1) oneiric; urgency=low + + * debian/liblcms2-2.symbols: Added symbols file for the shared library, + generated with "dpkg-gensymbols -pliblcms2-2". + + -- Till Kamppeter Tue, 09 Aug 2011 17:05:31 +0200 + +lcms2 (2.2+git20110628-2) unstable; urgency=low + + * debian/control: + - Updated libjpeg dependency for the transition. + - Updated package descriptions for better search results. + + -- Oleksandr Moskalenko Mon, 18 Jul 2011 23:39:39 -0500 + +lcms2 (2.2+git20110628-1) unstable; urgency=low + + * Upstream git update (Closes: #631598). + + -- Oleksandr Moskalenko Wed, 29 Jun 2011 01:20:02 -0500 + +lcms2 (2.2+git20110627-1) unstable; urgency=low + + * Upstream git update to fix a FTBFS on i386. + + -- Oleksandr Moskalenko Mon, 27 Jun 2011 23:22:54 -0500 + +lcms2 (2.2-1) unstable; urgency=low + + * New upstream release. + * debian/control: Updated standards version to 3.9.2. + + -- Oleksandr Moskalenko Sun, 12 Jun 2011 00:36:06 -0500 + +lcms2 (2.1-1) unstable; urgency=low + + * Initial release (Closes: #590222). + + -- Oleksandr Moskalenko Sun, 23 Jan 2011 15:26:53 -0600 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +7 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..50765af --- /dev/null +++ b/debian/control @@ -0,0 +1,63 @@ +Source: lcms2 +Section: libs +Priority: optional +Maintainer: GangHeok Kim, Taeksu Shin +Build-Depends: debhelper (>= 7.0.50~), autotools-dev, libjpeg-dev, zlib1g-dev, quilt, libtiff4-dev +Standards-Version: 3.9.2 +Homepage: http://www.littlecms.com/ +#Vcs-Git: git://git.debian.org/collab-maint/liblcms2.git +#Vcs-Browser: http://git.debian.org/?p=collab-maint/liblcms2.git;a=summary + +Package: liblcms2-dev +Section: libdevel +Architecture: any +#Multi-Arch: same +#Pre-Depends: multiarch-support +Depends: liblcms2-2 (= ${binary:Version}), ${misc:Depends} +Description: Little CMS 2 color management library development headers + LittleCMS 2 intends to be a small-footprint color management engine, with + special focus on accuracy and performance. It uses the International Color + Consortium standard (ICC) of color management. Little CMS 2 is a full + implementation of ICC specification 4.2 plus all addendums. It fully supports + all V2 and V4 profiles, including abstract, devicelink and named color + profiles. This package contains the development headers used for building + software that uses Little CMS. + +Package: liblcms2-2 +Section: libs +Architecture: any +#Multi-Arch: same +#Pre-Depends: multiarch-support +Suggests: liblcms2-utils +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Little CMS 2 color management library + LittleCMS 2 intends to be a small-footprint color management engine, with + special focus on accuracy and performance. It uses the International Color + Consortium standard (ICC) of color management. LittleCMS 2 is a full + implementation of ICC specification 4.2 plus all addendums. It fully supports + all V2 and V4 profiles, including abstract, devicelink and named color + profiles. + +Package: liblcms2-utils +Section: utils +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Little CMS 2 color management library + LittleCMS 2 intends to be a small-footprint color management engine, with + special focus on accuracy and performance. It uses the International Color + Consortium standard (ICC) of color management. LittleCMS 2 is a full + implementation of ICC specification 4.2 plus all addendums. It fully supports + all V2 and V4 profiles, including abstract, devicelink and named color + profiles. This package contains additional utilities (jpegicc and tifficc). + +Package: liblcms2-dbg +Section: libdevel +Architecture: any +Priority: extra +Depends: liblcms2-2 (= ${binary:Version}) +Description: Color management library - debugging symbols + Debugging symbols for Little CMS 2 color management library. + lcms is a standalone CMM engine, which deals with the color management. + It implements a fast transformation between ICC profiles. The intention + of it is to be portable across several platforms. + diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..bf40a24 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,43 @@ +Format: http://dep.debian.net/deps/dep5 +Upstream-Name: Little CMS +Source: http://www.littlecms.com/ + +Files: * +Copyright: 1998-2011 Marti Maria Saguer +License: MIT + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + +Files: debian/* +Copyright: 2011 Oleksandr Moskalenko +License: GPL-2+ + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see + . + On Debian systems, the complete text of the GNU General + Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". diff --git a/debian/liblcms2-2.install b/debian/liblcms2-2.install new file mode 100644 index 0000000..d0dbfd1 --- /dev/null +++ b/debian/liblcms2-2.install @@ -0,0 +1 @@ +usr/lib/lib*.so.* diff --git a/debian/liblcms2-2.symbols b/debian/liblcms2-2.symbols new file mode 100644 index 0000000..267ffb2 --- /dev/null +++ b/debian/liblcms2-2.symbols @@ -0,0 +1,367 @@ +liblcms2.so.2 liblcms2-2 #MINVER# + _cms15Fixed16toDouble@Base 2.2+git20110628-2 + _cms8Fixed8toDouble@Base 2.2+git20110628-2 + _cmsAdaptationMatrix@Base 2.2+git20110628-2 + _cmsAdjustEndianess16@Base 2.2+git20110628-2 + _cmsAdjustEndianess32@Base 2.2+git20110628-2 + _cmsAdjustEndianess64@Base 2.2+git20110628-2 + _cmsBuildKToneCurve@Base 2.2+git20110628-2 + _cmsBuildRGB2XYZtransferMatrix@Base 2.2+git20110628-2 + _cmsCalloc@Base 2.2+git20110628-2 + _cmsChain2Lab@Base 2.2+git20110628-2 + _cmsCompileProfileSequence@Base 2.2+git20110628-2 + _cmsComputeInterpParams@Base 2.2+git20110628-2 + _cmsComputeInterpParamsEx@Base 2.2+git20110628-2 + _cmsCreateGamutCheckPipeline@Base 2.2+git20110628-2 + _cmsCreateSubAlloc@Base 2.2+git20110628-2 + _cmsDecodeDateTimeNumber@Base 2.2+git20110628-2 + _cmsDefaultICCintents@Base 2.2+git20110628-2 + _cmsDoubleTo15Fixed16@Base 2.2+git20110628-2 + _cmsDoubleTo8Fixed8@Base 2.2+git20110628-2 + _cmsDupMem@Base 2.2+git20110628-2 + _cmsEncodeDateTimeNumber@Base 2.2+git20110628-2 + _cmsEndPointsBySpace@Base 2.2+git20110628-2 + _cmsFormatterIs8bit@Base 2.2+git20110628-2 + _cmsFormatterIsFloat@Base 2.2+git20110628-2 + _cmsFree@Base 2.2+git20110628-2 + _cmsFreeInterpParams@Base 2.2+git20110628-2 + _cmsGetFormatter@Base 2.2+git20110628-2 + _cmsGetStockOutputFormatter@Base 2.2+git20110628-2 + _cmsGetTagDescriptor@Base 2.2+git20110628-2 + _cmsGetTagTrueType@Base 2.2+git20110628-2 + _cmsGetTagTypeHandler@Base 2.2+git20110628-2 + _cmsICCcolorSpace@Base 2.2+git20110628-2 + _cmsIOPrintf@Base 2.2+git20110628-2 + _cmsLCMScolorSpace@Base 2.2+git20110628-2 + _cmsLinkProfiles@Base 2.2+git20110628-2 + _cmsMAT3eval@Base 2.2+git20110628-2 + _cmsMAT3identity@Base 2.2+git20110628-2 + _cmsMAT3inverse@Base 2.2+git20110628-2 + _cmsMAT3isIdentity@Base 2.2+git20110628-2 + _cmsMAT3per@Base 2.2+git20110628-2 + _cmsMAT3solve@Base 2.2+git20110628-2 + _cmsMalloc@Base 2.2+git20110628-2 + _cmsMallocZero@Base 2.2+git20110628-2 + _cmsOptimizePipeline@Base 2.2+git20110628-2 + _cmsPipelineSetOptimizationParameters@Base 2.2+git20110628-2 + _cmsPluginMalloc@Base 2.2+git20110628-2 + _cmsQuantizeVal@Base 2.2+git20110628-2 + _cmsRead15Fixed16Number@Base 2.2+git20110628-2 + _cmsReadAlignment@Base 2.2+git20110628-2 + _cmsReadCHAD@Base 2.2+git20110628-2 + _cmsReadDevicelinkLUT@Base 2.2+git20110628-2 + _cmsReadFloat32Number@Base 2.2+git20110628-2 + _cmsReadHeader@Base 2.2+git20110628-2 + _cmsReadInputLUT@Base 2.2+git20110628-2 + _cmsReadMediaWhitePoint@Base 2.2+git20110628-2 + _cmsReadOutputLUT@Base 2.2+git20110628-2 + _cmsReadProfileSequence@Base 2.2+git20110628-2 + _cmsReadTypeBase@Base 2.2+git20110628-2 + _cmsReadUInt16Array@Base 2.2+git20110628-2 + _cmsReadUInt16Number@Base 2.2+git20110628-2 + _cmsReadUInt32Number@Base 2.2+git20110628-2 + _cmsReadUInt64Number@Base 2.2+git20110628-2 + _cmsReadUInt8Number@Base 2.2+git20110628-2 + _cmsReadXYZNumber@Base 2.2+git20110628-2 + _cmsRealloc@Base 2.2+git20110628-2 + _cmsReasonableGridpointsByColorspace@Base 2.2+git20110628-2 + _cmsRegisterFormattersPlugin@Base 2.2+git20110628-2 + _cmsRegisterInterpPlugin@Base 2.2+git20110628-2 + _cmsRegisterMemHandlerPlugin@Base 2.2+git20110628-2 + _cmsRegisterMultiProcessElementPlugin@Base 2.2+git20110628-2 + _cmsRegisterOptimizationPlugin@Base 2.2+git20110628-2 + _cmsRegisterParametricCurvesPlugin@Base 2.2+git20110628-2 + _cmsRegisterRenderingIntentPlugin@Base 2.2+git20110628-2 + _cmsRegisterTagPlugin@Base 2.2+git20110628-2 + _cmsRegisterTagTypePlugin@Base 2.2+git20110628-2 + _cmsSearchTag@Base 2.2+git20110628-2 + _cmsSetInterpolationRoutine@Base 2.2+git20110628-2 + _cmsStageAllocIdentityCLut@Base 2.2+git20110628-2 + _cmsStageAllocIdentityCurves@Base 2.2+git20110628-2 + _cmsStageAllocLab2XYZ@Base 2.2+git20110628-2 + _cmsStageAllocLabPrelin@Base 2.2+git20110628-2 + _cmsStageAllocLabV2ToV4@Base 2.2+git20110628-2 + _cmsStageAllocLabV2ToV4curves@Base 2.2+git20110628-2 + _cmsStageAllocLabV4ToV2@Base 2.2+git20110628-2 + _cmsStageAllocNamedColor@Base 2.2+git20110628-2 + _cmsStageAllocPlaceholder@Base 2.2+git20110628-2 + _cmsStageAllocXYZ2Lab@Base 2.2+git20110628-2 + _cmsStageGetPtrToCurveSet@Base 2.2+git20110628-2 + _cmsSubAlloc@Base 2.2+git20110628-2 + _cmsSubAllocDestroy@Base 2.2+git20110628-2 + _cmsTagSignature2String@Base 2.2+git20110628-2 + _cmsVEC3cross@Base 2.2+git20110628-2 + _cmsVEC3distance@Base 2.2+git20110628-2 + _cmsVEC3dot@Base 2.2+git20110628-2 + _cmsVEC3init@Base 2.2+git20110628-2 + _cmsVEC3length@Base 2.2+git20110628-2 + _cmsVEC3minus@Base 2.2+git20110628-2 + _cmsWrite15Fixed16Number@Base 2.2+git20110628-2 + _cmsWriteAlignment@Base 2.2+git20110628-2 + _cmsWriteFloat32Number@Base 2.2+git20110628-2 + _cmsWriteHeader@Base 2.2+git20110628-2 + _cmsWriteProfileSequence@Base 2.2+git20110628-2 + _cmsWriteTypeBase@Base 2.2+git20110628-2 + _cmsWriteUInt16Array@Base 2.2+git20110628-2 + _cmsWriteUInt16Number@Base 2.2+git20110628-2 + _cmsWriteUInt32Number@Base 2.2+git20110628-2 + _cmsWriteUInt64Number@Base 2.2+git20110628-2 + _cmsWriteUInt8Number@Base 2.2+git20110628-2 + _cmsWriteXYZNumber@Base 2.2+git20110628-2 + cmsAdaptToIlluminant@Base 2.2+git20110628-2 + cmsAllocNamedColorList@Base 2.2+git20110628-2 + cmsAllocProfileSequenceDescription@Base 2.2+git20110628-2 + cmsAppendNamedColor@Base 2.2+git20110628-2 + cmsBFDdeltaE@Base 2.2+git20110628-2 + cmsBuildGamma@Base 2.2+git20110628-2 + cmsBuildParametricToneCurve@Base 2.2+git20110628-2 + cmsBuildSegmentedToneCurve@Base 2.2+git20110628-2 + cmsBuildTabulatedToneCurve16@Base 2.2+git20110628-2 + cmsBuildTabulatedToneCurveFloat@Base 2.2+git20110628-2 + cmsCIE2000DeltaE@Base 2.2+git20110628-2 + cmsCIE94DeltaE@Base 2.2+git20110628-2 + cmsCIECAM02Done@Base 2.2+git20110628-2 + cmsCIECAM02Forward@Base 2.2+git20110628-2 + cmsCIECAM02Init@Base 2.2+git20110628-2 + cmsCIECAM02Reverse@Base 2.2+git20110628-2 + cmsCMCdeltaE@Base 2.2+git20110628-2 + cmsChangeBuffersFormat@Base 2.2+git20110628-2 + cmsChannelsOf@Base 2.2+git20110628-2 + cmsCloseIOhandler@Base 2.2+git20110628-2 + cmsCloseProfile@Base 2.2+git20110628-2 + cmsCreateBCHSWabstractProfile@Base 2.2+git20110628-2 + cmsCreateBCHSWabstractProfileTHR@Base 2.2+git20110628-2 + cmsCreateExtendedTransform@Base 2.2+git20110628-2 + cmsCreateGrayProfile@Base 2.2+git20110628-2 + cmsCreateGrayProfileTHR@Base 2.2+git20110628-2 + cmsCreateInkLimitingDeviceLink@Base 2.2+git20110628-2 + cmsCreateInkLimitingDeviceLinkTHR@Base 2.2+git20110628-2 + cmsCreateLab2Profile@Base 2.2+git20110628-2 + cmsCreateLab2ProfileTHR@Base 2.2+git20110628-2 + cmsCreateLab4Profile@Base 2.2+git20110628-2 + cmsCreateLab4ProfileTHR@Base 2.2+git20110628-2 + cmsCreateLinearizationDeviceLink@Base 2.2+git20110628-2 + cmsCreateLinearizationDeviceLinkTHR@Base 2.2+git20110628-2 + cmsCreateMultiprofileTransform@Base 2.2+git20110628-2 + cmsCreateMultiprofileTransformTHR@Base 2.2+git20110628-2 + cmsCreateNULLProfile@Base 2.2+git20110628-2 + cmsCreateNULLProfileTHR@Base 2.2+git20110628-2 + cmsCreateProfilePlaceholder@Base 2.2+git20110628-2 + cmsCreateProofingTransform@Base 2.2+git20110628-2 + cmsCreateProofingTransformTHR@Base 2.2+git20110628-2 + cmsCreateRGBProfile@Base 2.2+git20110628-2 + cmsCreateRGBProfileTHR@Base 2.2+git20110628-2 + cmsCreateTransform@Base 2.2+git20110628-2 + cmsCreateTransformTHR@Base 2.2+git20110628-2 + cmsCreateXYZProfile@Base 2.2+git20110628-2 + cmsCreateXYZProfileTHR@Base 2.2+git20110628-2 + cmsCreate_sRGBProfile@Base 2.2+git20110628-2 + cmsCreate_sRGBProfileTHR@Base 2.2+git20110628-2 + cmsD50_XYZ@Base 2.2+git20110628-2 + cmsD50_xyY@Base 2.2+git20110628-2 + cmsDeleteTransform@Base 2.2+git20110628-2 + cmsDeltaE@Base 2.2+git20110628-2 + cmsDesaturateLab@Base 2.2+git20110628-2 + cmsDetectBlackPoint@Base 2.2+git20110628-2 + cmsDetectTAC@Base 2.2+git20110628-2 + cmsDictAddEntry@Base 2.2+git20110628-2 + cmsDictAlloc@Base 2.2+git20110628-2 + cmsDictDup@Base 2.2+git20110628-2 + cmsDictFree@Base 2.2+git20110628-2 + cmsDictGetEntryList@Base 2.2+git20110628-2 + cmsDictNextEntry@Base 2.2+git20110628-2 + cmsDoTransform@Base 2.2+git20110628-2 + cmsDupNamedColorList@Base 2.2+git20110628-2 + cmsDupProfileSequenceDescription@Base 2.2+git20110628-2 + cmsDupToneCurve@Base 2.2+git20110628-2 + cmsEstimateGamma@Base 2.2+git20110628-2 + cmsEvalToneCurve16@Base 2.2+git20110628-2 + cmsEvalToneCurveFloat@Base 2.2+git20110628-2 + cmsFloat2LabEncoded@Base 2.2+git20110628-2 + cmsFloat2LabEncodedV2@Base 2.2+git20110628-2 + cmsFloat2XYZEncoded@Base 2.2+git20110628-2 + cmsFormatterForColorspaceOfProfile@Base 2.2+git20110628-2 + cmsFormatterForPCSOfProfile@Base 2.2+git20110628-2 + cmsFreeNamedColorList@Base 2.2+git20110628-2 + cmsFreeProfileSequenceDescription@Base 2.2+git20110628-2 + cmsFreeToneCurve@Base 2.2+git20110628-2 + cmsFreeToneCurveTriple@Base 2.2+git20110628-2 + cmsGBDAlloc@Base 2.2+git20110628-2 + cmsGBDFree@Base 2.2+git20110628-2 + cmsGDBAddPoint@Base 2.2+git20110628-2 + cmsGDBCheckPoint@Base 2.2+git20110628-2 + cmsGDBCompute@Base 2.2+git20110628-2 + cmsGetAlarmCodes@Base 2.2+git20110628-2 + cmsGetColorSpace@Base 2.2+git20110628-2 + cmsGetDeviceClass@Base 2.2+git20110628-2 + cmsGetEncodedICCversion@Base 2.2+git20110628-2 + cmsGetHeaderAttributes@Base 2.2+git20110628-2 + cmsGetHeaderCreationDateTime@Base 2.2+git20110628-2 + cmsGetHeaderFlags@Base 2.2+git20110628-2 + cmsGetHeaderManufacturer@Base 2.2+git20110628-2 + cmsGetHeaderModel@Base 2.2+git20110628-2 + cmsGetHeaderProfileID@Base 2.2+git20110628-2 + cmsGetHeaderRenderingIntent@Base 2.2+git20110628-2 + cmsGetNamedColorList@Base 2.2+git20110628-2 + cmsGetPCS@Base 2.2+git20110628-2 + cmsGetPostScriptCRD@Base 2.2+git20110628-2 + cmsGetPostScriptCSA@Base 2.2+git20110628-2 + cmsGetPostScriptColorResource@Base 2.2+git20110628-2 + cmsGetProfileContextID@Base 2.2+git20110628-2 + cmsGetProfileInfo@Base 2.2+git20110628-2 + cmsGetProfileInfoASCII@Base 2.2+git20110628-2 + cmsGetProfileVersion@Base 2.2+git20110628-2 + cmsGetSupportedIntents@Base 2.2+git20110628-2 + cmsGetTagCount@Base 2.2+git20110628-2 + cmsGetTagSignature@Base 2.2+git20110628-2 + cmsGetToneCurveParametricType@Base 2.2+git20110628-2 + cmsGetTransformContextID@Base 2.2+git20110628-2 + cmsGetTransformInputFormat@Base 2.2+git20110628-2 + cmsGetTransformOutputFormat@Base 2.2+git20110628-2 + cmsIT8Alloc@Base 2.2+git20110628-2 + cmsIT8DefineDblFormat@Base 2.2+git20110628-2 + cmsIT8EnumDataFormat@Base 2.2+git20110628-2 + cmsIT8EnumProperties@Base 2.2+git20110628-2 + cmsIT8EnumPropertyMulti@Base 2.2+git20110628-2 + cmsIT8FindDataFormat@Base 2.2+git20110628-2 + cmsIT8Free@Base 2.2+git20110628-2 + cmsIT8GetData@Base 2.2+git20110628-2 + cmsIT8GetDataDbl@Base 2.2+git20110628-2 + cmsIT8GetDataRowCol@Base 2.2+git20110628-2 + cmsIT8GetDataRowColDbl@Base 2.2+git20110628-2 + cmsIT8GetPatchByName@Base 2.2+git20110628-2 + cmsIT8GetPatchName@Base 2.2+git20110628-2 + cmsIT8GetProperty@Base 2.2+git20110628-2 + cmsIT8GetPropertyDbl@Base 2.2+git20110628-2 + cmsIT8GetPropertyMulti@Base 2.2+git20110628-2 + cmsIT8GetSheetType@Base 2.2+git20110628-2 + cmsIT8LoadFromFile@Base 2.2+git20110628-2 + cmsIT8LoadFromMem@Base 2.2+git20110628-2 + cmsIT8SaveToFile@Base 2.2+git20110628-2 + cmsIT8SaveToMem@Base 2.2+git20110628-2 + cmsIT8SetComment@Base 2.2+git20110628-2 + cmsIT8SetData@Base 2.2+git20110628-2 + cmsIT8SetDataDbl@Base 2.2+git20110628-2 + cmsIT8SetDataFormat@Base 2.2+git20110628-2 + cmsIT8SetDataRowCol@Base 2.2+git20110628-2 + cmsIT8SetDataRowColDbl@Base 2.2+git20110628-2 + cmsIT8SetIndexColumn@Base 2.2+git20110628-2 + cmsIT8SetPropertyDbl@Base 2.2+git20110628-2 + cmsIT8SetPropertyHex@Base 2.2+git20110628-2 + cmsIT8SetPropertyMulti@Base 2.2+git20110628-2 + cmsIT8SetPropertyStr@Base 2.2+git20110628-2 + cmsIT8SetPropertyUncooked@Base 2.2+git20110628-2 + cmsIT8SetSheetType@Base 2.2+git20110628-2 + cmsIT8SetTable@Base 2.2+git20110628-2 + cmsIT8SetTableByLabel@Base 2.2+git20110628-2 + cmsIT8TableCount@Base 2.2+git20110628-2 + cmsIsCLUT@Base 2.2+git20110628-2 + cmsIsIntentSupported@Base 2.2+git20110628-2 + cmsIsMatrixShaper@Base 2.2+git20110628-2 + cmsIsTag@Base 2.2+git20110628-2 + cmsIsToneCurveDescending@Base 2.2+git20110628-2 + cmsIsToneCurveLinear@Base 2.2+git20110628-2 + cmsIsToneCurveMonotonic@Base 2.2+git20110628-2 + cmsIsToneCurveMultisegment@Base 2.2+git20110628-2 + cmsJoinToneCurve@Base 2.2+git20110628-2 + cmsLCh2Lab@Base 2.2+git20110628-2 + cmsLab2LCh@Base 2.2+git20110628-2 + cmsLab2XYZ@Base 2.2+git20110628-2 + cmsLabEncoded2Float@Base 2.2+git20110628-2 + cmsLabEncoded2FloatV2@Base 2.2+git20110628-2 + cmsLinkTag@Base 2.2+git20110628-2 + cmsMD5computeID@Base 2.2+git20110628-2 + cmsMLUalloc@Base 2.2+git20110628-2 + cmsMLUdup@Base 2.2+git20110628-2 + cmsMLUfree@Base 2.2+git20110628-2 + cmsMLUgetASCII@Base 2.2+git20110628-2 + cmsMLUgetTranslation@Base 2.2+git20110628-2 + cmsMLUgetWide@Base 2.2+git20110628-2 + cmsMLUsetASCII@Base 2.2+git20110628-2 + cmsMLUsetWide@Base 2.2+git20110628-2 + cmsNamedColorCount@Base 2.2+git20110628-2 + cmsNamedColorIndex@Base 2.2+git20110628-2 + cmsNamedColorInfo@Base 2.2+git20110628-2 + cmsOpenIOhandlerFromFile@Base 2.2+git20110628-2 + cmsOpenIOhandlerFromMem@Base 2.2+git20110628-2 + cmsOpenIOhandlerFromNULL@Base 2.2+git20110628-2 + cmsOpenIOhandlerFromStream@Base 2.2+git20110628-2 + cmsOpenProfileFromFile@Base 2.2+git20110628-2 + cmsOpenProfileFromFileTHR@Base 2.2+git20110628-2 + cmsOpenProfileFromIOhandlerTHR@Base 2.2+git20110628-2 + cmsOpenProfileFromMem@Base 2.2+git20110628-2 + cmsOpenProfileFromMemTHR@Base 2.2+git20110628-2 + cmsOpenProfileFromStream@Base 2.2+git20110628-2 + cmsOpenProfileFromStreamTHR@Base 2.2+git20110628-2 + cmsPipelineAlloc@Base 2.2+git20110628-2 + cmsPipelineCat@Base 2.2+git20110628-2 + cmsPipelineCheckAndRetreiveStages@Base 2.2+git20110628-2 + cmsPipelineDup@Base 2.2+git20110628-2 + cmsPipelineEval16@Base 2.2+git20110628-2 + cmsPipelineEvalFloat@Base 2.2+git20110628-2 + cmsPipelineEvalReverseFloat@Base 2.2+git20110628-2 + cmsPipelineFree@Base 2.2+git20110628-2 + cmsPipelineGetPtrToFirstStage@Base 2.2+git20110628-2 + cmsPipelineGetPtrToLastStage@Base 2.2+git20110628-2 + cmsPipelineInputChannels@Base 2.2+git20110628-2 + cmsPipelineInsertStage@Base 2.2+git20110628-2 + cmsPipelineOutputChannels@Base 2.2+git20110628-2 + cmsPipelineSetSaveAs8bitsFlag@Base 2.2+git20110628-2 + cmsPipelineStageCount@Base 2.2+git20110628-2 + cmsPipelineUnlinkStage@Base 2.2+git20110628-2 + cmsPlugin@Base 2.2+git20110628-2 + cmsReadRawTag@Base 2.2+git20110628-2 + cmsReadTag@Base 2.2+git20110628-2 + cmsReverseToneCurve@Base 2.2+git20110628-2 + cmsReverseToneCurveEx@Base 2.2+git20110628-2 + cmsSaveProfileToFile@Base 2.2+git20110628-2 + cmsSaveProfileToIOhandler@Base 2.2+git20110628-2 + cmsSaveProfileToMem@Base 2.2+git20110628-2 + cmsSaveProfileToStream@Base 2.2+git20110628-2 + cmsSetAdaptationState@Base 2.2+git20110628-2 + cmsSetAlarmCodes@Base 2.2+git20110628-2 + cmsSetColorSpace@Base 2.2+git20110628-2 + cmsSetDeviceClass@Base 2.2+git20110628-2 + cmsSetEncodedICCversion@Base 2.2+git20110628-2 + cmsSetHeaderAttributes@Base 2.2+git20110628-2 + cmsSetHeaderFlags@Base 2.2+git20110628-2 + cmsSetHeaderManufacturer@Base 2.2+git20110628-2 + cmsSetHeaderModel@Base 2.2+git20110628-2 + cmsSetHeaderProfileID@Base 2.2+git20110628-2 + cmsSetHeaderRenderingIntent@Base 2.2+git20110628-2 + cmsSetLogErrorHandler@Base 2.2+git20110628-2 + cmsSetPCS@Base 2.2+git20110628-2 + cmsSetProfileVersion@Base 2.2+git20110628-2 + cmsSignalError@Base 2.2+git20110628-2 + cmsSliceSpace16@Base 2.2+git20110628-2 + cmsSliceSpaceFloat@Base 2.2+git20110628-2 + cmsSmoothToneCurve@Base 2.2+git20110628-2 + cmsStageAllocCLut16bit@Base 2.2+git20110628-2 + cmsStageAllocCLut16bitGranular@Base 2.2+git20110628-2 + cmsStageAllocCLutFloat@Base 2.2+git20110628-2 + cmsStageAllocCLutFloatGranular@Base 2.2+git20110628-2 + cmsStageAllocIdentity@Base 2.2+git20110628-2 + cmsStageAllocMatrix@Base 2.2+git20110628-2 + cmsStageAllocToneCurves@Base 2.2+git20110628-2 + cmsStageData@Base 2.2+git20110628-2 + cmsStageDup@Base 2.2+git20110628-2 + cmsStageFree@Base 2.2+git20110628-2 + cmsStageInputChannels@Base 2.2+git20110628-2 + cmsStageNext@Base 2.2+git20110628-2 + cmsStageOutputChannels@Base 2.2+git20110628-2 + cmsStageSampleCLut16bit@Base 2.2+git20110628-2 + cmsStageSampleCLutFloat@Base 2.2+git20110628-2 + cmsStageType@Base 2.2+git20110628-2 + cmsTagLinkedTo@Base 2.2+git20110628-2 + cmsTempFromWhitePoint@Base 2.2+git20110628-2 + cmsTransform2DeviceLink@Base 2.2+git20110628-2 + cmsUnregisterPlugins@Base 2.2+git20110628-2 + cmsWhitePointFromTemp@Base 2.2+git20110628-2 + cmsWriteRawTag@Base 2.2+git20110628-2 + cmsWriteTag@Base 2.2+git20110628-2 + cmsXYZ2Lab@Base 2.2+git20110628-2 + cmsXYZ2xyY@Base 2.2+git20110628-2 + cmsXYZEncoded2Float@Base 2.2+git20110628-2 + cmsfilelength@Base 2.2+git20110628-2 + cmsstrcasecmp@Base 2.2+git20110628-2 + cmsxyY2XYZ@Base 2.2+git20110628-2 diff --git a/debian/liblcms2-dev.docs b/debian/liblcms2-dev.docs new file mode 100644 index 0000000..30d29de --- /dev/null +++ b/debian/liblcms2-dev.docs @@ -0,0 +1 @@ +doc/* diff --git a/debian/liblcms2-dev.install b/debian/liblcms2-dev.install new file mode 100644 index 0000000..e7161ab --- /dev/null +++ b/debian/liblcms2-dev.install @@ -0,0 +1,4 @@ +usr/include/* +#usr/lib/*/*.la +usr/lib/*.so +usr/lib/pkgconfig diff --git a/debian/liblcms2-utils.install b/debian/liblcms2-utils.install new file mode 100644 index 0000000..3f9156d --- /dev/null +++ b/debian/liblcms2-utils.install @@ -0,0 +1,2 @@ +usr/share/man +usr/bin/* diff --git a/debian/liblcms2-utils.manpages b/debian/liblcms2-utils.manpages new file mode 100644 index 0000000..eb2f944 --- /dev/null +++ b/debian/liblcms2-utils.manpages @@ -0,0 +1,3 @@ +debian/man/linkicc.1 +debian/man/psicc.1 +debian/man/transicc.1 diff --git a/debian/man/linkicc.1 b/debian/man/linkicc.1 new file mode 100644 index 0000000..88b8ed8 --- /dev/null +++ b/debian/man/linkicc.1 @@ -0,0 +1,89 @@ +.\"Shiju P. Nair September 30, 2004 +.TH LINKICC 1 "September 30, 2004" +.SH NAME +linkicc - little cms device link generator. +.SH SYNOPSIS +.B linkicc +.RI [ options ] " " +.SH DESCRIPTION +lcms is a standalone CMM engine, which deals with the color management. +It implements a fast transformation between ICC profiles. +.B linkicc +is little cms device link generator. +.P +Links two or more profiles into a single devicelink profile. +Colorspaces must be paired except Lab/XYZ, that can be interchanged. +.SH OPTIONS +.TP +.B \-8 +Creates 8-bit devicelink. +.TP +.B \-b +Black point compensation. +.TP +.B \-c <0,1,2,3> +Precission (0=LowRes, 1=Normal, 2=Hi-res). [defaults to 1] +.TP +.BI \-d\ description +Description text (quotes can be used). +.TP +.B \-h <0,1,2,3> +Show summary of options and examples. +.TP +.BI \-i\ profile +Input profile (defaults to sRGB). +.TP +.B -k <0..400> +Ink-limiting in % (CMYK only) +.TP +.BI \-o\ profile +Output devicelink profile. [defaults to 'devicelink.icm'] +.TP +.B \-t <0,1,2,3> +Intent (0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute). +.TP +.B \-x +Creatively, guess deviceclass of resulting profile. +.TP +.nf +Built-in profiles: + *Lab -- D50-based CIEL*a*b (PCS) + *XYZ -- CIE XYZ (PCS) + *sRGB -- sRGB color space + *Gray22- Monochrome of Gamma 2.2 + *Lin2222- CMYK linearization of gamma 2.2 on each channel +.fi +.SH EXAMPLES +.nf +To create 'devicelink.icm' from a.icc to b.icc: + linkicc a.icc b.icc + +To create 'out.icc' from sRGB to cmyk.icc: + linkicc -o out.icc *sRGB cmyk.icc + +To create a sRGB input profile working in Lab: + linkicc -x -o sRGBLab.icc *sRGB *Lab + +To create a XYZ -> sRGB output profile: + linkicc -x -o sRGBLab.icc *XYZ *sRGB + +To create a abstract profile doing softproof for cmyk.icc: + linkicc -t1 -x -o softproof.icc *Lab cmyk.icc cmyk.icc *Lab + +To create a 'grayer' sRGB input profile: + linkicc -x -o grayer.icc *sRGB gray.icc gray.icc *Lab + +To embed ink limiting into a cmyk output profile: + linkicc -x -o cmyklimited.icc -k 250 cmyk.icc *Lab +.fi +.SH NOTES +For suggestions, comments, bug reports etc. send mail to +info@littlecms.com. +.SH SEE ALSO +.BR jpgicc (1), +.BR tificc (1), +.BR psicc (1), +.BR transicc (1), +.SH AUTHOR +This manual page was written by Shiju p. Nair , +for the Debian project. diff --git a/debian/man/psicc.1 b/debian/man/psicc.1 new file mode 100644 index 0000000..269b856 --- /dev/null +++ b/debian/man/psicc.1 @@ -0,0 +1,40 @@ +.\"Shiju P. Nair September 30, 2004 +.TH PSICC 1 "September 30, 2004" +.SH NAME +psicc - little cms PostScript converter. +.SH SYNOPSIS +.B psicc +.RI [ options ] +.SH DESCRIPTION +lcms is a standalone CMM engine, which deals with the color management. +It implements a fast transformation between ICC profiles. +.B psicc +is little cms PostScript converter. +.SH OPTIONS +.TP +.B \-b +Black point compensation (CRD only). +.TP +.BI \-i\ profile +Input profile: Generates Color Space Array (CSA). +.TP +.BI \-o\ profile +.TP +Output profile: Generates Color Rendering Dictionary(CRD). +.TP +.B \-t <0,1,2,3> +Intent (0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute). +.TP +.B \-u +Do NOT generate resource name on CRD. +.SH NOTES +For suggestions, comments, bug reports etc. send mail to +info@littlecms.com. +.SH SEE ALSO +.BR jpgicc (1), +.BR tificc (1), +.BR linkicc (1), +.BR transicc (1), +.SH AUTHOR +This manual page was written by Shiju p. Nair , +for the Debian project. diff --git a/debian/man/transicc.1 b/debian/man/transicc.1 new file mode 100644 index 0000000..7e2952a --- /dev/null +++ b/debian/man/transicc.1 @@ -0,0 +1,60 @@ +.\"Shiju P. Nair September 30, 2004 +.TH TRANSICC 1 "September 30, 2004" +.SH NAME +transicc - little cms ColorSpace conversion calculator. +.SH SYNOPSIS +.B transicc +.RI [ options ] +.SH DESCRIPTION +lcms is a standalone CMM engine, which deals with the color management. +It implements a fast transformation between ICC profiles. +.B transicc +is lcms ColorSpace conversion calculator. +.SH OPTIONS +.TP +.B \-% +use percent % of ink. +.TP +.B \-b +Black point compensation. +.TP +.B \-c <0,1,2,3> +Precalculates transform. (0=Off, 1=Normal, 2=Hi-res, 3=LoRes) [defaults to 1] +.TP +.BI \-i\ profile +Input profile (defaults to sRGB). +.TP +.B \-l +Transform by device-link profile. +.TP +.B \-n +Terse output, intended for pipe usage. +.TP +.BI \-o\ profile +.TP +Output profile (defaults to sRGB). +.TP +.B \-t <0,1,2,3> +Intent (0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute). +.TP +.B \-v +Verbose. +.TP +.B \-w +Use 16 bits. +.TP +.B \-x +Hexadecimal. +.TP +You can use '*Lab' and '*xyz' as built-in profiles. +.SH NOTES +For suggestions, comments, bug reports etc. send mail to +info@littlecms.com. +.SH SEE ALSO +.BR jpgicc (1), +.BR tificc (1), +.BR psicc (1), +.BR linkicc (1), +.SH AUTHOR +This manual page was written by Shiju p. Nair , +for the Debian project. diff --git a/debian/patches/lcms-endian.patch b/debian/patches/lcms-endian.patch new file mode 100644 index 0000000..2909a8f --- /dev/null +++ b/debian/patches/lcms-endian.patch @@ -0,0 +1,15 @@ +--- include/lcms2.h.orig 2010-05-18 16:11:48.852037802 +0200 ++++ include/lcms2.h 2010-05-18 16:12:22.116041439 +0200 +@@ -30,8 +30,10 @@ + + // ********** Configuration toggles **************************************** + +-// Uncomment this one if you are using big endian machines +-// #define CMS_USE_BIG_ENDIAN 1 ++#include ++#if __BYTE_ORDER == __BIG_ENDIAN ++#define USE_BIG_ENDIAN 1 ++#endif + + // Uncomment this one if your compiler/machine does NOT support the + // "long long" type. diff --git a/debian/patches/lcms2-ocloexec.patch b/debian/patches/lcms2-ocloexec.patch new file mode 100644 index 0000000..91c46b1 --- /dev/null +++ b/debian/patches/lcms2-ocloexec.patch @@ -0,0 +1,40 @@ +Index: src/cmscgats.c +=================================================================== +--- src/cmscgats.c.orig ++++ src/cmscgats.c +@@ -836,7 +836,7 @@ void InSymbol(cmsIT8* it8) + return; + } + +- FileNest->Stream = fopen(FileNest->FileName, "rt"); ++ FileNest->Stream = fopen(FileNest->FileName, "rte"); + if (FileNest->Stream == NULL) { + + SynError(it8, "File %s not found", FileNest->FileName); +@@ -1670,7 +1670,7 @@ cmsBool CMSEXPORT cmsIT8SaveToFile(cmsHA + + memset(&sd, 0, sizeof(sd)); + +- sd.stream = fopen(cFileName, "wt"); ++ sd.stream = fopen(cFileName, "wte"); + if (!sd.stream) return FALSE; + + for (i=0; i < it8 ->TablesCount; i++) { +@@ -2178,7 +2178,7 @@ cmsBool IsMyFile(const char* FileName) + cmsUInt32Number Size; + cmsUInt8Number Ptr[133]; + +- fp = fopen(FileName, "rt"); ++ fp = fopen(FileName, "rte"); + if (!fp) { + cmsSignalError(0, cmsERROR_FILE, "File '%s' not found", FileName); + return FALSE; +@@ -2256,7 +2256,7 @@ cmsHANDLE CMSEXPORT cmsIT8LoadFromFile( + if (!hIT8) return NULL; + + +- it8 ->FileStack[0]->Stream = fopen(cFileName, "rt"); ++ it8 ->FileStack[0]->Stream = fopen(cFileName, "rte"); + + if (!it8 ->FileStack[0]->Stream) { + cmsIT8Free(hIT8); diff --git a/debian/patches/lcms2-visibility.patch b/debian/patches/lcms2-visibility.patch new file mode 100644 index 0000000..f32173f --- /dev/null +++ b/debian/patches/lcms2-visibility.patch @@ -0,0 +1,16 @@ +--- src/lcms2_internal.h.orig ++++ src/lcms2_internal.h +@@ -37,6 +37,7 @@ + // assert macro is part of C99 as per 7.2 + #include + ++#pragma GCC visibility push(hidden) + // Some needed constants + #ifndef M_PI + # define M_PI 3.14159265358979323846 +@@ -625,4 +626,5 @@ cmsBool _cmsBuildRGB2XYZtransferMatrix + + + #define _lcms_internal_H ++#pragma GCC visibility pop + #endif diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..912e1e5 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1,4 @@ +lcms-endian.patch +lcms2-ocloexec.patch +lcms2-visibility.patch + diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..9ff45c8 --- /dev/null +++ b/debian/rules @@ -0,0 +1,48 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +export DH_VERBOSE=1 +include /usr/share/quilt/quilt.make + +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) +override_dh_auto_configure: + dh_auto_configure -- --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) --prefix=/usr --disable-static + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + ./configure --prefix=/usr --disable-static + touch config.status + + dh_clean + $(MAKE) clean + -rm -rf config.log \ + config.status +# testbed/aRGBlcms2.icc \ +# testbed/bchslcms2.icc \ +# testbed/glablcms2.icc \ +# testbed/graylcms2.icc \ +# testbed/labv2lcms2.icc \ +# testbed/labv4lcms2.icc \ +# testbed/lcms2cmyk.icc \ +# testbed/limitlcms2.icc \ +# testbed/linlcms2.icc \ +# testbed/nullcms2.icc \ +# testbed/sRGBlcms2.icc \ +# testbed/xyzlcms2.icc \ +# config.log \ +# config.status + touch config.status + + +override_dh_auto_test: + +%: + dh $@ diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..a318e21 --- /dev/null +++ b/debian/watch @@ -0,0 +1,10 @@ +# Example watch control file for uscan +# Rename this file to "watch" and then you can run the "uscan" command +# to check for upstream updates and more. +# See uscan(1) for format + +# Compulsory line, this is a version 3 file +version=3 + +# Uncomment to find new files on sourceforge, for devscripts >= 2.9 +http://sf.net/lcms/lcms2-(.*)\.tar\.gz diff --git a/depcomp b/depcomp new file mode 100755 index 0000000..11e2d3b --- /dev/null +++ b/depcomp @@ -0,0 +1,522 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2004-05-31.23 + +# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit 0 + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit 0 + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # Dependencies are output in .lo.d with libtool 1.4. + # With libtool 1.5 they are output both in $dir.libs/$base.o.d + # and in $dir.libs/$base.o.d and $dir$base.o.d. We process the + # latter, because the former will be cleaned when $dir.libs is + # erased. + tmpdepfile1="$dir.libs/$base.lo.d" + tmpdepfile2="$dir$base.o.d" + tmpdepfile3="$dir.libs/$base.d" + "$@" -Wc,-MD + else + tmpdepfile1="$dir$base.o.d" + tmpdepfile2="$dir$base.d" + tmpdepfile3="$dir$base.d" + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + elif test -f "$tmpdepfile2"; then + tmpdepfile="$tmpdepfile2" + else + tmpdepfile="$tmpdepfile3" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/doc/LittleCMS2.3 API.pdf b/doc/LittleCMS2.3 API.pdf new file mode 100755 index 0000000000000000000000000000000000000000..ec179579dcb9de9d9960bd89ceddd51f943ff6a5 GIT binary patch literal 1129599 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�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 z z40P?an41}Y6h1zJAJ)bGpgzs*^^&uYPMKTXSrYmJ>wc}*r6d;M|2)!=3|AP(F zvYVJ&!#ju4kHVBU6pZZ{6Yk8dua)VO#c(QOtlY(_uB)|xya75nqM{lJ&pbBBid9bk z8Ra3Ah&w78o!kn(aON#~?|xwN12ab=kIU+qR7^TU}O{ zZQHIcn_aeT+g-ZVd+&4Z`R4BL%tYKXF%k1KGk;{{id>oR!x!&CYr{Su|C$S`i~ucqFdzkjo4g@X&WPFzt6yldmdaetu&ip*{M>_%S|sC@|I@ zS5d%@#w^r?*l@swak9eVmp5|cKQ#}gnuz~%4*TiKybT%=5{4Xbo3=;m+Yc`J(-nisK&ti7UXo|?s=Q|_K8i%@3SfBG z0a`LxRU#=Z<24yVXL3MmYuYQIe6JATS9AVHy4QHtm2}swzibQ5x`^{$y9h>iG4QD>z*yt8QSg>YP6(l z+HF2ch{QiGPVAJq|5+3rfNth|>9=pA9_NJLw;vNZG_hv-E0I)8N@g;hO|R#6jwIo9 zXd!X+n+jx#vNy^PDBU^8i24~ac(|7a&#x>i^7Rvx%pzYLg0dJyeegN!SnxG}h4dzrE_o`r1#t$D(7VRo-^dFZ&&Xp?KNFx$g$#y;(zQyGFS#Ht+_Uv>w`!B3Y7r=onuJCX#){Yrq0 zpX}7vfo31`ScVhiGa!WcM)Za5ON#Q$O2(RsIDaEk4u;+$8mHEqPS};lFQ=ccFPNAnbBvWL%%|%Vaz=b3Fpf{i=QG)IJ4-O zOAk4Vy^CP!LrOeR0Aq<$b8ebWTyXdhVs_e7RDea0Bz!B_z|` zD3x`sJ(7MjyK*G!-x!O~yT7gg-S=iFjfS;T-M+|sFhoceyr0&ZqITya{h^$0hB@nf zuuw%~h2$!Ww((33x#H<4yVE5G{tIiqVU~%~&Q>nTxkeeJ72~U70M?FuXED`f=r9Vy z>PB9S;-!8&o>-#NKtRIb>zKefcOkITxf!(a(=v?vp4oImc53sfnZl`Yem~z$o_KF% zo51;9E|tPEnbFsz!8W_$dmyqV==_K@7Q>yry7^WwBL*@N#EElH)3qLFX;xx!2h zClg;H1-MR3J`1d;d*?lVntJ}9=*@I zhXgwWo#%DyaEt~;J|eG?gn!4<^Tmj2%!WFdo2HdK??-52Ipo@7MM%{MDYPqowp=(f zoB&^2g&RGVB*Z~I19KpmXU;z`e;ahM1 zo-1=6v+Z_3zWuwmIo#PbCIF7#fm5U{TaHb6)-wC;T5M)rPk&!W-7QoitI?$1ROG$c zy!$+Z%JNnh;IbFdwE6f#2;f>u7}3%)!mRoNQiZ+xrn6cvG*Dq*&UE3qi%Udh91!@KoC;oJg?V zXURy=}HL`{AZ*tV;X+K%66zTO2p8ZFjIQ6mx36J&`1WAg# zQ$k5GjxPQyv!Sktq-f(Tr{SXZW`oJtY90j_|6r#H_zi$@TQU?YrD6?bu~ zmwkXgYEQ|}5ocXro5Uytzw0oL)>prcW_BuGBPyd&5>=Z$@_Xy7z3=^4(q}57JP1qV zfDWNLw9B~jvS=9dFvHt@guG4&@fGaRKT(AW#xgE6WpFrUrPh#SM@SP1LwAOm$Yj}= zI33(Yoy`;&Yd}5(S~7DvCaxD(6)-`~@C+HbVo!G>iwi}va*=19F5R_qjiHpdC9p*- zw8?XAhwwVfgFu|8)$*ClB%2BgFEj`9@j!b2li~3d5CvRY8!pjS5Vq^UKDB1sg$n77iH`q8B{?)-9u8+@&#m-#S^%U#+*y;I+_?_45?bkKlb*V#LiLk|wIp^&lwW}TBQ69y$26MGGirvcB3o zXsE;_Gvq}z$sSJQ$LVy?=B9!KQT5$g5W}w?bYMCh1|&G9mR4)c}qSDJMT88^Byxt#gHgy)EN}cELVIADB2{J|sdx4(p9xkv|182V?RT3DB zyIRn1cFMXdS#Kzhq!U`Q?vK03*5~B+o69t6R`x6&wg-0YQCeJ;^!)5yO39=lHA(gq z2PzQS3#at-kM#WMKhD~+0~!OP!oStL2bX=tWl4|0wyic@wBJ@z@MuCukPJP*9#;|+)uu~}iM3h7)NQ^B*+OHadLy5AObO}No z8I$>jHabjaD}*YJT4QN)!r=w%86io}c@tp>vM<{h*ja3c!iVQq2FllW#(00PTWvnqlO3n^sHuN7&Qv*4*4G4IT!8hEHGj&?j-bc;?Ku4}7ZHqFmw-Bx4$0de zEE_8|hOTg<>3trMn@!EmZyezdA={ClDiVi;flUh9gywn#)OsI~RqZ|5m)$F#-&#_l zC;N2ff(p*yvWXf2MMlkkgBJI{Be|gi(qSQiC;4mxV!;Q#QK;qI1!S5u0+pfE1d3PK1jOO*3_+Wt;mgM8N zwZWj&s(PkH430`oGVF_x3VGWZd=XK5vc;~7x~R^N;)nM@7?}1|CY1%L;o;8yIm|t-aHNvG@6?ch zLoX)j`Q3NRLA|xC0WRG8qx2pDK}a?SR{bz8jEg? z(BAte8gIp5_NImq{&;g1hs)k#bFkX%2$)a3HQ~t%akOcu^@;RB7%X+ZAB`>a2WIVZ zQODyR5hUCe+wumPis5SOyrR!H=sP{)53V~sxT$V84HTEC3spYXtEw6CLQ=WTi;~*R z_{#tdK;W1;`V5*$$lUF$ zT~rn=?~92BexhWCRQ71RlQi*XAN@m1U9@IWq>0iQnOh#3yk>=Q`32J&Yjf zFLmN)MAA;E!HoO6!mh$+Z6G%MCq!6#b>Vp__s)ZTY z^2LEx2|-A^$NdW$2K1P9!ZWlgFrLNz_Dzy-k;hpv!OV3|lm(&V^)vaO3z4uFILSIP zw`%HzHe)6=)nK2_avHwhFV~49JN<+xHaQ}P9-^QY=Bahp9WmtqRT6fR{e9=fp6P~e zZ4;#xaGDOBejx#C5JNdQ5iUqte~GUVQ1caFzu^Ubc{;_(dA!iyD&4;1<3Lo9+M(;0 zd%W$_AyEMlAP^Sr@#8W_w9(xuHov3MB?^(6fp4!8rsDPNTO^V1Sj|}Un#j90xby0j zQP+|}W5-YN{0W@gA?(y4h|u|t#N7G&>JR>L^~a^w+q}ex+5)6?a$mlmrLO@x4jl0w zUcI?l&F=#Mw_F?@6(1~MP^hjq-<2GdUFXea#q54yX;)Hs1SrCY$=xqD`@Y)E$iP=N z+dCM;dXkAQ5aZxz3~{G@86clIWJpN)Qoo{b{j<63BpXYM8h?biZFb z!mhl_nrwbU9u<79V`)ujH;rDfaWf+e_idXw3YMfhW}=gD z*)$DjsgA>Nv@EXmLLnlS9@;`0LxFItn!*3b_gpTgqlR^LLRqROKH5)XXN@0jW(X&2 zcs_V&EvraK_nJ{aP`SCV16Gp!8&r*0=T(mVN@)R`_?S#3dx9;y60;NB)6x#`vMr!_ zCqFs$^_<&T&t2cD-!%I0O|X~W{0sZWb3{`0btK#^jG8yVBi~d(V758avEH;3(t!Z! zGU_c7?2PTqN~_r7sMJj$^?IP7IzC$zZ{-a>2@Sd=RzJ;ZzUzi`6?3k#ztZ}B#Vy71 zIw=>|1hR^Xu*Vq3IxQGvVss)=Y!6+oQ#X@<+vZe{p~XWvqZSMmgSMKgW-?{0q@icJ zqnQ<3E}}~Ty{cduH|pRp=4+n?S}@y84!yb@5jpGFL-#ES?$4~^iAK>Dy{`RSjM5}F z<#11KRr{^ZDea)CqDWj{F{Lm=A2Owf!_ZCIQcuk{2q2- zRv0)efQ@EfeiP_HyzDd`OW`KbjIdY1;L_R9?e@hWhgm-dybIt?7-86-2SK%2bbE5k z^F*e8nx;}IEwJ4M1aHEgNuzPj=o+iL0`-(}5kd;7!3G3hhm|BKE&4_uRf<1Hy9i2C#aKaU=i(%EFxSzp*9i@OhL-Pj~z5 zN>ZnM@n@m}@kR=qAe$Lb1npq#Kr1{q)q)-9W-EI1uPMt@R?~ba$+$1DHoR?T?k|@t z?Q_+_zdjCOCNV80E113tY?ixsS}skk+gyyt@}>3F-&CZ1e6c^+W`S)7sYT_hyBQv_?0UT^cL!Jm-3@0Ch<(KXujf}QJ2Dh;`m#Jb za7hkuQxye%fnx1@fAJWm5Lpbr*?W*l5NvMP zHFAU7@54FUcRf+dUcCkKmMAVzRScqn_J>VCK9CUvso8NxO9-{PhD-c9y?ZQTvc^U& z7WRe3q>K(@4ec{ukT5iKcV>bDi5sl3+pc)Vf)Yb-O~w|N0v8^8!o>sB7+*UA=Qoi;>&op_Jg9)L6G+<4Cnuk+{UWig>Ye5wQH4WF z^ObYVErfV`tE5dyR&vH7?2aOaLD?k3&{Nd;y`Ro?HYKL0!xI=BjYbQct&Xa}m(4$t zt}+shxOpwcBuB41%KULLD_=R`z-nsH>8Jfu2f(GV*)x=EP3&jmz$5K3$1)mp7{|rE zIoVI>V^gkwVYY`cZP20o$~U;F_1Z9DK~`vCzQyD-n;L^A__`=|GpL^YgwIc_?68w` z3^=Qyq$x(fohrGTLx#`L=_P$QFhi3W6Ps+No>MoKWRF+F53js}>L<+Z}NM|C)%BK|Sdj8^EtV13cx58?I^DaMs@V zS&s}Y*Cd_OJ60_fi7IfiCDJW(%Cimra?;Ff`BdmaT2kfgZ25@l zRwqHQMD{`_Irbl2rjY!q2r366NGzgI1bGNkghJ8Uww^PLIE~)&a8q=f;-1|>1wKt} zxLCS%!$-{9BfUb09~{P<|+)Dn$fMM{H9~=QJ)`= z_inOon=f(mAt0Ut`9V~UUZk2A?IVuou6h7S?gGtNbz982fC*r)dOt?4djTAWS0K63 z99dGRl{QBp*W#VG;tHKcO7wU{vEnh3@FgXRI?g(&ldm&bOk2Ll zKy1Lo=ShU9I^e5gZt(ee0P-HhuC6*~pyn%JZmybUi%Q%e=>r%9i`o3$x%_UP`L7HN z3;kbhH2+{=IR2z1{v+)){~J6W|0tgMXSRNIP`{$x}H5i+D@=GpC8H`0i!)a&UcxThMC zsYs+~Q)O9wy4GQ@;HD<56j9QYfg?rrCOO`BBaYnw{f?Eeyn$g+6C;61M7U^yJD`xH-l zXZDlxmHvtYaik<%3qlvuCkH3%XVSKeOGr!v?r@rg%uoLk*#u!=CD_HlZf`e*{&CrEX?NFetD37TWf!;>}D9{Luh7*ccuN7)vG`bEv8kR_%;GQ%hkt3IaP?UBw>g zo=WNG{+&ZmZWc~Y#9CU5f_kgz;EM1Rr|r0kc}sR|=pTU`Z;N!G`4sd;595PB5@xm_B`pquXl0SE0H)=+XPTe;O0lN$o zwm5{#N;l9YZY+H{{y=i4bi1-%(6ykA_ie3<`-1v#poEETT4&TH#X=MM=q(w1B(oPk2UngwQ1=#P@=UdX!hbwo8CK{}OTowD4}kv;!k zU*Aw)C?ZN5#8pG)h;6Stp-;;uuY#cYNXEB!(_!11yP3L$tf9L)rM$X=g`6Csnx3Bk zKe5gv6Z@{*H;&A%^lb-r0YS93AgRp!XV0ltSv2>$9k_gtZO&VaWz%^s!R zk4JnDkS}4?KP5uQ{PAmr?x|q|u}o!8v)I^c8_o5D2;N_PC!P`v)pesV>-HMaS&Y@d zXi;NCem|Kd4LU=Ps0Hwnxjs?p#KVd(Ky zT5g<8yFuS&gZRD-w^y`8?CC;f8i6v*hAOEO-0gE)(~Wv`WfRJd&%NnR|nZs18D22*{qU8Nx zffaRj(k?^O+NSvn(^Ur?)m?e$5-+0inuAx=hTnAMU^^&g-^7fYGI(}BRe){}wl1J&jmnbpBR}Qn^rZg{t zJy&tLMuS_(po4sF1Pw1ET_g#B-D#+;=Jyz_O<${89d2OtrwJg|Xmj3Z^!o1k2!8_B zDDoA#MFVjH3)03%%<4Gi&RNymGp`%9RBD^~OoNF>0wu6*yJtfs*R{cAZAi-LtanwPycIa-Ag%Kv6@;fT8kIk~I$Bx+2*VXM3ihsn4zh1Z?d(0mHF+BZqhPEZl4!ib z7fs1J`qv<>kfsT!_1FnO1^_NH(Sa}5{V%L%Uh%Q0mv5iH03CR~`SHH!K|UqyKBQ6& z+6}-_1CZw|vXflc(r!mxHRFr65`5ijKynPjTtGHl+}@c75<#X5PeFp3*Ax~J7%zl@ zP$+0L{vDn90zlxMBJ9plVqUKRMeV<@`|%&wy<%JO?nUjYtV#cxL$eLM(lQV(oo3@v z3Cce?o`W=8LCh)i$bmrIdDNZZGsVFz(a)IiowJw~#R@onntqsB2TnrGkwgZYQrlGl zBQ?JT3dNJGk#h!Ga@p#!)t~}SXI^|%9}jYsh3=k>5KokAI3k5PWB|E4zUM4?`BopK zCM&oXZ2LPh508fJNp$lGgpm7wT!!5GK2ahIs(NI!m~qxm2^_V8O&cv2ar&fRf0f%qlEevDoKMv##Q>{Aa!gx6~F52=XDNt2R9*r zTk@4B?clOABR5*1+OCy0ctkGb&~m!e4=sol*|3@O;auUo0G(d`3g)xbd|SPo65w{V z_9GXt_MHt(w4lRv-dwqxYJE4gQ)y>EKGlI^Us$@VbmnPlqd{p+w~4Ui-Rf94tA+fE zHvCXE@e1ocw|-a@`RtcF0Imt`1ok+6Sr8s=&vLisZb-F%3&pRozilzwE<98)Lq42Cw!2J051WSqx@%5yNUjlI!^esWGt-?8L!`%feCxjOY7X`RStaje6O1a$E} z1(w`KgxB-<8>SyX2#lx}AVw{m@4K`v#dw2EuxB37Vsa6@9}{iiITie!8oxy(VDhlT zQh2Y)Z2-;O54mrVjq;j`#S4kIxr>aYS*xtm8Vj~D)~Rxm7^K;0gP!6hCf7#Fs!2eH zkCSHgb*~}HswUn2hI4eJ1wOkiiXC47$bW0WnPhG&Z!chPwU?Nn(QJDMM zCq?+@TJCMqIMl85$E0d8d?*1@DR0*WB!>ZTdup+*zt*h7JVserPUcs_GBoD#EaNhq zIP5f;_GG&nzxP%<*ahMcyxrP3t!Hgq=(k^~!Y%+_SwhBGxG&*YoVzU&NOrwOUZ~8{ z$|(v^6Wf!g*5;8)beTn!yId@8`k{3Q*PkJdJ2~XLIW1GqOTUfe*0hh0vfz?>l zyiZJqFy6x4kev|VdM4b-vF{&FSAe{dJm$YHBy(71V_mQkb2;kv+)GAX7fd-BL8jDf z+7@-9P77j_dH@j{Ep=BmAikmF;4>Lka}XB+WWmU1dyt02#{syYCE3%KP;kQgp3&=r zXN8g}^yo4BHrk|8oEqr9Ov<|=+jHrk!Z1lMrk zG_J?&T*`Ni(Y=cj)%TsOUa~Wb)6wwHUaT@5leIfpg4Oy_xixzcP3pUl-cH9d7_l$o2TuNMV!P}#Q=qof0o_NvaY4%CA z`v_6qb|3p{>>9p9;@&#A>0OGC3E0zE$J9V(TV0`K-s$Ug0Y0!V!39%(JYOJiB|<09 zL3^tMaZYToYJN=_qPj|wAw7=ph-Ld@eHTiuWwSB%sr9}*JgZU_7C@yui|iO_;0p)E zxKHT=L+VT7qD|15NcJ?FH1&0c@e1EGF`#Wykh$N2G^g|2T{PDR5r+AKRUy|t1I$A`~juefN9u9n@z zJ$-A`{H!0Q*V|)CxeHNr&wPkfR zTRb`x=VysU^e1Q)rEq=XbWa~KPNaP`ilI$dWzHwIc(Z)TAID`$_7ve&Hd~{&(Y%z&=pWISv>SbZc+^+ncHR{37Q^6o zJHWsvk3az#oL0hpq`*=w03URluF+YKfg||LAWhWWm+d*|hX_V!>lJ$(1^NW;6sh#w zA;p8;5qYbmDNd@?f^Mrvl4zR4Kt_F$BIQ*`!?Pl(#zJfkm0+^W8a;`|jSWY*>^bXw zrFV$)!}rQ&@*&i)iz0V7-1E>6orGUMm(=g0x3th)DJQrFo@5@EFys>^o0ax4E6MCU z8BR!zNm}}W&x+<@;^P6Wjl(A!pg$QzH9&6Ht*!V&b6N4NzXJIkfgcIkp|BK%#6JMR zqBsjzTZC982oOT>85Gd{g9MfU&MUU1ie~{t zL~y7>3N0z{9jn0V1il|H%_d6G>gEgAB~Q%JC{6n}8O&{=z85Be9E7845hesx*V4;( zd||TWpU)>u;_t9Nx&Wt}*Zbc#SVv8KaAhDS+G|?ExY_KG{`5t&U=DqI+>q zSw`v!jE_wNp0S8gaW}XiPeu@V8%w!@*5-%A=?|moWnU3plYl;K80!n*h3;BUm4P)* z9_L;C;uh30;){9Qkg!2+0X;jOh$Tn7K`0qIu(8w|QmlK$n6^G`Cr~B51dN#z9FX#PU^9+y#wHHd(D+!kFsM1$CKzK3U3{H0|JiM!I=fkz~Aom0s~kq2hx>lw6tRx zGH{tI#!8>Teodf1_SrtHJBnT4eBF9N-!hmMt}3={kk1*T##&WiBWI^=3Nln}Q1-Ln zQ?QJk#{shuY5`k-SYztuumw9n*EN35V99IaKZ?RFo9>gQQ5A$@M0{Z74_B^flaekW z;-wcLFov!Wc3W%3DHY$)uUQH?sp*8ZL<(MQ#*$A*-w)Bijeua=yryMPpYKBud=T(V zXVQ$wo*UzA2DQ^!GuFwmt z{chq8Pp9T#;}Jf(Bu}GTEXMk(BY-@1F;kDni2{rSWx$A1&n&mV@kK zB^!w&mxZ&WBD9l=Vj5;-v2{rtZ!~NXKK@Yo4R-jEqq+Vx5!4Uhqc!janlmth=4rm2!A+2KG!jH?OA~eQY4= z^{csCBI*YRsCuA0nn*w21eI;MjHZEX?Oo<*#rnS6)ZA`@dUw>Al(eVF^`!hW9U( z!nU-Kmi^v#p{HZDA2?5tGoZ!vqgpXez|us0iQ=k{Cj(e3YXt6B8_HpmvuNAeU?&#` zVK6L-1aap@88ooUsGDPBJDJne^7kgYl`ywQ*1O5~(vOc#5sG64IcTGH;pR@#kHrHh zO&r&6gSpQ+sN_dW4^XEqvoNWF=mu9-v6mgQ2$divf8`W>TOY{_Lrje9)k&4n&rgmm zHp{|_*~{~WjU4X#;IuNVs3$_DtN89@5KTpR;eoQ=zkhY43bh0fbi&YI4Y$e4WmFGZ zCu%r<5!T=e=G5+bVx1jBF`_lCipV;7;vyGk4tO8pBQK}73tRlaw7`xb0xrKCf!Nmq;!t9PG}D*(4=j6rY{4aRK~^Zrj)N_k0A)% z!_~Jwc11X9b{=|e`gTuNmrgOwDvEBA+}tyTDHLxgr4bUXm3D#w&kI)mlBQ$k1N zTKc=G@w*YUr4LFPKRSIgV08;q^vkts`5HlbVq{gH4l6)xXuEPvc2*Yo7Ej9V{m*4p@w%7PQV5v|WMU^IkS0bpa%M48nUZ96!e@zwy#eiql9!{}4a5%?^Hbs<(S~eb6k3Wub(v&< zt+JeRuvJV_IumE$cl-F%b8uoE@BeNl{+-ADAN8ES^qYU`Ie%>*_)j=$|8%eZNBiFX zO=kB`3FmVv{><#M{#Nu9|Co^fCCvMKGv^;4_uo5bS^myB%kl3m(0}PXj2vwLrTeWy zP0Mk$5%G`ix71So9m%?LC(=dE%pzw*=ZSz>aLqhJ6RYJ!i^ILm>~&Ca0pf1sv|Ihu zJ)rQ8-51&Hi?;J34d=7NY`JU~o%+_Vi)TAd?w&)R#@UCnhpw|c#`Y5RQj%n6gH)6& zeRT_zCQVKChxhHe7l*~V+4@F}CQp~vf~MPpU6)0t)m5C&(l;}@tor!h^YY;(bYrU- zsL^Bj`sci?LEn><{y8t_ZZoydDEWNO%Z8)r@e%u@a%6N80r;@mkWUQyiak;^8G=MK z)jga#w<9r#eSteGHC~=|?ucplgQUpqz5&1IWx4F-CCcCPa-wLgjAo7k=mmv22VG$I z(2u6YHVG(DngH-1DKrGp`~pgwEXoPL! zXeN!zy0arZZ6o$di7cmUmm7yZbUx5BRLu!0=2-nV`&ikDOrfAx2hXQyHN9q*yi*9Q z+r5ofyc~xxIHc~@I!i~xWc4L(g$#CR%g_$D_UUxYt<=&Bb)17IM2nKTX#25dM+?W#TX7KDVQP4qv=dmO%QP2-7|SDxIwfDGyTk~8mM+cs1%&-eS1=W<^gM*s{wWZlx(xPT<3>e zId!V_d9~c-IkS^_+>b#sk8dsWl4UU5ulRZyM zFZ)j4!$@9aXO`oP9^sB=!6b9}|JXk<-%$sXr@8HC;(o{vfM(3#$SdbBDM zm~yWG$4FiKDi%+uwJ1`9OfN{G2OY5J%6L&cEm!P@CL@^`I`*GQBy{#5{y2BLv#*b1(OJ(Mnd5`gw@QnFelP-oHO0yNT|SkYD+Bs6gt#u=%TwlwlkmqP$iCv&d3uY!@jPca~9p@9wX0XpLx^cmvMP0L%stTFGQ0%{_8I(`yT*qv(#%Hd^D_Qu3A z=*5G3jDVySUDu0<;uDYdU(QkAT`E|T$olQA1a_{PhbY1Vm{CqP9rf83S+l{S}o zS~!u*PYs)>|LK>S!#gt)nZZ|nJ4k5WJg4L;I{tgHOK){k1 z3^pq|b8i)c6nsBTwC-#43zGvm@RS5NlkzNOD{2Z{Sx(0hDbvZ3k$DcXqtI`OJXDs9 zby8}*7TKQ{Pzb=zjE733!~Qt13FUe#nP1`@;Z4G|D4%aNmzSW>Vg1=n>Iet$bMd@W zLUN4})v7CXJ~f=$OD~_7saq&jb3Y41tzPV&v)Om^6;s%;>h(ib&oE^u@c?qhZ|j8D zpjn{85fIxU6-`EG2H0_0wkX(M@zCH6lQDo<`DT~zAc@si_blkQT)gcWkFyRGy~D^H zKhTr3jn(W(GXsflT!4$Mug_a$-0j&RYenr4%GiY1VXJ<6KQ;1y++zZ@oKnAjeR=^F zhEGvUP;w) zCw3%)0p~c}&J1a=4$aHCuB)|J?n$AullkSgA;8OcCv!IW4?KYQ~cFyAW?5R_f22x0kS-@`vww@`j zh^S`?W~0}z0YL~_0(gkpUNepp3Ik5taN9j_odXdrUnBVW`SYdhruELCxVA%pas zL7<#@HL+@;WgicJr~hd_5Yg5l>TG)tv+eaErjKSx2HvemYHht~(?fQRc{lK`OAT0f z(E9j^K5_Fav+{ZwmYL=?6e7o=BTA9`-f{1x9z@mG?W!0xr*F5{xYo|P%x6*51g9>0 zAZcQac+Y!K*Zh-LBfxC7c96#}&@AnPS@vJ4PZpnU!L>Eu8?F$W8ZNwXarp7Hi8bN< zjUSGBnOcv#!ScymGdYW*zeA0@Ulcf2eRG9(zw+B6dJ9V~%Zl{mvG!LVu(Z5-m!06& z2#n{4e?StYrgsEtwSNY}b_-d8tr30%s9o#3?;^4@skhHJr%gy>(hal7FK88nUPM`r z-zA6NMK_heGn8gDabO!pLu{}b@mww$M#Jm;< zpb?uFS&|YGN35Zys7p*9uqSrI+2o`uAo2oG6t|Ow2~*mUxO3+IbtQ+F^IE_(JDq(l zn;j#$!}oP!NXy4ez1yHZP!S~IaP?@-v$ejB$xy-pUrRr@MgCYi$4(8s1y8hj5hB0r1%EiXUS!?RU%6XMzuApG3xEj z?A{IS$uzf%^%f<=fcatn5*Xxl0jzX8Y(){l^Cfy^9ZD9vLBj~8?y>M9nTc`K4khbX zxE;x2jLOX{{m*seBj!jh<5C@B$bEa*>0jaxn%R5JO#*lNr!pBa?+d1No^c{n0qzC+KXG1Gvp6sX5|AR4uPt5*tmepy=Yne7=K7>fU7fI=R4#|RPYYt?J3M?sR1Hf7YJ=bZocs#e6$MshWno2n+sAw($ zYi=Q~pPD^=psx{}DpiroDiiY9*kozzBe>s2Ao>+LyxyO1i_MQROQ`|l=z?B9-TQ?E zEz3G902p?SASU7ftXOlkrG^HC7&!3J$QM2#kKBwV9N-m#Pg>tw#avj+cx|4;p-uzy zRD4gPUh73JB`k*3FtxT#9=w$(j6QjY5~H&1m3eNgEPc$4OUiz(8;8)F4q!&D7r#yM zhaFfu)bZ8_$h9KGlB~Y9A>gI3;W=Mk+t}0`gylH2w0t)+>}k{iFqK3Qv3_EDnFR!M z9Xm>bR_w3bZd!6_7C1UgBsFo2)bt~bE!zAD8L%AiuU3*y@N+-s0MamzXFx?<3NVsp zR$(%Xo%~F~TR;UrJI|pmQqwSfDR~`{gyRp)(nf2zZGU;?UM|4tl& zJaTdU9X|S(#NmG{R4_38!w1Mn|GRzrzxM$~%R%?j!whsuMnOe2ycpqp-%7|$#!*&A zfHw)&I9gDkI%!&T$rALwByk^Bhk;>C0zk9-qO^I=FWpkT_>7$#oyG~CQH!irw;A*G z0UjMP z$d5a4vY_dv%6QFrfekLHs!k&lD=KIHVuEme81UUXOJ;$7qcyIt(eLEAygZ;y(UvNg z5d*g$;mk6q;ne`Z0F`KRM}K!r{}LknE11bb|0mY_r_#be|0e?bkN5)rx8ulvLdV~> zz(3#ZH;nuj=*aR9==g~#S%1Iq2TcC=IP!0Mp#D6V|Ecc6#KOk$Uv(E5$4|px$7ckS zbx##?kZpLmv{cgSl2nU{OSYnnhutxUgmWQ+#?yo({j;GS))!eEC?Sy?d^RVI-<7Z3 z+dQLl#Y(N|-cZW>*YVxFix%BQ8c7RpCLeF?rkq}v_p4x)l#GT16iG=*3PErme|)d_ z*97{j<@w_Db3Hj&4zJm{QBxt=!-w;__h!w-)%o4D*Vo(ATPBAa4{rw#mw}%OAgapT+(;&M-e>E@% zoh}VaTA|H@Ojfq2vyipV3z@7$GSo(t;n9#7as+Paf=;@|M9k zVc&dr{fqhBf6W^VI5c|#K$NEN<%!cXG2AM4@-=_hjL~z#Y>h|Nvc`MNL^MmkW|(6V z_f{izz3SpT8OtGgw}7!cxh1<}*eCmg3MNv4V1%Bv`({V2i^>)Raci-@>F_FOv(h35 zko7`8{W(M1VTBW^ff0_C>n43zQj-$og0pRHk10|kVYyOfD8JZLbQXpjuu-6zUt1ymsDK9S(zX;I?j=8hT$&a z4O7BSiW>W2mshf6_(s_W!RfGJO-vF^fk{NDH3+62b-|%;e&G1wvKcyLU;{s=$`w{G z_*MJMLU*u&9WO+F{sLQD*xcBXr+^AxAQSPdS4TO{4FMOk=czs?HZCl9zht^Ddt(}& z!?|ILutW6d;!s4_=N2P>L0yA!qw__r*9#=nkH=N1T)=TVD!#p;mC;zLzOAe8(}Sot zZQGJt+7wgpk*njaA>}{3L?KqO7_6q5EFrrJ4rDPi)uKb*aH28h)6?n*mAMqYWNzUK zvg&=14Be9NVaiv?_Y$2xep?S@ttWJi=@fcPeT<2moRiVjDecPb{`Qg143ms zi=iU#ECmAZzGKkJdpw0=$!XrkgY1ha0h3oS&be0T6I4{X|3&T-$9uyG2y&{o-bav3 zf6Ad3PdXgyM04nFjs8=0cr%?P;MZ0WSRo6x#R30xtrV~B`%w$@5Qoo}E3|}^9#I15 zQ>o=zI;QB!QGZTkd=uYXLZGQ@Z9;BscQ?0&aJ3_Wpey}(;A%He$xwA)Q3vj_+WcRD zS!0&HkD$eIHuL138_v$!_<@k__Ja-W{bWtg?3RkUaaj!1Ap=JhmN;Z%-urIpx?_I?A1D`9e-((Tv zy|l)&5fRW)E8+~>I1<7Y22cltQJ7ibRVl{n3YnYYkqHMofhZ4X53$`bAxE4Ug(?gQ`#Y4KG|w(doZszB0M3)gLr3^H z+dXmBnr%*}6ols!-AHg-1Q!)U=Fr`Mu)}yXSvNyFr5!h0r$Jn&T^QQDqnOTWO(ZZ^ z_7o^rG7z3pA~u%uE$mSIxq3XYgQ3(YG!30_x{P7r*H&cW-AJ>zFxd+w#WpEq;)FZP z7V93daH-z2?=q@=0!SordSuE&^O&wP`sxN-a>mOByfn2QFKfB`Q19il00#N=k)H_Y z*rxV&GxT@$)5EFLOS;h|EWp9r6Jo6yNGuQETs{oTi^xfStEXZ0IRH{Z;l6*eyKJu8 zN5Pg}fq)pt=)TEU2pcR;%INFnNEZPWIXEM>TUyo#Yt6L~o|8Y1N zVFjxll`iWw%*AkQ^QcNxZ=Zge_)6&3!{ED1O<+1-oJHdSBdEqWaHntsDprL|uNs1K z&T9PEQ)Ds8=xDL%n1fW8Vju|@CxLNnTv`WhW09RUH6dto9Y%+Y18FiAsx!yKsur0{6|A4H=7=8s22~;Mu2TBN zpb#^Q^(#XhjCy=n;oA9l3F%DYC}V@U2_9W~BO$0iGrLt<-+P4Cb$X>MTzq}4<4^Tx z8mnV<`^nP`kD~^hSneTVW@k1;=)=3n2j%fs#+S`M$kn*-8 z6Zv{IM)hTb;zZo+={gRKbY)c-bqrT<3(aH=qBT8x=K)PiD=BKq9Ofg>&U;@oCX3WIJ7^;jv=siL9Z z?fUgrB^HQyONRkFsuB5flrvQlT~PUFO6I_L%b;TOECBSBj5R(O^14+`lQIuXfC*zS zf0XlUTkkE}Z;phD({qZ{PzP*{PwM?zlB>v>wkYxG%Lj$~T6UktEtZNFT|ScMu)2*P zqP`aOnZNT5NGHDiMfwc;61ArO>GM0g>J7ouZ}iMp|A2^NOIS1>)N)gGmslaNNd(T< z_eVbvYU*)5U_4+v2;3k6x@)jZMiO9@10vur5h$@N^J%UlG12}=ecc5oDJ_yvDrhqg zdZWSH9B{Z8PxR_}$oD!<#c?_~fz=4g78Us`NHG>GD@ID8_5MkkQvW1XA^E5Nec7Zh_q96`SYt_+m%i^4zPFQY6{)irY(K`>`TSL{31ym9F%aY9AZ zUv45ss(JdJn!En@KYth)tGG|R@KQikAh=Z-lSdA=}YzetZb#UW{)8xL?|#U z6=QC9Njo9C1$(LO@t7kKaBpk1VT89&alnBKJxA`WE`Y=1m=iQ1fgWMPGQkVsii*5e z#1e1lTGbK&W8DIkUqpcPt`pA0mJEW+{_-uFm`05WD-FBp?#-h(IxYjoI$#d=%L2HI zOBlu^9522dfz5eID1yg_W$xt%QXZMj$^Gm{Af!#)j5Bx%lFtpG1-vFW;~S5pVdD~f zllE-<=}6)ISUo?~Tw6bU3R7D|;NiWcs3r4m;;H}m6maIF>Wl3izlSd@Lv6!XXKA)I zM&Xvkgc^*^dOaz*<7LNaMh(bsyM4XwwjQ##REyHbAv-9%YMaU>32`H#R%yCH2b zW(}1UyLULK3|KcO7{+VWG47HXZRvw!l0YRNbN^h+lChd%bHhj)-Lg7*N|7&-*lOc` zhwqA(XdWHiTc43E z89&rn<;FfszKX3Y{#!AMuTp_3k;l)vbM}!%%M&FuH6>PkoPO~h<0iNj?7fk*>5|T5&GFANvUWOM4X!VW;bvy zV|}xN{=W4I4qy;ERp}c^sS?smG|h%OAD>o+Eb*jnO;Pu*w0_>Ib#di{*-MfvRzdDc zXp5M?FLyl0&pQ=NfhDL!Z%sakZGF&z(z^1=&!7b>GXBVz4k9*LERp!eQ+QjbNVh=$ z_<+01F@U?1^nYrb2PyHFcSkQtr^USQ4itUoIP%+eJ~Mq2h$*v5H8dj?Ku5#tGNa9u1D zyQL_!DCl$)-l=2KGn2Oc_R}RaPY-zZ!J2vw6|q^|ZB4IAz%$wf@$u)dgYErv2Y0_H zhjrGFDAr#a*2ZkKs1d~ijG~O0`~4Xoz7fcbX$bq(J1Gr$`!XOT)_3IHKu2m3qkmI> zGyTQE`=6JP|7SoY=YIjHl>ZA*$pWgt4}D-)G8hDn19vM?@rhU0N9bjO0rU0vS2PiG4$Ycpi@AtK;( zgY})1zkmL69G;Bpw6rD;G_G%_LTnmWmtWmm5HUjL+B~j@wpW{6K9Dey5`@Vl%6?SB zFtqz)P)OJmHm&s4%IeTJ`K&VxY>(JCs#^DNCwga1@K!C>ou63Kc|Y%;w~^RgIlJ4s z-jyKULdZj2GwKlF$`l95>AO4SCeqS+2It%@o}Cm{_1`@ZqCDSC1sK%k4*LV3@!>V8 z4b9MS99PD$+v^(2ak1lG7z(XU6|vL z5a!{!yeDDg@?1Dxslr}wPg3ciR9d@CjIfgN8gu-uwGvI?wDc5b@8+q=mYM<^W~-@S z&ZU|-bI~=Q$SQn}4T?$LHhiwg=$zB)4jsPkr=by(9meu9c@9Tp{%9p-zo&j(#t&D` z_$}bR0GrWn?4*i5^>(yaw>PaTk$NkHc?BaD_W*_9+$Cy3aQ*vAcYR6$^Nt8Xq(kug4H=K4X+?=sV_Bsn1sU7YQi!uED_B zK45KKJ5!3)Z}>XVLw)xOmz%aVs#Qdjh?&QMw#$aq*V{dXL0t$s zx={3O{b*TZ3|@w=_q!uKMKqL=}^J1q* zjuGyx)UY#h7x8sgLQ=uIJLo3o(UT2~76?8HXoEG?>|dseWT)lE=v00zY45&N5^jrJ zdz`meP`j5^>vD@-f&A7s5?#`{LyY0LZVth8Z`4I$qI|TD(4$-HtRMm@0rd^9f>i(& z32K5DOX|=Dxw;r@{y4AP@}B!dGN4Y>Cx5Yi3TR)(`NZp@-iVH;NX4CaQWD~m=H@q!U=A_MdbD6v~; z#s_ultNKPR-4b%*@gs7@%n**}YtX!JClXio+}6NAgfmme$ox?dHXsjtwcsZXq%6Z| zifR~sQQWD2@&?}x-pzEtXrlwdDY+$f1B&luD>{lPkpbr?h;|hgB+ziu+N|70P>;Ht zA?s`Vg>rO)a?Q73kIJO1U5f>fhD2JATh!9HE= zhxE}S!$$43dPn%O(Hihyk!av5iREW(a3Ttm*}gPoJlZf zxEmgt$KlX#tV&570i8rx-bTO01wqZ}j#{$Qw_2+6f&!Zj>8{ z_6#n{sb{S3CXsVJ?F{IiLZaj^Z3;DKapIRS@-70UBSAO0ktqu~&K}PsXL*Q&xgvbsh>y`C zNx6+JV)mK5&O0Knsyup2#kNj7(&V*z*B9H6rI$;NpG`=~IJ;45&~6O@&a*P=0~BL* z&e197bnB($+?)YFC-pvJbl-j{Hsfv(#E2dMt9=!Btm@GxjRsp@;1zLxe#Pl6^{hIX zRVZ(3c9e6Y*LGX{7I3cq9d^00fqnoXf%v9Bszysix^_J`OSi28FzURk9R)22@Qyr> z4jZx6#MNsXb*T;&-=(y8rHnrDer(+WyO65nR9jZ4;Y+&C(iWA<8QAAeFEPp*>@ ziO<(Rv*jE6rgMCNhNc6D-evJjbjQ7*7KlT+DWa1IY>asfK2MvW69oLTsjuocK1y-&AFcV;m31ot!X{1QWR}Wl!HV`zk9rXQ**_Pzy2BCW} zyAiD4w(m&gC^lb%@HTeG=3b>c06sLrfnCQ%t&hf1lmm&dr;Ow{sCh9Mc_A6QZD|<~ z&In3ue!lVD1z<~gkNEHL_`l|}F4<36c47bA7OGAw5i&d#SIV8%6)BKqLCj`034CmS!rysXP9 zqr+CcMsVMOP=P70T1Rc*!YTOiVAW`9us*y2V3bHM!WUk=enQG&7SBl0yw@@F{nmDGC(eTwb^plL+1mY-ovA;y>wVMI4@d|*=34J08C zPA7Z=>$aT4&UpAdITDIe4aT|{IIqnlJz2^*<}MBR@U#gBC~!0qLkA{>Lho8gGT>Rp zydJ2^^jD{3#r@{`c<4#+-c=U}ED)9O;m+Tl^#An1{;wzf|Ah>y{}WIreFLoxfsBIo(G)xUD9S%1hMn<`?wueAk9TWAr4q5 z9)|dIp~(2b&H>negq8#b9*F$;mVJ%k9_o&XqOVWVCiS7N76R z5&Ny0Jqzti>wS;U$Hx~0&7-ig%wi3D%(AqqemI~d%4_Ck*Gv1mPWPvsfzKiKHPnxc z3~O@(J4428KiS&o+Pyq}zrz|A4_JCTr*+=|Bm0KzJF_u_gMp#4vkN^5;qB!rgomjC5v^c<%dtrbW8U9NwoOQlpO` zPy70LV!szH#9Z4o{+vMUET37MF;T(Y65=Ezg{4uR-`x?@iIH>V-I{QL0+qsSVIa7h z^1GsW8}YHmBxQ|cDXww1X3d{1 z-j)#P&W4-E(=%?fjmSO}BIlk>7SfC2bagw3J)Q_PO9rw<_k+ecI zwYcPBMHlq3)e2aDqIiVTEpn})3%Ajy^eB4ez2gqI>BBG_Jf$!h=al8nO!VFuWgxji zGu=6JZgOROQ4OY(cjrs|k=@eQKD1=MfeYfO2H9H4@9<>~t@@IIc<(CmqY~=8BFS08 zH9Z5>6rPli&4`=9lU5(bthtqq3^cV@T=sOQ?(OXn0@rVd1L<1RZ#o}BJzaCVqNwi> z$gJEsi%a@5UNZ>6cUlFN7@ya&o4Mo}8f%GF$1+E#yyqSYZCB4?w;K;Nv-Ctnv*g35 zW+Z#og(cf!EK6E-abl;ezS@*(mVvV&$gfr39Ql}snGfy?W*#uU%r`1DOT2pJk-vlj z@^us$6JN}HB*l|XQv15#gv-RdJfaZIEjFm|GArYkif|u@BsVuNlI56BAr%|2 zM^x*8kMLn^5!4Y`C){0_;dd+C6kcWv)H}dM?#dSb8*p%UkYRNI{*Sfr-E@>M6bkVmJ{Am+`1|mJQ^F^fOk}MjP7_ixnz@Sr8q2I#Qy8ELramke^ z)7MGAM)3OA5jOmi3np};d+;`Yd@zAs?RLA|>M^NFMw(AR);9W;SwMZ(17T=ot}!Cb zd;#h7e+kK{0?};R_ZbIw8~5Myxo&%U@r02$ZyB<2j+?wkur!+r!OIMIImV-FONrJJ z2%?W_;i+W0*W_hH+eQNKS!?DxO?e%6Y@c+Wkl>f6GV{OyT-zwm6zMHxB|LU4>238W zD^K+=5(y-&KingS>6IYOq8rLHtT;4&j;s(lep?^3mt1Ns>oSKfJW;Y&Oc`Q`gS1m} zW)z<cwn>ad^SAl)@5mPa%%1-uTQD*HBSHOdcX9T2;#vPH4Oyi*SAo~bpe zLw1iZ(%zgr-CJKWzLExuLPdOL*eKdM5N+6qiX9b6n6V3O{M(!!0%N#tqk97dQqjab%7=-Mh zr9%6gu2xy(tfm+`jxd{9fQWE2MgBeyGKdaFP)ATkq1-gHt9-K~F(5{9AN?EH_dLkP zJlNzmTV#mH?5B*ceFg;3NYlmp?g>HS-HWo@{os_VxwJ48)UMD`9z9;1o#S#MHm3sH zI&&X@i6l)5vpMbV#~neW5=lSt>+Q1>ToqKL@}3kR&_F^JOwbG!)o|j>RuCEXUaS^X z?QJ!%a4P<=nOq1)yLhlM+x!5$)fognpbC6nL{uDkkY)smz&PN@>0P+)#F_?B@-IJW zJ^jg+6&r=`IdfTQbWE4&=e+`n=~s}*Tp8hPXdH#YWcug8G7q4PjA7G`?U^OqV1p7= ze`1ou#u)iYFi@P<#=;MYCnY+`NQ9IbCha6jf;1Cn>Sx z*d{C?S$9*Qc3rxbF^_ch=tXBU{wtgZ>m9!OP=x97z1rn);>w z+jq9b9mIl?S=H6`L~IiIzp^KGKSfCTe0kZCx+{*GF_ASMh z{)pZvUAj=L8HtHJQ*=$5<7=iZwXk6bOs5Of9kWCkJ&irS-(qd8`~H3srvtb|E1NP! zcDSs#T?rbGxq(o=W3?=71`B-!E|oI;eHfBmo|~9vO*WT(5%Jf#5_>;ek8Oqy)Sg&J zhxwi(QeUf|VXe{u8}UR%YLpmE7>oDOvO+qH6JfI*giJ!EqGTi9TTN)MnQ^FUJ1&NT z^?FmfQMR73NKTGr57QLxffUh3^7IMbSjg8P58qk7b7jMeaH-=qIg22<{g4fj6T)*I zT@W6r?h%N;zdlFh})RiY2W6k9#}>+7<76XXo4SgfS8`82~#6 z*QaEbibV}e^kv!D$*HW@3pk(`pMX2iKCEdSn*gWvkua44prSR|7_p-m$2EAaTM5V( zbz(&3@h&4~o@(on<3TbWKfJS&9xy$T+bAN=cRx6St3W!)W@MDlQe5S;u!`;CdpHx! z1i8j;;%C=pT&898M&5)d1S9|WMc>T& zrm|93xga53o&L2A+|S*ouihhut*dPiwlhFiTke!tbl4Z|fV?)3;3`kJKneu4C1rfLT#1$j2lW zx2+p{+QMSq!bRpnI`QCDKWd>Rs)C#74V2~@$ZY>Q%;hOK6PPNvHsJ$M_HM^B7$pHA)92XX zW2?$fy7T4`;vuEM#^@_ZaDM z2Mb{cxcLKLnLa-+ZakBypA3|@N%3j2}I?@sMJ(a`l!849_ErM zOpZi4yw;E)dQ_+cL+KPK#&zma2_C9qx6G;`rx(tpirHQcjM2Ota)+A`4PXd;%VpqY zYmgTaq74l`#O_>_vtq*ZOEl4DS&soi0$Q}AN%JfA$$oY)ZzFFYaqkTL z{7kQ)6TJD}Mr*GhsK=aRh5Z|M7$%86bUxv$CQ9`@CM zS~YqF4d+XqLak}taJ{jeb}{v>M}Obk!xcEoFpaN6bEfy$yxY0xEqIy6>l?5*P1te_ zg*#Dhdb$D)BqcMMr%EKOE1J~$D9v$p9A6>8teILF!$8XGC=BJXo|BNeRt(rO9oLw6 z!gl0+l=|S;s|AysQ}a;K6k=0sTd+=<9i4DwY;UqSV*S1Xw_A8xUim${`kVF8o2&|7 zo9)bwHsc9L^TvGgWn5nm>~ZmL+jr|eBf~EL{99|eO}hR!5QG$aeq6vFY@xi!6v}9( zOJ23``%^Vd+9}F!SIS|Aczs*F3_&bvIa;Ko7(SEFluY8@a`~II*?ho`P^8<@Pyu}` zT$gwr9c=5NOwfH_&SmpPgiN8LSC*}~0_OKwDDptixJg8%32(Go@q0gm-Smq4Vp?Zd#muk_-SuSWrR^d zr=`qEG67S*~_jmYtL%U;aZ%TEPTOKr`*qTI5r!n;}LjzEQ)5!Vtj z(C@iG%tdt1fpa1jm%^vm$@i?9H}ct-q!8i~k%AfIKjO)^?SzfGxz_W?&=M*S9-w|zbGxTec1Ck zjV9eg+#PtUgDbW(B~OYRww}rFF)@K0B0c(|e86%{XTQqA@T)2951c>DO-y)v2fc}E z_6w76kDs9-+3fcbXGp*W*TW3g{vo*}WJow|^kWv(u^D9DNuEoy>m5r921?*0c%)`m zsK;BUo}5P2-$tbl>@m_<&qATj@J7AyCVb^}GpQ-K8OlPS(X;_xHfeSk5K*i?b)ERk z6Yt)yc=w}Yj*^dAgC~35_`>K@&KzDpf+`7{$jm>eGH>FW61BMVtO_Uf*8(K`nE_lk zr(EM0O0Sk5@KC~q;z&sTT1Npm7w2L;)s&%@Pa^QJCs?3ssS^us9jTHw%vB|X{bHMl*&(?Ohnnh8J_D5 z4(YyWDHfX9?TQ%~6_|eyYwcxNO07{DL6jb-e@)0AAnO&*eu88K!jW!h`rB&mze5dS z`wwQwf2Coi{1@b+?q3tIFnU0#|JLfiF)jWF+TtHo6~q6MqVXRE>HilL{r|=cE5P3} z@tOWw|9@EWg*^Cnw%_#2<&qPmyL~e zM1thUdCKW$A3$f*>*=QD>G`nk*2~V(+0C)mXC$0m2Sx=|XVa6HtEJuW3j_Too}D)H zK7L!(yW(A`q#{~MPITkI#m%Ou>?{1*rJTgYyD0`TO~uYcuzG5(^Gr!=dHtpkhGwz^ zMiaZ}<@+q0AA+DRnL{+gChE}k+()>cl6q-;M6da=fdaU{es%D3PD-T1(-T`i&g>nI z{Rhhyg7vPZ}|K&;%O?ws^T0&;^~M zL!WQ`NJ;m)n+SG8Qbq9Ud`X*yYO5675Kkub9QuC<%7$Gf}3+Mjc!TNFDrlfx7{AP0PR@?M4G*vSQjWmzjc(;FN z@^0p0+1QEjz&$At!Ka+T=5|cIVijx95+q8n(T4H_J9W7=!~S^uF!*b2;qF(%GOXZX z1HCf)gEz%H*V+iDOIKZF%5-b>{D&F!R})7)2$DcLcVoJB6!Y`KnrrNn?VLyKQHCGo zS>DJsIV;c_%B2F3P&%)~8x^)){Dv_ILIJ88<}+-e{@}pW-90|O_^w^MtDDa59u3@! ztDD;+oUc18W>@g|S|nDCc!prXCKbb`5H9qU{ZzBw+>WDU1}%i>BdCe&;0AgK<@&_i z;`Oe`a!e_a*LF_`@pVPItd=l()da1x4ZLWy{Rx-J<@}+>TPyHd7!Z$32j3j6z$@9i zwBEEW@i`6ljX`*JeSIkzHQcieYT*Z`L-6VhkzxCHQe`yH-vu3IJ%Xz}sYH6Cz3nWP zFxZ{bH9v1DUZ>jJ3({hp%(_W~H?YpNuEr%lSl2oZb*(PGM1Gm;q0{p_5)#YjGoTEu zDMZ%_0olDM;R9(9MYUt}u@*afW?6$waqIa&awm=%{oMK26CQBsdBqBlblfQ7QITH7)ldgz>O)f zBn-2pDs=U<|Hk8;h#{Vn=f(ZjzTAM{DFpv)!1Ug)3qL@B5ml-Vq-F&N9c0!tmK&>S zprm?e7Ysdef3VziNr?`hX4l`#vCE4ATadd&3qXoBg0cp{*xDe9CU8T6^x`&>mCH5E zuPUFNlhp;y+ma{r4WOBNBgAO8iN5#IiM_8yw6mBYQjB=wA_h3o(|LO0$ihXRi8Ewy z#nGW}Ec8l6*9JU(3P!1@|Fm}v`k4gig)WRR=}nb4wfCn2xLiJG`co&gO)R|M(-n;x zJqx`>-9r7w$rOzTE~6A?6H!lm+JVy1g zFRn9rIVfE?tGXe&1arjz#uXZG`=IeQES|kjX98EE0bc7zk#?KPXzYUADxqLrd9RK$ zML?>&p1ofQqs<`}5;;Z&hU}Ca68#9Fxou`oA-Gl-w6Iw<(=2vBhKn3AY6bu2Ztv6Z zNgy@_d)e*s`9fn5V(|NFPJ=iWsFm^3^LwxTmRD|8yHBmFP|U-T+zhzN{vFfwetF;V zGSxkC^xoS(s$7Y0hIA4K=`@kM6~k6^qMmZT`ooE9uND9CN)vUCONti}%h)E1yO7)_ zqnJUa3Q?GToZQqtbE1$GCnb;+hlEbt(++}GVLG1lYg@Gd6s5Gnfw9Rbm)s9EJGzrm zm&v;Z*X{Rb(arT2Ll+@dgl4RPwE@$ibjK)_4AC|$r-8h7{)D9D6C@702 zr?UB0B3TlC10wmt4TQxKCPt5`(>oH+>#3xe;9`v%5hYlCeKrKXj(-TwKn=gG9ag+~b%Qg^33lhuSR8=5>GVYOSaSfWCa zEbyUX(2=9Kf_Y4{O5GSP(?!(jFn?|M7bx(*HatrN!x9W!xlcJ2aLB9*0ZymeXU2Gj zbZr9eKWs(n+2h5;9p?%1@!016LU8zo+o^fEw&oooZ^{)5p*U>YEejo77`ufTqz{nC z?W^TU6j&)nqaef2JOuR`fh zWyad+D@NTdPQ;{$f(Y9t>bIxlqFfXN<;s<6)f5TdLhtLPwqdCgw}m0(gGc~1#^z)k zu15e?P73x^G>Zg)T@BF9^_qi#e13yba|*3^Bf*mH>V-PU6_lsH6HBbvRTHnLH%K z_${+98J-TV@?fv!kVYP%h?LE~2!{@ep@8VD_0pG}+0aN`qe9!w#}K_*5(o|C5!62hT|gNooM7IB~yYo>|H;3WmiPx!P(7^i74s(HwS zgG>eK8`w=ADtLe|8ftg($=6d!57!qmD8%w(u#Uq}L5U>%DyS+=HO%Dy4@3K9L?lY* zqK%cmpSZ++uJ~SRiVf3>jR&>FB2%fPBeM#Gv1QKJdZLjloo`s8?s~}$*Qg%wFc1q* zarcHd$T;ZDM1a~7)uioIlR*l8QTOL%P6hS>W5y-{K;b|72JY~nWZXjC>Bjb66lcIBB1R33!fe}KS{i5 zOgE0lU`KPG5eJnDygN{!C|uAOKNyIL+sN6F}2GGsEK&oNf=7?I@13?UQXPoe;)P+AZT5CLO8cf!I^ zpTfjm!?(hz{xR^v5neV*Cy2{Shmyvez0=ohtb6*5ZH5?QSY z*2eiqSNNRT)J0aFXZ)uZ2qDezFTBCA%p9ajT0BhVh+05-Fi{c4ki!WvDNw~2IYL$Z zP|-4jL_lh3XQG0EFW`1eFJYQ-?nH3&>7mg{ zd`9GjMBjNbJ$P=EML+s7)>c&To#6$e`{vg2p;kvxu&q#%Fu4Pix z7Ds{Xd7eY#cI(1l6Vt#k;sz@;6w^xNX*X+X))r(!$>wC}QUHBNz{eJhNw2f8bWg{S z$|G@?_#()OeS^8_vNht0xW56($QaoBm81wm&d825Hc{s{2@zJQ5o{Tr{RuA`WxYq< ziD|#iyZ1!d21v$=0V|x|Zm@beYpcFk{cIPqQoI+GeE~o93BMl-xXIOHA+{h0^rJ+C zD#j4z2XOlX#UxIoE+b=fhPw4IOy(BTk%KFdYrF#pnfW-+U`wB0S3$4}E`rt!uL+q% z9>Esh&oWZ4J+PA z(dQ1KW|+lEA<|^4sbnsD3JEX2qN5t0hz9U&M_{79?x1<;u>yVhW0aDR@-L&y<1vE3 z&|mM0?FDGK0#zj1r$sL|X-ml;*J#$hjZg{oQ*sD_v6vtU#N1U_L0|ad?R7;h(J6qru%^Un4j{ClC$b9vLSm57-$-oah(t_*x}8lMD7%$KU5c zPT;icWhpkRNgPAP)<={^$kA@HZEJiR2XAz%!S%BxhcrKcL7(d?!hqY3H5c?BOT+)i z_Z&Y3LF}bl$bhKx4Mb!{6c~mk>R+O%Ll&SE2uuw{642&t&FLG66MzhX9t!r+^2w&J zdMC+Qm-Tvfd~+*;31Uq7bvdTPVZL_##=%w|V+Dw5VX|Kfb)H3$!37OTb=L#o7&o~c zp}fUO$l`8&8IG%OX~s{q6cM$bd3)d7>~ykO?{IFrUbmSc8rmSXr)7nOcRmj1??TrF zEr}=bfn|ESSTHPu9@R6Do1oZOQxKd?re*JNsOL98tQVyLfUT3g9=_XtJKxXvIGj2( zS~$HCACBg}cx;bszLuoZb(DhTQeijgh-$XcI^hR%rrf5-lP#c~a}aeU;Ig*^$A@6e zSdLpg>YoeoalnXCL?G1WX$D=o>64C100p`hmO}Kt9__2fW(1?=*4Sp8UI0ycoBWwR z)k#OF?^Gpg7+SCRO~U6+8Z~Z+QlX&>h1d-NlY}KCPWO;BT#S3J(vJw4`O_Od~ z-t)bm9i6kJ^DRgiuV4`G(W3=P!*`m|KS0FMVbLNYb5I-M_$H5#Mg4Pk}@QVpOwHz&DIcb z*XXeGW{~M&K+x=SWI$T-vI!Gk4mFNEP(%8g^Aubk%qs_&6x+X$zAc7CJiTC;X}~y? z6eSBBlC$nnEVlNM?pqOXPoFX)XQ~lYU@BHS_VZPTpsug|61vjyd@a*2yYVIfrcy5O z8;Du1=x+sL7(iY(GSvM3?k}ZgV{YhTLMP4`!PVq7>Rw8x$X&CeI`xk;+0^}re4t*1gSG6<3H=) zNG%?R1BjHvC%FUXyJI(M>?nSS2TGcqZcH#q+h+kYt^bl8H(QovEw(NS;^({<&Q$ca z3&zp2mC0jXzA*uE_;gegxsH*NukngZGja8w^I`osv&J%^*H@c762sGExC-|}#mB^aRI4;)F2h@vdvEy1D z{if(0N(ofx!m(0F#KG|+43kg!q%!1xVgQ&ffd5ZSW#3MO=%qR^vR1$4{OI;9CC=%^ zPLE-4+YVQob_)rdq|AG?oF_>SW5lxBXk#r*(`3J;T3?n8rJDQeJ8XkGmTV{1O0vu= zWoL^ma6+FKgyz?7Vk+PAFPg=A<>)IUc283V4A2e)KvEUy=!UPmoYP-24a5srCd0Nt zj*b0d`0j-C-2uzf(**jm-q5A>)y*l+t7xjryK4n;m61@|`8lwd-kJ_31vJfLV^Z4N z-hijYQ@tRgPqqf}w^{zj=iCpF;7)oNguHNn(uusSRDBl0_^^u{AViY~{2KWO{OULb ztT}aGVpJlk?wv@N6#*69Kdu1M3-ZSm(qr1GbeSeQVoiE`#oQB`VPI+y(4E>m^lCoo z{HYwOLhL3zy+<2elZdpWfx=qO1hnx0hzNu5iE1(ORu>@jPa}Hr51l~+q%Sjss!znh zU%Fh4bX4JVfs;m(zd=L7$iZ_5nDgE=`Uc^@SUrIS2ZdM5p{bfm79;BAL7^w>=Ft;$ zA@g)<29XGd`H4o(myi|a?hZ!|dl{B$tVk9uV35y^$5AzNdQTx3Vnbl3@R5HRQA$}C zEh3$WJN{g3+UH`SVvol+NYX|(nhde6Y^GmiDD|1IBfd`uFZfEyrCHL60{8TP@9Xqr z%5dRERaNk>wco)LIquwsE_m?Ezi?)t%r_c_qT!GcVli3QO+5ZCWf~gRdcrGJK8i~g z4aKIYe?R>dR4jAZEl_CYIT=a)F+nKuN_ZUdGoG}6hDQ+U1UesNMC4ptXYd8jH6uSL zru$LD9tS+!zCc{lzP8Ni7Y_NRwiJ{y6Ikd0KjPM~01pq>7=M9L?NqUFr1<>Lpn@u% zE;#TRRFp_j)?su9(mF&{5<6`4@`5*rRcKiwp`DLMzjmSfg8az~(6K1FxNM)MR-Agm z^q%*^GBIJTTvJeXd1dC$FZTOSupIRFIFQye2f}(D6hvh(hr>S8zYM8aG|FfC=Zuqb zyacA0Jo{>&f95p?rMF0$l6xgA1^v02j%w`czgB~ai2je&>`lr2#S{Z$IEJT%XVTYZg9~*{9~?PyF_JpTZ-a~r#Nxx9v)C7`o%VVY4Z1OE7A^QKf)$7}>%=e;xHFAj&vPq)w_JC)}6rwDETS_x=61%{AfuTjjQGLTEUc zd(*J9hP0z!vLDT%e&j<`M-%OvGMqEoCT$<}ZzZ>lM2e0-y8{()m&)&Qi7p5s(5K9Ak^F3w%Zdn!MNTH~G_z5efh4xtr1kq- zwgb==JlFb&%phzDC~hWq=jBbxoLf@`o5{nRY)V(=)WShtrvZD)X9(GTAeGX`QkY@20BBw!ZAQ*V~LH zN#|>0FT0lZ$)$rdqsXr|4;U$@PJ>_?HVlDVYVhCsC^~`^S=qm6eA6PO)%tL{js`%^ zb|?9UfG03pJ8Ywxo4GGwdTojG8G5_IW;UG%njaHl!6OO|jZ3HCwAS(X5Z9Yo#!VISXMjcxG=Cq2sDe zUhh*!3s(wZ(&o+Lc#3^0KbAQWU+aoI2*HllFA-11(2VaM_ZKu`e_u7l(ZJY-W1#ZE z06XT5Nx+X z2h{;sDj?d(3)F0beEflXIUTxx!o5h6(+`Cm|I$Pi5bl*J?A-_joCQfR+f5*qApA%e z)C{-GPJ%BJ2`s&~(wDRpQdHH(PPPbh_63gJw03L$-P?{JSy%z_Yq@BA`ZvFc%NUGI zKOd!LR^I+!XfGCFM0ZJU{R&cdyk#DS9|m5qM~Bv6wicWW;1f*OjPLeb?<(6^MDGO; zkwXMHifnz-4;u5u{n(XJr_<7<@x_1;KavC=tsmseIcPj&uW!Kl7>IdK=%Pwq`6Bp* zRp+Pv5yW?_4hD9Xu=r33msDDqT#jicd%!Y3A6|YV$@FjXcH3w?y(9*LhPOidDF%K3%=rpOEg-mQ0C`=kfEo+fj_iSo@r)LaC z(j+5Ngy}J@mMs-OwB%acJm?BuTBtgUA_qmfMnarkgKUZ~lE5JDH%GtKFg+@ZRf--V z=t|KTQujy`>Eu{Hv4NTkC^dJ7lRNWCoHjG^GZy(}t^MsKI7UsyijM#(HR}|13(W2t zWc@>AjPVGEDnv?b+a0Q{uf^S*0axN?Kl`vXT|<$x2n)l)j5}f;fi{Z0jSA-3rXf*9 zb#igZ1TMeUfk{Sq%zYE@!mG@BLBSFKU9N~VHzfjQavxa0qGRD2FQ@zT6N`Y6emupw z45EhR*nRB^n@M7CB&H}+U)b*@SX^rd-GPv3v#W!^YfLQ&+6Lp(W@fdms^G3bDlG8u zprIiiyJ$YEc zlrxiagd(o<%|HkE6u~ei^-OZi06;GwjARUU>ecVKm+s9;BcFHz3-lfWx6P&{SfUy9 zpV&f!?V4i8+R7)B_p=b05!PABF9BW^L?|rZ;M!@>e3V^;PwMvy7>bF$!W8rE=Mr31 zfPp^2U{rv?8xB;0%K+;mAkHGjrlrXv8Rtj-q%pE0D^y_q%$=nCO>tzxc;seayZq^s zVy>I$>7VkTk@*r_V3Sqcg!Tp;!(Kg&z)3MFO-?~%RMW4TeS{WZxy{qpfvO9E&)0+4 zy>p0~af{v6k=~4Rlz+4diwwu@drbucJY)r3bV={af-vhTEbc&iuD_!Y_Ut(Pbd-Ss zMMH+Skd|4+LdA)4b;&rpW|5IXEE=x)GxegRC31W;_HF>9bQ9aSz}q7*j&)W-6sz_t zs?Ak6`Rpzw1=(XlX$MmATX;2aXe(p|xj)S>2K96-+=M3@@L$lnGaz<6Tmu?gF|>N- znRpMpeEf&=75hASA#5iny%_@>$-B2 z%IlVPz0AIMV$ILSI$tn9b(j)IpxZv6!X1**7J}y! zu;Vq0Jv{wp654IZu%iHrPi@_Nnzn+d`)LIRI|gadVD_u5v~1KQmLn1_l0o$hN>Dv> zB<=+Ayn0lkMor(!j~S*k2CTrw)EXIgbw}A`Sq6xJF%4X=5b}Vhg5F)&N>jJKKZLvp zRGx{tkHH28E*=JjKiQ>>e5```>%Sp?7onA3WWDN^fRB>W@ z;ofC4vGCVhqjG7gGG#uH;|u?Feu)~2rWn^{u=W(g8bshRei?z$MB*yKgxAn8BXf)t zerF~D(ULm&u!Ru#+%R0xIuAe7+Wijo@r>HH{yk-n^dbXzBiYAaolF3T2`mcl>OW4E zIydL79kJmUwsnV82s+qC(|}x77r%2sTQ3{ip|8b$Q_dY(>93Ai=;B#&q!MTT;4~Ux zLNs|RPE5EwFI;NLw9AZutkq;lsZBA7^FM#ik$CX%CZ%O=(uKhS@(>6?D{JtBOIM%YsqC>?fDT+mP`=}&gK#lzsguLkhxVb^~>0aU@I#t18Ghhgd#7^yNFr*!v*WY{C-;}0 zo~->$E1$oBxpm?t9^#A%4RNZf8|6$6+Gb=l7j2%Z`Jx@W7cD)CqcJm+w{y}GTQY+~ zu;P(bF8>;-pfp~-a02c*6Df;JQgZnAbqvmX1QJF@m10sJXC^A%Y~0lZA?bw_6|&e- zRJO%(^Jh%^3(23}0~Q5YhLbI@II4IJeHb2sd;XBZK}*#&m1Ft^M%flEK!hB+xhN-K zwUReR&c+OhWz+KGhzwE6(6qhbh}J+@`Pesn1e*2^3;1M$ry4~RG(ywequa&f6_=V2 z5AZn)8-EaCu*}4yi@!h?M9;+oW(BbuK6Id&em3xG?TipL%UH#wl-#O#Xc|zvQ=%(G zV6C@500Vsut&ByVkkckk?UA-jjr~1|A`g5O#6OfFaM(1%0EKDgi*YXph%a313zxYc zAQ?sFI-{(|^hq9}`BObkIgkoM!HEdJjGVcXY_&)ETJKl6aj^jg#D`?GN`bof5Tq$w z27>>GuNFlKlEVB$-)8;kQ&3b?OMzm2?a;2q6kH87UA5bZl2Kk;*xA&4F;;2JEutw8 z^u;cudHYuXK~2IvhG!s!L&)JKPs;wndk|8K+k;D{fPtfBE!YL*-8T*P^^|C<_3cQh z-}lkYkw5|@`!Z0PGgkWk($c+j%gs#@6~pC^mr>Y2z{%iE)-%+45H%;u2G1!b!#+V8 zuAk9H&%z#d@iIk$^MjR^9+eDTuqGtVr;s9rI`E#V3gmOk)Wh*}j1S=qVL=>ukro!1 z&Y=%2G!Ej9NUL9|nRm`CqrO2i5C_IAQUi!P=DgD=7Acb182smwqsk!NK3vJxAGcZY zjjX0e)0382cEZ2{Jx0M$)2>t+L0@)NkjQzY))HeERSk@DYmGNm@aUf2`~n9tz9UeM zZd4im5|_d6i{$oc=>!3t@Ib8dusPBsWtvmF8ZRran$|6@k6xNUyDQCKKEJA{R+N9+ zCjQq>HvgN?5EJ8n<1?i67wL@+@Q=^X!I1n4gzzvB2nK+@4j9efUj1JL$p6b`_@8>I z|7=qKsi^v&h^zU(z=iv_CiOpDgTI7Q|3CG}EcAchz5e+H|84im$i)0_#JF*_b%#|^ zIG;zo+884;O$R=SqRh#8o2to)`;*%HgFC+@N)1e{uduc+#u>h^4lQ4@1(R2cQJ?$( z5cC^b&xh^D?RJZfS~>CS_3&+W%&^71I$uru?fzKSyPdb)^^Kmh8b%f>^-}y8WBoXk zD+6_NxE2i!b-PzPpZDt0*;`o^-U%?5-fZ=$Mg6+U@cCHu``z3iUGmwPp_{X}TYBvR z)fk3{&iUkI@>nEflXf;_FB5F`HhCvYJC+S}lP9l~dfS`*LmV|k-JkvyFqtvSavKKA z+zoQ$I37JX5`zq7DH!*p{=U5m+VDtlh-uli)e!pg0iX5m7sW)7QLDmU0_}7uj1!~g zBopD)eedgOKS_XpQg1|GVMIoGA5Ete?Oc$!?yN`__snhVSO2Q^)+T4HSUDRcebOMV zJI9ywd1eK1z2DSM2yl1J=KJ!7C3n|6CfDsd-@i$uhK7Jb2hoEA;5cne3jW;}5_BJp(isyge`+{b`l7e(l2p?`I+hj+H^nX$j~ z5Z&dt4D(4uaTT(XXPfYVU)DsvQhnVR)T6^fp2p1I9D+QUpJIM7Mf0H*!A!_JNX_F* z*tFJG396M!W+}nKiV30JfP7wk3Rxs*or!yRDz`KgZLY$K=j?a;5z&^F_J9ws zEPC{9!Do4O^FSr~flrl+mwpaZM?xXefsh7`Q7_$j}5zh(j>o|@C857x`9wvA;JjTz>3=-4!t-) zZTes^^H1#8q_#&o6kpgEtx9?hO@w}hH0~G-l^#bjfzlCy^0k4BVj7dOy%V_rVxHK~ z?W6vTW8(;Ex71#!td|rG$BVN+*t%ns~u384mI>8^MR9FIwh75Mn&mNuGG zAy|lqpKD~n%J?0s8-!D3P5=n7b}|yJi~+bp(rCH|>eIO=T+F|)HV9%r>2Q%hvV*G)8g4-8Zn^@1L1kW-d8e?Qa(h(y~Aw0AosZPs+aoav$t9$7X z*Sj8Q5N)z*d{O4MksFTTo9ORtyD1hpOiC(*1^k=R8brH9n|Rw*l=Sb~WPMS-k7T@A zSka$;v!`V%JWp~dWnvvi;sGkmIA^BT^hj$y0y>N}oNx|O*McdnDG}EO($eBeAqMtQ znNdJpy}SUBpauN=YaB*kCIvFVrT`Vnr5rxLluUCDCIM`S_H|w|YY2s@{H?_hcxo_Q zd|&6BTY)LMc6RGVUBJ0J-7MnCUwB;79GG)5PMwF3cEJ0gh&WF5&XDy9=!p`@Gj3G1g*Q5j<6MV8W- z>kF*NeG z(3E-HRJf#RStPxp;x_l23=dfHi{!<+#JBwVAy$mELSmWpocE%MhlMs;-~y3@lVLOV z!rXnE(mT~-{;QX%?xtgN+2UZ8!rznofZkvHc|18v=%B_aZq(~7F>ZpwB-1ZGBC~Z#1+))YkRu`Qkxl?wpk8<7-I22+8 zel#k>jI(z_Tu9I}qlyg%rY=T~n5H=GccK_m9$EO6TVB*eSmtjD2Ha(lY%fPKu;Xa` zaH`V|4_p}duCdk58HN=}RQ5~R&yN>y804;rqda=86D_TUUXXSd-X?hzgC0c6fqrZAn9Sb5MB zhVvQNjMV+yuVC!BYc-AQgeD$uSN`o4&2qvq_)2`yD)1AlgzPkJyqlz#Gc&At00ANl zwsDG$*mS~XeDk})bq3ir;5s{M?lnI{cpRX++Ax7uP{)-t1c5IWV~7j2`oKf^%PDEn zzyIEM-O&nkghuZ*LZcds!ndmiOouYTNl`2}z3U{q?9l-9^}ljrf5Bug_nc%(%}jeA zA3rPJRx?k>{VQ!BDD_0DSI{()-rO|DH%!Sl+ zBxC=s<+y#nDiQh(YGkZPrX7%1JFvomLACwIk?q|BT%n-LgG*#5!R8r4Rrr+$*Hgzi zeegx4OwfEmdTeyH9qRHV*6p{)pevmFHlbNbp151K`!?SBc9nHO8m|7G>3lTNO;!Zk z%bEDJDKByb&AVGs8W&s%a6REgPKWkt=SqA7GwXm*k`TO2SZHxqfO46z&@xPPcQeI^ z>55_~oqeQ3in0Ri9bHxqPNJmmRQ@ovqcvSDdzoo6j$Boj;tW*jGhWZMcX!*{f$ck+ zTX3X@Rd_mZf^18hTrTg&c{m=fq*~~=vi>cByOLYZnDznljgui)d<4>gel?#Xx9F1eflo~|G#m6`QNMKKUpFF zG>nupv`})i{!awKY=e=7UhS{yxcN&G@>LxZ*vM1!f0+xgnu9d_?X~~Z!T+rE{spo5 zBU1SviZ}niPz?WjcH{p$bK}4C31Inqp8$scT9@-r3m#@>rhiK@|6{hfCW_>>q;?gj ztxxgL2?+{lC=$VL3uMXEvx0U*pR~UWy=rd+YWLw?{xU@NTVz58{vm*SHua*cinExu zm~U;p+o!#?tGes;;x6R%b>hA~oo!*^_~pUj{`EM4yjicDs(fWqRrDt5F|&#}0KSY- zvq94yR`2z^dg<}gv#V6rr|ow~Yiqge(na%OI^TxR%362#yRz5kdjkGcc>?)YkjCw1 z+sTX6g33bjsT_Insgqi*#rs2GZBxRP>C=K&xT;FIb>oMtqT0lZ4>|e;*ny21XaGKx z_K7BOYPY=I`omV{nO6B4X_;Z(&$7054!76pHBeTkTuUzcj;<=z?YYf`c`8z)F<0Y6 zTi#K;%#$nW!>$eI$n9aa-pwm%7eWWU0C=G8Hpa@Dk8-tpw|c{S>w3m}@WQAj;~BHD&0-yrjOaTt`80-h)X6;HVDABC(^(d@@S3s{kP+otEgE2{UZTtb#d?? z9_RQMyg`nRO^vfW?>Lo}iX(~xTe8Hv?KXV9$m(9*=BjPpn-$9EpSA&X?frbR_#}iX zj6T!Lfe&Qthcm(*KbID?-ky6gTRJnH#Rm$b(^Vrp;a*-zIXPF? z$cm5BBR*q}v`8%_E@1SC^Qi7PwzM45$U`c6sOYticse2qAUQ|p=)5;*{C?R1^+dau zdKx`dtG|OZm-5Uw!pj4WPM2-KVCMGcdlSOzA+W+rfP$KVPyzZ7%+T)Z7(~!~bb+Xt z%}+oH7sRd`H07i!3>@*5*!f1UCwfqvXBS2C5$YL?Gy1YwQVK6mY@<`fIf)s@lmYz}Q_^(O3{8IgsJ71xJzz*Wq~kb|8$?9I zz>_C1wIVe2PMC=2ue@XjG}P0ZSQ=VNB)3>Hg=brmI57#NxUYA@etEdaW5PZr^)dw9 z5yB{*Y30Na9x-J#E+_Igaz z^*^#ldczqo2bkBg$9huP-TF?_>Glm7)`U@>vfzt)Wm-h0fAb&@naZCJBiriL$O{^-X5iwFO>^p#kl{_Fy3sWL1Th$H$~=!ZPy z1Od!pi)4#d>CI^Sf*j;`J5?)zGrUs?(|xmfGS@3a8F2q2J@u|UUG%fp{&uzyV#moX zHbf~TML(rxZ^pHwlN!DyjjBP8A`WE67+#Ty*3KCbM%9a&q7>1rE4Dy~F<9*$?a% z(0qbX6Fuz&_c3f8#qHjyhOIGtz}%`E`8B}(9}~3B`0spuADWSmnhAQ6Fez46PMlX6{YiN^0gMDcu7(r*w>_UkQs67V84|JOgD9dGM?AKnHa6u z;SR(y$;^xdFh~6gA&%mfoDFS=v`M8+&4{@TjZY_m-HG59?+&d=?+t3-4d9XFO=$qePbFiB{6__NBu>L^65{GPx-mAYb9DoGnckotIAC^(SIF>c`+*Q9UHbTf~ls%?;UDIsB zwAbt0ybSU(`7?75@J4Q`9rdncxr*A6ilEp=c%xF)DqTeXvv?dGkP8;K5#nxFq({x* z5Hd+a|)I9faQ@m3(R_qDK}?D#CYrkBbg@)7Ww}dcPOpQDRtdX)GlF5Km-j zH<5P{$yj4Z4P7f2S_ARV`k=1uNSA0}x_HIxjV4uCY)n%=`Y?%8trb9d6`D3>hQ9$x zW!QHY3OQlUnQWbgyFKzt>rJsA#m(RpwO-ydE@Oq^AeIC+Eu7uL9WB&UK51!u-W6ze|d{XJ8v@f^E`OBX_<0>5DZ6?(EQ(B_^9U)**mU*{g1WbDqY z!TZ%dME`_r9U9a?b+v?4KcmmE6JYt8(B{fn&u)i|mA}oeD z0VO;nbQECk-(p{%ByF#JPBqGH(|lP-4q&I~1rjW8w6!W>XpkLSEbuA9!D7L|%kMZZ zCCmiFjlmJ;4XjJw+F7S$gDcdPTF0H)S%@Go;m$9QbOgn^%Jn{CHs?fph(`6QAW$vB zwd-_y2NZUn8=0oz6w~7dfzDukx}K1j0AU2Tg7}f|Qnj7Q+kn+vwY|a5Z1h`%Y(bS0 zkWVJWX+<+rm2W)0E?ULlG_dd+NWdv6drVMxEyUEFm_DyFlcn>~RPBVp()}hxUtWaK z$-&#akuhs4a-6a&M?TkRE<)PG;(7s$~t<;<# zeJf??FMxi^UIh%!bNai~WHTM^)z&1Kb$?d?%8b zbY6q~GcGZCmzrqG;+mq(Z|%?%v)E)?woHBp&y7q!!>f48#Dl2v1BD-1n;HcZp2Zdq zXZq0gIbv3&GrS}+CgZ?^>O{Urt&9`7UYH)vjCVvVv~sh2h;_1rDTR|{wzBhxM|?RT zqoRex?~r_L92YY|G)t>A`P&xNbC+ePhf=V*T}>n0@3 zfxaK@mz8}x*|Ub6!o8Q3C>h<#k&lbEM$1}rxrLcO(vi@s=+s)Wr>+m%HA>vSi}gZk z-VUI24v1=)(7+n%bBkAo4g40NSHIsTHj~Ijz8MwnT2D`*m(?icL}di-ObRK%>zspW zWwOpT<3-@|Df*R_I#(uKv{+)hG-ZR2b>_=^wg!h_EDpg!rh0GH7JN(Lgj`F(>^Ib*Cv){5jQ`r)n}OmG5YFhm|Qh(xpiFHS%9qr9iaeU~aJ{cv?PO zrO}%-z&V4*$1+>oBZ2HXItGChB-bj0?+TH&y?$2-b2msoBQb>Q8f33b(5sM)pcgX& zeovcKPQ4<~A^R1g_M$6=y)_Q8}U<+$Paeg`i?fywHUcf4==>yQKQqhli$Vuo@k33&8p7* znfSFrm-|;LU4?F@P5rr)z8jM|GRK3DE?=i_OIMHi3F+dfnmXXp(=i{M7aXEbuye8hHMRM;J`4nIEJ5&ez+Sv6Z#x87`4_Y@3h5|lWc_Fl=Dt7-R1*b5&CI&Jl_K?gp&j8h~6zj^?c4|?;^AQqPC zN8_r-V8Ld85jwx3gGEd04_IVQY6^5m;eHD98bD2xW@bHx#@VL z_2waD0MTr~4MgGXffSRUkHamDS-%xOk|gdVyx+tHJ;pGMLvV*|ofWhoF%G0|j|9=- z1)B)UcjEF%)|-CG%eQzK%I856z=1E*Yz?hTwEzZP`?oW#w78>JEc0dN!mwBZJD-pk z9|a0bfZb877i(&s+km@Qq0?|$=g-;kEfocUAKnF)(1`c3d$_7s-skk&fMy6m^_cP za!mv=3Ir!sCyWvYs)g2El^lXp+4y860A$E zo3`edri&lMC*pLkYUEZ%k1YL)I+Pv{KX5CPeDDj)HP->b+*+lR(5IQi9>*S3$C6;1d|Ps|4BHgDFK7_o9m3sN+i4IYm07W{04KWVk`sZYQo|r$9(= zk@a>G;REObrp*y_ymSCM?>s{?_29p9k{z&5gge5wS2sGBifOpE&gqa3?rSoauMcY}avtCXQ2 zSdxi$wVynbPgyNV#1O61yzRDxIkC`RA5<8*ET#=$)`5{@96pCvKOU;_Od;dI ztL^u#9?`mGDv_{d|@3$y#S(xoJox=ZE?rvYL$?yK5s+R8I+)&_STJEE>S@p2A zs`c>xI2k^#!7iPQu15Ourh&Hqq8nwFT%6HpoEsGUN@;ua8&L7*zFT8|UH-e5@a08;fk~WtWUxn&( zjuS~Tp3Q_f@p32{t97t-ev9w`MwL}}`BV)!QxW5!=1i^XUakRl#4kv!({%e>KN&$Z z(?B3 zT&^C)Cs#OM+MW{e=gY=Z3g-)esC%2C{BRZPBJs&nj(*O!bVsE`^U5JcE??XZ)_#)X znwD&cFH%4_a83M;9g0%GLADQ@uf}^cYKL@YQXpU_iiNr+U1Fs0Ba-uazZ3+N;f6}# zSj1m48*eUA66@003q<4FZ~RWFZ}5CVhUte(ZY@WZ${#K zK^jPfk4+>uv(#aA!824)?tKBOB{QvSlNqt`a(!0Z=H-?2r7f_FQuVz>EX{od2O5M) zT_HB>g3a0d2q8^E1tP+%fzd_#4Yk}2cl%Jmkl;c?w(1Fv6=MB_$#rnhdA&bF!|0cP znH9utK##QDt6q!nI~y5s5Fl;4a)u5!UIQ3I5X(YhLG`nnl?9g&9%t}p^(Yaayq-xH z;h;vDwBb&0s}vqa8C4ppFn&>HcQ@7>d=b|vEDV^WtD+A^ z)8e5(qp#!Gg@Huf`9Z3lJgnD*#h!oyQos|Ac^nuW=b;0N^YMITXga?*eiMpNp1Wa4 zzFg@VlqWJ$!>#BljL%>u1Q10NAAy?VSKn&MlcFV& z*%|;%k!54ef2Sq2KvL(NVAB&^pD1$swU3*(mP9!4LG;{2B(4i%Y_;FxX`_X>x*6K0 zBW*kmUl~e*W{RSIo#1a15J0b$WLy`;k=Gj6-)+ak&%x?AweRfwAPAataikkaN8&4Rof(id=L{%C4}rzf$(66P_a z1!Ock)nesDFUM0B+Im_s_G2Oz-7*?L-Wp-HwVJR#z)4wyC+jHz&9bw*d_?q9j5}^~ z!*u)Jx)5fv$wg&v3Rv{(2YlOh663fsm9^rb_)xW*IeOeg7BSOo4jWZ?o<@*X#6He(!CAtCvxiTzKkh5a`Xdz`$ z!V*@HeJ+1I- z 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 z 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%0D?b{vB`P_zS=K!#g?II|$i(Xfx3L>8t*E zu`x3Jxw3Qqx$4r(nwnS|{-^IM7&@8Sx%>&enEoFK;{GXc`(Lyq?2P}?X8mhP(Z5?- zS^q73`$rPT&iF6e%Ky^0{_kuuV){=SrT;af_CFCQj{k^2HLKg&Z?hqN-RKX*D>+C< z7fUEwDiX*kk&KK$8sRzwEWtl`wYeGIVp(_eJgx0bCmbr#rz9WJ1)$c1;qYaznak

T}4H`2i{1L?6;#T=HVfTij3 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�{D0q28S6pZfk&eK@{hF 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%0AF-%Vw61sZ` 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�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�v-1=7*-N+6XOvfN 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

    `6#j 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%0A8HIPaiTfp_@XA5hz!^bM-v{J`ZL&K@ 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

    y=&f$o6d~8=Z#dd{$c^ikv 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ℑ)C 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≪k9S{-4@0v^%6465&@c+4wp%2b%`(M3 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¬5comAtIVWSv^f`k$4# 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�{b01*8F|{{7}hA2>3-Jf>L09d%?{p`Y=r` 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

    A>K|ly1DfGgT`k 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

  1. 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 literal 0 HcmV?d00001 diff --git a/include/Makefile b/include/Makefile new file mode 100644 index 0000000..d4b364f --- /dev/null +++ b/include/Makefile @@ -0,0 +1,471 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# include/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# +# Makefile for include directory +# Based on a work by Bob Friesenhahn + + +pkgdatadir = $(datadir)/lcms2 +pkgincludedir = $(includedir)/lcms2 +pkglibdir = $(libdir)/lcms2 +pkglibexecdir = $(libexecdir)/lcms2 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = arm-unknown-linux-gnueabi +host_triplet = arm-unknown-linux-gnueabi +subdir = include +DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(includedir)" +HEADERS = $(include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoconf +AUTOHEADER = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoheader +AUTOMAKE = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall +CPP = gcc -std=gnu99 -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DPACKAGE_NAME=\"lcms2\" -DPACKAGE_TARNAME=\"lcms2\" -DPACKAGE_VERSION=\"2.3\" -DPACKAGE_STRING=\"lcms2\ 2.3\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHasJPEG=1 -DHasZLIB=1 -DHasTIFF=1 -DHAVE_TIFFCONF_H=1 +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JPEGICC_DEPLIBS = -ljpeg -lm +LCMS_LIB_DEPLIBS = -lm +LD = /usr/arm-linux-gnueabi/bin/ld +LDFLAGS = +LIBOBJS = +LIBRARY_AGE = 0 +LIBRARY_CURRENT = 2 +LIBRARY_REVISION = 3 +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltmain.sh +LIB_JPEG = -ljpeg +LIB_MATH = -lm +LIB_TIFF = -ltiff +LIB_ZLIB = -lz +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = lcms2 +PACKAGE_BUGREPORT = +PACKAGE_NAME = lcms2 +PACKAGE_STRING = lcms2 2.3 +PACKAGE_TARNAME = lcms2 +PACKAGE_URL = +PACKAGE_VERSION = 2.3 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TIFFICC_DEPLIBS = -ltiff -ljpeg -lz -lm +VERSION = 2.3 +abs_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/include +abs_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/include +abs_top_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +abs_top_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = arm-unknown-linux-gnueabi +build_alias = +build_cpu = arm +build_os = linux-gnueabi +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = arm-unknown-linux-gnueabi +host_alias = +host_cpu = arm +host_os = linux-gnueabi +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +inline = +install_sh = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +include_HEADERS = lcms2.h lcms2_plugin.h +EXTRA_DIST = lcms2.h lcms2_plugin.h +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign include/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includedir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-includeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool ctags distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/include/Makefile.am b/include/Makefile.am new file mode 100644 index 0000000..7dbe0e4 --- /dev/null +++ b/include/Makefile.am @@ -0,0 +1,7 @@ +# +# Makefile for include directory +# Based on a work by Bob Friesenhahn + +include_HEADERS = lcms2.h lcms2_plugin.h + +EXTRA_DIST = lcms2.h lcms2_plugin.h diff --git a/include/Makefile.in b/include/Makefile.in new file mode 100644 index 0000000..76fc248 --- /dev/null +++ b/include/Makefile.in @@ -0,0 +1,471 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Makefile for include directory +# Based on a work by Bob Friesenhahn + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = include +DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(includedir)" +HEADERS = $(include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ +LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRARY_AGE = @LIBRARY_AGE@ +LIBRARY_CURRENT = @LIBRARY_CURRENT@ +LIBRARY_REVISION = @LIBRARY_REVISION@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIB_JPEG = @LIB_JPEG@ +LIB_MATH = @LIB_MATH@ +LIB_TIFF = @LIB_TIFF@ +LIB_ZLIB = @LIB_ZLIB@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +inline = @inline@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +include_HEADERS = lcms2.h lcms2_plugin.h +EXTRA_DIST = lcms2.h lcms2_plugin.h +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign include/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includedir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-includeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool ctags distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/include/lcms2.h b/include/lcms2.h new file mode 100644 index 0000000..6ef2815 --- /dev/null +++ b/include/lcms2.h @@ -0,0 +1,1768 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// +// Version 2.3 +// + +#ifndef _lcms2_H + +// ********** Configuration toggles **************************************** + +// Uncomment this one if you are using big endian machines +// #define CMS_USE_BIG_ENDIAN 1 + +// Uncomment this one if your compiler/machine does NOT support the +// "long long" type. +// #define CMS_DONT_USE_INT64 1 + +// Uncomment this if your compiler doesn't work with fast floor function +// #define CMS_DONT_USE_FAST_FLOOR 1 + +// Uncomment this line if you want lcms to use the black point tag in profile, +// if commented, lcms will compute the black point by its own. +// It is safer to leave it commented out +// #define CMS_USE_PROFILE_BLACK_POINT_TAG 1 + +// Uncomment this line if you are compiling as C++ and want a C++ API +// #define CMS_USE_CPP_API + +// Uncomment this line if you need strict CGATS syntax. Makes CGATS files to +// require "KEYWORD" on undefined identifiers, keep it comented out unless needed +// #define CMS_STRICT_CGATS 1 + +// ********** End of configuration toggles ****************************** + +// Needed for streams +#include + +// Needed for portability (C99 per 7.1.2) +#include +#include +#include + +#ifndef CMS_USE_CPP_API +# ifdef __cplusplus +extern "C" { +# endif +#endif + +// Version/release +#define LCMS_VERSION 2030 + +// I will give the chance of redefining basic types for compilers that are not fully C99 compliant +#ifndef CMS_BASIC_TYPES_ALREADY_DEFINED + +// Base types +typedef unsigned char cmsUInt8Number; // That is guaranteed by the C99 spec +typedef signed char cmsInt8Number; // That is guaranteed by the C99 spec + +#if CHAR_BIT != 8 +# error "Unable to find 8 bit type, unsupported compiler" +#endif + +// IEEE float storage numbers +typedef float cmsFloat32Number; +typedef double cmsFloat64Number; + +// 16-bit base types +#if (USHRT_MAX == 65535U) + typedef unsigned short cmsUInt16Number; +#elif (UINT_MAX == 65535U) + typedef unsigned int cmsUInt16Number; +#else +# error "Unable to find 16 bits unsigned type, unsupported compiler" +#endif + +#if (SHRT_MAX == 32767) + typedef short cmsInt16Number; +#elif (INT_MAX == 32767) + typedef int cmsInt16Number; +#else +# error "Unable to find 16 bits signed type, unsupported compiler" +#endif + +// 32-bit base type +#if (UINT_MAX == 4294967295U) + typedef unsigned int cmsUInt32Number; +#elif (ULONG_MAX == 4294967295U) + typedef unsigned long cmsUInt32Number; +#else +# error "Unable to find 32 bit unsigned type, unsupported compiler" +#endif + +#if (INT_MAX == +2147483647) + typedef int cmsInt32Number; +#elif (LONG_MAX == +2147483647) + typedef long cmsInt32Number; +#else +# error "Unable to find 32 bit signed type, unsupported compiler" +#endif + +// 64-bit base types +#ifndef CMS_DONT_USE_INT64 +# if (ULONG_MAX == 18446744073709551615U) + typedef unsigned long cmsUInt64Number; +# elif (ULLONG_MAX == 18446744073709551615U) + typedef unsigned long long cmsUInt64Number; +# else +# define CMS_DONT_USE_INT64 1 +# endif +# if (LONG_MAX == +9223372036854775807) + typedef long cmsInt64Number; +# elif (LLONG_MAX == +9223372036854775807) + typedef long long cmsInt64Number; +# else +# define CMS_DONT_USE_INT64 1 +# endif +#endif +#endif + +// In the case 64 bit numbers are not supported by the compiler +#ifdef CMS_DONT_USE_INT64 + typedef cmsUInt32Number cmsUInt64Number[2]; + typedef cmsInt32Number cmsInt64Number[2]; +#endif + +// Derivative types +typedef cmsUInt32Number cmsSignature; +typedef cmsUInt16Number cmsU8Fixed8Number; +typedef cmsInt32Number cmsS15Fixed16Number; +typedef cmsUInt32Number cmsU16Fixed16Number; + +// Boolean type, which will be using the native integer +typedef int cmsBool; + +// Try to detect windows +#if defined (_WIN32) || defined(_WIN64) || defined(WIN32) || defined(_WIN32_) +# define CMS_IS_WINDOWS_ 1 +#endif + +#ifdef _MSC_VER +# define CMS_IS_WINDOWS_ 1 +#endif + +#ifdef __BORLANDC__ +# define CMS_IS_WINDOWS_ 1 +#endif + +// Try to detect big endian platforms. This list can be endless, so only some checks are performed over here. +// you can pass this toggle to the compiler by using -DCMS_USE_BIG_ENDIAN or something similar + +#if defined(_HOST_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(WORDS_BIGENDIAN) +# define CMS_USE_BIG_ENDIAN 1 +#endif + +#if defined(__sgi__) || defined(__sgi) || defined(__powerpc__) || defined(sparc) +# define CMS_USE_BIG_ENDIAN 1 +#endif + +#if defined(__ppc__) || defined(__s390__) || defined(__s390x__) +# define CMS_USE_BIG_ENDIAN 1 +#endif + +#if TARGET_CPU_PPC +# define CMS_USE_BIG_ENDIAN 1 +#endif + +#ifdef macintosh +# ifdef __BIG_ENDIAN__ +# define CMS_USE_BIG_ENDIAN 1 +# endif +#endif + +// Calling convention -- this is hardly platform and compiler dependent +#ifdef CMS_IS_WINDOWS_ +# if defined(CMS_DLL) || defined(CMS_DLL_BUILD) +# ifdef __BORLANDC__ +# define CMSEXPORT __stdcall _export +# define CMSAPI +# else +# define CMSEXPORT _stdcall +# ifdef CMS_DLL_BUILD +# define CMSAPI __declspec(dllexport) +# else +# define CMSAPI __declspec(dllimport) +# endif +# endif +# else +# define CMSEXPORT +# define CMSAPI +# endif +#else +# define CMSEXPORT +# define CMSAPI +#endif + +// Some common definitions +#define cmsMAX_PATH 256 + +#ifndef FALSE +# define FALSE 0 +#endif +#ifndef TRUE +# define TRUE 1 +#endif + +// D50 XYZ normalized to Y=1.0 +#define cmsD50X 0.9642 +#define cmsD50Y 1.0 +#define cmsD50Z 0.8249 + +// V4 perceptual black +#define cmsPERCEPTUAL_BLACK_X 0.00336 +#define cmsPERCEPTUAL_BLACK_Y 0.0034731 +#define cmsPERCEPTUAL_BLACK_Z 0.00287 + +// Definitions in ICC spec +#define cmsMagicNumber 0x61637370 // 'acsp' +#define lcmsSignature 0x6c636d73 // 'lcms' + + +// Base ICC type definitions +typedef enum { + cmsSigChromaticityType = 0x6368726D, // 'chrm' + cmsSigColorantOrderType = 0x636C726F, // 'clro' + cmsSigColorantTableType = 0x636C7274, // 'clrt' + cmsSigCrdInfoType = 0x63726469, // 'crdi' + cmsSigCurveType = 0x63757276, // 'curv' + cmsSigDataType = 0x64617461, // 'data' + cmsSigDictType = 0x64696374, // 'dict' + cmsSigDateTimeType = 0x6474696D, // 'dtim' + cmsSigDeviceSettingsType = 0x64657673, // 'devs' + cmsSigLut16Type = 0x6d667432, // 'mft2' + cmsSigLut8Type = 0x6d667431, // 'mft1' + cmsSigLutAtoBType = 0x6d414220, // 'mAB ' + cmsSigLutBtoAType = 0x6d424120, // 'mBA ' + cmsSigMeasurementType = 0x6D656173, // 'meas' + cmsSigMultiLocalizedUnicodeType = 0x6D6C7563, // 'mluc' + cmsSigMultiProcessElementType = 0x6D706574, // 'mpet' + cmsSigNamedColorType = 0x6E636f6C, // 'ncol' -- DEPRECATED! + cmsSigNamedColor2Type = 0x6E636C32, // 'ncl2' + cmsSigParametricCurveType = 0x70617261, // 'para' + cmsSigProfileSequenceDescType = 0x70736571, // 'pseq' + cmsSigProfileSequenceIdType = 0x70736964, // 'psid' + cmsSigResponseCurveSet16Type = 0x72637332, // 'rcs2' + cmsSigS15Fixed16ArrayType = 0x73663332, // 'sf32' + cmsSigScreeningType = 0x7363726E, // 'scrn' + cmsSigSignatureType = 0x73696720, // 'sig ' + cmsSigTextType = 0x74657874, // 'text' + cmsSigTextDescriptionType = 0x64657363, // 'desc' + cmsSigU16Fixed16ArrayType = 0x75663332, // 'uf32' + cmsSigUcrBgType = 0x62666420, // 'bfd ' + cmsSigUInt16ArrayType = 0x75693136, // 'ui16' + cmsSigUInt32ArrayType = 0x75693332, // 'ui32' + cmsSigUInt64ArrayType = 0x75693634, // 'ui64' + cmsSigUInt8ArrayType = 0x75693038, // 'ui08' + cmsSigVcgtType = 0x76636774, // 'vcgt' + cmsSigViewingConditionsType = 0x76696577, // 'view' + cmsSigXYZType = 0x58595A20 // 'XYZ ' + + +} cmsTagTypeSignature; + +// Base ICC tag definitions +typedef enum { + cmsSigAToB0Tag = 0x41324230, // 'A2B0' + cmsSigAToB1Tag = 0x41324231, // 'A2B1' + cmsSigAToB2Tag = 0x41324232, // 'A2B2' + cmsSigBlueColorantTag = 0x6258595A, // 'bXYZ' + cmsSigBlueMatrixColumnTag = 0x6258595A, // 'bXYZ' + cmsSigBlueTRCTag = 0x62545243, // 'bTRC' + cmsSigBToA0Tag = 0x42324130, // 'B2A0' + cmsSigBToA1Tag = 0x42324131, // 'B2A1' + cmsSigBToA2Tag = 0x42324132, // 'B2A2' + cmsSigCalibrationDateTimeTag = 0x63616C74, // 'calt' + cmsSigCharTargetTag = 0x74617267, // 'targ' + cmsSigChromaticAdaptationTag = 0x63686164, // 'chad' + cmsSigChromaticityTag = 0x6368726D, // 'chrm' + cmsSigColorantOrderTag = 0x636C726F, // 'clro' + cmsSigColorantTableTag = 0x636C7274, // 'clrt' + cmsSigColorantTableOutTag = 0x636C6F74, // 'clot' + cmsSigColorimetricIntentImageStateTag = 0x63696973, // 'ciis' + cmsSigCopyrightTag = 0x63707274, // 'cprt' + cmsSigCrdInfoTag = 0x63726469, // 'crdi' + cmsSigDataTag = 0x64617461, // 'data' + cmsSigDateTimeTag = 0x6474696D, // 'dtim' + cmsSigDeviceMfgDescTag = 0x646D6E64, // 'dmnd' + cmsSigDeviceModelDescTag = 0x646D6464, // 'dmdd' + cmsSigDeviceSettingsTag = 0x64657673, // 'devs' + cmsSigDToB0Tag = 0x44324230, // 'D2B0' + cmsSigDToB1Tag = 0x44324231, // 'D2B1' + cmsSigDToB2Tag = 0x44324232, // 'D2B2' + cmsSigDToB3Tag = 0x44324233, // 'D2B3' + cmsSigBToD0Tag = 0x42324430, // 'B2D0' + cmsSigBToD1Tag = 0x42324431, // 'B2D1' + cmsSigBToD2Tag = 0x42324432, // 'B2D2' + cmsSigBToD3Tag = 0x42324433, // 'B2D3' + cmsSigGamutTag = 0x67616D74, // 'gamt' + cmsSigGrayTRCTag = 0x6b545243, // 'kTRC' + cmsSigGreenColorantTag = 0x6758595A, // 'gXYZ' + cmsSigGreenMatrixColumnTag = 0x6758595A, // 'gXYZ' + cmsSigGreenTRCTag = 0x67545243, // 'gTRC' + cmsSigLuminanceTag = 0x6C756d69, // 'lumi' + cmsSigMeasurementTag = 0x6D656173, // 'meas' + cmsSigMediaBlackPointTag = 0x626B7074, // 'bkpt' + cmsSigMediaWhitePointTag = 0x77747074, // 'wtpt' + cmsSigNamedColorTag = 0x6E636f6C, // 'ncol' // Deprecated by the ICC + cmsSigNamedColor2Tag = 0x6E636C32, // 'ncl2' + cmsSigOutputResponseTag = 0x72657370, // 'resp' + cmsSigPerceptualRenderingIntentGamutTag = 0x72696730, // 'rig0' + cmsSigPreview0Tag = 0x70726530, // 'pre0' + cmsSigPreview1Tag = 0x70726531, // 'pre1' + cmsSigPreview2Tag = 0x70726532, // 'pre2' + cmsSigProfileDescriptionTag = 0x64657363, // 'desc' + cmsSigProfileSequenceDescTag = 0x70736571, // 'pseq' + cmsSigProfileSequenceIdTag = 0x70736964, // 'psid' + cmsSigPs2CRD0Tag = 0x70736430, // 'psd0' + cmsSigPs2CRD1Tag = 0x70736431, // 'psd1' + cmsSigPs2CRD2Tag = 0x70736432, // 'psd2' + cmsSigPs2CRD3Tag = 0x70736433, // 'psd3' + cmsSigPs2CSATag = 0x70733273, // 'ps2s' + cmsSigPs2RenderingIntentTag = 0x70733269, // 'ps2i' + cmsSigRedColorantTag = 0x7258595A, // 'rXYZ' + cmsSigRedMatrixColumnTag = 0x7258595A, // 'rXYZ' + cmsSigRedTRCTag = 0x72545243, // 'rTRC' + cmsSigSaturationRenderingIntentGamutTag = 0x72696732, // 'rig2' + cmsSigScreeningDescTag = 0x73637264, // 'scrd' + cmsSigScreeningTag = 0x7363726E, // 'scrn' + cmsSigTechnologyTag = 0x74656368, // 'tech' + cmsSigUcrBgTag = 0x62666420, // 'bfd ' + cmsSigViewingCondDescTag = 0x76756564, // 'vued' + cmsSigViewingConditionsTag = 0x76696577, // 'view' + cmsSigVcgtTag = 0x76636774, // 'vcgt' + cmsSigMetaTag = 0x6D657461 // 'meta' + +} cmsTagSignature; + + +// ICC Technology tag +typedef enum { + cmsSigDigitalCamera = 0x6463616D, // 'dcam' + cmsSigFilmScanner = 0x6673636E, // 'fscn' + cmsSigReflectiveScanner = 0x7273636E, // 'rscn' + cmsSigInkJetPrinter = 0x696A6574, // 'ijet' + cmsSigThermalWaxPrinter = 0x74776178, // 'twax' + cmsSigElectrophotographicPrinter = 0x6570686F, // 'epho' + cmsSigElectrostaticPrinter = 0x65737461, // 'esta' + cmsSigDyeSublimationPrinter = 0x64737562, // 'dsub' + cmsSigPhotographicPaperPrinter = 0x7270686F, // 'rpho' + cmsSigFilmWriter = 0x6670726E, // 'fprn' + cmsSigVideoMonitor = 0x7669646D, // 'vidm' + cmsSigVideoCamera = 0x76696463, // 'vidc' + cmsSigProjectionTelevision = 0x706A7476, // 'pjtv' + cmsSigCRTDisplay = 0x43525420, // 'CRT ' + cmsSigPMDisplay = 0x504D4420, // 'PMD ' + cmsSigAMDisplay = 0x414D4420, // 'AMD ' + cmsSigPhotoCD = 0x4B504344, // 'KPCD' + cmsSigPhotoImageSetter = 0x696D6773, // 'imgs' + cmsSigGravure = 0x67726176, // 'grav' + cmsSigOffsetLithography = 0x6F666673, // 'offs' + cmsSigSilkscreen = 0x73696C6B, // 'silk' + cmsSigFlexography = 0x666C6578, // 'flex' + cmsSigMotionPictureFilmScanner = 0x6D706673, // 'mpfs' + cmsSigMotionPictureFilmRecorder = 0x6D706672, // 'mpfr' + cmsSigDigitalMotionPictureCamera = 0x646D7063, // 'dmpc' + cmsSigDigitalCinemaProjector = 0x64636A70 // 'dcpj' + +} cmsTechnologySignature; + + +// ICC Color spaces +typedef enum { + cmsSigXYZData = 0x58595A20, // 'XYZ ' + cmsSigLabData = 0x4C616220, // 'Lab ' + cmsSigLuvData = 0x4C757620, // 'Luv ' + cmsSigYCbCrData = 0x59436272, // 'YCbr' + cmsSigYxyData = 0x59787920, // 'Yxy ' + cmsSigRgbData = 0x52474220, // 'RGB ' + cmsSigGrayData = 0x47524159, // 'GRAY' + cmsSigHsvData = 0x48535620, // 'HSV ' + cmsSigHlsData = 0x484C5320, // 'HLS ' + cmsSigCmykData = 0x434D594B, // 'CMYK' + cmsSigCmyData = 0x434D5920, // 'CMY ' + cmsSigMCH1Data = 0x4D434831, // 'MCH1' + cmsSigMCH2Data = 0x4D434832, // 'MCH2' + cmsSigMCH3Data = 0x4D434833, // 'MCH3' + cmsSigMCH4Data = 0x4D434834, // 'MCH4' + cmsSigMCH5Data = 0x4D434835, // 'MCH5' + cmsSigMCH6Data = 0x4D434836, // 'MCH6' + cmsSigMCH7Data = 0x4D434837, // 'MCH7' + cmsSigMCH8Data = 0x4D434838, // 'MCH8' + cmsSigMCH9Data = 0x4D434839, // 'MCH9' + cmsSigMCHAData = 0x4D434841, // 'MCHA' + cmsSigMCHBData = 0x4D434842, // 'MCHB' + cmsSigMCHCData = 0x4D434843, // 'MCHC' + cmsSigMCHDData = 0x4D434844, // 'MCHD' + cmsSigMCHEData = 0x4D434845, // 'MCHE' + cmsSigMCHFData = 0x4D434846, // 'MCHF' + cmsSigNamedData = 0x6e6d636c, // 'nmcl' + cmsSig1colorData = 0x31434C52, // '1CLR' + cmsSig2colorData = 0x32434C52, // '2CLR' + cmsSig3colorData = 0x33434C52, // '3CLR' + cmsSig4colorData = 0x34434C52, // '4CLR' + cmsSig5colorData = 0x35434C52, // '5CLR' + cmsSig6colorData = 0x36434C52, // '6CLR' + cmsSig7colorData = 0x37434C52, // '7CLR' + cmsSig8colorData = 0x38434C52, // '8CLR' + cmsSig9colorData = 0x39434C52, // '9CLR' + cmsSig10colorData = 0x41434C52, // 'ACLR' + cmsSig11colorData = 0x42434C52, // 'BCLR' + cmsSig12colorData = 0x43434C52, // 'CCLR' + cmsSig13colorData = 0x44434C52, // 'DCLR' + cmsSig14colorData = 0x45434C52, // 'ECLR' + cmsSig15colorData = 0x46434C52, // 'FCLR' + cmsSigLuvKData = 0x4C75764B // 'LuvK' + +} cmsColorSpaceSignature; + +// ICC Profile Class +typedef enum { + cmsSigInputClass = 0x73636E72, // 'scnr' + cmsSigDisplayClass = 0x6D6E7472, // 'mntr' + cmsSigOutputClass = 0x70727472, // 'prtr' + cmsSigLinkClass = 0x6C696E6B, // 'link' + cmsSigAbstractClass = 0x61627374, // 'abst' + cmsSigColorSpaceClass = 0x73706163, // 'spac' + cmsSigNamedColorClass = 0x6e6d636c // 'nmcl' + +} cmsProfileClassSignature; + +// ICC Platforms +typedef enum { + cmsSigMacintosh = 0x4150504C, // 'APPL' + cmsSigMicrosoft = 0x4D534654, // 'MSFT' + cmsSigSolaris = 0x53554E57, // 'SUNW' + cmsSigSGI = 0x53474920, // 'SGI ' + cmsSigTaligent = 0x54474E54, // 'TGNT' + cmsSigUnices = 0x2A6E6978 // '*nix' // From argyll -- Not official + +} cmsPlatformSignature; + +// Reference gamut +#define cmsSigPerceptualReferenceMediumGamut 0x70726d67 //'prmg' + +// For cmsSigColorimetricIntentImageStateTag +#define cmsSigSceneColorimetryEstimates 0x73636F65 //'scoe' +#define cmsSigSceneAppearanceEstimates 0x73617065 //'sape' +#define cmsSigFocalPlaneColorimetryEstimates 0x66706365 //'fpce' +#define cmsSigReflectionHardcopyOriginalColorimetry 0x72686F63 //'rhoc' +#define cmsSigReflectionPrintOutputColorimetry 0x72706F63 //'rpoc' + +// Multi process elements types +typedef enum { + cmsSigCurveSetElemType = 0x63767374, //'cvst' + cmsSigMatrixElemType = 0x6D617466, //'matf' + cmsSigCLutElemType = 0x636C7574, //'clut' + + cmsSigBAcsElemType = 0x62414353, // 'bACS' + cmsSigEAcsElemType = 0x65414353, // 'eACS' + + // Custom from here, not in the ICC Spec + cmsSigXYZ2LabElemType = 0x6C327820, // 'l2x ' + cmsSigLab2XYZElemType = 0x78326C20, // 'x2l ' + cmsSigNamedColorElemType = 0x6E636C20, // 'ncl ' + cmsSigLabV2toV4 = 0x32203420, // '2 4 ' + cmsSigLabV4toV2 = 0x34203220, // '4 2 ' + + // Identities + cmsSigIdentityElemType = 0x69646E20 // 'idn ' + +} cmsStageSignature; + +// Types of CurveElements +typedef enum { + + cmsSigFormulaCurveSeg = 0x70617266, // 'parf' + cmsSigSampledCurveSeg = 0x73616D66, // 'samf' + cmsSigSegmentedCurve = 0x63757266 // 'curf' + +} cmsCurveSegSignature; + +// Used in ResponseCurveType +#define cmsSigStatusA 0x53746141 //'StaA' +#define cmsSigStatusE 0x53746145 //'StaE' +#define cmsSigStatusI 0x53746149 //'StaI' +#define cmsSigStatusT 0x53746154 //'StaT' +#define cmsSigStatusM 0x5374614D //'StaM' +#define cmsSigDN 0x444E2020 //'DN ' +#define cmsSigDNP 0x444E2050 //'DN P' +#define cmsSigDNN 0x444E4E20 //'DNN ' +#define cmsSigDNNP 0x444E4E50 //'DNNP' + +// Device attributes, currently defined values correspond to the low 4 bytes +// of the 8 byte attribute quantity +#define cmsReflective 0 +#define cmsTransparency 1 +#define cmsGlossy 0 +#define cmsMatte 2 + +// Common structures in ICC tags +typedef struct { + cmsUInt32Number len; + cmsUInt32Number flag; + cmsUInt8Number data[1]; + +} cmsICCData; + +// ICC date time +typedef struct { + cmsUInt16Number year; + cmsUInt16Number month; + cmsUInt16Number day; + cmsUInt16Number hours; + cmsUInt16Number minutes; + cmsUInt16Number seconds; + +} cmsDateTimeNumber; + +// ICC XYZ +typedef struct { + cmsS15Fixed16Number X; + cmsS15Fixed16Number Y; + cmsS15Fixed16Number Z; + +} cmsEncodedXYZNumber; + + +// Profile ID as computed by MD5 algorithm +typedef union { + cmsUInt8Number ID8[16]; + cmsUInt16Number ID16[8]; + cmsUInt32Number ID32[4]; + +} cmsProfileID; + + +// ---------------------------------------------------------------------------------------------- +// ICC profile internal base types. Strictly, shouldn't be declared in this header, but maybe +// somebody want to use this info for accessing profile header directly, so here it is. + +// Profile header -- it is 32-bit aligned, so no issues are expected on alignment +typedef struct { + cmsUInt32Number size; // Profile size in bytes + cmsSignature cmmId; // CMM for this profile + cmsUInt32Number version; // Format version number + cmsProfileClassSignature deviceClass; // Type of profile + cmsColorSpaceSignature colorSpace; // Color space of data + cmsColorSpaceSignature pcs; // PCS, XYZ or Lab only + cmsDateTimeNumber date; // Date profile was created + cmsSignature magic; // Magic Number to identify an ICC profile + cmsPlatformSignature platform; // Primary Platform + cmsUInt32Number flags; // Various bit settings + cmsSignature manufacturer; // Device manufacturer + cmsUInt32Number model; // Device model number + cmsUInt64Number attributes; // Device attributes + cmsUInt32Number renderingIntent;// Rendering intent + cmsEncodedXYZNumber illuminant; // Profile illuminant + cmsSignature creator; // Profile creator + cmsProfileID profileID; // Profile ID using MD5 + cmsInt8Number reserved[28]; // Reserved for future use + +} cmsICCHeader; + +// ICC base tag +typedef struct { + cmsTagTypeSignature sig; + cmsInt8Number reserved[4]; + +} cmsTagBase; + +// A tag entry in directory +typedef struct { + cmsTagSignature sig; // The tag signature + cmsUInt32Number offset; // Start of tag + cmsUInt32Number size; // Size in bytes + +} cmsTagEntry; + +// ---------------------------------------------------------------------------------------------- + +// Little CMS specific typedefs + +typedef void* cmsContext; // Context identifier for multithreaded environments +typedef void* cmsHANDLE ; // Generic handle +typedef void* cmsHPROFILE; // Opaque typedefs to hide internals +typedef void* cmsHTRANSFORM; + +#define cmsMAXCHANNELS 16 // Maximum number of channels in ICC profiles + +// Format of pixel is defined by one cmsUInt32Number, using bit fields as follows +// +// 2 1 0 +// 3 2 10987 6 5 4 3 2 1 098 7654 321 +// A O TTTTT U Y F P X S EEE CCCC BBB +// +// A: Floating point -- With this flag we can differentiate 16 bits as float and as int +// O: Optimized -- previous optimization already returns the final 8-bit value +// T: Pixeltype +// F: Flavor 0=MinIsBlack(Chocolate) 1=MinIsWhite(Vanilla) +// P: Planar? 0=Chunky, 1=Planar +// X: swap 16 bps endianess? +// S: Do swap? ie, BGR, KYMC +// E: Extra samples +// C: Channels (Samples per pixel) +// B: bytes per sample +// Y: Swap first - changes ABGR to BGRA and KCMY to CMYK + +#define FLOAT_SH(a) ((a) << 22) +#define OPTIMIZED_SH(s) ((s) << 21) +#define COLORSPACE_SH(s) ((s) << 16) +#define SWAPFIRST_SH(s) ((s) << 14) +#define FLAVOR_SH(s) ((s) << 13) +#define PLANAR_SH(p) ((p) << 12) +#define ENDIAN16_SH(e) ((e) << 11) +#define DOSWAP_SH(e) ((e) << 10) +#define EXTRA_SH(e) ((e) << 7) +#define CHANNELS_SH(c) ((c) << 3) +#define BYTES_SH(b) (b) + +// These macros unpack format specifiers into integers +#define T_FLOAT(a) (((a)>>22)&1) +#define T_OPTIMIZED(o) (((o)>>21)&1) +#define T_COLORSPACE(s) (((s)>>16)&31) +#define T_SWAPFIRST(s) (((s)>>14)&1) +#define T_FLAVOR(s) (((s)>>13)&1) +#define T_PLANAR(p) (((p)>>12)&1) +#define T_ENDIAN16(e) (((e)>>11)&1) +#define T_DOSWAP(e) (((e)>>10)&1) +#define T_EXTRA(e) (((e)>>7)&7) +#define T_CHANNELS(c) (((c)>>3)&15) +#define T_BYTES(b) ((b)&7) + + +// Pixel types +#define PT_ANY 0 // Don't check colorspace + // 1 & 2 are reserved +#define PT_GRAY 3 +#define PT_RGB 4 +#define PT_CMY 5 +#define PT_CMYK 6 +#define PT_YCbCr 7 +#define PT_YUV 8 // Lu'v' +#define PT_XYZ 9 +#define PT_Lab 10 +#define PT_YUVK 11 // Lu'v'K +#define PT_HSV 12 +#define PT_HLS 13 +#define PT_Yxy 14 + +#define PT_MCH1 15 +#define PT_MCH2 16 +#define PT_MCH3 17 +#define PT_MCH4 18 +#define PT_MCH5 19 +#define PT_MCH6 20 +#define PT_MCH7 21 +#define PT_MCH8 22 +#define PT_MCH9 23 +#define PT_MCH10 24 +#define PT_MCH11 25 +#define PT_MCH12 26 +#define PT_MCH13 27 +#define PT_MCH14 28 +#define PT_MCH15 29 + +#define PT_LabV2 30 // Identical to PT_Lab, but using the V2 old encoding + +// Some (not all!) representations + +#ifndef TYPE_RGB_8 // TYPE_RGB_8 is a very common identifier, so don't include ours + // if user has it already defined. + +#define TYPE_GRAY_8 (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1)) +#define TYPE_GRAY_8_REV (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1)|FLAVOR_SH(1)) +#define TYPE_GRAY_16 (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)) +#define TYPE_GRAY_16_REV (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1)) +#define TYPE_GRAY_16_SE (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_GRAYA_8 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1)) +#define TYPE_GRAYA_16 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)) +#define TYPE_GRAYA_16_SE (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_GRAYA_8_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_GRAYA_16_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|PLANAR_SH(1)) + +#define TYPE_RGB_8 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_RGB_8_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_BGR_8 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_BGR_8_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|PLANAR_SH(1)) +#define TYPE_RGB_16 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_RGB_16_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_RGB_16_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_BGR_16 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_BGR_16_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)) +#define TYPE_BGR_16_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) + +#define TYPE_RGBA_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_RGBA_8_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_RGBA_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_RGBA_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_RGBA_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +#define TYPE_ARGB_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_ARGB_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)) + +#define TYPE_ABGR_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_ABGR_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_ABGR_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)) +#define TYPE_ABGR_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) + +#define TYPE_BGRA_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_BGRA_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_BGRA_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|SWAPFIRST_SH(1)) + +#define TYPE_CMY_8 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_CMY_8_PLANAR (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_CMY_16 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_CMY_16_PLANAR (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_CMY_16_SE (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +#define TYPE_CMYK_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)) +#define TYPE_CMYKA_8 (COLORSPACE_SH(PT_CMYK)|EXTRA_SH(1)|CHANNELS_SH(4)|BYTES_SH(1)) +#define TYPE_CMYK_8_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1)) +#define TYPE_YUVK_8 TYPE_CMYK_8_REV +#define TYPE_CMYK_8_PLANAR (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_CMYK_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)) +#define TYPE_CMYK_16_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)) +#define TYPE_YUVK_16 TYPE_CMYK_16_REV +#define TYPE_CMYK_16_PLANAR (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_CMYK_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)) + +#define TYPE_KYMC_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) + +#define TYPE_KCMY_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_KCMY_8_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_KCMY_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|SWAPFIRST_SH(1)) +#define TYPE_KCMY_16_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_KCMY_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)|SWAPFIRST_SH(1)) + +#define TYPE_CMYK5_8 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(1)) +#define TYPE_CMYK5_16 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)) +#define TYPE_CMYK5_16_SE (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC5_8 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC5_16 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC5_16_SE (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK6_8 (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(1)) +#define TYPE_CMYK6_8_PLANAR (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_CMYK6_16 (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)) +#define TYPE_CMYK6_16_PLANAR (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_CMYK6_16_SE (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_CMYK7_8 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(1)) +#define TYPE_CMYK7_16 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)) +#define TYPE_CMYK7_16_SE (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC7_8 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC7_16 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC7_16_SE (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK8_8 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(1)) +#define TYPE_CMYK8_16 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)) +#define TYPE_CMYK8_16_SE (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC8_8 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC8_16 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC8_16_SE (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK9_8 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(1)) +#define TYPE_CMYK9_16 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)) +#define TYPE_CMYK9_16_SE (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC9_8 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC9_16 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC9_16_SE (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK10_8 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(1)) +#define TYPE_CMYK10_16 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)) +#define TYPE_CMYK10_16_SE (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC10_8 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC10_16 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC10_16_SE (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK11_8 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(1)) +#define TYPE_CMYK11_16 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)) +#define TYPE_CMYK11_16_SE (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC11_8 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC11_16 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC11_16_SE (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) +#define TYPE_CMYK12_8 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(1)) +#define TYPE_CMYK12_16 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)) +#define TYPE_CMYK12_16_SE (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|ENDIAN16_SH(1)) +#define TYPE_KYMC12_8 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(1)|DOSWAP_SH(1)) +#define TYPE_KYMC12_16 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|DOSWAP_SH(1)) +#define TYPE_KYMC12_16_SE (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) + +// Colorimetric +#define TYPE_XYZ_16 (COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_Lab_8 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_LabV2_8 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(1)) + +#define TYPE_ALab_8 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|DOSWAP_SH(1)) +#define TYPE_ALabV2_8 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|DOSWAP_SH(1)) +#define TYPE_Lab_16 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_LabV2_16 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_Yxy_16 (COLORSPACE_SH(PT_Yxy)|CHANNELS_SH(3)|BYTES_SH(2)) + +// YCbCr +#define TYPE_YCbCr_8 (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_YCbCr_8_PLANAR (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_YCbCr_16 (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_YCbCr_16_PLANAR (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_YCbCr_16_SE (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +// YUV +#define TYPE_YUV_8 (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_YUV_8_PLANAR (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_YUV_16 (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_YUV_16_PLANAR (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_YUV_16_SE (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +// HLS +#define TYPE_HLS_8 (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_HLS_8_PLANAR (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_HLS_16 (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_HLS_16_PLANAR (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_HLS_16_SE (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +// HSV +#define TYPE_HSV_8 (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(1)) +#define TYPE_HSV_8_PLANAR (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) +#define TYPE_HSV_16 (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)) +#define TYPE_HSV_16_PLANAR (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) +#define TYPE_HSV_16_SE (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) + +// Named color index. Only 16 bits allowed (don't check colorspace) +#define TYPE_NAMED_COLOR_INDEX (CHANNELS_SH(1)|BYTES_SH(2)) + +// Float formatters. +#define TYPE_XYZ_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(4)) +#define TYPE_XYZA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)) +#define TYPE_Lab_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(4)) +#define TYPE_LabA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)) +#define TYPE_GRAY_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(4)) +#define TYPE_RGB_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)) +#define TYPE_RGBA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)) +#define TYPE_CMYK_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(4)) + +// Floating point formatters. +// NOTE THAT 'BYTES' FIELD IS SET TO ZERO ON DLB because 8 bytes overflows the bitfield +#define TYPE_XYZ_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(0)) +#define TYPE_Lab_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(0)) +#define TYPE_GRAY_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(0)) +#define TYPE_RGB_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(0)) +#define TYPE_CMYK_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(0)) + +#endif + +// Colorspaces +typedef struct { + cmsFloat64Number X; + cmsFloat64Number Y; + cmsFloat64Number Z; + + } cmsCIEXYZ; + +typedef struct { + cmsFloat64Number x; + cmsFloat64Number y; + cmsFloat64Number Y; + + } cmsCIExyY; + +typedef struct { + cmsFloat64Number L; + cmsFloat64Number a; + cmsFloat64Number b; + + } cmsCIELab; + +typedef struct { + cmsFloat64Number L; + cmsFloat64Number C; + cmsFloat64Number h; + + } cmsCIELCh; + +typedef struct { + cmsFloat64Number J; + cmsFloat64Number C; + cmsFloat64Number h; + + } cmsJCh; + +typedef struct { + cmsCIEXYZ Red; + cmsCIEXYZ Green; + cmsCIEXYZ Blue; + + } cmsCIEXYZTRIPLE; + +typedef struct { + cmsCIExyY Red; + cmsCIExyY Green; + cmsCIExyY Blue; + + } cmsCIExyYTRIPLE; + +// Illuminant types for structs below +#define cmsILLUMINANT_TYPE_UNKNOWN 0x0000000 +#define cmsILLUMINANT_TYPE_D50 0x0000001 +#define cmsILLUMINANT_TYPE_D65 0x0000002 +#define cmsILLUMINANT_TYPE_D93 0x0000003 +#define cmsILLUMINANT_TYPE_F2 0x0000004 +#define cmsILLUMINANT_TYPE_D55 0x0000005 +#define cmsILLUMINANT_TYPE_A 0x0000006 +#define cmsILLUMINANT_TYPE_E 0x0000007 +#define cmsILLUMINANT_TYPE_F8 0x0000008 + +typedef struct { + cmsUInt32Number Observer; // 0 = unknown, 1=CIE 1931, 2=CIE 1964 + cmsCIEXYZ Backing; // Value of backing + cmsUInt32Number Geometry; // 0=unknown, 1=45/0, 0/45 2=0d, d/0 + cmsFloat64Number Flare; // 0..1.0 + cmsUInt32Number IlluminantType; + + } cmsICCMeasurementConditions; + +typedef struct { + cmsCIEXYZ IlluminantXYZ; // Not the same struct as CAM02, + cmsCIEXYZ SurroundXYZ; // This is for storing the tag + cmsUInt32Number IlluminantType; // viewing condition + + } cmsICCViewingConditions; + +// Support of non-standard functions -------------------------------------------------------------------------------------- + +CMSAPI int CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2); +CMSAPI long int CMSEXPORT cmsfilelength(FILE* f); + +// Plug-In registering --------------------------------------------------------------------------------------------------- + +CMSAPI cmsBool CMSEXPORT cmsPlugin(void* Plugin); +CMSAPI void CMSEXPORT cmsUnregisterPlugins(void); + +// Error logging ---------------------------------------------------------------------------------------------------------- + +// There is no error handling at all. When a function fails, it returns proper value. +// For example, all create functions does return NULL on failure. Other may return FALSE. +// It may be interesting, for the developer, to know why the function is failing. +// for that reason, lcms2 does offer a logging function. This function will get +// an ENGLISH string with some clues on what is going wrong. You can show this +// info to the end user if you wish, or just create some sort of log on disk. +// The logging function should NOT terminate the program, as this obviously can leave +// unfreed resources. It is the programmer's responsibility to check each function +// return code to make sure it didn't fail. + +#define cmsERROR_UNDEFINED 0 +#define cmsERROR_FILE 1 +#define cmsERROR_RANGE 2 +#define cmsERROR_INTERNAL 3 +#define cmsERROR_NULL 4 +#define cmsERROR_READ 5 +#define cmsERROR_SEEK 6 +#define cmsERROR_WRITE 7 +#define cmsERROR_UNKNOWN_EXTENSION 8 +#define cmsERROR_COLORSPACE_CHECK 9 +#define cmsERROR_ALREADY_DEFINED 10 +#define cmsERROR_BAD_SIGNATURE 11 +#define cmsERROR_CORRUPTION_DETECTED 12 +#define cmsERROR_NOT_SUITABLE 13 + +// Error logger is called with the ContextID when a message is raised. This gives the +// chance to know which thread is responsible of the warning and any environment associated +// with it. Non-multithreading applications may safely ignore this parameter. +// Note that under certain special circumstances, ContextID may be NULL. +typedef void (* cmsLogErrorHandlerFunction)(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text); + +// Allows user to set any specific logger +CMSAPI void CMSEXPORT cmsSetLogErrorHandler(cmsLogErrorHandlerFunction Fn); + +// Conversions -------------------------------------------------------------------------------------------------------------- + +// Returns pointers to constant structs +CMSAPI const cmsCIEXYZ* CMSEXPORT cmsD50_XYZ(void); +CMSAPI const cmsCIExyY* CMSEXPORT cmsD50_xyY(void); + +// Colorimetric space conversions +CMSAPI void CMSEXPORT cmsXYZ2xyY(cmsCIExyY* Dest, const cmsCIEXYZ* Source); +CMSAPI void CMSEXPORT cmsxyY2XYZ(cmsCIEXYZ* Dest, const cmsCIExyY* Source); +CMSAPI void CMSEXPORT cmsXYZ2Lab(const cmsCIEXYZ* WhitePoint, cmsCIELab* Lab, const cmsCIEXYZ* xyz); +CMSAPI void CMSEXPORT cmsLab2XYZ(const cmsCIEXYZ* WhitePoint, cmsCIEXYZ* xyz, const cmsCIELab* Lab); +CMSAPI void CMSEXPORT cmsLab2LCh(cmsCIELCh*LCh, const cmsCIELab* Lab); +CMSAPI void CMSEXPORT cmsLCh2Lab(cmsCIELab* Lab, const cmsCIELCh* LCh); + +// Encoding /Decoding on PCS +CMSAPI void CMSEXPORT cmsLabEncoded2Float(cmsCIELab* Lab, const cmsUInt16Number wLab[3]); +CMSAPI void CMSEXPORT cmsLabEncoded2FloatV2(cmsCIELab* Lab, const cmsUInt16Number wLab[3]); +CMSAPI void CMSEXPORT cmsFloat2LabEncoded(cmsUInt16Number wLab[3], const cmsCIELab* Lab); +CMSAPI void CMSEXPORT cmsFloat2LabEncodedV2(cmsUInt16Number wLab[3], const cmsCIELab* Lab); +CMSAPI void CMSEXPORT cmsXYZEncoded2Float(cmsCIEXYZ* fxyz, const cmsUInt16Number XYZ[3]); +CMSAPI void CMSEXPORT cmsFloat2XYZEncoded(cmsUInt16Number XYZ[3], const cmsCIEXYZ* fXYZ); + +// DeltaE metrics +CMSAPI cmsFloat64Number CMSEXPORT cmsDeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); +CMSAPI cmsFloat64Number CMSEXPORT cmsCIE94DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); +CMSAPI cmsFloat64Number CMSEXPORT cmsBFDdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); +CMSAPI cmsFloat64Number CMSEXPORT cmsCMCdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number l, cmsFloat64Number c); +CMSAPI cmsFloat64Number CMSEXPORT cmsCIE2000DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number Kl, cmsFloat64Number Kc, cmsFloat64Number Kh); + +// Temperature <-> Chromaticity (Black body) +CMSAPI cmsBool CMSEXPORT cmsWhitePointFromTemp(cmsCIExyY* WhitePoint, cmsFloat64Number TempK); +CMSAPI cmsBool CMSEXPORT cmsTempFromWhitePoint(cmsFloat64Number* TempK, const cmsCIExyY* WhitePoint); + +// Chromatic adaptation +CMSAPI cmsBool CMSEXPORT cmsAdaptToIlluminant(cmsCIEXYZ* Result, const cmsCIEXYZ* SourceWhitePt, + const cmsCIEXYZ* Illuminant, + const cmsCIEXYZ* Value); + +// CIECAM02 --------------------------------------------------------------------------------------------------- + +// Viewing conditions. Please note those are CAM model viewing conditions, and not the ICC tag viewing +// conditions, which I'm naming cmsICCViewingConditions to make differences evident. Unfortunately, the tag +// cannot deal with surround La, Yb and D value so is basically useless to store CAM02 viewing conditions. + + +#define AVG_SURROUND 1 +#define DIM_SURROUND 2 +#define DARK_SURROUND 3 +#define CUTSHEET_SURROUND 4 + +#define D_CALCULATE (-1) + +typedef struct { + cmsCIEXYZ whitePoint; + cmsFloat64Number Yb; + cmsFloat64Number La; + int surround; + cmsFloat64Number D_value; + + } cmsViewingConditions; + +CMSAPI cmsHANDLE CMSEXPORT cmsCIECAM02Init(cmsContext ContextID, const cmsViewingConditions* pVC); +CMSAPI void CMSEXPORT cmsCIECAM02Done(cmsHANDLE hModel); +CMSAPI void CMSEXPORT cmsCIECAM02Forward(cmsHANDLE hModel, const cmsCIEXYZ* pIn, cmsJCh* pOut); +CMSAPI void CMSEXPORT cmsCIECAM02Reverse(cmsHANDLE hModel, const cmsJCh* pIn, cmsCIEXYZ* pOut); + + +// Tone curves ----------------------------------------------------------------------------------------- + +// This describes a curve segment. For a table of supported types, see the manual. User can increase the number of +// available types by using a proper plug-in. Parametric segments allow 10 parameters at most + +typedef struct { + cmsFloat32Number x0, x1; // Domain; for x0 < x <= x1 + cmsInt32Number Type; // Parametric type, Type == 0 means sampled segment. Negative values are reserved + cmsFloat64Number Params[10]; // Parameters if Type != 0 + cmsUInt32Number nGridPoints; // Number of grid points if Type == 0 + cmsFloat32Number* SampledPoints; // Points to an array of floats if Type == 0 + +} cmsCurveSegment; + +// The internal representation is none of your business. +typedef struct _cms_curve_struct cmsToneCurve; + +CMSAPI cmsToneCurve* CMSEXPORT cmsBuildSegmentedToneCurve(cmsContext ContextID, cmsInt32Number nSegments, const cmsCurveSegment Segments[]); +CMSAPI cmsToneCurve* CMSEXPORT cmsBuildParametricToneCurve(cmsContext ContextID, cmsInt32Number Type, const cmsFloat64Number Params[]); +CMSAPI cmsToneCurve* CMSEXPORT cmsBuildGamma(cmsContext ContextID, cmsFloat64Number Gamma); +CMSAPI cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurve16(cmsContext ContextID, cmsInt32Number nEntries, const cmsUInt16Number values[]); +CMSAPI cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurveFloat(cmsContext ContextID, cmsUInt32Number nEntries, const cmsFloat32Number values[]); +CMSAPI void CMSEXPORT cmsFreeToneCurve(cmsToneCurve* Curve); +CMSAPI void CMSEXPORT cmsFreeToneCurveTriple(cmsToneCurve* Curve[3]); +CMSAPI cmsToneCurve* CMSEXPORT cmsDupToneCurve(const cmsToneCurve* Src); +CMSAPI cmsToneCurve* CMSEXPORT cmsReverseToneCurve(const cmsToneCurve* InGamma); +CMSAPI cmsToneCurve* CMSEXPORT cmsReverseToneCurveEx(cmsInt32Number nResultSamples, const cmsToneCurve* InGamma); +CMSAPI cmsToneCurve* CMSEXPORT cmsJoinToneCurve(cmsContext ContextID, const cmsToneCurve* X, const cmsToneCurve* Y, cmsUInt32Number nPoints); +CMSAPI cmsBool CMSEXPORT cmsSmoothToneCurve(cmsToneCurve* Tab, cmsFloat64Number lambda); +CMSAPI cmsFloat32Number CMSEXPORT cmsEvalToneCurveFloat(const cmsToneCurve* Curve, cmsFloat32Number v); +CMSAPI cmsUInt16Number CMSEXPORT cmsEvalToneCurve16(const cmsToneCurve* Curve, cmsUInt16Number v); +CMSAPI cmsBool CMSEXPORT cmsIsToneCurveMultisegment(const cmsToneCurve* InGamma); +CMSAPI cmsBool CMSEXPORT cmsIsToneCurveLinear(const cmsToneCurve* Curve); +CMSAPI cmsBool CMSEXPORT cmsIsToneCurveMonotonic(const cmsToneCurve* t); +CMSAPI cmsBool CMSEXPORT cmsIsToneCurveDescending(const cmsToneCurve* t); +CMSAPI cmsInt32Number CMSEXPORT cmsGetToneCurveParametricType(const cmsToneCurve* t); +CMSAPI cmsFloat64Number CMSEXPORT cmsEstimateGamma(const cmsToneCurve* t, cmsFloat64Number Precision); + + +// Implements pipelines of multi-processing elements ------------------------------------------------------------- + +// Nothing to see here, move along +typedef struct _cmsPipeline_struct cmsPipeline; +typedef struct _cmsStage_struct cmsStage; + +// Those are hi-level pipelines +CMSAPI cmsPipeline* CMSEXPORT cmsPipelineAlloc(cmsContext ContextID, cmsUInt32Number InputChannels, cmsUInt32Number OutputChannels); +CMSAPI void CMSEXPORT cmsPipelineFree(cmsPipeline* lut); +CMSAPI cmsPipeline* CMSEXPORT cmsPipelineDup(const cmsPipeline* Orig); + +CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineInputChannels(const cmsPipeline* lut); +CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineOutputChannels(const cmsPipeline* lut); + +CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineStageCount(const cmsPipeline* lut); +CMSAPI cmsStage* CMSEXPORT cmsPipelineGetPtrToFirstStage(const cmsPipeline* lut); +CMSAPI cmsStage* CMSEXPORT cmsPipelineGetPtrToLastStage(const cmsPipeline* lut); + +CMSAPI void CMSEXPORT cmsPipelineEval16(const cmsUInt16Number In[], cmsUInt16Number Out[], const cmsPipeline* lut); +CMSAPI void CMSEXPORT cmsPipelineEvalFloat(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsPipeline* lut); +CMSAPI cmsBool CMSEXPORT cmsPipelineEvalReverseFloat(cmsFloat32Number Target[], cmsFloat32Number Result[], cmsFloat32Number Hint[], const cmsPipeline* lut); +CMSAPI cmsBool CMSEXPORT cmsPipelineCat(cmsPipeline* l1, const cmsPipeline* l2); +CMSAPI cmsBool CMSEXPORT cmsPipelineSetSaveAs8bitsFlag(cmsPipeline* lut, cmsBool On); + +// Where to place/locate the stages in the pipeline chain +typedef enum { cmsAT_BEGIN, cmsAT_END } cmsStageLoc; + +CMSAPI void CMSEXPORT cmsPipelineInsertStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage* mpe); +CMSAPI void CMSEXPORT cmsPipelineUnlinkStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage** mpe); + +// This function is quite useful to analyze the structure of a Pipeline and retrieve the Stage elements +// that conform the Pipeline. It should be called with the Pipeline, the number of expected elements and +// then a list of expected types followed with a list of double pointers to Stage elements. If +// the function founds a match with current pipeline, it fills the pointers and returns TRUE +// if not, returns FALSE without touching anything. +CMSAPI cmsBool CMSEXPORT cmsPipelineCheckAndRetreiveStages(const cmsPipeline* Lut, cmsUInt32Number n, ...); + +// Matrix has double precision and CLUT has only float precision. That is because an ICC profile can encode +// matrices with far more precision that CLUTS +CMSAPI cmsStage* CMSEXPORT cmsStageAllocIdentity(cmsContext ContextID, cmsUInt32Number nChannels); +CMSAPI cmsStage* CMSEXPORT cmsStageAllocToneCurves(cmsContext ContextID, cmsUInt32Number nChannels, cmsToneCurve* const Curves[]); +CMSAPI cmsStage* CMSEXPORT cmsStageAllocMatrix(cmsContext ContextID, cmsUInt32Number Rows, cmsUInt32Number Cols, const cmsFloat64Number* Matrix, const cmsFloat64Number* Offset); + +CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLut16bit(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table); +CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLutFloat(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table); + +CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLut16bitGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table); +CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLutFloatGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table); + +CMSAPI cmsStage* CMSEXPORT cmsStageDup(cmsStage* mpe); +CMSAPI void CMSEXPORT cmsStageFree(cmsStage* mpe); +CMSAPI cmsStage* CMSEXPORT cmsStageNext(const cmsStage* mpe); + +CMSAPI cmsUInt32Number CMSEXPORT cmsStageInputChannels(const cmsStage* mpe); +CMSAPI cmsUInt32Number CMSEXPORT cmsStageOutputChannels(const cmsStage* mpe); +CMSAPI cmsStageSignature CMSEXPORT cmsStageType(const cmsStage* mpe); +CMSAPI void* CMSEXPORT cmsStageData(const cmsStage* mpe); + +// Sampling +typedef cmsInt32Number (* cmsSAMPLER16) (register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register void * Cargo); + +typedef cmsInt32Number (* cmsSAMPLERFLOAT)(register const cmsFloat32Number In[], + register cmsFloat32Number Out[], + register void * Cargo); + +// Use this flag to prevent changes being written to destination +#define SAMPLER_INSPECT 0x01000000 + +// For CLUT only +CMSAPI cmsBool CMSEXPORT cmsStageSampleCLut16bit(cmsStage* mpe, cmsSAMPLER16 Sampler, void* Cargo, cmsUInt32Number dwFlags); +CMSAPI cmsBool CMSEXPORT cmsStageSampleCLutFloat(cmsStage* mpe, cmsSAMPLERFLOAT Sampler, void* Cargo, cmsUInt32Number dwFlags); + + +// Slicers +CMSAPI cmsBool CMSEXPORT cmsSliceSpace16(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], + cmsSAMPLER16 Sampler, void * Cargo); + +CMSAPI cmsBool CMSEXPORT cmsSliceSpaceFloat(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], + cmsSAMPLERFLOAT Sampler, void * Cargo); + +// Multilocalized Unicode management --------------------------------------------------------------------------------------- + +typedef struct _cms_MLU_struct cmsMLU; + +#define cmsNoLanguage "\0\0" +#define cmsNoCountry "\0\0" + +CMSAPI cmsMLU* CMSEXPORT cmsMLUalloc(cmsContext ContextID, cmsUInt32Number nItems); +CMSAPI void CMSEXPORT cmsMLUfree(cmsMLU* mlu); +CMSAPI cmsMLU* CMSEXPORT cmsMLUdup(const cmsMLU* mlu); + +CMSAPI cmsBool CMSEXPORT cmsMLUsetASCII(cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + const char* ASCIIString); +CMSAPI cmsBool CMSEXPORT cmsMLUsetWide(cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + const wchar_t* WideString); + +CMSAPI cmsUInt32Number CMSEXPORT cmsMLUgetASCII(const cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + char* Buffer, cmsUInt32Number BufferSize); + +CMSAPI cmsUInt32Number CMSEXPORT cmsMLUgetWide(const cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + wchar_t* Buffer, cmsUInt32Number BufferSize); + +CMSAPI cmsBool CMSEXPORT cmsMLUgetTranslation(const cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + char ObtainedLanguage[3], char ObtainedCountry[3]); + +// Undercolorremoval & black generation ------------------------------------------------------------------------------------- + +typedef struct { + cmsToneCurve* Ucr; + cmsToneCurve* Bg; + cmsMLU* Desc; + +} cmsUcrBg; + +// Screening ---------------------------------------------------------------------------------------------------------------- + +#define cmsPRINTER_DEFAULT_SCREENS 0x0001 +#define cmsFREQUENCE_UNITS_LINES_CM 0x0000 +#define cmsFREQUENCE_UNITS_LINES_INCH 0x0002 + +#define cmsSPOT_UNKNOWN 0 +#define cmsSPOT_PRINTER_DEFAULT 1 +#define cmsSPOT_ROUND 2 +#define cmsSPOT_DIAMOND 3 +#define cmsSPOT_ELLIPSE 4 +#define cmsSPOT_LINE 5 +#define cmsSPOT_SQUARE 6 +#define cmsSPOT_CROSS 7 + +typedef struct { + cmsFloat64Number Frequency; + cmsFloat64Number ScreenAngle; + cmsUInt32Number SpotShape; + +} cmsScreeningChannel; + +typedef struct { + cmsUInt32Number Flag; + cmsUInt32Number nChannels; + cmsScreeningChannel Channels[cmsMAXCHANNELS]; + +} cmsScreening; + + +// Named color ----------------------------------------------------------------------------------------------------------------- + +typedef struct _cms_NAMEDCOLORLIST_struct cmsNAMEDCOLORLIST; + +CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsAllocNamedColorList(cmsContext ContextID, + cmsUInt32Number n, + cmsUInt32Number ColorantCount, + const char* Prefix, const char* Suffix); + +CMSAPI void CMSEXPORT cmsFreeNamedColorList(cmsNAMEDCOLORLIST* v); +CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsDupNamedColorList(const cmsNAMEDCOLORLIST* v); +CMSAPI cmsBool CMSEXPORT cmsAppendNamedColor(cmsNAMEDCOLORLIST* v, const char* Name, + cmsUInt16Number PCS[3], + cmsUInt16Number Colorant[cmsMAXCHANNELS]); + +CMSAPI cmsUInt32Number CMSEXPORT cmsNamedColorCount(const cmsNAMEDCOLORLIST* v); +CMSAPI cmsInt32Number CMSEXPORT cmsNamedColorIndex(const cmsNAMEDCOLORLIST* v, const char* Name); + +CMSAPI cmsBool CMSEXPORT cmsNamedColorInfo(const cmsNAMEDCOLORLIST* NamedColorList, cmsUInt32Number nColor, + char* Name, + char* Prefix, + char* Suffix, + cmsUInt16Number* PCS, + cmsUInt16Number* Colorant); + +// Retrieve named color list from transform +CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsGetNamedColorList(cmsHTRANSFORM xform); + +// Profile sequence ----------------------------------------------------------------------------------------------------- + +// Profile sequence descriptor. Some fields come from profile sequence descriptor tag, others +// come from Profile Sequence Identifier Tag +typedef struct { + cmsSignature deviceMfg; + cmsSignature deviceModel; + cmsUInt64Number attributes; + cmsTechnologySignature technology; + cmsProfileID ProfileID; + cmsMLU* Manufacturer; + cmsMLU* Model; + cmsMLU* Description; + +} cmsPSEQDESC; + +typedef struct { + + cmsUInt32Number n; + cmsContext ContextID; + cmsPSEQDESC* seq; + +} cmsSEQ; + +CMSAPI cmsSEQ* CMSEXPORT cmsAllocProfileSequenceDescription(cmsContext ContextID, cmsUInt32Number n); +CMSAPI cmsSEQ* CMSEXPORT cmsDupProfileSequenceDescription(const cmsSEQ* pseq); +CMSAPI void CMSEXPORT cmsFreeProfileSequenceDescription(cmsSEQ* pseq); + +// Dictionaries -------------------------------------------------------------------------------------------------------- + +typedef struct _cmsDICTentry_struct { + + struct _cmsDICTentry_struct* Next; + + cmsMLU *DisplayName; + cmsMLU *DisplayValue; + wchar_t* Name; + wchar_t* Value; + +} cmsDICTentry; + +CMSAPI cmsHANDLE CMSEXPORT cmsDictAlloc(cmsContext ContextID); +CMSAPI void CMSEXPORT cmsDictFree(cmsHANDLE hDict); +CMSAPI cmsHANDLE CMSEXPORT cmsDictDup(cmsHANDLE hDict); + +CMSAPI cmsBool CMSEXPORT cmsDictAddEntry(cmsHANDLE hDict, const wchar_t* Name, const wchar_t* Value, const cmsMLU *DisplayName, const cmsMLU *DisplayValue); +CMSAPI const cmsDICTentry* CMSEXPORT cmsDictGetEntryList(cmsHANDLE hDict); +CMSAPI const cmsDICTentry* CMSEXPORT cmsDictNextEntry(const cmsDICTentry* e); + +// Access to Profile data ---------------------------------------------------------------------------------------------- +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID); + +CMSAPI cmsContext CMSEXPORT cmsGetProfileContextID(cmsHPROFILE hProfile); +CMSAPI cmsInt32Number CMSEXPORT cmsGetTagCount(cmsHPROFILE hProfile); +CMSAPI cmsTagSignature CMSEXPORT cmsGetTagSignature(cmsHPROFILE hProfile, cmsUInt32Number n); +CMSAPI cmsBool CMSEXPORT cmsIsTag(cmsHPROFILE hProfile, cmsTagSignature sig); + +// Read and write pre-formatted data +CMSAPI void* CMSEXPORT cmsReadTag(cmsHPROFILE hProfile, cmsTagSignature sig); +CMSAPI cmsBool CMSEXPORT cmsWriteTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data); +CMSAPI cmsBool CMSEXPORT cmsLinkTag(cmsHPROFILE hProfile, cmsTagSignature sig, cmsTagSignature dest); +CMSAPI cmsTagSignature CMSEXPORT cmsTagLinkedTo(cmsHPROFILE hProfile, cmsTagSignature sig); + +// Read and write raw data +CMSAPI cmsInt32Number CMSEXPORT cmsReadRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, void* Buffer, cmsUInt32Number BufferSize); +CMSAPI cmsBool CMSEXPORT cmsWriteRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data, cmsUInt32Number Size); + +// Access header data +#define cmsEmbeddedProfileFalse 0x00000000 +#define cmsEmbeddedProfileTrue 0x00000001 +#define cmsUseAnywhere 0x00000000 +#define cmsUseWithEmbeddedDataOnly 0x00000002 + +CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderFlags(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsGetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number* Flags); +CMSAPI void CMSEXPORT cmsGetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID); +CMSAPI cmsBool CMSEXPORT cmsGetHeaderCreationDateTime(cmsHPROFILE hProfile, struct tm *Dest); +CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderRenderingIntent(cmsHPROFILE hProfile); + +CMSAPI void CMSEXPORT cmsSetHeaderFlags(cmsHPROFILE hProfile, cmsUInt32Number Flags); +CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderManufacturer(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetHeaderManufacturer(cmsHPROFILE hProfile, cmsUInt32Number manufacturer); +CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderModel(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetHeaderModel(cmsHPROFILE hProfile, cmsUInt32Number model); +CMSAPI void CMSEXPORT cmsSetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number Flags); +CMSAPI void CMSEXPORT cmsSetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID); +CMSAPI void CMSEXPORT cmsSetHeaderRenderingIntent(cmsHPROFILE hProfile, cmsUInt32Number RenderingIntent); + +CMSAPI cmsColorSpaceSignature + CMSEXPORT cmsGetPCS(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetPCS(cmsHPROFILE hProfile, cmsColorSpaceSignature pcs); +CMSAPI cmsColorSpaceSignature + CMSEXPORT cmsGetColorSpace(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetColorSpace(cmsHPROFILE hProfile, cmsColorSpaceSignature sig); +CMSAPI cmsProfileClassSignature + CMSEXPORT cmsGetDeviceClass(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetDeviceClass(cmsHPROFILE hProfile, cmsProfileClassSignature sig); +CMSAPI void CMSEXPORT cmsSetProfileVersion(cmsHPROFILE hProfile, cmsFloat64Number Version); +CMSAPI cmsFloat64Number CMSEXPORT cmsGetProfileVersion(cmsHPROFILE hProfile); + +CMSAPI cmsUInt32Number CMSEXPORT cmsGetEncodedICCversion(cmsHPROFILE hProfile); +CMSAPI void CMSEXPORT cmsSetEncodedICCversion(cmsHPROFILE hProfile, cmsUInt32Number Version); + +// How profiles may be used +#define LCMS_USED_AS_INPUT 0 +#define LCMS_USED_AS_OUTPUT 1 +#define LCMS_USED_AS_PROOF 2 + +CMSAPI cmsBool CMSEXPORT cmsIsIntentSupported(cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number UsedDirection); +CMSAPI cmsBool CMSEXPORT cmsIsMatrixShaper(cmsHPROFILE hProfile); +CMSAPI cmsBool CMSEXPORT cmsIsCLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number UsedDirection); + +// Translate form/to our notation to ICC +CMSAPI cmsColorSpaceSignature CMSEXPORT _cmsICCcolorSpace(int OurNotation); +CMSAPI int CMSEXPORT _cmsLCMScolorSpace(cmsColorSpaceSignature ProfileSpace); + +CMSAPI cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace); + +// Build a suitable formatter for the colorspace of this profile +CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat); +CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForPCSOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat); + + +// Localized info +typedef enum { + cmsInfoDescription = 0, + cmsInfoManufacturer = 1, + cmsInfoModel = 2, + cmsInfoCopyright = 3 +} cmsInfoType; + +CMSAPI cmsUInt32Number CMSEXPORT cmsGetProfileInfo(cmsHPROFILE hProfile, cmsInfoType Info, + const char LanguageCode[3], const char CountryCode[3], + wchar_t* Buffer, cmsUInt32Number BufferSize); + +CMSAPI cmsUInt32Number CMSEXPORT cmsGetProfileInfoASCII(cmsHPROFILE hProfile, cmsInfoType Info, + const char LanguageCode[3], const char CountryCode[3], + char* Buffer, cmsUInt32Number BufferSize); + +// IO handlers ---------------------------------------------------------------------------------------------------------- + +typedef struct _cms_io_handler cmsIOHANDLER; + +CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromFile(cmsContext ContextID, const char* FileName, const char* AccessMode); +CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream); +CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromMem(cmsContext ContextID, void *Buffer, cmsUInt32Number size, const char* AccessMode); +CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromNULL(cmsContext ContextID); +CMSAPI cmsBool CMSEXPORT cmsCloseIOhandler(cmsIOHANDLER* io); + +// MD5 message digest -------------------------------------------------------------------------------------------------- + +CMSAPI cmsBool CMSEXPORT cmsMD5computeID(cmsHPROFILE hProfile); + +// Profile high level funtions ------------------------------------------------------------------------------------------ + +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromFile(const char *ICCProfile, const char *sAccess); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromFileTHR(cmsContext ContextID, const char *ICCProfile, const char *sAccess); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char* sAccess); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromStreamTHR(cmsContext ContextID, FILE* ICCProfile, const char* sAccess); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromMem(const void * MemPtr, cmsUInt32Number dwSize); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromMemTHR(cmsContext ContextID, const void * MemPtr, cmsUInt32Number dwSize); +CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromIOhandlerTHR(cmsContext ContextID, cmsIOHANDLER* io); +CMSAPI cmsBool CMSEXPORT cmsCloseProfile(cmsHPROFILE hProfile); + +CMSAPI cmsBool CMSEXPORT cmsSaveProfileToFile(cmsHPROFILE hProfile, const char* FileName); +CMSAPI cmsBool CMSEXPORT cmsSaveProfileToStream(cmsHPROFILE hProfile, FILE* Stream); +CMSAPI cmsBool CMSEXPORT cmsSaveProfileToMem(cmsHPROFILE hProfile, void *MemPtr, cmsUInt32Number* BytesNeeded); +CMSAPI cmsUInt32Number CMSEXPORT cmsSaveProfileToIOhandler(cmsHPROFILE hProfile, cmsIOHANDLER* io); + +// Predefined virtual profiles ------------------------------------------------------------------------------------------ + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateRGBProfileTHR(cmsContext ContextID, + const cmsCIExyY* WhitePoint, + const cmsCIExyYTRIPLE* Primaries, + cmsToneCurve* const TransferFunction[3]); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateRGBProfile(const cmsCIExyY* WhitePoint, + const cmsCIExyYTRIPLE* Primaries, + cmsToneCurve* const TransferFunction[3]); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateGrayProfileTHR(cmsContext ContextID, + const cmsCIExyY* WhitePoint, + const cmsToneCurve* TransferFunction); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateGrayProfile(const cmsCIExyY* WhitePoint, + const cmsToneCurve* TransferFunction); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLinkTHR(cmsContext ContextID, + cmsColorSpaceSignature ColorSpace, + cmsToneCurve* const TransferFunctions[]); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLink(cmsColorSpaceSignature ColorSpace, + cmsToneCurve* const TransferFunctions[]); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLinkTHR(cmsContext ContextID, + cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLink(cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit); + + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab2ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab2Profile(const cmsCIExyY* WhitePoint); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab4ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab4Profile(const cmsCIExyY* WhitePoint); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateXYZProfileTHR(cmsContext ContextID); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateXYZProfile(void); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfileTHR(cmsContext ContextID); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfile(void); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfileTHR(cmsContext ContextID, + int nLUTPoints, + cmsFloat64Number Bright, + cmsFloat64Number Contrast, + cmsFloat64Number Hue, + cmsFloat64Number Saturation, + int TempSrc, + int TempDest); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfile(int nLUTPoints, + cmsFloat64Number Bright, + cmsFloat64Number Contrast, + cmsFloat64Number Hue, + cmsFloat64Number Saturation, + int TempSrc, + int TempDest); + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateNULLProfileTHR(cmsContext ContextID); +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateNULLProfile(void); + +// Converts a transform to a devicelink profile +CMSAPI cmsHPROFILE CMSEXPORT cmsTransform2DeviceLink(cmsHTRANSFORM hTransform, cmsFloat64Number Version, cmsUInt32Number dwFlags); + +// Intents ---------------------------------------------------------------------------------------------- + +// ICC Intents +#define INTENT_PERCEPTUAL 0 +#define INTENT_RELATIVE_COLORIMETRIC 1 +#define INTENT_SATURATION 2 +#define INTENT_ABSOLUTE_COLORIMETRIC 3 + +// Non-ICC intents +#define INTENT_PRESERVE_K_ONLY_PERCEPTUAL 10 +#define INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC 11 +#define INTENT_PRESERVE_K_ONLY_SATURATION 12 +#define INTENT_PRESERVE_K_PLANE_PERCEPTUAL 13 +#define INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC 14 +#define INTENT_PRESERVE_K_PLANE_SATURATION 15 + +// Call with NULL as parameters to get the intent count +CMSAPI cmsUInt32Number CMSEXPORT cmsGetSupportedIntents(cmsUInt32Number nMax, cmsUInt32Number* Codes, char** Descriptions); + +// Flags + +#define cmsFLAGS_NOCACHE 0x0040 // Inhibit 1-pixel cache +#define cmsFLAGS_NOOPTIMIZE 0x0100 // Inhibit optimizations +#define cmsFLAGS_NULLTRANSFORM 0x0200 // Don't transform anyway + +// Proofing flags +#define cmsFLAGS_GAMUTCHECK 0x1000 // Out of Gamut alarm +#define cmsFLAGS_SOFTPROOFING 0x4000 // Do softproofing + +// Misc +#define cmsFLAGS_BLACKPOINTCOMPENSATION 0x2000 +#define cmsFLAGS_NOWHITEONWHITEFIXUP 0x0004 // Don't fix scum dot +#define cmsFLAGS_HIGHRESPRECALC 0x0400 // Use more memory to give better accurancy +#define cmsFLAGS_LOWRESPRECALC 0x0800 // Use less memory to minimize resouces + +// For devicelink creation +#define cmsFLAGS_8BITS_DEVICELINK 0x0008 // Create 8 bits devicelinks +#define cmsFLAGS_GUESSDEVICECLASS 0x0020 // Guess device class (for transform2devicelink) +#define cmsFLAGS_KEEP_SEQUENCE 0x0080 // Keep profile sequence for devicelink creation + +// Specific to a particular optimizations +#define cmsFLAGS_FORCE_CLUT 0x0002 // Force CLUT optimization +#define cmsFLAGS_CLUT_POST_LINEARIZATION 0x0001 // create postlinearization tables if possible +#define cmsFLAGS_CLUT_PRE_LINEARIZATION 0x0010 // create prelinearization tables if possible + +// Fine-tune control over number of gridpoints +#define cmsFLAGS_GRIDPOINTS(n) (((n) & 0xFF) << 16) + +// CRD special +#define cmsFLAGS_NODEFAULTRESOURCEDEF 0x01000000 + +// Transforms --------------------------------------------------------------------------------------------------- + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateTransformTHR(cmsContext ContextID, + cmsHPROFILE Input, + cmsUInt32Number InputFormat, + cmsHPROFILE Output, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags); + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateTransform(cmsHPROFILE Input, + cmsUInt32Number InputFormat, + cmsHPROFILE Output, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags); + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransformTHR(cmsContext ContextID, + cmsHPROFILE Input, + cmsUInt32Number InputFormat, + cmsHPROFILE Output, + cmsUInt32Number OutputFormat, + cmsHPROFILE Proofing, + cmsUInt32Number Intent, + cmsUInt32Number ProofingIntent, + cmsUInt32Number dwFlags); + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransform(cmsHPROFILE Input, + cmsUInt32Number InputFormat, + cmsHPROFILE Output, + cmsUInt32Number OutputFormat, + cmsHPROFILE Proofing, + cmsUInt32Number Intent, + cmsUInt32Number ProofingIntent, + cmsUInt32Number dwFlags); + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransformTHR(cmsContext ContextID, + cmsHPROFILE hProfiles[], + cmsUInt32Number nProfiles, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags); + + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransform(cmsHPROFILE hProfiles[], + cmsUInt32Number nProfiles, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags); + + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateExtendedTransform(cmsContext ContextID, + cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsUInt32Number Intents[], + cmsFloat64Number AdaptationStates[], + cmsHPROFILE hGamutProfile, + cmsUInt32Number nGamutPCSposition, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat, + cmsUInt32Number dwFlags); + +CMSAPI void CMSEXPORT cmsDeleteTransform(cmsHTRANSFORM hTransform); + +CMSAPI void CMSEXPORT cmsDoTransform(cmsHTRANSFORM Transform, + const void * InputBuffer, + void * OutputBuffer, + cmsUInt32Number Size); + +CMSAPI void CMSEXPORT cmsSetAlarmCodes(cmsUInt16Number NewAlarm[cmsMAXCHANNELS]); +CMSAPI void CMSEXPORT cmsGetAlarmCodes(cmsUInt16Number NewAlarm[cmsMAXCHANNELS]); + +// Adaptation state for absolute colorimetric intent +CMSAPI cmsFloat64Number CMSEXPORT cmsSetAdaptationState(cmsFloat64Number d); + +// Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed +CMSAPI cmsContext CMSEXPORT cmsGetTransformContextID(cmsHTRANSFORM hTransform); + +// Grab the input/output formats +CMSAPI cmsUInt32Number CMSEXPORT cmsGetTransformInputFormat(cmsHTRANSFORM hTransform); +CMSAPI cmsUInt32Number CMSEXPORT cmsGetTransformOutputFormat(cmsHTRANSFORM hTransform); + +// For backwards compatibility +CMSAPI cmsBool CMSEXPORT cmsChangeBuffersFormat(cmsHTRANSFORM hTransform, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat); + + + +// PostScript ColorRenderingDictionary and ColorSpaceArray ---------------------------------------------------- + +typedef enum { cmsPS_RESOURCE_CSA, cmsPS_RESOURCE_CRD } cmsPSResourceType; + +// lcms2 unified method to access postscript color resources +CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptColorResource(cmsContext ContextID, + cmsPSResourceType Type, + cmsHPROFILE hProfile, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags, + cmsIOHANDLER* io); + +CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptCSA(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen); +CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptCRD(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen); + + +// IT8.7 / CGATS.17-200x handling ----------------------------------------------------------------------------- + +CMSAPI cmsHANDLE CMSEXPORT cmsIT8Alloc(cmsContext ContextID); +CMSAPI void CMSEXPORT cmsIT8Free(cmsHANDLE hIT8); + +// Tables +CMSAPI cmsUInt32Number CMSEXPORT cmsIT8TableCount(cmsHANDLE hIT8); +CMSAPI cmsInt32Number CMSEXPORT cmsIT8SetTable(cmsHANDLE hIT8, cmsUInt32Number nTable); + +// Persistence +CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromFile(cmsContext ContextID, const char* cFileName); +CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromMem(cmsContext ContextID, void *Ptr, cmsUInt32Number len); +// CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromIOhandler(cmsContext ContextID, cmsIOHANDLER* io); + +CMSAPI cmsBool CMSEXPORT cmsIT8SaveToFile(cmsHANDLE hIT8, const char* cFileName); +CMSAPI cmsBool CMSEXPORT cmsIT8SaveToMem(cmsHANDLE hIT8, void *MemPtr, cmsUInt32Number* BytesNeeded); + +// Properties +CMSAPI const char* CMSEXPORT cmsIT8GetSheetType(cmsHANDLE hIT8); +CMSAPI cmsBool CMSEXPORT cmsIT8SetSheetType(cmsHANDLE hIT8, const char* Type); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetComment(cmsHANDLE hIT8, const char* cComment); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyStr(cmsHANDLE hIT8, const char* cProp, const char *Str); +CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyDbl(cmsHANDLE hIT8, const char* cProp, cmsFloat64Number Val); +CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyHex(cmsHANDLE hIT8, const char* cProp, cmsUInt32Number Val); +CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyUncooked(cmsHANDLE hIT8, const char* Key, const char* Buffer); + + +CMSAPI const char* CMSEXPORT cmsIT8GetProperty(cmsHANDLE hIT8, const char* cProp); +CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetPropertyDbl(cmsHANDLE hIT8, const char* cProp); +CMSAPI cmsUInt32Number CMSEXPORT cmsIT8EnumProperties(cmsHANDLE hIT8, char ***PropertyNames); + +// Datasets +CMSAPI const char* CMSEXPORT cmsIT8GetDataRowCol(cmsHANDLE hIT8, int row, int col); +CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetDataRowColDbl(cmsHANDLE hIT8, int row, int col); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetDataRowCol(cmsHANDLE hIT8, int row, int col, + const char* Val); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetDataRowColDbl(cmsHANDLE hIT8, int row, int col, + cmsFloat64Number Val); + +CMSAPI const char* CMSEXPORT cmsIT8GetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample); + + +CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetDataDbl(cmsHANDLE hIT8, const char* cPatch, const char* cSample); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetData(cmsHANDLE hIT8, const char* cPatch, + const char* cSample, + const char *Val); + +CMSAPI cmsBool CMSEXPORT cmsIT8SetDataDbl(cmsHANDLE hIT8, const char* cPatch, + const char* cSample, + cmsFloat64Number Val); + +CMSAPI int CMSEXPORT cmsIT8FindDataFormat(cmsHANDLE hIT8, const char* cSample); +CMSAPI cmsBool CMSEXPORT cmsIT8SetDataFormat(cmsHANDLE hIT8, int n, const char *Sample); +CMSAPI int CMSEXPORT cmsIT8EnumDataFormat(cmsHANDLE hIT8, char ***SampleNames); + +CMSAPI const char* CMSEXPORT cmsIT8GetPatchName(cmsHANDLE hIT8, int nPatch, char* buffer); + +// The LABEL extension +CMSAPI int CMSEXPORT cmsIT8SetTableByLabel(cmsHANDLE hIT8, const char* cSet, const char* cField, const char* ExpectedType); + +// Formatter for double +CMSAPI void CMSEXPORT cmsIT8DefineDblFormat(cmsHANDLE hIT8, const char* Formatter); + +// Gamut boundary description routines ------------------------------------------------------------------------------ + +CMSAPI cmsHANDLE CMSEXPORT cmsGBDAlloc(cmsContext ContextID); +CMSAPI void CMSEXPORT cmsGBDFree(cmsHANDLE hGBD); +CMSAPI cmsBool CMSEXPORT cmsGDBAddPoint(cmsHANDLE hGBD, const cmsCIELab* Lab); +CMSAPI cmsBool CMSEXPORT cmsGDBCompute(cmsHANDLE hGDB, cmsUInt32Number dwFlags); +CMSAPI cmsBool CMSEXPORT cmsGDBCheckPoint(cmsHANDLE hGBD, const cmsCIELab* Lab); + +// Feature detection ---------------------------------------------------------------------------------------------- + +// Estimate the black point +CMSAPI cmsBool CMSEXPORT cmsDetectBlackPoint(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags); + +// Estimate total area coverage +CMSAPI cmsFloat64Number CMSEXPORT cmsDetectTAC(cmsHPROFILE hProfile); + + +// Poor man's gamut mapping +CMSAPI cmsBool CMSEXPORT cmsDesaturateLab(cmsCIELab* Lab, + double amax, double amin, + double bmax, double bmin); + +#ifndef CMS_USE_CPP_API +# ifdef __cplusplus + } +# endif +#endif + +#define _lcms2_H +#endif diff --git a/include/lcms2_plugin.h b/include/lcms2_plugin.h new file mode 100644 index 0000000..340f27c --- /dev/null +++ b/include/lcms2_plugin.h @@ -0,0 +1,535 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// +// This is the plug-in header file. Normal LittleCMS clients should not use it. +// It is provided for plug-in writters that may want to access the support +// functions to do low level operations. All plug-in related structures +// are defined here. Including this file forces to include the standard API too. + +#ifndef _lcms_plugin_H + +// Deal with Microsoft's attempt at deprecating C standard runtime functions +#ifdef _MSC_VER +# if (_MSC_VER >= 1400) +# ifndef _CRT_SECURE_NO_DEPRECATE +# define _CRT_SECURE_NO_DEPRECATE +# endif +# ifndef _CRT_SECURE_NO_WARNINGS +# define _CRT_SECURE_NO_WARNINGS +# endif +# endif +#endif + +#ifndef _lcms2_H +#include "lcms2.h" +#endif + +// We need some standard C functions. +#include +#include +#include +#include +#include + + +#ifndef CMS_USE_CPP_API +# ifdef __cplusplus +extern "C" { +# endif +#endif + +// Vector & Matrix operations ----------------------------------------------------------------------- + +// Axis of the matrix/array. No specific meaning at all. +#define VX 0 +#define VY 1 +#define VZ 2 + +// Vectors +typedef struct { + cmsFloat64Number n[3]; + + } cmsVEC3; + +// 3x3 Matrix +typedef struct { + cmsVEC3 v[3]; + + } cmsMAT3; + +CMSAPI void CMSEXPORT _cmsVEC3init(cmsVEC3* r, cmsFloat64Number x, cmsFloat64Number y, cmsFloat64Number z); +CMSAPI void CMSEXPORT _cmsVEC3minus(cmsVEC3* r, const cmsVEC3* a, const cmsVEC3* b); +CMSAPI void CMSEXPORT _cmsVEC3cross(cmsVEC3* r, const cmsVEC3* u, const cmsVEC3* v); +CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3dot(const cmsVEC3* u, const cmsVEC3* v); +CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3length(const cmsVEC3* a); +CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3distance(const cmsVEC3* a, const cmsVEC3* b); + +CMSAPI void CMSEXPORT _cmsMAT3identity(cmsMAT3* a); +CMSAPI cmsBool CMSEXPORT _cmsMAT3isIdentity(const cmsMAT3* a); +CMSAPI void CMSEXPORT _cmsMAT3per(cmsMAT3* r, const cmsMAT3* a, const cmsMAT3* b); +CMSAPI cmsBool CMSEXPORT _cmsMAT3inverse(const cmsMAT3* a, cmsMAT3* b); +CMSAPI cmsBool CMSEXPORT _cmsMAT3solve(cmsVEC3* x, cmsMAT3* a, cmsVEC3* b); +CMSAPI void CMSEXPORT _cmsMAT3eval(cmsVEC3* r, const cmsMAT3* a, const cmsVEC3* v); + + +// Error logging ------------------------------------------------------------------------------------- + +CMSAPI void CMSEXPORT cmsSignalError(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *ErrorText, ...); + +// Memory management ---------------------------------------------------------------------------------- + +CMSAPI void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size); +CMSAPI void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size); +CMSAPI void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size); +CMSAPI void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize); +CMSAPI void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr); +CMSAPI void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size); + +// I/O handler ---------------------------------------------------------------------------------- + +struct _cms_io_handler { + + void* stream; // Associated stream, which is implemented differently depending on media. + + cmsContext ContextID; + cmsUInt32Number UsedSpace; + cmsUInt32Number ReportedSize; + char PhysicalFile[cmsMAX_PATH]; + + cmsUInt32Number (* Read)(struct _cms_io_handler* iohandler, void *Buffer, + cmsUInt32Number size, + cmsUInt32Number count); + cmsBool (* Seek)(struct _cms_io_handler* iohandler, cmsUInt32Number offset); + cmsBool (* Close)(struct _cms_io_handler* iohandler); + cmsUInt32Number (* Tell)(struct _cms_io_handler* iohandler); + cmsBool (* Write)(struct _cms_io_handler* iohandler, cmsUInt32Number size, + const void* Buffer); +}; + +// Endianess adjust functions +CMSAPI cmsUInt16Number CMSEXPORT _cmsAdjustEndianess16(cmsUInt16Number Word); +CMSAPI cmsUInt32Number CMSEXPORT _cmsAdjustEndianess32(cmsUInt32Number Value); +CMSAPI void CMSEXPORT _cmsAdjustEndianess64(cmsUInt64Number* Result, cmsUInt64Number QWord); + +// Helper IO functions +CMSAPI cmsBool CMSEXPORT _cmsReadUInt8Number(cmsIOHANDLER* io, cmsUInt8Number* n); +CMSAPI cmsBool CMSEXPORT _cmsReadUInt16Number(cmsIOHANDLER* io, cmsUInt16Number* n); +CMSAPI cmsBool CMSEXPORT _cmsReadUInt32Number(cmsIOHANDLER* io, cmsUInt32Number* n); +CMSAPI cmsBool CMSEXPORT _cmsReadFloat32Number(cmsIOHANDLER* io, cmsFloat32Number* n); +CMSAPI cmsBool CMSEXPORT _cmsReadUInt64Number(cmsIOHANDLER* io, cmsUInt64Number* n); +CMSAPI cmsBool CMSEXPORT _cmsRead15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number* n); +CMSAPI cmsBool CMSEXPORT _cmsReadXYZNumber(cmsIOHANDLER* io, cmsCIEXYZ* XYZ); +CMSAPI cmsBool CMSEXPORT _cmsReadUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, cmsUInt16Number* Array); + +CMSAPI cmsBool CMSEXPORT _cmsWriteUInt8Number(cmsIOHANDLER* io, cmsUInt8Number n); +CMSAPI cmsBool CMSEXPORT _cmsWriteUInt16Number(cmsIOHANDLER* io, cmsUInt16Number n); +CMSAPI cmsBool CMSEXPORT _cmsWriteUInt32Number(cmsIOHANDLER* io, cmsUInt32Number n); +CMSAPI cmsBool CMSEXPORT _cmsWriteFloat32Number(cmsIOHANDLER* io, cmsFloat32Number n); +CMSAPI cmsBool CMSEXPORT _cmsWriteUInt64Number(cmsIOHANDLER* io, cmsUInt64Number n); +CMSAPI cmsBool CMSEXPORT _cmsWrite15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number n); +CMSAPI cmsBool CMSEXPORT _cmsWriteXYZNumber(cmsIOHANDLER* io, const cmsCIEXYZ* XYZ); +CMSAPI cmsBool CMSEXPORT _cmsWriteUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, const cmsUInt16Number* Array); + +// ICC base tag +typedef struct { + cmsTagTypeSignature sig; + cmsInt8Number reserved[4]; + +} _cmsTagBase; + +// Type base helper functions +CMSAPI cmsTagTypeSignature CMSEXPORT _cmsReadTypeBase(cmsIOHANDLER* io); +CMSAPI cmsBool CMSEXPORT _cmsWriteTypeBase(cmsIOHANDLER* io, cmsTagTypeSignature sig); + +// Alignment functions +CMSAPI cmsBool CMSEXPORT _cmsReadAlignment(cmsIOHANDLER* io); +CMSAPI cmsBool CMSEXPORT _cmsWriteAlignment(cmsIOHANDLER* io); + +// To deal with text streams. 2K at most +CMSAPI cmsBool CMSEXPORT _cmsIOPrintf(cmsIOHANDLER* io, const char* frm, ...); + +// Fixed point helper functions +CMSAPI cmsFloat64Number CMSEXPORT _cms8Fixed8toDouble(cmsUInt16Number fixed8); +CMSAPI cmsUInt16Number CMSEXPORT _cmsDoubleTo8Fixed8(cmsFloat64Number val); + +CMSAPI cmsFloat64Number CMSEXPORT _cms15Fixed16toDouble(cmsS15Fixed16Number fix32); +CMSAPI cmsS15Fixed16Number CMSEXPORT _cmsDoubleTo15Fixed16(cmsFloat64Number v); + +// Date/time helper functions +CMSAPI void CMSEXPORT _cmsEncodeDateTimeNumber(cmsDateTimeNumber *Dest, const struct tm *Source); +CMSAPI void CMSEXPORT _cmsDecodeDateTimeNumber(const cmsDateTimeNumber *Source, struct tm *Dest); + + +//---------------------------------------------------------------------------------------------------------- + +// Plug-in foundation +#define cmsPluginMagicNumber 0x61637070 // 'acpp' + +#define cmsPluginMemHandlerSig 0x6D656D48 // 'memH' +#define cmsPluginInterpolationSig 0x696E7048 // 'inpH' +#define cmsPluginParametricCurveSig 0x70617248 // 'parH' +#define cmsPluginFormattersSig 0x66726D48 // 'frmH +#define cmsPluginTagTypeSig 0x74797048 // 'typH' +#define cmsPluginTagSig 0x74616748 // 'tagH' +#define cmsPluginRenderingIntentSig 0x696E7448 // 'intH' +#define cmsPluginMultiProcessElementSig 0x6D706548 // 'mpeH' +#define cmsPluginOptimizationSig 0x6F707448 // 'optH' + +typedef struct _cmsPluginBaseStruct { + + cmsUInt32Number Magic; // 'acpp' signature + cmsUInt32Number ExpectedVersion; // Expected version of LittleCMS + cmsUInt32Number Type; // Type of plug-in + struct _cmsPluginBaseStruct* Next; // For multiple plugin definition. NULL for end of list. + +} cmsPluginBase; + +// Maximum number of types in a plugin array +#define MAX_TYPES_IN_LCMS_PLUGIN 20 + +//---------------------------------------------------------------------------------------------------------- + +// Memory handler. Each new plug-in type replaces current behaviour +typedef struct { + + cmsPluginBase base; + + // Required + void * (* MallocPtr)(cmsContext ContextID, cmsUInt32Number size); + void (* FreePtr)(cmsContext ContextID, void *Ptr); + void * (* ReallocPtr)(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize); + + // Optional + void * (* MallocZeroPtr)(cmsContext ContextID, cmsUInt32Number size); + void * (* CallocPtr)(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size); + void * (* DupPtr)(cmsContext ContextID, const void* Org, cmsUInt32Number size); + +} cmsPluginMemHandler; + + +// ------------------------------------------------------------------------------------------------------------------ + +// Interpolation. 16 bits and floating point versions. +struct _cms_interp_struc; + +// Interpolation callbacks + +// 16 bits forward interpolation. This function performs precision-limited linear interpolation +// and is supposed to be quite fast. Implementation may be tetrahedral or trilinear, and plug-ins may +// choose to implement any other interpolation algorithm. +typedef void (* _cmsInterpFn16)(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const struct _cms_interp_struc* p); + +// Floating point forward interpolation. Full precision interpolation using floats. This is not a +// time critical function. Implementation may be tetrahedral or trilinear, and plug-ins may +// choose to implement any other interpolation algorithm. +typedef void (* _cmsInterpFnFloat)(cmsFloat32Number const Input[], + cmsFloat32Number Output[], + const struct _cms_interp_struc* p); + + + +// This type holds a pointer to an interpolator that can be either 16 bits or float +typedef union { + _cmsInterpFn16 Lerp16; // Forward interpolation in 16 bits + _cmsInterpFnFloat LerpFloat; // Forward interpolation in floating point +} cmsInterpFunction; + +// Flags for interpolator selection +#define CMS_LERP_FLAGS_16BITS 0x0000 // The default +#define CMS_LERP_FLAGS_FLOAT 0x0001 // Requires different implementation +#define CMS_LERP_FLAGS_TRILINEAR 0x0100 // Hint only + + +#define MAX_INPUT_DIMENSIONS 8 + +typedef struct _cms_interp_struc { // Used on all interpolations. Supplied by lcms2 when calling the interpolation function + + cmsContext ContextID; // The calling thread + + cmsUInt32Number dwFlags; // Keep original flags + cmsUInt32Number nInputs; // != 1 only in 3D interpolation + cmsUInt32Number nOutputs; // != 1 only in 3D interpolation + + cmsUInt32Number nSamples[MAX_INPUT_DIMENSIONS]; // Valid on all kinds of tables + cmsUInt32Number Domain[MAX_INPUT_DIMENSIONS]; // Domain = nSamples - 1 + + cmsUInt32Number opta[MAX_INPUT_DIMENSIONS]; // Optimization for 3D CLUT. This is the number of nodes premultiplied for each + // dimension. For example, in 7 nodes, 7, 7^2 , 7^3, 7^4, etc. On non-regular + // Samplings may vary according of the number of nodes for each dimension. + + const void *Table; // Points to the actual interpolation table + cmsInterpFunction Interpolation; // Points to the function to do the interpolation + + } cmsInterpParams; + +// Interpolators factory +typedef cmsInterpFunction (* cmsInterpFnFactory)(cmsUInt32Number nInputChannels, cmsUInt32Number nOutputChannels, cmsUInt32Number dwFlags); + +// The plug-in +typedef struct { + cmsPluginBase base; + + // Points to a user-supplied function which implements the factory + cmsInterpFnFactory InterpolatorsFactory; + +} cmsPluginInterpolation; + +//---------------------------------------------------------------------------------------------------------- + +// Parametric curves. A negative type means same function but analytically inverted. Max. number of params is 10 + +// Evaluator callback for user-suplied parametric curves. May implement more than one type +typedef cmsFloat64Number (* cmsParametricCurveEvaluator)(cmsInt32Number Type, const cmsFloat64Number Params[10], cmsFloat64Number R); + +// Plug-in may implement an arbitrary number of parametric curves +typedef struct { + cmsPluginBase base; + + cmsUInt32Number nFunctions; // Number of supported functions + cmsUInt32Number FunctionTypes[MAX_TYPES_IN_LCMS_PLUGIN]; // The identification types + cmsUInt32Number ParameterCount[MAX_TYPES_IN_LCMS_PLUGIN]; // Number of parameters for each function + + cmsParametricCurveEvaluator Evaluator; // The evaluator + +} cmsPluginParametricCurves; +//---------------------------------------------------------------------------------------------------------- + +// Formatters. This plug-in adds new handlers, replacing them if they already exist. Formatters dealing with +// cmsFloat32Number (bps = 4) or double (bps = 0) types are requested via FormatterFloat callback. Others come across +// Formatter16 callback + +struct _cmstransform_struct; + +typedef cmsUInt8Number* (* cmsFormatter16)(register struct _cmstransform_struct* CMMcargo, + register cmsUInt16Number Values[], + register cmsUInt8Number* Buffer, + register cmsUInt32Number Stride); + +typedef cmsUInt8Number* (* cmsFormatterFloat)(struct _cmstransform_struct* CMMcargo, + cmsFloat32Number Values[], + cmsUInt8Number* Buffer, + cmsUInt32Number Stride); + +// This type holds a pointer to a formatter that can be either 16 bits or cmsFloat32Number +typedef union { + cmsFormatter16 Fmt16; + cmsFormatterFloat FmtFloat; + +} cmsFormatter; + +#define CMS_PACK_FLAGS_16BITS 0x0000 +#define CMS_PACK_FLAGS_FLOAT 0x0001 + +typedef enum { cmsFormatterInput=0, cmsFormatterOutput=1 } cmsFormatterDirection; + +typedef cmsFormatter (* cmsFormatterFactory)(cmsUInt32Number Type, // Specific type, i.e. TYPE_RGB_8 + cmsFormatterDirection Dir, + cmsUInt32Number dwFlags); // precision + +// Plug-in may implement an arbitrary number of formatters +typedef struct { + cmsPluginBase base; + cmsFormatterFactory FormattersFactory; + +} cmsPluginFormatters; + +//---------------------------------------------------------------------------------------------------------- + +// Tag type handler. Each type is free to return anything it wants, and it is up to the caller to +// know in advance what is the type contained in the tag. +typedef struct _cms_typehandler_struct { + + cmsTagTypeSignature Signature; // The signature of the type + + // Allocates and reads items + void * (* ReadPtr)(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + cmsUInt32Number* nItems, + cmsUInt32Number SizeOfTag); + + // Writes n Items + cmsBool (* WritePtr)(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + void* Ptr, + cmsUInt32Number nItems); + + // Duplicate an item or array of items + void* (* DupPtr)(struct _cms_typehandler_struct* self, + const void *Ptr, + cmsUInt32Number n); + + // Free all resources + void (* FreePtr)(struct _cms_typehandler_struct* self, + void *Ptr); + + // Additional parameters used by the calling thread + cmsContext ContextID; + cmsUInt32Number ICCVersion; + +} cmsTagTypeHandler; + +// Each plug-in implements a single type +typedef struct { + cmsPluginBase base; + cmsTagTypeHandler Handler; + +} cmsPluginTagType; + +//---------------------------------------------------------------------------------------------------------- + +// This is the tag plugin, which identifies tags. For writing, a pointer to function is provided. +// This function should return the desired type for this tag, given the version of profile +// and the data being serialized. +typedef struct { + + cmsUInt32Number ElemCount; // If this tag needs an array, how many elements should keep + + // For reading. + cmsUInt32Number nSupportedTypes; // In how many types this tag can come (MAX_TYPES_IN_LCMS_PLUGIN maximum) + cmsTagTypeSignature SupportedTypes[MAX_TYPES_IN_LCMS_PLUGIN]; + + // For writting + cmsTagTypeSignature (* DecideType)(cmsFloat64Number ICCVersion, const void *Data); + +} cmsTagDescriptor; + +// Plug-in implements a single tag +typedef struct { + cmsPluginBase base; + + cmsTagSignature Signature; + cmsTagDescriptor Descriptor; + +} cmsPluginTag; + +//---------------------------------------------------------------------------------------------------------- + +// Custom intents. This function should join all profiles specified in the array in +// a single LUT. Any custom intent in the chain redirects to custom function. If more than +// one custom intent is found, the one located first is invoked. Usually users should use only one +// custom intent, so mixing custom intents in same multiprofile transform is not supported. + +typedef cmsPipeline* (* cmsIntentFn)( cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number Intents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags); + + +// Each plug-in defines a single intent number. +typedef struct { + cmsPluginBase base; + cmsUInt32Number Intent; + cmsIntentFn Link; + char Description[256]; + +} cmsPluginRenderingIntent; + + +// The default ICC intents (perceptual, saturation, rel.col and abs.col) +CMSAPI cmsPipeline* CMSEXPORT _cmsDefaultICCintents(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number Intents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags); + + +//---------------------------------------------------------------------------------------------------------- + +// Pipelines, Multi Process Elements. + +typedef void (* _cmsStageEvalFn) (const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage* mpe); +typedef void*(* _cmsStageDupElemFn) (cmsStage* mpe); +typedef void (* _cmsStageFreeElemFn) (cmsStage* mpe); + + +// This function allocates a generic MPE +CMSAPI cmsStage* CMSEXPORT _cmsStageAllocPlaceholder(cmsContext ContextID, + cmsStageSignature Type, + cmsUInt32Number InputChannels, + cmsUInt32Number OutputChannels, + _cmsStageEvalFn EvalPtr, // Points to fn that evaluates the element (always in floating point) + _cmsStageDupElemFn DupElemPtr, // Points to a fn that duplicates the stage + _cmsStageFreeElemFn FreePtr, // Points to a fn that sets the element free + void* Data); // A generic pointer to whatever memory needed by the element +typedef struct { + cmsPluginBase base; + cmsTagTypeHandler Handler; + +} cmsPluginMultiProcessElement; + +//---------------------------------------------------------------------------------------------------------- +// Optimization. Using this plug-in, additional optimization strategies may be implemented. +// The function should return TRUE if any optimization is done on the LUT, this terminates +// the optimization search. Or FALSE if it is unable to optimize and want to give a chance +// to the rest of optimizers. + +typedef void (* _cmsOPTeval16Fn)(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register const void* Data); + +typedef void (* _cmsOPTfreeDataFn)(cmsContext ContextID, void* Data); +typedef void* (* _cmsOPTdupDataFn)(cmsContext ContextID, const void* Data); + + +typedef cmsBool (* _cmsOPToptimizeFn)(cmsPipeline** Lut, + cmsUInt32Number Intent, + cmsUInt32Number* InputFormat, + cmsUInt32Number* OutputFormat, + cmsUInt32Number* dwFlags); + +// This function may be used to set the optional evaluator and a block of private data. If private data is being used, an optional +// duplicator and free functions should also be specified in order to duplicate the LUT construct. Use NULL to inhibit such functionality. + +CMSAPI void CMSEXPORT _cmsPipelineSetOptimizationParameters(cmsPipeline* Lut, + _cmsOPTeval16Fn Eval16, + void* PrivateData, + _cmsOPTfreeDataFn FreePrivateDataFn, + _cmsOPTdupDataFn DupPrivateDataFn); + +typedef struct { + cmsPluginBase base; + + // Optimize entry point + _cmsOPToptimizeFn OptimizePtr; + +} cmsPluginOptimization; + +//---------------------------------------------------------------------------------------------------------- + +#ifndef CMS_USE_CPP_API +# ifdef __cplusplus + } +# endif +#endif + +#define _lcms_plugin_H +#endif diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..6781b98 --- /dev/null +++ b/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/lcms2.pc b/lcms2.pc new file mode 100644 index 0000000..693732b --- /dev/null +++ b/lcms2.pc @@ -0,0 +1,11 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: lcms2 +Description: LCMS Color Management Library +Version: 2.3 +Libs: -L${libdir} -llcms2 +Libs.private: -lm +Cflags: -I${includedir} diff --git a/lcms2.pc.in b/lcms2.pc.in new file mode 100644 index 0000000..b715f59 --- /dev/null +++ b/lcms2.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: @PACKAGE@ +Description: LCMS Color Management Library +Version: @VERSION@ +Libs: -L${libdir} -llcms2 +Libs.private: @LIB_MATH@ +Cflags: -I${includedir} diff --git a/liblcms2-utils.manifest b/liblcms2-utils.manifest new file mode 100644 index 0000000..146a63d --- /dev/null +++ b/liblcms2-utils.manifest @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/liblcms2.manifest b/liblcms2.manifest new file mode 100644 index 0000000..97e8c31 --- /dev/null +++ b/liblcms2.manifest @@ -0,0 +1,5 @@ + + + + + diff --git a/libtool b/libtool new file mode 100755 index 0000000..e42cacf --- /dev/null +++ b/libtool @@ -0,0 +1,10280 @@ +#! /bin/sh + +# libtool - Provide generalized library-building support services. +# Generated automatically by config.status (lcms2) 2.3 +# Libtool was configured on host gpeegpee-ubuntu: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build shared libraries. +build_libtool_libs=yes + +# Whether or not to build static libraries. +build_old_libs=no + +# Assembler program. +AS="as" + +# DLL creation program. +DLLTOOL="dlltool" + +# Object dumper program. +OBJDUMP="objdump" + +# Which release of libtool.m4 was used? +macro_version=2.4 +macro_revision=1.3294 + +# What type of objects to build. +pic_mode=default + +# Whether or not to optimize for fast installation. +fast_install=yes + +# Shell to use when invoking shell scripts. +SHELL="/bin/sh" + +# An echo program that protects backslashes. +ECHO="printf %s\\n" + +# The host system. +host_alias= +host=arm-unknown-linux-gnueabi +host_os=linux-gnueabi + +# The build system. +build_alias= +build=arm-unknown-linux-gnueabi +build_os=linux-gnueabi + +# A sed program that does not truncate output. +SED="/bin/sed" + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP="/bin/grep" + +# An ERE matcher. +EGREP="/bin/grep -E" + +# A literal string matcher. +FGREP="/bin/grep -F" + +# A BSD- or MS-compatible name lister. +NM="/usr/bin/nm -B" + +# Whether we need soft or hard links. +LN_S="ln -s" + +# What is the maximum length of a command? +max_cmd_len=1572864 + +# Object file suffix (normally "o"). +objext=o + +# Executable file suffix (normally ""). +exeext= + +# whether the shell understands "unset". +lt_unset=unset + +# turn spaces into newlines. +SP2NL="tr \\040 \\012" + +# turn newlines into spaces. +NL2SP="tr \\015\\012 \\040\\040" + +# convert $build file names to $host format. +to_host_file_cmd=func_convert_file_noop + +# convert $build files to toolchain format. +to_tool_file_cmd=func_convert_file_noop + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method="pass_all" + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd="\$MAGIC_CMD" + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob="" + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob="no" + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd="printf %s\\n" + +# The archiver. +AR="ar" + +# Flags to create an archive. +AR_FLAGS="cru" + +# How to feed a file listing to the archiver. +archiver_list_spec="@" + +# A symbol stripping program. +STRIP="strip" + +# Commands used to install an old-style archive. +RANLIB="ranlib" +old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib" +old_postuninstall_cmds="" + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=no + +# A C compiler. +LTCC="gcc -std=gnu99" + +# LTCC compiler flags. +LTCFLAGS="-Wall" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p' | sed '/ __gnu_lto/d'" + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[ABCDGIRSTW]* .* \\(.*\\)\$/extern char \\1;/p'" + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\)[ ]*\$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p'" + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\([^ ]*\\)[ ]*\$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\(lib[^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"lib\\2\", (void *) \\&\\2},/p'" + +# Specify filename containing input files for $NM. +nm_file_list_spec="@" + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot= + +# The name of the directory that contains temporary libtool files. +objdir=.libs + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=file + +# Must we lock files when doing compilation? +need_locks="no" + +# Manifest tool. +MANIFEST_TOOL=":" + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL="" + +# Tool to change global to local symbols on Mac OS X. +NMEDIT="" + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO="" + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL="" + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64="" + +# Old archive suffix (normally "a"). +libext=a + +# Shared library suffix (normally ".so"). +shrext_cmds=".so" + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds="" + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + +# Do we need the "lib" prefix for modules? +need_lib_prefix=no + +# Do we need a version for libraries? +need_version=no + +# Library versioning type. +version_type=linux + +# Shared library runtime path variable. +runpath_var=LD_RUN_PATH + +# Shared library path variable. +shlibpath_var=LD_LIBRARY_PATH + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=no + +# Format of library name prefix. +libname_spec="lib\$name" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}" + +# The coded name of the library, if different from the real name. +soname_spec="\${libname}\${release}\${shared_ext}\$major" + +# Permission mode override for installation of shared libraries. +install_override_mode="" + +# Command to use after installation of a shared archive. +postinstall_cmds="" + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds="" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir" + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval="" + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=yes + +# Compile-time system search path for libraries. +sys_lib_search_path_spec="/usr/lib/gcc/arm-linux-gnueabi/4.5.3 /usr/arm-linux-gnueabi/lib " + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec="/lib /usr/lib /lib/i486-linux-gnu /usr/lib/i486-linux-gnu /usr/local/lib " + +# Whether dlopen is supported. +dlopen_support=unknown + +# Whether dlopen of programs is supported. +dlopen_self=unknown + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=unknown + +# Commands to strip libraries. +old_striplib="strip --strip-debug" +striplib="strip --strip-unneeded" + + +# The linker used to build libraries. +LD="/usr/arm-linux-gnueabi/bin/ld" + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# Commands used to build an old-style archive. +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" + +# A language specific compiler. +CC="gcc -std=gnu99" + +# Is the compiler the GNU compiler? +with_gcc=yes + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin" + +# Additional compiler flags for building library objects. +pic_flag=" -fPIC -DPIC" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=no + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=no + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object="no" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build a shared archive. +archive_cmds="\$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~ + cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$output_objdir/\$libname.ver~ + echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~ + \$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-version-script \${wl}\$output_objdir/\$libname.ver -o \$lib" + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds="" +module_expsym_cmds="" + +# Whether we are building with GNU ld or not. +with_gnu_ld="yes" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that enforces no undefined symbols. +no_undefined_flag="" + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist +hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" + +# If ld is used when linking, flag to hardcode $libdir into a binary +# during linking. This must work even if $libdir does not exist. +hardcode_libdir_flag_spec_ld="" + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator="" + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=no + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting ${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=no + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=no + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=unsupported + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=no + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=no + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=unknown + +# Set to "yes" if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" + +# Symbols that must always be exported. +include_expsyms="" + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds="" + +# Commands necessary for finishing linking programs. +postlink_cmds="" + +# Specify filename containing input files. +file_list_spec="" + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs="" + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects="" +postdep_objects="" +predeps="" +postdeps="" + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path="" + +# ### END LIBTOOL CONFIG + + +# libtool (GNU libtool) 2.4 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.4 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.4 +TIMESTAMP="" +package_revision=1.3294 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${EGREP="/usr/bin/grep -E"} +: ${FGREP="/usr/bin/grep -F"} +: ${GREP="/usr/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/usr/bin/sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} # Extended-shell func_dirname implementation + + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} # Extended-shell func_basename implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} # Extended-shell func_dirname_and_basename implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} # Extended-shell func_stripname implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $opt_debug + + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $opt_debug + + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $opt_debug + + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $opt_debug + + func_error "missing argument for $1." + exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} +} # Extended-shell func_split_short_opt implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=} +} # Extended-shell func_split_long_opt implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}+=\${2}" +} # Extended-shell func_append implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}+=\\ \$func_quote_for_eval_result" +} # Extended-shell func_append_quoted implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} # Extended-shell func_arith implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} # Extended-shell func_len implementation + + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} # Extended-shell func_lo2o implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} # Extended-shell func_xform implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +preserve_args+=" $opt" + ;; + --no-verbose) + opt_verbose=false +preserve_args+=" $opt" + ;; + --silent|--quiet) + opt_silent=: +preserve_args+=" $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +preserve_args+=" $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +preserve_args+=" $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || preserve_args+=" --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +## Main. ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_to_host_path_result+="$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_mode_compile arg... +func_mode_compile () +{ + $opt_debug + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify \`-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + pie_flag+=" $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + later+=" $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + func_append_quoted lastarg "$arg" + done + IFS="$save_ifs" + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + base_compile+=" $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with \`-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from \`$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist+=" $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist+=" $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command+=" -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command+=" -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command+="$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$opt_mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir+="/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + libdirs+=" $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + libs+=" $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds+=" + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog+="$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + files+=" $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog+=" $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + install_shared_prog+=" $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + install_shared_prog+=" -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs+=" $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs+=" $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs+=" $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir+="$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs+=" $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags+=" $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' + + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_emit_exe_manifest +# emit a Win32 UAC manifest for executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_exe_manifest () +{ + cat < + + + + + + + + + + + + +EOF +} + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + libtool_args+=" $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command+=" @OUTPUT@" + finalize_command+=" @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command+=" @SYMFILE@" + finalize_command+=" @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles+=" $arg" + else + dlprefiles+=" $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs+=" $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs+=" $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles+=" $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles+=" $pic_object" + prev= + fi + + # A PIC object. + libobjs+=" $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects+=" $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects+=" $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + libobjs+=" $pic_object" + non_pic_objects+=" $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath+=" $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath+=" $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs+=" $arg" + prev= + continue + ;; + xcclinker) + linker_flags+=" $qarg" + compiler_flags+=" $qarg" + prev= + compile_command+=" $qarg" + finalize_command+=" $qarg" + continue + ;; + xcompiler) + compiler_flags+=" $qarg" + prev= + compile_command+=" $qarg" + finalize_command+=" $qarg" + continue + ;; + xlinker) + linker_flags+=" $qarg" + compiler_flags+=" $wl$qarg" + prev= + compile_command+=" $wl$qarg" + finalize_command+=" $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + compile_command+=" $link_static_flag" + finalize_command+=" $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + compile_command+=" $arg" + finalize_command+=" $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) deplibs+=" $arg" ;; + *) deplibs+=" -L$dir" ;; + esac + lib_search_path+=" $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath+=":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath+=":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs+=" System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs+=" $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + compiler_flags+=" $arg" + compile_command+=" $arg" + finalize_command+=" $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags+=" $arg" + compile_command+=" $arg" + finalize_command+=" $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags+=" $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath+=" $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg+=" $func_quote_for_eval_result" + compiler_flags+=" $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg+=" $wl$func_quote_for_eval_result" + compiler_flags+=" $wl$func_quote_for_eval_result" + linker_flags+=" $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -{shared,static}-libgcc, -static-{libgfortran|libstdc++} + # link against specified runtime library + # -fstack-protector* stack protector flags for GCC + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr*|-fuse-linker-plugin| \ + -shared-libgcc|-static-libgcc|-static-libgfortran|-static-libstdc++| \ + -fstack-protector*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + compile_command+=" $arg" + finalize_command+=" $arg" + compiler_flags+=" $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs+=" $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles+=" $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles+=" $pic_object" + prev= + fi + + # A PIC object. + libobjs+=" $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects+=" $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects+=" $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + libobjs+=" $pic_object" + non_pic_objects+=" $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs+=" $arg" + old_deplibs+=" $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles+=" $func_resolve_sysroot_result" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles+=" $func_resolve_sysroot_result" + prev= + else + deplibs+=" $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command+=" $arg" + finalize_command+=" $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command+=" $arg" + finalize_command+=" $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs+=" $deplib" ;; + esac + fi + libs+=" $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs+=" $pre_post_deps" ;; + esac + pre_post_deps+=" $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs+=" $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags+=" $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags+=" $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags+=" $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + newlib_search_path+=" $func_resolve_sysroot_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + newlib_search_path+=" $func_resolve_sysroot_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath+=" $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles+=" $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles+=" $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags+=" $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles+=" $dlopen" + test -n "$dlpreopen" && dlprefiles+=" $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience+=" $ladir/$objdir/$old_library" + old_convenience+=" $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs+=" $deplib" ;; + esac + fi + tmp_libs+=" $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test "$prefer_static_libs" = yes || + test "$prefer_static_libs,$installed" = "built,no"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib="$l" + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles+=" $lib $dependency_libs" + else + newdlfiles+=" $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$lt_sysroot$libdir" + absdir="$lt_sysroot$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path+=" $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path+=" $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + case "$host" in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + newdlprefiles+=" $dir/$linklib" + else + newdlprefiles+=" $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs+=" $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles+=" $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs+=" $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles+=" $dir/$dlname" + else + newdlprefiles+=" $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path+=" $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + newlib_search_path+=" $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs+=" $deplib" ;; + esac + fi + tmp_libs+=" $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath+="$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath+=" $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath+=" $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs+=" $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs+=" $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath+=" $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath+=" $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$opt_mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir+=" -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath+="$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath+="$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$opt_mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath+="$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir+=" -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath+=" $temp_xrpath";; + esac;; + *) temp_deplibs+=" $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path+=" $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + specialdeplibs+=" $func_resolve_sysroot_result" ;; + esac + fi + tmp_libs+=" $func_resolve_sysroot_result" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags+=" ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags+=" -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path+=" $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs+=" $deplib" ;; + esac + ;; + *) tmp_libs+=" $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs+=" $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs+="$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs+=" $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring+=":${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs+=" $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$opt_mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist+=" $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs+=" $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + temp_xrpath+=" -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath+=" $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles+=" $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles+=" $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs+=" System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs+=" -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs+=" $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs+=" $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs+=" $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs+=" $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs+=" $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs+=" -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs+=" $deplib" ;; + esac + ;; + *) new_libs+=" $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs+="$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath+=" $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_apped perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath+="$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames+=" $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles+=" $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd1 in $cmds; do + IFS="$save_ifs" + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + delfiles+=" $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles+=" $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs+=" $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated+=" $gentop" + + func_extract_archives $gentop $convenience + libobjs+=" $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags+=" $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + delfiles+=" $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + delfiles+=" $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + objlist+=" $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles+=" $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles+=" $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated+=" $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs+=" $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated+=" $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command+=" ${wl}-bind_at_load" + finalize_command+=" ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs+=" -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs+=" $deplib" ;; + esac + ;; + *) new_libs+=" $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command+=" $compile_deplibs" + finalize_command+=" $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath+=" $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs+="$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath+=" $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath+=" $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath+=":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath+=":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs+="$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath+=" $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath+=" $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath+="$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath+="$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper $cwrapper.manifest; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + # Create the UAC manifests first if necessary (but the + # manifest files must have executable permission regardless). + case $output_name in + *instal*|*patch*|*setup*|*update*) + func_emit_exe_manifest > $cwrapper.manifest + func_emit_exe_manifest > $output_path/$objdir/$output_name.exe.manifest + chmod +x $cwrapper.manifest + chmod +x $output_path/$objdir/$output_name.exe.manifest + ;; + esac + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs+=" $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated+=" $gentop" + + func_extract_archives $gentop $addlibs + oldobjs+=" $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated+=" $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs+=" $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated+=" $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs+=" $gentop/$newobj" + ;; + *) oldobjs+=" $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + objlist+=" $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs+=" ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + newdependency_libs+=" -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + newdependency_libs+=" -R$func_replace_sysroot_result" + ;; + *) newdependency_libs+=" $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles+=" ${lt_sysroot:+=}$libdir/$name" + ;; + *) newdlfiles+=" $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles+=" ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles+=" $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles+=" $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM+=" $arg"; rmforce=yes ;; + -*) RM+=" $arg" ;; + *) files+=" $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + odir="$objdir" + else + odir="$dir/$objdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$opt_mode" = uninstall && odir="$dir" + + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then + case " $rmdirs " in + *" $odir "*) ;; + *) rmdirs+=" $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles+=" $odir/$n" + done + test -n "$old_library" && rmfiles+=" $odir/$old_library" + + case "$opt_mode" in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && rmfiles+=" $odir/$dlname" ;; + esac + test -n "$libdir" && rmfiles+=" $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles+=" $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles+=" $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$opt_mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles+=" $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles+=" $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles+=" $odir/$name $odir/${name}S.${objext}" + rmfiles+=" ${name}.manifest $objdir/${name}.manifest" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles+=" $odir/lt-$name $objdir/lt-${name}.manifest" + fi + if test "X$noexename" != "X$name" ; then + rmfiles+=" $odir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$opt_mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD="/usr/arm-linux-gnueabi/bin/ld" + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# Commands used to build an old-style archive. +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" + +# A language specific compiler. +CC="g++" + +# Is the compiler the GNU compiler? +with_gcc=yes + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin" + +# Additional compiler flags for building library objects. +pic_flag=" -fPIC -DPIC" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=no + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=no + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object="no" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build a shared archive. +archive_cmds="\$CC \$pic_flag -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="\$CC \$pic_flag -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib" + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds="" +module_expsym_cmds="" + +# Whether we are building with GNU ld or not. +with_gnu_ld="yes" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that enforces no undefined symbols. +no_undefined_flag="" + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist +hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" + +# If ld is used when linking, flag to hardcode $libdir into a binary +# during linking. This must work even if $libdir does not exist. +hardcode_libdir_flag_spec_ld="" + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator="" + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=no + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting ${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=no + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=no + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=unsupported + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=no + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=no + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=unknown + +# Set to "yes" if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" + +# Symbols that must always be exported. +include_expsyms="" + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds="" + +# Commands necessary for finishing linking programs. +postlink_cmds="" + +# Specify filename containing input files. +file_list_spec="" + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs="/home/gpeegpee/sbs/target-armel/usr/lib /home/gpeegpee/sbs/target-armel/lib /usr/lib/gcc/arm-linux-gnueabi/4.5.3 /usr/lib/gcc/arm-linux-gnueabi/4.5.3/../../../../arm-linux-gnueabi/lib" + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects="/usr/lib/gcc/arm-linux-gnueabi/4.5.3/../../../../arm-linux-gnueabi/lib/crti.o /usr/lib/gcc/arm-linux-gnueabi/4.5.3/crtbeginS.o" +postdep_objects="/usr/lib/gcc/arm-linux-gnueabi/4.5.3/crtendS.o /usr/lib/gcc/arm-linux-gnueabi/4.5.3/../../../../arm-linux-gnueabi/lib/crtn.o" +predeps="" +postdeps="-lstdc++ -lm -lgcc_s -lc -lgcc_s" + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path="-L/home/gpeegpee/sbs/target-armel/usr/lib -L/home/gpeegpee/sbs/target-armel/lib -L/usr/lib/gcc/arm-linux-gnueabi/4.5.3 -L/usr/lib/gcc/arm-linux-gnueabi/4.5.3/../../../../arm-linux-gnueabi/lib" + +# ### END LIBTOOL TAG CONFIG: CXX diff --git a/ltmain.sh b/ltmain.sh new file mode 100755 index 0000000..fcebbcb --- /dev/null +++ b/ltmain.sh @@ -0,0 +1,9687 @@ + +# libtool (GNU libtool) 2.4 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.4 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.4 +TIMESTAMP="" +package_revision=1.3294 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${EGREP="/usr/bin/grep -E"} +: ${FGREP="/usr/bin/grep -F"} +: ${GREP="/usr/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/usr/bin/sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname may be replaced by extended shell implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $opt_debug + + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $opt_debug + + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $opt_debug + + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $opt_debug + + func_error "missing argument for $1." + exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + my_sed_short_opt='1s/^\(..\).*$/\1/;q' + my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + + func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` + func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` + func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +func_append preserve_args " $opt" + ;; + --no-verbose) + opt_verbose=false +func_append preserve_args " $opt" + ;; + --silent|--quiet) + opt_silent=: +func_append preserve_args " $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || func_append preserve_args " --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +## Main. ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_mode_compile arg... +func_mode_compile () +{ + $opt_debug + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify \`-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + func_append_quoted lastarg "$arg" + done + IFS="$save_ifs" + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with \`-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from \`$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$opt_mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' + + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_emit_exe_manifest +# emit a Win32 UAC manifest for executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_exe_manifest () +{ + cat < + + + + + + + + + + + + +EOF +} + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -{shared,static}-libgcc, -static-{libgfortran|libstdc++} + # link against specified runtime library + # -fstack-protector* stack protector flags for GCC + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr*|-fuse-linker-plugin| \ + -shared-libgcc|-static-libgcc|-static-libgfortran|-static-libstdc++| \ + -fstack-protector*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps ; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test "$prefer_static_libs" = yes || + test "$prefer_static_libs,$installed" = "built,no"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib="$l" + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$lt_sysroot$libdir" + absdir="$lt_sysroot$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + case "$host" in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$opt_mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$opt_mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + func_append verstring ":${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + func_append libobjs " $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$opt_mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_apped perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd1 in $cmds; do + IFS="$save_ifs" + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper $cwrapper.manifest; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + # Create the UAC manifests first if necessary (but the + # manifest files must have executable permission regardless). + case $output_name in + *instal*|*patch*|*setup*|*update*) + func_emit_exe_manifest > $cwrapper.manifest + func_emit_exe_manifest > $output_path/$objdir/$output_name.exe.manifest + chmod +x $cwrapper.manifest + chmod +x $output_path/$objdir/$output_name.exe.manifest + ;; + esac + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + func_append oldobjs " $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + odir="$objdir" + else + odir="$dir/$objdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$opt_mode" = uninstall && odir="$dir" + + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case "$opt_mode" in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$opt_mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" + func_append rmfiles " ${name}.manifest $objdir/${name}.manifest" + if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name $objdir/lt-${name}.manifest" + fi + if test "X$noexename" != "X$name" ; then + func_append rmfiles " $odir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$opt_mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/missing b/missing new file mode 100755 index 0000000..64b5f90 --- /dev/null +++ b/missing @@ -0,0 +1,353 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2004-09-07.08 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit 0 + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit 0 + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case "$1" in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/packaging/baselibs.conf b/packaging/baselibs.conf new file mode 100644 index 0000000..eb04767 --- /dev/null +++ b/packaging/baselibs.conf @@ -0,0 +1,6 @@ +liblcms2-2 + provides "liblcms2- = " + obsoletes "liblcms2- <= " +liblcms2-devel + requires -liblcms2- + requires "liblcms2- = " diff --git a/packaging/lcms-endian.patch b/packaging/lcms-endian.patch new file mode 100644 index 0000000..2909a8f --- /dev/null +++ b/packaging/lcms-endian.patch @@ -0,0 +1,15 @@ +--- include/lcms2.h.orig 2010-05-18 16:11:48.852037802 +0200 ++++ include/lcms2.h 2010-05-18 16:12:22.116041439 +0200 +@@ -30,8 +30,10 @@ + + // ********** Configuration toggles **************************************** + +-// Uncomment this one if you are using big endian machines +-// #define CMS_USE_BIG_ENDIAN 1 ++#include ++#if __BYTE_ORDER == __BIG_ENDIAN ++#define USE_BIG_ENDIAN 1 ++#endif + + // Uncomment this one if your compiler/machine does NOT support the + // "long long" type. diff --git a/packaging/lcms2-ocloexec.patch b/packaging/lcms2-ocloexec.patch new file mode 100644 index 0000000..91c46b1 --- /dev/null +++ b/packaging/lcms2-ocloexec.patch @@ -0,0 +1,40 @@ +Index: src/cmscgats.c +=================================================================== +--- src/cmscgats.c.orig ++++ src/cmscgats.c +@@ -836,7 +836,7 @@ void InSymbol(cmsIT8* it8) + return; + } + +- FileNest->Stream = fopen(FileNest->FileName, "rt"); ++ FileNest->Stream = fopen(FileNest->FileName, "rte"); + if (FileNest->Stream == NULL) { + + SynError(it8, "File %s not found", FileNest->FileName); +@@ -1670,7 +1670,7 @@ cmsBool CMSEXPORT cmsIT8SaveToFile(cmsHA + + memset(&sd, 0, sizeof(sd)); + +- sd.stream = fopen(cFileName, "wt"); ++ sd.stream = fopen(cFileName, "wte"); + if (!sd.stream) return FALSE; + + for (i=0; i < it8 ->TablesCount; i++) { +@@ -2178,7 +2178,7 @@ cmsBool IsMyFile(const char* FileName) + cmsUInt32Number Size; + cmsUInt8Number Ptr[133]; + +- fp = fopen(FileName, "rt"); ++ fp = fopen(FileName, "rte"); + if (!fp) { + cmsSignalError(0, cmsERROR_FILE, "File '%s' not found", FileName); + return FALSE; +@@ -2256,7 +2256,7 @@ cmsHANDLE CMSEXPORT cmsIT8LoadFromFile( + if (!hIT8) return NULL; + + +- it8 ->FileStack[0]->Stream = fopen(cFileName, "rt"); ++ it8 ->FileStack[0]->Stream = fopen(cFileName, "rte"); + + if (!it8 ->FileStack[0]->Stream) { + cmsIT8Free(hIT8); diff --git a/packaging/lcms2-visibility.patch b/packaging/lcms2-visibility.patch new file mode 100644 index 0000000..f32173f --- /dev/null +++ b/packaging/lcms2-visibility.patch @@ -0,0 +1,16 @@ +--- src/lcms2_internal.h.orig ++++ src/lcms2_internal.h +@@ -37,6 +37,7 @@ + // assert macro is part of C99 as per 7.2 + #include + ++#pragma GCC visibility push(hidden) + // Some needed constants + #ifndef M_PI + # define M_PI 3.14159265358979323846 +@@ -625,4 +626,5 @@ cmsBool _cmsBuildRGB2XYZtransferMatrix + + + #define _lcms_internal_H ++#pragma GCC visibility pop + #endif diff --git a/packaging/lcms2.spec b/packaging/lcms2.spec new file mode 100644 index 0000000..0da0255 --- /dev/null +++ b/packaging/lcms2.spec @@ -0,0 +1,175 @@ +# +# spec file for package lcms2 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +%define _unpackaged_files_terminate_build 0 + +Name: lcms2 +Summary: Little CMS Engine - A color managment library and tools +License: MIT +Group: Productivity/Graphics/Other +Url: http://www.littlecms.com/ +Version: 2.3 +Release: 6 + +BuildRequires: libjpeg-turbo-devel +BuildRequires: zlib-devel +BuildRequires: libtiff-devel + +BuildRoot: %{_tmppath}/%{name}-%{version}-build +Source0: %{name}-%{version}.tar.gz +Source1: baselibs.conf +Patch: lcms-endian.patch +Patch1: lcms2-ocloexec.patch +Patch2: lcms2-visibility.patch + +%description +Littlecms is a small speed optimized color management engine. +Little CMS intends to be a small-footprint color management engine +with a special focus on accuracy and performance. It uses the International +Color Consortium standard (ICC), which is the modern standard when +regarding to color management. The ICC specification is widely used and is +referred to in many International and other de-facto standards. + +%package -n liblcms2 +Summary: Libraries for the Little CMS Engine +Group: System/Libraries + +%description -n liblcms2 +Little CMS Engine - A color managment library and tools. + +%package -n liblcms2-devel +Summary: Include Files and Libraries Mandatory for Development +Group: Development/Libraries/C and C++ +Requires: liblcms2 = %{version} glibc-devel + +%description -n liblcms2-devel +This package contains all necessary include files and libraries needed +to develop applications that require these. + +#%package -n liblcms2-doc +#Summary: User and developer documentation for lcms2 +#Group: Documentation/Other +#BuildArch: noarch + +#%description -n liblcms2-doc +#This package contains user and developer documentation for lcms2. + +%package -n liblcms2-utils +License: MIT License (or similar) +Summary: Include Files and Libraries Mandatory for Development +Requires: liblcms2 = %{version} +Group: Development/Libraries/C and C++ + +%description -n liblcms2-utils +Little CMS color management library utilities +lcms is a standalone CMM engine, which deals with the color management. +LittleCMS implements a fast transformation between ICC profiles. The +intention of it is to be portable across several platforms. This package +contains additional utilities(jpegicc and tifficc) which comes with lcms. + + +%prep +%setup -q +%patch +%patch1 +%patch2 +chmod a-x doc/* COPYING AUTHORS + +%build +export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +#export CXXFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" + +#export CFLAGS="-O2 -fPIC -I../include -fno-exceptions -fomit-frame-pointer -Wall" +export CXXFLAGS="$RPM_OPT_FLAGS" + +%configure --prefix=/usr --disable-static + +make %{?_smp_flags} CFLAGS="$CFLAGS" + +#%check +# FIXME before submitting to factory +# make %{?_smp_flags} check || true +# make utils + +%install +rm -rf $RPM_BUILD_ROOT +%makeinstall +mkdir -p %{buildroot}/usr/share/license +cp %{_builddir}/%{buildsubdir}/COPYING %{buildroot}/usr/share/license/liblcms2-utils +cp %{_builddir}/%{buildsubdir}/COPYING %{buildroot}/usr/share/license/liblcms2 + +#rm $RPM_BUILD_ROOT/%_libdir/liblcms2.la + +%clean +rm -rf $RPM_BUILD_ROOT + +%post -n liblcms2 -p /sbin/ldconfig + +%postun -n liblcms2 -p /sbin/ldconfig + +%files -n liblcms2-utils +%manifest liblcms2-utils.manifest +%defattr(-,root,root) +/usr/share/license/liblcms2-utils +%{_bindir}/* +%exclude %{_mandir}/man?/*.* + +%files -n liblcms2 +%manifest liblcms2.manifest +%defattr(-,root,root) +/usr/share/license/liblcms2 +%{_libdir}/liblcms2.so.2* + +%files -n liblcms2-devel +%defattr(-,root,root) +%{_includedir}/*.h +%{_libdir}/*.so +%{_libdir}/*.la +%{_libdir}/pkgconfig/*.pc + +#%files -n liblcms2-doc +#%defattr(-,root,root) +#%doc doc/*.pdf + +%changelog +* Sat Dec 17 2011 adrian@suse.de +- update to version 2.3 + * Full support for ICC 4.3 +* Thu Nov 24 2011 crrodriguez@opensuse.org +- Open all fds with O_CLOEXEC +- Use gcc visibility, symbol table shrinks around 50%% ... +* Fri Jun 10 2011 mrdocs@opensuse.org +-update to 2.2 + * maintenance update + +Version 2.2 adds stability. + - fixes all known bugs + - adds support for dictionary metatag. Pascal unit now compiles + under FPK Pascal as well as Delphi. +* Mon Apr 18 2011 ro@suse.de +- fix devel package name in baselibs.conf +* Sun Dec 26 2010 adrian@suse.de +- update to version 2.1 + * maintenance release (no further details in changelog) +- remove obsolete patches +* Wed Nov 10 2010 mrdocs@opensuse.org +- build documentation noarch and recompress tar +* Fri Oct 8 2010 mrdocs@opensuse.org +-more spec file cleanups and prepare for factory submit +-test building against it in my home repo +* Tue May 18 2010 adrian@suse.de +- initial lcms2 package, based on package from version 1 +- use OBS source services to download tar ball diff --git a/src/.deps/cmscam02.Plo b/src/.deps/cmscam02.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmscam02.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmscgats.Plo b/src/.deps/cmscgats.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmscgats.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmscnvrt.Plo b/src/.deps/cmscnvrt.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmscnvrt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmserr.Plo b/src/.deps/cmserr.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmserr.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsgamma.Plo b/src/.deps/cmsgamma.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsgamma.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsgmt.Plo b/src/.deps/cmsgmt.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsgmt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsintrp.Plo b/src/.deps/cmsintrp.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsintrp.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsio0.Plo b/src/.deps/cmsio0.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsio0.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsio1.Plo b/src/.deps/cmsio1.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsio1.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmslut.Plo b/src/.deps/cmslut.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmslut.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsmd5.Plo b/src/.deps/cmsmd5.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsmd5.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsmtrx.Plo b/src/.deps/cmsmtrx.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsmtrx.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsnamed.Plo b/src/.deps/cmsnamed.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsnamed.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsopt.Plo b/src/.deps/cmsopt.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsopt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmspack.Plo b/src/.deps/cmspack.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmspack.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmspcs.Plo b/src/.deps/cmspcs.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmspcs.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsplugin.Plo b/src/.deps/cmsplugin.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsplugin.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsps2.Plo b/src/.deps/cmsps2.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsps2.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmssamp.Plo b/src/.deps/cmssamp.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmssamp.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmssm.Plo b/src/.deps/cmssm.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmssm.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmstypes.Plo b/src/.deps/cmstypes.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmstypes.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsvirt.Plo b/src/.deps/cmsvirt.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsvirt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmswtpnt.Plo b/src/.deps/cmswtpnt.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmswtpnt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/.deps/cmsxform.Plo b/src/.deps/cmsxform.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/src/.deps/cmsxform.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..55597f2 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,583 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# src/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# +# Makefile for building lcms 2 library +# + + +pkgdatadir = $(datadir)/lcms2 +pkgincludedir = $(includedir)/lcms2 +pkglibdir = $(libdir)/lcms2 +pkglibexecdir = $(libexecdir)/lcms2 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = arm-unknown-linux-gnueabi +host_triplet = arm-unknown-linux-gnueabi +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +liblcms2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_liblcms2_la_OBJECTS = cmscnvrt.lo cmserr.lo cmsgamma.lo cmsgmt.lo \ + cmsintrp.lo cmsio0.lo cmsio1.lo cmslut.lo cmsplugin.lo \ + cmssm.lo cmsmd5.lo cmsmtrx.lo cmspack.lo cmspcs.lo cmswtpnt.lo \ + cmsxform.lo cmssamp.lo cmsnamed.lo cmscam02.lo cmsvirt.lo \ + cmstypes.lo cmscgats.lo cmsps2.lo cmsopt.lo +liblcms2_la_OBJECTS = $(am_liblcms2_la_OBJECTS) +liblcms2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(liblcms2_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(liblcms2_la_SOURCES) +DIST_SOURCES = $(liblcms2_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoconf +AUTOHEADER = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoheader +AUTOMAKE = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall +CPP = gcc -std=gnu99 -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DPACKAGE_NAME=\"lcms2\" -DPACKAGE_TARNAME=\"lcms2\" -DPACKAGE_VERSION=\"2.3\" -DPACKAGE_STRING=\"lcms2\ 2.3\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHasJPEG=1 -DHasZLIB=1 -DHasTIFF=1 -DHAVE_TIFFCONF_H=1 +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JPEGICC_DEPLIBS = -ljpeg -lm +LCMS_LIB_DEPLIBS = -lm +LD = /usr/arm-linux-gnueabi/bin/ld +LDFLAGS = +LIBOBJS = +LIBRARY_AGE = 0 +LIBRARY_CURRENT = 2 +LIBRARY_REVISION = 3 +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltmain.sh +LIB_JPEG = -ljpeg +LIB_MATH = -lm +LIB_TIFF = -ltiff +LIB_ZLIB = -lz +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = lcms2 +PACKAGE_BUGREPORT = +PACKAGE_NAME = lcms2 +PACKAGE_STRING = lcms2 2.3 +PACKAGE_TARNAME = lcms2 +PACKAGE_URL = +PACKAGE_VERSION = 2.3 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TIFFICC_DEPLIBS = -ltiff -ljpeg -lz -lm +VERSION = 2.3 +abs_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/src +abs_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/src +abs_top_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +abs_top_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = arm-unknown-linux-gnueabi +build_alias = +build_cpu = arm +build_os = linux-gnueabi +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = arm-unknown-linux-gnueabi +host_alias = +host_cpu = arm +host_os = linux-gnueabi +host_vendor = unknown +htmldir = ${docdir} + +# CFLAGS = -pedantic -Wall -std=c99 -O3 +includedir = ${prefix}/include +infodir = ${datarootdir}/info +inline = +install_sh = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign + +# Shared libraries built in this directory +lib_LTLIBRARIES = liblcms2.la +INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include +liblcms2_la_LDFLAGS = -no-undefined \ + -version-info $(LIBRARY_CURRENT):$(LIBRARY_REVISION):$(LIBRARY_AGE) + +liblcms2_la_LIBADD = $(LCMS_LIB_DEPLIBS) +liblcms2_la_SOURCES = \ + cmscnvrt.c cmserr.c cmsgamma.c cmsgmt.c cmsintrp.c cmsio0.c cmsio1.c cmslut.c \ + cmsplugin.c cmssm.c cmsmd5.c cmsmtrx.c cmspack.c cmspcs.c cmswtpnt.c cmsxform.c \ + cmssamp.c cmsnamed.c cmscam02.c cmsvirt.c cmstypes.c cmscgats.c cmsps2.c cmsopt.c \ + lcms2_internal.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +liblcms2.la: $(liblcms2_la_OBJECTS) $(liblcms2_la_DEPENDENCIES) + $(liblcms2_la_LINK) -rpath $(libdir) $(liblcms2_la_OBJECTS) $(liblcms2_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/cmscam02.Plo +include ./$(DEPDIR)/cmscgats.Plo +include ./$(DEPDIR)/cmscnvrt.Plo +include ./$(DEPDIR)/cmserr.Plo +include ./$(DEPDIR)/cmsgamma.Plo +include ./$(DEPDIR)/cmsgmt.Plo +include ./$(DEPDIR)/cmsintrp.Plo +include ./$(DEPDIR)/cmsio0.Plo +include ./$(DEPDIR)/cmsio1.Plo +include ./$(DEPDIR)/cmslut.Plo +include ./$(DEPDIR)/cmsmd5.Plo +include ./$(DEPDIR)/cmsmtrx.Plo +include ./$(DEPDIR)/cmsnamed.Plo +include ./$(DEPDIR)/cmsopt.Plo +include ./$(DEPDIR)/cmspack.Plo +include ./$(DEPDIR)/cmspcs.Plo +include ./$(DEPDIR)/cmsplugin.Plo +include ./$(DEPDIR)/cmsps2.Plo +include ./$(DEPDIR)/cmssamp.Plo +include ./$(DEPDIR)/cmssm.Plo +include ./$(DEPDIR)/cmstypes.Plo +include ./$(DEPDIR)/cmsvirt.Plo +include ./$(DEPDIR)/cmswtpnt.Plo +include ./$(DEPDIR)/cmsxform.Plo + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..8fca2d9 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,31 @@ +# +# Makefile for building lcms 2 library +# + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign + +# CFLAGS = -pedantic -Wall -std=c99 -O3 + +includedir = ${prefix}/include + +# Shared libraries built in this directory +lib_LTLIBRARIES = liblcms2.la + +LIBRARY_CURRENT = @LIBRARY_CURRENT@ +LIBRARY_REVISION = @LIBRARY_REVISION@ +LIBRARY_AGE = @LIBRARY_AGE@ + +INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include + +liblcms2_la_LDFLAGS = -no-undefined \ + -version-info $(LIBRARY_CURRENT):$(LIBRARY_REVISION):$(LIBRARY_AGE) + +liblcms2_la_LIBADD = $(LCMS_LIB_DEPLIBS) + +liblcms2_la_SOURCES = \ + cmscnvrt.c cmserr.c cmsgamma.c cmsgmt.c cmsintrp.c cmsio0.c cmsio1.c cmslut.c \ + cmsplugin.c cmssm.c cmsmd5.c cmsmtrx.c cmspack.c cmspcs.c cmswtpnt.c cmsxform.c \ + cmssamp.c cmsnamed.c cmscam02.c cmsvirt.c cmstypes.c cmscgats.c cmsps2.c cmsopt.c \ + lcms2_internal.h + diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..9e4ba6a --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,583 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Makefile for building lcms 2 library +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +liblcms2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_liblcms2_la_OBJECTS = cmscnvrt.lo cmserr.lo cmsgamma.lo cmsgmt.lo \ + cmsintrp.lo cmsio0.lo cmsio1.lo cmslut.lo cmsplugin.lo \ + cmssm.lo cmsmd5.lo cmsmtrx.lo cmspack.lo cmspcs.lo cmswtpnt.lo \ + cmsxform.lo cmssamp.lo cmsnamed.lo cmscam02.lo cmsvirt.lo \ + cmstypes.lo cmscgats.lo cmsps2.lo cmsopt.lo +liblcms2_la_OBJECTS = $(am_liblcms2_la_OBJECTS) +liblcms2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(liblcms2_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(liblcms2_la_SOURCES) +DIST_SOURCES = $(liblcms2_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ +LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRARY_AGE = @LIBRARY_AGE@ +LIBRARY_CURRENT = @LIBRARY_CURRENT@ +LIBRARY_REVISION = @LIBRARY_REVISION@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIB_JPEG = @LIB_JPEG@ +LIB_MATH = @LIB_MATH@ +LIB_TIFF = @LIB_TIFF@ +LIB_ZLIB = @LIB_ZLIB@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ + +# CFLAGS = -pedantic -Wall -std=c99 -O3 +includedir = ${prefix}/include +infodir = @infodir@ +inline = @inline@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign + +# Shared libraries built in this directory +lib_LTLIBRARIES = liblcms2.la +INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include +liblcms2_la_LDFLAGS = -no-undefined \ + -version-info $(LIBRARY_CURRENT):$(LIBRARY_REVISION):$(LIBRARY_AGE) + +liblcms2_la_LIBADD = $(LCMS_LIB_DEPLIBS) +liblcms2_la_SOURCES = \ + cmscnvrt.c cmserr.c cmsgamma.c cmsgmt.c cmsintrp.c cmsio0.c cmsio1.c cmslut.c \ + cmsplugin.c cmssm.c cmsmd5.c cmsmtrx.c cmspack.c cmspcs.c cmswtpnt.c cmsxform.c \ + cmssamp.c cmsnamed.c cmscam02.c cmsvirt.c cmstypes.c cmscgats.c cmsps2.c cmsopt.c \ + lcms2_internal.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +liblcms2.la: $(liblcms2_la_OBJECTS) $(liblcms2_la_DEPENDENCIES) + $(liblcms2_la_LINK) -rpath $(libdir) $(liblcms2_la_OBJECTS) $(liblcms2_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscam02.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscgats.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscnvrt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmserr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsgamma.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsgmt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsintrp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsio0.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsio1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmslut.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsmd5.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsmtrx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsnamed.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsopt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmspack.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmspcs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsplugin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsps2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmssamp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmssm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmstypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsvirt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmswtpnt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsxform.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/cmscam02.c b/src/cmscam02.c new file mode 100644 index 0000000..08eea16 --- /dev/null +++ b/src/cmscam02.c @@ -0,0 +1,483 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + +// CIECAM 02 appearance model. Many thanks to Jordi Vilar for the debugging. + +// ---------- Implementation -------------------------------------------- + +typedef struct { + + cmsFloat64Number XYZ[3]; + cmsFloat64Number RGB[3]; + cmsFloat64Number RGBc[3]; + cmsFloat64Number RGBp[3]; + cmsFloat64Number RGBpa[3]; + cmsFloat64Number a, b, h, e, H, A, J, Q, s, t, C, M; + cmsFloat64Number abC[2]; + cmsFloat64Number abs[2]; + cmsFloat64Number abM[2]; + +} CAM02COLOR; + +typedef struct { + + CAM02COLOR adoptedWhite; + cmsFloat64Number LA, Yb; + cmsFloat64Number F, c, Nc; + cmsUInt32Number surround; + cmsFloat64Number n, Nbb, Ncb, z, FL, D; + + cmsContext ContextID; + +} cmsCIECAM02; + + +static +cmsFloat64Number compute_n(cmsCIECAM02* pMod) +{ + return (pMod -> Yb / pMod -> adoptedWhite.XYZ[1]); +} + +static +cmsFloat64Number compute_z(cmsCIECAM02* pMod) +{ + return (1.48 + pow(pMod -> n, 0.5)); +} + +static +cmsFloat64Number computeNbb(cmsCIECAM02* pMod) +{ + return (0.725 * pow((1.0 / pMod -> n), 0.2)); +} + +static +cmsFloat64Number computeFL(cmsCIECAM02* pMod) +{ + cmsFloat64Number k, FL; + + k = 1.0 / ((5.0 * pMod->LA) + 1.0); + FL = 0.2 * pow(k, 4.0) * (5.0 * pMod->LA) + 0.1 * + (pow((1.0 - pow(k, 4.0)), 2.0)) * + (pow((5.0 * pMod->LA), (1.0 / 3.0))); + + return FL; +} + +static +cmsFloat64Number computeD(cmsCIECAM02* pMod) +{ + cmsFloat64Number D; + + D = pMod->F - (1.0/3.6)*(exp(((-pMod ->LA-42) / 92.0))); + + return D; +} + + +static +CAM02COLOR XYZtoCAT02(CAM02COLOR clr) +{ + clr.RGB[0] = (clr.XYZ[0] * 0.7328) + (clr.XYZ[1] * 0.4296) + (clr.XYZ[2] * -0.1624); + clr.RGB[1] = (clr.XYZ[0] * -0.7036) + (clr.XYZ[1] * 1.6975) + (clr.XYZ[2] * 0.0061); + clr.RGB[2] = (clr.XYZ[0] * 0.0030) + (clr.XYZ[1] * 0.0136) + (clr.XYZ[2] * 0.9834); + + return clr; +} + +static +CAM02COLOR ChromaticAdaptation(CAM02COLOR clr, cmsCIECAM02* pMod) +{ + cmsUInt32Number i; + + for (i = 0; i < 3; i++) { + clr.RGBc[i] = ((pMod -> adoptedWhite.XYZ[1] * + (pMod->D / pMod -> adoptedWhite.RGB[i])) + + (1.0 - pMod->D)) * clr.RGB[i]; + } + + return clr; +} + + +static +CAM02COLOR CAT02toHPE(CAM02COLOR clr) +{ + cmsFloat64Number M[9]; + + M[0] =(( 0.38971 * 1.096124) + (0.68898 * 0.454369) + (-0.07868 * -0.009628)); + M[1] =(( 0.38971 * -0.278869) + (0.68898 * 0.473533) + (-0.07868 * -0.005698)); + M[2] =(( 0.38971 * 0.182745) + (0.68898 * 0.072098) + (-0.07868 * 1.015326)); + M[3] =((-0.22981 * 1.096124) + (1.18340 * 0.454369) + ( 0.04641 * -0.009628)); + M[4] =((-0.22981 * -0.278869) + (1.18340 * 0.473533) + ( 0.04641 * -0.005698)); + M[5] =((-0.22981 * 0.182745) + (1.18340 * 0.072098) + ( 0.04641 * 1.015326)); + M[6] =(-0.009628); + M[7] =(-0.005698); + M[8] =( 1.015326); + + clr.RGBp[0] = (clr.RGBc[0] * M[0]) + (clr.RGBc[1] * M[1]) + (clr.RGBc[2] * M[2]); + clr.RGBp[1] = (clr.RGBc[0] * M[3]) + (clr.RGBc[1] * M[4]) + (clr.RGBc[2] * M[5]); + clr.RGBp[2] = (clr.RGBc[0] * M[6]) + (clr.RGBc[1] * M[7]) + (clr.RGBc[2] * M[8]); + + return clr; +} + +static +CAM02COLOR NonlinearCompression(CAM02COLOR clr, cmsCIECAM02* pMod) +{ + cmsUInt32Number i; + cmsFloat64Number temp; + + for (i = 0; i < 3; i++) { + if (clr.RGBp[i] < 0) { + + temp = pow((-1.0 * pMod->FL * clr.RGBp[i] / 100.0), 0.42); + clr.RGBpa[i] = (-1.0 * 400.0 * temp) / (temp + 27.13) + 0.1; + } + else { + temp = pow((pMod->FL * clr.RGBp[i] / 100.0), 0.42); + clr.RGBpa[i] = (400.0 * temp) / (temp + 27.13) + 0.1; + } + } + + clr.A = (((2.0 * clr.RGBpa[0]) + clr.RGBpa[1] + + (clr.RGBpa[2] / 20.0)) - 0.305) * pMod->Nbb; + + return clr; +} + +static +CAM02COLOR ComputeCorrelates(CAM02COLOR clr, cmsCIECAM02* pMod) +{ + cmsFloat64Number a, b, temp, e, t, r2d, d2r; + + a = clr.RGBpa[0] - (12.0 * clr.RGBpa[1] / 11.0) + (clr.RGBpa[2] / 11.0); + b = (clr.RGBpa[0] + clr.RGBpa[1] - (2.0 * clr.RGBpa[2])) / 9.0; + + r2d = (180.0 / 3.141592654); + if (a == 0) { + if (b == 0) clr.h = 0; + else if (b > 0) clr.h = 90; + else clr.h = 270; + } + else if (a > 0) { + temp = b / a; + if (b > 0) clr.h = (r2d * atan(temp)); + else if (b == 0) clr.h = 0; + else clr.h = (r2d * atan(temp)) + 360; + } + else { + temp = b / a; + clr.h = (r2d * atan(temp)) + 180; + } + + d2r = (3.141592654 / 180.0); + e = ((12500.0 / 13.0) * pMod->Nc * pMod->Ncb) * + (cos((clr.h * d2r + 2.0)) + 3.8); + + if (clr.h < 20.14) { + temp = ((clr.h + 122.47)/1.2) + ((20.14 - clr.h)/0.8); + clr.H = 300 + (100*((clr.h + 122.47)/1.2)) / temp; + } + else if (clr.h < 90.0) { + temp = ((clr.h - 20.14)/0.8) + ((90.00 - clr.h)/0.7); + clr.H = (100*((clr.h - 20.14)/0.8)) / temp; + } + else if (clr.h < 164.25) { + temp = ((clr.h - 90.00)/0.7) + ((164.25 - clr.h)/1.0); + clr.H = 100 + ((100*((clr.h - 90.00)/0.7)) / temp); + } + else if (clr.h < 237.53) { + temp = ((clr.h - 164.25)/1.0) + ((237.53 - clr.h)/1.2); + clr.H = 200 + ((100*((clr.h - 164.25)/1.0)) / temp); + } + else { + temp = ((clr.h - 237.53)/1.2) + ((360 - clr.h + 20.14)/0.8); + clr.H = 300 + ((100*((clr.h - 237.53)/1.2)) / temp); + } + + clr.J = 100.0 * pow((clr.A / pMod->adoptedWhite.A), + (pMod->c * pMod->z)); + + clr.Q = (4.0 / pMod->c) * pow((clr.J / 100.0), 0.5) * + (pMod->adoptedWhite.A + 4.0) * pow(pMod->FL, 0.25); + + t = (e * pow(((a * a) + (b * b)), 0.5)) / + (clr.RGBpa[0] + clr.RGBpa[1] + + ((21.0 / 20.0) * clr.RGBpa[2])); + + clr.C = pow(t, 0.9) * pow((clr.J / 100.0), 0.5) * + pow((1.64 - pow(0.29, pMod->n)), 0.73); + + clr.M = clr.C * pow(pMod->FL, 0.25); + clr.s = 100.0 * pow((clr.M / clr.Q), 0.5); + + return clr; +} + + +static +CAM02COLOR InverseCorrelates(CAM02COLOR clr, cmsCIECAM02* pMod) +{ + + cmsFloat64Number t, e, p1, p2, p3, p4, p5, hr, d2r; + d2r = 3.141592654 / 180.0; + + t = pow( (clr.C / (pow((clr.J / 100.0), 0.5) * + (pow((1.64 - pow(0.29, pMod->n)), 0.73)))), + (1.0 / 0.9) ); + e = ((12500.0 / 13.0) * pMod->Nc * pMod->Ncb) * + (cos((clr.h * d2r + 2.0)) + 3.8); + + clr.A = pMod->adoptedWhite.A * pow( + (clr.J / 100.0), + (1.0 / (pMod->c * pMod->z))); + + p1 = e / t; + p2 = (clr.A / pMod->Nbb) + 0.305; + p3 = 21.0 / 20.0; + + hr = clr.h * d2r; + + if (fabs(sin(hr)) >= fabs(cos(hr))) { + p4 = p1 / sin(hr); + clr.b = (p2 * (2.0 + p3) * (460.0 / 1403.0)) / + (p4 + (2.0 + p3) * (220.0 / 1403.0) * + (cos(hr) / sin(hr)) - (27.0 / 1403.0) + + p3 * (6300.0 / 1403.0)); + clr.a = clr.b * (cos(hr) / sin(hr)); + } + else { + p5 = p1 / cos(hr); + clr.a = (p2 * (2.0 + p3) * (460.0 / 1403.0)) / + (p5 + (2.0 + p3) * (220.0 / 1403.0) - + ((27.0 / 1403.0) - p3 * (6300.0 / 1403.0)) * + (sin(hr) / cos(hr))); + clr.b = clr.a * (sin(hr) / cos(hr)); + } + + clr.RGBpa[0] = ((460.0 / 1403.0) * p2) + + ((451.0 / 1403.0) * clr.a) + + ((288.0 / 1403.0) * clr.b); + clr.RGBpa[1] = ((460.0 / 1403.0) * p2) - + ((891.0 / 1403.0) * clr.a) - + ((261.0 / 1403.0) * clr.b); + clr.RGBpa[2] = ((460.0 / 1403.0) * p2) - + ((220.0 / 1403.0) * clr.a) - + ((6300.0 / 1403.0) * clr.b); + + return clr; +} + +static +CAM02COLOR InverseNonlinearity(CAM02COLOR clr, cmsCIECAM02* pMod) +{ + cmsUInt32Number i; + cmsFloat64Number c1; + + for (i = 0; i < 3; i++) { + if ((clr.RGBpa[i] - 0.1) < 0) c1 = -1; + else c1 = 1; + clr.RGBp[i] = c1 * (100.0 / pMod->FL) * + pow(((27.13 * fabs(clr.RGBpa[i] - 0.1)) / + (400.0 - fabs(clr.RGBpa[i] - 0.1))), + (1.0 / 0.42)); + } + + return clr; +} + +static +CAM02COLOR HPEtoCAT02(CAM02COLOR clr) +{ + cmsFloat64Number M[9]; + + M[0] = (( 0.7328 * 1.910197) + (0.4296 * 0.370950)); + M[1] = (( 0.7328 * -1.112124) + (0.4296 * 0.629054)); + M[2] = (( 0.7328 * 0.201908) + (0.4296 * 0.000008) - 0.1624); + M[3] = ((-0.7036 * 1.910197) + (1.6975 * 0.370950)); + M[4] = ((-0.7036 * -1.112124) + (1.6975 * 0.629054)); + M[5] = ((-0.7036 * 0.201908) + (1.6975 * 0.000008) + 0.0061); + M[6] = (( 0.0030 * 1.910197) + (0.0136 * 0.370950)); + M[7] = (( 0.0030 * -1.112124) + (0.0136 * 0.629054)); + M[8] = (( 0.0030 * 0.201908) + (0.0136 * 0.000008) + 0.9834);; + + clr.RGBc[0] = (clr.RGBp[0] * M[0]) + (clr.RGBp[1] * M[1]) + (clr.RGBp[2] * M[2]); + clr.RGBc[1] = (clr.RGBp[0] * M[3]) + (clr.RGBp[1] * M[4]) + (clr.RGBp[2] * M[5]); + clr.RGBc[2] = (clr.RGBp[0] * M[6]) + (clr.RGBp[1] * M[7]) + (clr.RGBp[2] * M[8]); + return clr; +} + + +static +CAM02COLOR InverseChromaticAdaptation(CAM02COLOR clr, cmsCIECAM02* pMod) +{ + cmsUInt32Number i; + for (i = 0; i < 3; i++) { + clr.RGB[i] = clr.RGBc[i] / + ((pMod->adoptedWhite.XYZ[1] * pMod->D / pMod->adoptedWhite.RGB[i]) + 1.0 - pMod->D); + } + return clr; +} + + +static +CAM02COLOR CAT02toXYZ(CAM02COLOR clr) +{ + clr.XYZ[0] = (clr.RGB[0] * 1.096124) + (clr.RGB[1] * -0.278869) + (clr.RGB[2] * 0.182745); + clr.XYZ[1] = (clr.RGB[0] * 0.454369) + (clr.RGB[1] * 0.473533) + (clr.RGB[2] * 0.072098); + clr.XYZ[2] = (clr.RGB[0] * -0.009628) + (clr.RGB[1] * -0.005698) + (clr.RGB[2] * 1.015326); + + return clr; +} + + +cmsHANDLE CMSEXPORT cmsCIECAM02Init(cmsContext ContextID, const cmsViewingConditions* pVC) +{ + cmsCIECAM02* lpMod; + + _cmsAssert(pVC != NULL); + + if((lpMod = (cmsCIECAM02*) _cmsMallocZero(ContextID, sizeof(cmsCIECAM02))) == NULL) { + return NULL; + } + + lpMod ->ContextID = ContextID; + + lpMod ->adoptedWhite.XYZ[0] = pVC ->whitePoint.X; + lpMod ->adoptedWhite.XYZ[1] = pVC ->whitePoint.Y; + lpMod ->adoptedWhite.XYZ[2] = pVC ->whitePoint.Z; + + lpMod -> LA = pVC ->La; + lpMod -> Yb = pVC ->Yb; + lpMod -> D = pVC ->D_value; + lpMod -> surround = pVC ->surround; + + switch (lpMod -> surround) { + + + case CUTSHEET_SURROUND: + lpMod->F = 0.8; + lpMod->c = 0.41; + lpMod->Nc = 0.8; + break; + + case DARK_SURROUND: + lpMod -> F = 0.8; + lpMod -> c = 0.525; + lpMod -> Nc = 0.8; + break; + + case DIM_SURROUND: + lpMod -> F = 0.9; + lpMod -> c = 0.59; + lpMod -> Nc = 0.95; + break; + + default: + // Average surround + lpMod -> F = 1.0; + lpMod -> c = 0.69; + lpMod -> Nc = 1.0; + } + + lpMod -> n = compute_n(lpMod); + lpMod -> z = compute_z(lpMod); + lpMod -> Nbb = computeNbb(lpMod); + lpMod -> FL = computeFL(lpMod); + + if (lpMod -> D == D_CALCULATE) { + lpMod -> D = computeD(lpMod); + } + + lpMod -> Ncb = lpMod -> Nbb; + + lpMod -> adoptedWhite = XYZtoCAT02(lpMod -> adoptedWhite); + lpMod -> adoptedWhite = ChromaticAdaptation(lpMod -> adoptedWhite, lpMod); + lpMod -> adoptedWhite = CAT02toHPE(lpMod -> adoptedWhite); + lpMod -> adoptedWhite = NonlinearCompression(lpMod -> adoptedWhite, lpMod); + + return (cmsHANDLE) lpMod; + +} + +void CMSEXPORT cmsCIECAM02Done(cmsHANDLE hModel) +{ + cmsCIECAM02* lpMod = (cmsCIECAM02*) hModel; + + if (lpMod) _cmsFree(lpMod ->ContextID, lpMod); +} + + +void CMSEXPORT cmsCIECAM02Forward(cmsHANDLE hModel, const cmsCIEXYZ* pIn, cmsJCh* pOut) +{ + CAM02COLOR clr; + cmsCIECAM02* lpMod = (cmsCIECAM02*) hModel; + + _cmsAssert(lpMod != NULL); + _cmsAssert(pIn != NULL); + _cmsAssert(pOut != NULL); + + clr.XYZ[0] = pIn ->X; + clr.XYZ[1] = pIn ->Y; + clr.XYZ[2] = pIn ->Z; + + clr = XYZtoCAT02(clr); + clr = ChromaticAdaptation(clr, lpMod); + clr = CAT02toHPE(clr); + clr = NonlinearCompression(clr, lpMod); + clr = ComputeCorrelates(clr, lpMod); + + pOut ->J = clr.J; + pOut ->C = clr.C; + pOut ->h = clr.h; +} + +void CMSEXPORT cmsCIECAM02Reverse(cmsHANDLE hModel, const cmsJCh* pIn, cmsCIEXYZ* pOut) +{ + CAM02COLOR clr; + cmsCIECAM02* lpMod = (cmsCIECAM02*) hModel; + + _cmsAssert(lpMod != NULL); + _cmsAssert(pIn != NULL); + _cmsAssert(pOut != NULL); + + clr.J = pIn -> J; + clr.C = pIn -> C; + clr.h = pIn -> h; + + clr = InverseCorrelates(clr, lpMod); + clr = InverseNonlinearity(clr, lpMod); + clr = HPEtoCAT02(clr); + clr = InverseChromaticAdaptation(clr, lpMod); + clr = CAT02toXYZ(clr); + + pOut ->X = clr.XYZ[0]; + pOut ->Y = clr.XYZ[1]; + pOut ->Z = clr.XYZ[2]; +} + diff --git a/src/cmscgats.c b/src/cmscgats.c new file mode 100644 index 0000000..e4ccfbf --- /dev/null +++ b/src/cmscgats.c @@ -0,0 +1,2693 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + + +// IT8.7 / CGATS.17-200x handling ----------------------------------------------------------------------------- + + +#define MAXID 128 // Max lenght of identifier +#define MAXSTR 1024 // Max lenght of string +#define MAXTABLES 255 // Max Number of tables in a single stream +#define MAXINCLUDE 20 // Max number of nested includes + +#define DEFAULT_DBL_FORMAT "%.10g" // Double formatting + +#ifdef CMS_IS_WINDOWS_ +# include +# define DIR_CHAR '\\' +#else +# define DIR_CHAR '/' +#endif + +// Symbols +typedef enum { + + SNONE, + SINUM, // Integer + SDNUM, // Real + SIDENT, // Identifier + SSTRING, // string + SCOMMENT, // comment + SEOLN, // End of line + SEOF, // End of stream + SSYNERROR, // Syntax error found on stream + + // Keywords + + SBEGIN_DATA, + SBEGIN_DATA_FORMAT, + SEND_DATA, + SEND_DATA_FORMAT, + SKEYWORD, + SDATA_FORMAT_ID, + SINCLUDE + + } SYMBOL; + + +// How to write the value +typedef enum { + + WRITE_UNCOOKED, + WRITE_STRINGIFY, + WRITE_HEXADECIMAL, + WRITE_BINARY, + WRITE_PAIR + + } WRITEMODE; + +// Linked list of variable names +typedef struct _KeyVal { + + struct _KeyVal* Next; + char* Keyword; // Name of variable + struct _KeyVal* NextSubkey; // If key is a dictionary, points to the next item + char* Subkey; // If key is a dictionary, points to the subkey name + char* Value; // Points to value + WRITEMODE WriteAs; // How to write the value + + } KEYVALUE; + + +// Linked list of memory chunks (Memory sink) +typedef struct _OwnedMem { + + struct _OwnedMem* Next; + void * Ptr; // Point to value + + } OWNEDMEM; + +// Suballocator +typedef struct _SubAllocator { + + cmsUInt8Number* Block; + cmsUInt32Number BlockSize; + cmsUInt32Number Used; + + } SUBALLOCATOR; + +// Table. Each individual table can hold properties and rows & cols +typedef struct _Table { + + char SheetType[MAXSTR]; // The first row of the IT8 (the type) + + int nSamples, nPatches; // Cols, Rows + int SampleID; // Pos of ID + + KEYVALUE* HeaderList; // The properties + + char** DataFormat; // The binary stream descriptor + char** Data; // The binary stream + + } TABLE; + +// File stream being parsed +typedef struct _FileContext { + char FileName[cmsMAX_PATH]; // File name if being readed from file + FILE* Stream; // File stream or NULL if holded in memory + } FILECTX; + +// This struct hold all information about an open IT8 handler. +typedef struct { + + + cmsUInt32Number TablesCount; // How many tables in this stream + cmsUInt32Number nTable; // The actual table + + TABLE Tab[MAXTABLES]; + + // Memory management + OWNEDMEM* MemorySink; // The storage backend + SUBALLOCATOR Allocator; // String suballocator -- just to keep it fast + + // Parser state machine + SYMBOL sy; // Current symbol + int ch; // Current character + + int inum; // integer value + cmsFloat64Number dnum; // real value + char id[MAXID]; // identifier + char str[MAXSTR]; // string + + // Allowed keywords & datasets. They have visibility on whole stream + KEYVALUE* ValidKeywords; + KEYVALUE* ValidSampleID; + + char* Source; // Points to loc. being parsed + int lineno; // line counter for error reporting + + FILECTX* FileStack[MAXINCLUDE]; // Stack of files being parsed + int IncludeSP; // Include Stack Pointer + + char* MemoryBlock; // The stream if holded in memory + + char DoubleFormatter[MAXID];// Printf-like 'cmsFloat64Number' formatter + + cmsContext ContextID; // The threading context + + } cmsIT8; + + +// The stream for save operations +typedef struct { + + FILE* stream; // For save-to-file behaviour + + cmsUInt8Number* Base; + cmsUInt8Number* Ptr; // For save-to-mem behaviour + cmsUInt32Number Used; + cmsUInt32Number Max; + + } SAVESTREAM; + + +// ------------------------------------------------------ cmsIT8 parsing routines + + +// A keyword +typedef struct { + + const char *id; + SYMBOL sy; + + } KEYWORD; + +// The keyword->symbol translation table. Sorting is required. +static const KEYWORD TabKeys[] = { + + {"$INCLUDE", SINCLUDE}, // This is an extension! + {".INCLUDE", SINCLUDE}, // This is an extension! + + {"BEGIN_DATA", SBEGIN_DATA }, + {"BEGIN_DATA_FORMAT", SBEGIN_DATA_FORMAT }, + {"DATA_FORMAT_IDENTIFIER", SDATA_FORMAT_ID}, + {"END_DATA", SEND_DATA}, + {"END_DATA_FORMAT", SEND_DATA_FORMAT}, + {"KEYWORD", SKEYWORD} + }; + +#define NUMKEYS (sizeof(TabKeys)/sizeof(KEYWORD)) + +// Predefined properties + +// A property +typedef struct { + const char *id; // The identifier + WRITEMODE as; // How is supposed to be written + } PROPERTY; + +static PROPERTY PredefinedProperties[] = { + + {"NUMBER_OF_FIELDS", WRITE_UNCOOKED}, // Required - NUMBER OF FIELDS + {"NUMBER_OF_SETS", WRITE_UNCOOKED}, // Required - NUMBER OF SETS + {"ORIGINATOR", WRITE_STRINGIFY}, // Required - Identifies the specific system, organization or individual that created the data file. + {"FILE_DESCRIPTOR", WRITE_STRINGIFY}, // Required - Describes the purpose or contents of the data file. + {"CREATED", WRITE_STRINGIFY}, // Required - Indicates date of creation of the data file. + {"DESCRIPTOR", WRITE_STRINGIFY}, // Required - Describes the purpose or contents of the data file. + {"DIFFUSE_GEOMETRY", WRITE_STRINGIFY}, // The diffuse geometry used. Allowed values are "sphere" or "opal". + {"MANUFACTURER", WRITE_STRINGIFY}, + {"MANUFACTURE", WRITE_STRINGIFY}, // Some broken Fuji targets does store this value + {"PROD_DATE", WRITE_STRINGIFY}, // Identifies year and month of production of the target in the form yyyy:mm. + {"SERIAL", WRITE_STRINGIFY}, // Uniquely identifies individual physical target. + + {"MATERIAL", WRITE_STRINGIFY}, // Identifies the material on which the target was produced using a code + // uniquely identifying th e material. This is intend ed to be used for IT8.7 + // physical targets only (i.e . IT8.7/1 a nd IT8.7/2). + + {"INSTRUMENTATION", WRITE_STRINGIFY}, // Used to report the specific instrumentation used (manufacturer and + // model number) to generate the data reported. This data will often + // provide more information about the particular data collected than an + // extensive list of specific details. This is particularly important for + // spectral data or data derived from spectrophotometry. + + {"MEASUREMENT_SOURCE", WRITE_STRINGIFY}, // Illumination used for spectral measurements. This data helps provide + // a guide to the potential for issues of paper fluorescence, etc. + + {"PRINT_CONDITIONS", WRITE_STRINGIFY}, // Used to define the characteristics of the printed sheet being reported. + // Where standard conditions have been defined (e.g., SWOP at nominal) + // named conditions may suffice. Otherwise, detailed information is + // needed. + + {"SAMPLE_BACKING", WRITE_STRINGIFY}, // Identifies the backing material used behind the sample during + // measurement. Allowed values are “black”, “white”, or {"na". + + {"CHISQ_DOF", WRITE_STRINGIFY}, // Degrees of freedom associated with the Chi squared statistic + + // below properties are new in recent specs: + + {"MEASUREMENT_GEOMETRY", WRITE_STRINGIFY}, // The type of measurement, either reflection or transmission, should be indicated + // along with details of the geometry and the aperture size and shape. For example, + // for transmission measurements it is important to identify 0/diffuse, diffuse/0, + // opal or integrating sphere, etc. For reflection it is important to identify 0/45, + // 45/0, sphere (specular included or excluded), etc. + + {"FILTER", WRITE_STRINGIFY}, // Identifies the use of physical filter(s) during measurement. Typically used to + // denote the use of filters such as none, D65, Red, Green or Blue. + + {"POLARIZATION", WRITE_STRINGIFY}, // Identifies the use of a physical polarization filter during measurement. Allowed + // values are {"yes”, “white”, “none” or “na”. + + {"WEIGHTING_FUNCTION", WRITE_PAIR}, // Indicates such functions as: the CIE standard observer functions used in the + // calculation of various data parameters (2 degree and 10 degree), CIE standard + // illuminant functions used in the calculation of various data parameters (e.g., D50, + // D65, etc.), density status response, etc. If used there shall be at least one + // name-value pair following the WEIGHTING_FUNCTION tag/keyword. The first attribute + // in the set shall be {"name" and shall identify the particular parameter used. + // The second shall be {"value" and shall provide the value associated with that name. + // For ASCII data, a string containing the Name and Value attribute pairs shall follow + // the weighting function keyword. A semi-colon separates attribute pairs from each + // other and within the attribute the name and value are separated by a comma. + + {"COMPUTATIONAL_PARAMETER", WRITE_PAIR}, // Parameter that is used in computing a value from measured data. Name is the name + // of the calculation, parameter is the name of the parameter used in the calculation + // and value is the value of the parameter. + + {"TARGET_TYPE", WRITE_STRINGIFY}, // The type of target being measured, e.g. IT8.7/1, IT8.7/3, user defined, etc. + + {"COLORANT", WRITE_STRINGIFY}, // Identifies the colorant(s) used in creating the target. + + {"TABLE_DESCRIPTOR", WRITE_STRINGIFY}, // Describes the purpose or contents of a data table. + + {"TABLE_NAME", WRITE_STRINGIFY} // Provides a short name for a data table. +}; + +#define NUMPREDEFINEDPROPS (sizeof(PredefinedProperties)/sizeof(PROPERTY)) + + +// Predefined sample types on dataset +static const char* PredefinedSampleID[] = { + "SAMPLE_ID", // Identifies sample that data represents + "STRING", // Identifies label, or other non-machine readable value. + // Value must begin and end with a " symbol + + "CMYK_C", // Cyan component of CMYK data expressed as a percentage + "CMYK_M", // Magenta component of CMYK data expressed as a percentage + "CMYK_Y", // Yellow component of CMYK data expressed as a percentage + "CMYK_K", // Black component of CMYK data expressed as a percentage + "D_RED", // Red filter density + "D_GREEN", // Green filter density + "D_BLUE", // Blue filter density + "D_VIS", // Visual filter density + "D_MAJOR_FILTER", // Major filter d ensity + "RGB_R", // Red component of RGB data + "RGB_G", // Green component of RGB data + "RGB_B", // Blue com ponent of RGB data + "SPECTRAL_NM", // Wavelength of measurement expressed in nanometers + "SPECTRAL_PCT", // Percentage reflectance/transmittance + "SPECTRAL_DEC", // Reflectance/transmittance + "XYZ_X", // X component of tristimulus data + "XYZ_Y", // Y component of tristimulus data + "XYZ_Z", // Z component of tristimulus data + "XYY_X" // x component of chromaticity data + "XYY_Y", // y component of chromaticity data + "XYY_CAPY", // Y component of tristimulus data + "LAB_L", // L* component of Lab data + "LAB_A", // a* component of Lab data + "LAB_B", // b* component of Lab data + "LAB_C", // C*ab component of Lab data + "LAB_H", // hab component of Lab data + "LAB_DE", // CIE dE + "LAB_DE_94", // CIE dE using CIE 94 + "LAB_DE_CMC", // dE using CMC + "LAB_DE_2000", // CIE dE using CIE DE 2000 + "MEAN_DE", // Mean Delta E (LAB_DE) of samples compared to batch average + // (Used for data files for ANSI IT8.7/1 and IT8.7/2 targets) + "STDEV_X", // Standard deviation of X (tristimulus data) + "STDEV_Y", // Standard deviation of Y (tristimulus data) + "STDEV_Z", // Standard deviation of Z (tristimulus data) + "STDEV_L", // Standard deviation of L* + "STDEV_A", // Standard deviation of a* + "STDEV_B", // Standard deviation of b* + "STDEV_DE", // Standard deviation of CIE dE + "CHI_SQD_PAR"}; // The average of the standard deviations of L*, a* and b*. It is + // used to derive an estimate of the chi-squared parameter which is + // recommended as the predictor of the variability of dE + +#define NUMPREDEFINEDSAMPLEID (sizeof(PredefinedSampleID)/sizeof(char *)) + +//Forward declaration of some internal functions +static void* AllocChunk(cmsIT8* it8, cmsUInt32Number size); + +// Checks if c is a separator +static +cmsBool isseparator(int c) +{ + return (c == ' ') || (c == '\t') || (c == '\r'); +} + +// Checks whatever if c is a valid identifier char +static +cmsBool ismiddle(int c) +{ + return (!isseparator(c) && (c != '#') && (c !='\"') && (c != '\'') && (c > 32) && (c < 127)); +} + +// Checks whatsever if c is a valid identifier middle char. +static +cmsBool isidchar(int c) +{ + return isalnum(c) || ismiddle(c); +} + +// Checks whatsever if c is a valid identifier first char. +static +cmsBool isfirstidchar(int c) +{ + return !isdigit(c) && ismiddle(c); +} + +// Guess whether the supplied path looks like an absolute path +static +cmsBool isabsolutepath(const char *path) +{ + char ThreeChars[4]; + + if(path == NULL) + return FALSE; + if (path[0] == 0) + return FALSE; + + strncpy(ThreeChars, path, 3); + ThreeChars[3] = 0; + + if(ThreeChars[0] == DIR_CHAR) + return TRUE; + +#ifdef CMS_IS_WINDOWS_ + if (isalpha((int) ThreeChars[0]) && ThreeChars[1] == ':') + return TRUE; +#endif + return FALSE; +} + +// Makes a file path based on a given reference path +// NOTE: this function doesn't check if the path exists or even if it's legal +static +cmsBool BuildAbsolutePath(const char *relPath, const char *basePath, char *buffer, cmsUInt32Number MaxLen) +{ + char *tail; + cmsUInt32Number len; + + // Already absolute? + if (isabsolutepath(relPath)) { + + strncpy(buffer, relPath, MaxLen); + buffer[MaxLen-1] = 0; + return TRUE; + } + + // No, search for last + strncpy(buffer, basePath, MaxLen); + buffer[MaxLen-1] = 0; + + tail = strrchr(buffer, DIR_CHAR); + if (tail == NULL) return FALSE; // Is not absolute and has no separators?? + + len = (cmsUInt32Number) (tail - buffer); + if (len >= MaxLen) return FALSE; + + // No need to assure zero terminator over here + strncpy(tail + 1, relPath, MaxLen - len); + + return TRUE; +} + + +// Make sure no exploit is being even tried +static +const char* NoMeta(const char* str) +{ + if (strchr(str, '%') != NULL) + return "**** CORRUPTED FORMAT STRING ***"; + + return str; +} + +// Syntax error +static +cmsBool SynError(cmsIT8* it8, const char *Txt, ...) +{ + char Buffer[256], ErrMsg[1024]; + va_list args; + + va_start(args, Txt); + vsnprintf(Buffer, 255, Txt, args); + Buffer[255] = 0; + va_end(args); + + snprintf(ErrMsg, 1023, "%s: Line %d, %s", it8->FileStack[it8 ->IncludeSP]->FileName, it8->lineno, Buffer); + ErrMsg[1023] = 0; + it8->sy = SSYNERROR; + cmsSignalError(it8 ->ContextID, cmsERROR_CORRUPTION_DETECTED, "%s", ErrMsg); + return FALSE; +} + +// Check if current symbol is same as specified. issue an error else. +static +cmsBool Check(cmsIT8* it8, SYMBOL sy, const char* Err) +{ + if (it8 -> sy != sy) + return SynError(it8, NoMeta(Err)); + return TRUE; +} + +// Read Next character from stream +static +void NextCh(cmsIT8* it8) +{ + if (it8 -> FileStack[it8 ->IncludeSP]->Stream) { + + it8 ->ch = fgetc(it8 ->FileStack[it8 ->IncludeSP]->Stream); + + if (feof(it8 -> FileStack[it8 ->IncludeSP]->Stream)) { + + if (it8 ->IncludeSP > 0) { + + fclose(it8 ->FileStack[it8->IncludeSP--]->Stream); + it8 -> ch = ' '; // Whitespace to be ignored + + } else + it8 ->ch = 0; // EOF + } + } + else { + it8->ch = *it8->Source; + if (it8->ch) it8->Source++; + } +} + + +// Try to see if current identifier is a keyword, if so return the referred symbol +static +SYMBOL BinSrchKey(const char *id) +{ + int l = 1; + int r = NUMKEYS; + int x, res; + + while (r >= l) + { + x = (l+r)/2; + res = cmsstrcasecmp(id, TabKeys[x-1].id); + if (res == 0) return TabKeys[x-1].sy; + if (res < 0) r = x - 1; + else l = x + 1; + } + + return SNONE; +} + + +// 10 ^n +static +cmsFloat64Number xpow10(int n) +{ + return pow(10, (cmsFloat64Number) n); +} + + +// Reads a Real number, tries to follow from integer number +static +void ReadReal(cmsIT8* it8, int inum) +{ + it8->dnum = (cmsFloat64Number) inum; + + while (isdigit(it8->ch)) { + + it8->dnum = it8->dnum * 10.0 + (it8->ch - '0'); + NextCh(it8); + } + + if (it8->ch == '.') { // Decimal point + + cmsFloat64Number frac = 0.0; // fraction + int prec = 0; // precision + + NextCh(it8); // Eats dec. point + + while (isdigit(it8->ch)) { + + frac = frac * 10.0 + (it8->ch - '0'); + prec++; + NextCh(it8); + } + + it8->dnum = it8->dnum + (frac / xpow10(prec)); + } + + // Exponent, example 34.00E+20 + if (toupper(it8->ch) == 'E') { + + int e; + int sgn; + + NextCh(it8); sgn = 1; + + if (it8->ch == '-') { + + sgn = -1; NextCh(it8); + } + else + if (it8->ch == '+') { + + sgn = +1; + NextCh(it8); + } + + e = 0; + while (isdigit(it8->ch)) { + + if ((cmsFloat64Number) e * 10L < INT_MAX) + e = e * 10 + (it8->ch - '0'); + + NextCh(it8); + } + + e = sgn*e; + it8 -> dnum = it8 -> dnum * xpow10(e); + } +} + + + +// Reads next symbol +static +void InSymbol(cmsIT8* it8) +{ + register char *idptr; + register int k; + SYMBOL key; + int sng; + + do { + + while (isseparator(it8->ch)) + NextCh(it8); + + if (isfirstidchar(it8->ch)) { // Identifier + + k = 0; + idptr = it8->id; + + do { + + if (++k < MAXID) *idptr++ = (char) it8->ch; + + NextCh(it8); + + } while (isidchar(it8->ch)); + + *idptr = '\0'; + + + key = BinSrchKey(it8->id); + if (key == SNONE) it8->sy = SIDENT; + else it8->sy = key; + + } + else // Is a number? + if (isdigit(it8->ch) || it8->ch == '.' || it8->ch == '-' || it8->ch == '+') + { + int sign = 1; + + if (it8->ch == '-') { + sign = -1; + NextCh(it8); + } + + it8->inum = 0; + it8->sy = SINUM; + + if (it8->ch == '0') { // 0xnnnn (Hexa) or 0bnnnn (Binary) + + NextCh(it8); + if (toupper(it8->ch) == 'X') { + + int j; + + NextCh(it8); + while (isxdigit(it8->ch)) + { + it8->ch = toupper(it8->ch); + if (it8->ch >= 'A' && it8->ch <= 'F') j = it8->ch -'A'+10; + else j = it8->ch - '0'; + + if ((long) it8->inum * 16L > (long) INT_MAX) + { + SynError(it8, "Invalid hexadecimal number"); + return; + } + + it8->inum = it8->inum * 16 + j; + NextCh(it8); + } + return; + } + + if (toupper(it8->ch) == 'B') { // Binary + + int j; + + NextCh(it8); + while (it8->ch == '0' || it8->ch == '1') + { + j = it8->ch - '0'; + + if ((long) it8->inum * 2L > (long) INT_MAX) + { + SynError(it8, "Invalid binary number"); + return; + } + + it8->inum = it8->inum * 2 + j; + NextCh(it8); + } + return; + } + } + + + while (isdigit(it8->ch)) { + + if ((long) it8->inum * 10L > (long) INT_MAX) { + ReadReal(it8, it8->inum); + it8->sy = SDNUM; + it8->dnum *= sign; + return; + } + + it8->inum = it8->inum * 10 + (it8->ch - '0'); + NextCh(it8); + } + + if (it8->ch == '.') { + + ReadReal(it8, it8->inum); + it8->sy = SDNUM; + it8->dnum *= sign; + return; + } + + it8 -> inum *= sign; + + // Special case. Numbers followed by letters are taken as identifiers + + if (isidchar(it8 ->ch)) { + + if (it8 ->sy == SINUM) { + + sprintf(it8->id, "%d", it8->inum); + } + else { + + sprintf(it8->id, it8 ->DoubleFormatter, it8->dnum); + } + + k = (int) strlen(it8 ->id); + idptr = it8 ->id + k; + do { + + if (++k < MAXID) *idptr++ = (char) it8->ch; + + NextCh(it8); + + } while (isidchar(it8->ch)); + + *idptr = '\0'; + it8->sy = SIDENT; + } + return; + + } + else + switch ((int) it8->ch) { + + // EOF marker -- ignore it + case '\x1a': + NextCh(it8); + break; + + // Eof stream markers + case 0: + case -1: + it8->sy = SEOF; + break; + + + // Next line + case '\n': + NextCh(it8); + it8->sy = SEOLN; + it8->lineno++; + break; + + // Comment + case '#': + NextCh(it8); + while (it8->ch && it8->ch != '\n') + NextCh(it8); + + it8->sy = SCOMMENT; + break; + + // String. + case '\'': + case '\"': + idptr = it8->str; + sng = it8->ch; + k = 0; + NextCh(it8); + + while (k < MAXSTR && it8->ch != sng) { + + if (it8->ch == '\n'|| it8->ch == '\r') k = MAXSTR+1; + else { + *idptr++ = (char) it8->ch; + NextCh(it8); + k++; + } + } + + it8->sy = SSTRING; + *idptr = '\0'; + NextCh(it8); + break; + + + default: + SynError(it8, "Unrecognized character: 0x%x", it8 ->ch); + return; + } + + } while (it8->sy == SCOMMENT); + + // Handle the include special token + + if (it8 -> sy == SINCLUDE) { + + FILECTX* FileNest; + + if(it8 -> IncludeSP >= (MAXINCLUDE-1)) { + + SynError(it8, "Too many recursion levels"); + return; + } + + InSymbol(it8); + if (!Check(it8, SSTRING, "Filename expected")) return; + + FileNest = it8 -> FileStack[it8 -> IncludeSP + 1]; + if(FileNest == NULL) { + + FileNest = it8 ->FileStack[it8 -> IncludeSP + 1] = (FILECTX*)AllocChunk(it8, sizeof(FILECTX)); + //if(FileNest == NULL) + // TODO: how to manage out-of-memory conditions? + } + + if (BuildAbsolutePath(it8->str, + it8->FileStack[it8->IncludeSP]->FileName, + FileNest->FileName, cmsMAX_PATH-1) == FALSE) { + SynError(it8, "File path too long"); + return; + } + + FileNest->Stream = fopen(FileNest->FileName, "rt"); + if (FileNest->Stream == NULL) { + + SynError(it8, "File %s not found", FileNest->FileName); + return; + } + it8->IncludeSP++; + + it8 ->ch = ' '; + InSymbol(it8); + } + +} + +// Checks end of line separator +static +cmsBool CheckEOLN(cmsIT8* it8) +{ + if (!Check(it8, SEOLN, "Expected separator")) return FALSE; + while (it8 -> sy == SEOLN) + InSymbol(it8); + return TRUE; + +} + +// Skip a symbol + +static +void Skip(cmsIT8* it8, SYMBOL sy) +{ + if (it8->sy == sy && it8->sy != SEOF) + InSymbol(it8); +} + + +// Skip multiple EOLN +static +void SkipEOLN(cmsIT8* it8) +{ + while (it8->sy == SEOLN) { + InSymbol(it8); + } +} + + +// Returns a string holding current value +static +cmsBool GetVal(cmsIT8* it8, char* Buffer, cmsUInt32Number max, const char* ErrorTitle) +{ + switch (it8->sy) { + + case SIDENT: strncpy(Buffer, it8->id, max); + Buffer[max-1]=0; + break; + case SINUM: snprintf(Buffer, max, "%d", it8 -> inum); break; + case SDNUM: snprintf(Buffer, max, it8->DoubleFormatter, it8 -> dnum); break; + case SSTRING: strncpy(Buffer, it8->str, max); + Buffer[max-1] = 0; + break; + + + default: + return SynError(it8, "%s", ErrorTitle); + } + + Buffer[max] = 0; + return TRUE; +} + +// ---------------------------------------------------------- Table + +static +TABLE* GetTable(cmsIT8* it8) +{ + if ((it8 -> nTable >= it8 ->TablesCount)) { + + SynError(it8, "Table %d out of sequence", it8 -> nTable); + return it8 -> Tab; + } + + return it8 ->Tab + it8 ->nTable; +} + +// ---------------------------------------------------------- Memory management + + +// Frees an allocator and owned memory +void CMSEXPORT cmsIT8Free(cmsHANDLE hIT8) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + + if (it8 == NULL) + return; + + if (it8->MemorySink) { + + OWNEDMEM* p; + OWNEDMEM* n; + + for (p = it8->MemorySink; p != NULL; p = n) { + + n = p->Next; + if (p->Ptr) _cmsFree(it8 ->ContextID, p->Ptr); + _cmsFree(it8 ->ContextID, p); + } + } + + if (it8->MemoryBlock) + _cmsFree(it8 ->ContextID, it8->MemoryBlock); + + _cmsFree(it8 ->ContextID, it8); +} + + +// Allocates a chunk of data, keep linked list +static +void* AllocBigBlock(cmsIT8* it8, cmsUInt32Number size) +{ + OWNEDMEM* ptr1; + void* ptr = _cmsMallocZero(it8->ContextID, size); + + if (ptr != NULL) { + + ptr1 = (OWNEDMEM*) _cmsMallocZero(it8 ->ContextID, sizeof(OWNEDMEM)); + + if (ptr1 == NULL) { + + _cmsFree(it8 ->ContextID, ptr); + return NULL; + } + + ptr1-> Ptr = ptr; + ptr1-> Next = it8 -> MemorySink; + it8 -> MemorySink = ptr1; + } + + return ptr; +} + + +// Suballocator. +static +void* AllocChunk(cmsIT8* it8, cmsUInt32Number size) +{ + cmsUInt32Number Free = it8 ->Allocator.BlockSize - it8 ->Allocator.Used; + cmsUInt8Number* ptr; + + size = _cmsALIGNMEM(size); + + if (size > Free) { + + if (it8 -> Allocator.BlockSize == 0) + + it8 -> Allocator.BlockSize = 20*1024; + else + it8 ->Allocator.BlockSize *= 2; + + if (it8 ->Allocator.BlockSize < size) + it8 ->Allocator.BlockSize = size; + + it8 ->Allocator.Used = 0; + it8 ->Allocator.Block = (cmsUInt8Number*) AllocBigBlock(it8, it8 ->Allocator.BlockSize); + } + + ptr = it8 ->Allocator.Block + it8 ->Allocator.Used; + it8 ->Allocator.Used += size; + + return (void*) ptr; + +} + + +// Allocates a string +static +char *AllocString(cmsIT8* it8, const char* str) +{ + cmsUInt32Number Size = (cmsUInt32Number) strlen(str)+1; + char *ptr; + + + ptr = (char *) AllocChunk(it8, Size); + if (ptr) strncpy (ptr, str, Size-1); + + return ptr; +} + +// Searches through linked list + +static +cmsBool IsAvailableOnList(KEYVALUE* p, const char* Key, const char* Subkey, KEYVALUE** LastPtr) +{ + if (LastPtr) *LastPtr = p; + + for (; p != NULL; p = p->Next) { + + if (LastPtr) *LastPtr = p; + + if (*Key != '#') { // Comments are ignored + + if (cmsstrcasecmp(Key, p->Keyword) == 0) + break; + } + } + + if (p == NULL) + return FALSE; + + if (Subkey == 0) + return TRUE; + + for (; p != NULL; p = p->NextSubkey) { + + if (LastPtr) *LastPtr = p; + + if (cmsstrcasecmp(Subkey, p->Subkey) == 0) + return TRUE; + } + + return FALSE; +} + + + +// Add a property into a linked list +static +KEYVALUE* AddToList(cmsIT8* it8, KEYVALUE** Head, const char *Key, const char *Subkey, const char* xValue, WRITEMODE WriteAs) +{ + KEYVALUE* p; + KEYVALUE* last; + + + // Check if property is already in list + + if (IsAvailableOnList(*Head, Key, Subkey, &p)) { + + // This may work for editing properties + + // return SynError(it8, "duplicate key <%s>", Key); + } + else { + + last = p; + + // Allocate the container + p = (KEYVALUE*) AllocChunk(it8, sizeof(KEYVALUE)); + if (p == NULL) + { + SynError(it8, "AddToList: out of memory"); + return NULL; + } + + // Store name and value + p->Keyword = AllocString(it8, Key); + p->Subkey = (Subkey == NULL) ? NULL : AllocString(it8, Subkey); + + // Keep the container in our list + if (*Head == NULL) { + *Head = p; + } + else + { + if (Subkey != NULL && last != NULL) { + + last->NextSubkey = p; + + // If Subkey is not null, then last is the last property with the same key, + // but not necessarily is the last property in the list, so we need to move + // to the actual list end + while (last->Next != NULL) + last = last->Next; + } + + if (last != NULL) last->Next = p; + } + + p->Next = NULL; + p->NextSubkey = NULL; + } + + p->WriteAs = WriteAs; + + if (xValue != NULL) { + + p->Value = AllocString(it8, xValue); + } + else { + p->Value = NULL; + } + + return p; +} + +static +KEYVALUE* AddAvailableProperty(cmsIT8* it8, const char* Key, WRITEMODE as) +{ + return AddToList(it8, &it8->ValidKeywords, Key, NULL, NULL, as); +} + + +static +KEYVALUE* AddAvailableSampleID(cmsIT8* it8, const char* Key) +{ + return AddToList(it8, &it8->ValidSampleID, Key, NULL, NULL, WRITE_UNCOOKED); +} + + +static +void AllocTable(cmsIT8* it8) +{ + TABLE* t; + + t = it8 ->Tab + it8 ->TablesCount; + + t->HeaderList = NULL; + t->DataFormat = NULL; + t->Data = NULL; + + it8 ->TablesCount++; +} + + +cmsInt32Number CMSEXPORT cmsIT8SetTable(cmsHANDLE IT8, cmsUInt32Number nTable) +{ + cmsIT8* it8 = (cmsIT8*) IT8; + + if (nTable >= it8 ->TablesCount) { + + if (nTable == it8 ->TablesCount) { + + AllocTable(it8); + } + else { + SynError(it8, "Table %d is out of sequence", nTable); + return -1; + } + } + + it8 ->nTable = nTable; + + return nTable; +} + + + +// Init an empty container +cmsHANDLE CMSEXPORT cmsIT8Alloc(cmsContext ContextID) +{ + cmsIT8* it8; + cmsUInt32Number i; + + it8 = (cmsIT8*) _cmsMallocZero(ContextID, sizeof(cmsIT8)); + if (it8 == NULL) return NULL; + + AllocTable(it8); + + it8->MemoryBlock = NULL; + it8->MemorySink = NULL; + + it8 ->nTable = 0; + + it8->ContextID = ContextID; + it8->Allocator.Used = 0; + it8->Allocator.Block = NULL; + it8->Allocator.BlockSize = 0; + + it8->ValidKeywords = NULL; + it8->ValidSampleID = NULL; + + it8 -> sy = SNONE; + it8 -> ch = ' '; + it8 -> Source = NULL; + it8 -> inum = 0; + it8 -> dnum = 0.0; + + it8->FileStack[0] = (FILECTX*)AllocChunk(it8, sizeof(FILECTX)); + it8->IncludeSP = 0; + it8 -> lineno = 1; + + strcpy(it8->DoubleFormatter, DEFAULT_DBL_FORMAT); + cmsIT8SetSheetType((cmsHANDLE) it8, "CGATS.17"); + + // Initialize predefined properties & data + + for (i=0; i < NUMPREDEFINEDPROPS; i++) + AddAvailableProperty(it8, PredefinedProperties[i].id, PredefinedProperties[i].as); + + for (i=0; i < NUMPREDEFINEDSAMPLEID; i++) + AddAvailableSampleID(it8, PredefinedSampleID[i]); + + + return (cmsHANDLE) it8; +} + + +const char* CMSEXPORT cmsIT8GetSheetType(cmsHANDLE hIT8) +{ + return GetTable((cmsIT8*) hIT8)->SheetType; +} + +cmsBool CMSEXPORT cmsIT8SetSheetType(cmsHANDLE hIT8, const char* Type) +{ + TABLE* t = GetTable((cmsIT8*) hIT8); + + strncpy(t ->SheetType, Type, MAXSTR-1); + t ->SheetType[MAXSTR-1] = 0; + return TRUE; +} + +cmsBool CMSEXPORT cmsIT8SetComment(cmsHANDLE hIT8, const char* Val) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + + if (!Val) return FALSE; + if (!*Val) return FALSE; + + return AddToList(it8, &GetTable(it8)->HeaderList, "# ", NULL, Val, WRITE_UNCOOKED) != NULL; +} + + + +// Sets a property +cmsBool CMSEXPORT cmsIT8SetPropertyStr(cmsHANDLE hIT8, const char* Key, const char *Val) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + + if (!Val) return FALSE; + if (!*Val) return FALSE; + + return AddToList(it8, &GetTable(it8)->HeaderList, Key, NULL, Val, WRITE_STRINGIFY) != NULL; +} + + +cmsBool CMSEXPORT cmsIT8SetPropertyDbl(cmsHANDLE hIT8, const char* cProp, cmsFloat64Number Val) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + char Buffer[1024]; + + sprintf(Buffer, it8->DoubleFormatter, Val); + + return AddToList(it8, &GetTable(it8)->HeaderList, cProp, NULL, Buffer, WRITE_UNCOOKED) != NULL; +} + +cmsBool CMSEXPORT cmsIT8SetPropertyHex(cmsHANDLE hIT8, const char* cProp, cmsUInt32Number Val) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + char Buffer[1024]; + + sprintf(Buffer, "%d", Val); + + return AddToList(it8, &GetTable(it8)->HeaderList, cProp, NULL, Buffer, WRITE_HEXADECIMAL) != NULL; +} + +cmsBool CMSEXPORT cmsIT8SetPropertyUncooked(cmsHANDLE hIT8, const char* Key, const char* Buffer) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + + return AddToList(it8, &GetTable(it8)->HeaderList, Key, NULL, Buffer, WRITE_UNCOOKED) != NULL; +} + +cmsBool CMSEXPORT cmsIT8SetPropertyMulti(cmsHANDLE hIT8, const char* Key, const char* SubKey, const char *Buffer) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + + return AddToList(it8, &GetTable(it8)->HeaderList, Key, SubKey, Buffer, WRITE_PAIR) != NULL; +} + +// Gets a property +const char* CMSEXPORT cmsIT8GetProperty(cmsHANDLE hIT8, const char* Key) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + KEYVALUE* p; + + if (IsAvailableOnList(GetTable(it8) -> HeaderList, Key, NULL, &p)) + { + return p -> Value; + } + return NULL; +} + + +cmsFloat64Number CMSEXPORT cmsIT8GetPropertyDbl(cmsHANDLE hIT8, const char* cProp) +{ + const char *v = cmsIT8GetProperty(hIT8, cProp); + + if (v) return atof(v); + else return 0.0; +} + +const char* CMSEXPORT cmsIT8GetPropertyMulti(cmsHANDLE hIT8, const char* Key, const char *SubKey) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + KEYVALUE* p; + + if (IsAvailableOnList(GetTable(it8) -> HeaderList, Key, SubKey, &p)) { + return p -> Value; + } + return NULL; +} + +// ----------------------------------------------------------------- Datasets + + +static +void AllocateDataFormat(cmsIT8* it8) +{ + TABLE* t = GetTable(it8); + + if (t -> DataFormat) return; // Already allocated + + t -> nSamples = (int) cmsIT8GetPropertyDbl(it8, "NUMBER_OF_FIELDS"); + + if (t -> nSamples <= 0) { + + SynError(it8, "AllocateDataFormat: Unknown NUMBER_OF_FIELDS"); + t -> nSamples = 10; + } + + t -> DataFormat = (char**) AllocChunk (it8, (t->nSamples + 1) * sizeof(char *)); + if (t->DataFormat == NULL) { + + SynError(it8, "AllocateDataFormat: Unable to allocate dataFormat array"); + } + +} + +static +const char *GetDataFormat(cmsIT8* it8, int n) +{ + TABLE* t = GetTable(it8); + + if (t->DataFormat) + return t->DataFormat[n]; + + return NULL; +} + +static +cmsBool SetDataFormat(cmsIT8* it8, int n, const char *label) +{ + TABLE* t = GetTable(it8); + + if (!t->DataFormat) + AllocateDataFormat(it8); + + if (n > t -> nSamples) { + SynError(it8, "More than NUMBER_OF_FIELDS fields."); + return FALSE; + } + + if (t->DataFormat) { + t->DataFormat[n] = AllocString(it8, label); + } + + return TRUE; +} + + +cmsBool CMSEXPORT cmsIT8SetDataFormat(cmsHANDLE h, int n, const char *Sample) +{ + cmsIT8* it8 = (cmsIT8*) h; + return SetDataFormat(it8, n, Sample); +} + +static +void AllocateDataSet(cmsIT8* it8) +{ + TABLE* t = GetTable(it8); + + if (t -> Data) return; // Already allocated + + t-> nSamples = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_FIELDS")); + t-> nPatches = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_SETS")); + + t-> Data = (char**)AllocChunk (it8, (t->nSamples + 1) * (t->nPatches + 1) *sizeof (char*)); + if (t->Data == NULL) { + + SynError(it8, "AllocateDataSet: Unable to allocate data array"); + } + +} + +static +char* GetData(cmsIT8* it8, int nSet, int nField) +{ + TABLE* t = GetTable(it8); + int nSamples = t -> nSamples; + int nPatches = t -> nPatches; + + if (nSet >= nPatches || nField >= nSamples) + return NULL; + + if (!t->Data) return NULL; + return t->Data [nSet * nSamples + nField]; +} + +static +cmsBool SetData(cmsIT8* it8, int nSet, int nField, const char *Val) +{ + TABLE* t = GetTable(it8); + + if (!t->Data) + AllocateDataSet(it8); + + if (!t->Data) return FALSE; + + if (nSet > t -> nPatches || nSet < 0) { + + return SynError(it8, "Patch %d out of range, there are %d patches", nSet, t -> nPatches); + } + + if (nField > t ->nSamples || nField < 0) { + return SynError(it8, "Sample %d out of range, there are %d samples", nField, t ->nSamples); + + } + + t->Data [nSet * t -> nSamples + nField] = AllocString(it8, Val); + return TRUE; +} + + +// --------------------------------------------------------------- File I/O + + +// Writes a string to file +static +void WriteStr(SAVESTREAM* f, const char *str) +{ + cmsUInt32Number len; + + if (str == NULL) + str = " "; + + // Lenghth to write + len = (cmsUInt32Number) strlen(str); + f ->Used += len; + + + if (f ->stream) { // Should I write it to a file? + + if (fwrite(str, 1, len, f->stream) != len) { + cmsSignalError(0, cmsERROR_WRITE, "Write to file error in CGATS parser"); + return; + } + + } + else { // Or to a memory block? + + if (f ->Base) { // Am I just counting the bytes? + + if (f ->Used > f ->Max) { + + cmsSignalError(0, cmsERROR_WRITE, "Write to memory overflows in CGATS parser"); + return; + } + + memmove(f ->Ptr, str, len); + f->Ptr += len; + } + + } +} + + +// Write formatted + +static +void Writef(SAVESTREAM* f, const char* frm, ...) +{ + char Buffer[4096]; + va_list args; + + va_start(args, frm); + vsnprintf(Buffer, 4095, frm, args); + Buffer[4095] = 0; + WriteStr(f, Buffer); + va_end(args); + +} + +// Writes full header +static +void WriteHeader(cmsIT8* it8, SAVESTREAM* fp) +{ + KEYVALUE* p; + TABLE* t = GetTable(it8); + + // Writes the type + WriteStr(fp, t->SheetType); + WriteStr(fp, "\n"); + + for (p = t->HeaderList; (p != NULL); p = p->Next) + { + if (*p ->Keyword == '#') { + + char* Pt; + + WriteStr(fp, "#\n# "); + for (Pt = p ->Value; *Pt; Pt++) { + + + Writef(fp, "%c", *Pt); + + if (*Pt == '\n') { + WriteStr(fp, "# "); + } + } + + WriteStr(fp, "\n#\n"); + continue; + } + + + if (!IsAvailableOnList(it8-> ValidKeywords, p->Keyword, NULL, NULL)) { + +#ifdef CMS_STRICT_CGATS + WriteStr(fp, "KEYWORD\t\""); + WriteStr(fp, p->Keyword); + WriteStr(fp, "\"\n"); +#endif + + AddAvailableProperty(it8, p->Keyword, WRITE_UNCOOKED); + } + + WriteStr(fp, p->Keyword); + if (p->Value) { + + switch (p ->WriteAs) { + + case WRITE_UNCOOKED: + Writef(fp, "\t%s", p ->Value); + break; + + case WRITE_STRINGIFY: + Writef(fp, "\t\"%s\"", p->Value ); + break; + + case WRITE_HEXADECIMAL: + Writef(fp, "\t0x%X", atoi(p ->Value)); + break; + + case WRITE_BINARY: + Writef(fp, "\t0x%B", atoi(p ->Value)); + break; + + case WRITE_PAIR: + Writef(fp, "\t\"%s,%s\"", p->Subkey, p->Value); + break; + + default: SynError(it8, "Unknown write mode %d", p ->WriteAs); + return; + } + } + + WriteStr (fp, "\n"); + } + +} + + +// Writes the data format +static +void WriteDataFormat(SAVESTREAM* fp, cmsIT8* it8) +{ + int i, nSamples; + TABLE* t = GetTable(it8); + + if (!t -> DataFormat) return; + + WriteStr(fp, "BEGIN_DATA_FORMAT\n"); + WriteStr(fp, " "); + nSamples = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_FIELDS")); + + for (i = 0; i < nSamples; i++) { + + WriteStr(fp, t->DataFormat[i]); + WriteStr(fp, ((i == (nSamples-1)) ? "\n" : "\t")); + } + + WriteStr (fp, "END_DATA_FORMAT\n"); +} + + +// Writes data array +static +void WriteData(SAVESTREAM* fp, cmsIT8* it8) +{ + int i, j; + TABLE* t = GetTable(it8); + + if (!t->Data) return; + + WriteStr (fp, "BEGIN_DATA\n"); + + t->nPatches = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_SETS")); + + for (i = 0; i < t-> nPatches; i++) { + + WriteStr(fp, " "); + + for (j = 0; j < t->nSamples; j++) { + + char *ptr = t->Data[i*t->nSamples+j]; + + if (ptr == NULL) WriteStr(fp, "\"\""); + else { + // If value contains whitespace, enclose within quote + + if (strchr(ptr, ' ') != NULL) { + + WriteStr(fp, "\""); + WriteStr(fp, ptr); + WriteStr(fp, "\""); + } + else + WriteStr(fp, ptr); + } + + WriteStr(fp, ((j == (t->nSamples-1)) ? "\n" : "\t")); + } + } + WriteStr (fp, "END_DATA\n"); +} + + + +// Saves whole file +cmsBool CMSEXPORT cmsIT8SaveToFile(cmsHANDLE hIT8, const char* cFileName) +{ + SAVESTREAM sd; + cmsUInt32Number i; + cmsIT8* it8 = (cmsIT8*) hIT8; + + memset(&sd, 0, sizeof(sd)); + + sd.stream = fopen(cFileName, "wt"); + if (!sd.stream) return FALSE; + + for (i=0; i < it8 ->TablesCount; i++) { + + cmsIT8SetTable(hIT8, i); + WriteHeader(it8, &sd); + WriteDataFormat(&sd, it8); + WriteData(&sd, it8); + } + + if (fclose(sd.stream) != 0) return FALSE; + + return TRUE; +} + + +// Saves to memory +cmsBool CMSEXPORT cmsIT8SaveToMem(cmsHANDLE hIT8, void *MemPtr, cmsUInt32Number* BytesNeeded) +{ + SAVESTREAM sd; + cmsUInt32Number i; + cmsIT8* it8 = (cmsIT8*) hIT8; + + memset(&sd, 0, sizeof(sd)); + + sd.stream = NULL; + sd.Base = (cmsUInt8Number*) MemPtr; + sd.Ptr = sd.Base; + + sd.Used = 0; + + if (sd.Base) + sd.Max = *BytesNeeded; // Write to memory? + else + sd.Max = 0; // Just counting the needed bytes + + for (i=0; i < it8 ->TablesCount; i++) { + + cmsIT8SetTable(hIT8, i); + WriteHeader(it8, &sd); + WriteDataFormat(&sd, it8); + WriteData(&sd, it8); + } + + sd.Used++; // The \0 at the very end + + if (sd.Base) + sd.Ptr = 0; + + *BytesNeeded = sd.Used; + + return TRUE; +} + + +// -------------------------------------------------------------- Higer level parsing + +static +cmsBool DataFormatSection(cmsIT8* it8) +{ + int iField = 0; + TABLE* t = GetTable(it8); + + InSymbol(it8); // Eats "BEGIN_DATA_FORMAT" + CheckEOLN(it8); + + while (it8->sy != SEND_DATA_FORMAT && + it8->sy != SEOLN && + it8->sy != SEOF && + it8->sy != SSYNERROR) { + + if (it8->sy != SIDENT) { + + return SynError(it8, "Sample type expected"); + } + + if (!SetDataFormat(it8, iField, it8->id)) return FALSE; + iField++; + + InSymbol(it8); + SkipEOLN(it8); + } + + SkipEOLN(it8); + Skip(it8, SEND_DATA_FORMAT); + SkipEOLN(it8); + + if (iField != t ->nSamples) { + SynError(it8, "Count mismatch. NUMBER_OF_FIELDS was %d, found %d\n", t ->nSamples, iField); + + + } + + return TRUE; +} + + + +static +cmsBool DataSection (cmsIT8* it8) +{ + int iField = 0; + int iSet = 0; + char Buffer[256]; + TABLE* t = GetTable(it8); + + InSymbol(it8); // Eats "BEGIN_DATA" + CheckEOLN(it8); + + if (!t->Data) + AllocateDataSet(it8); + + while (it8->sy != SEND_DATA && it8->sy != SEOF) + { + if (iField >= t -> nSamples) { + iField = 0; + iSet++; + + } + + if (it8->sy != SEND_DATA && it8->sy != SEOF) { + + if (!GetVal(it8, Buffer, 255, "Sample data expected")) + return FALSE; + + if (!SetData(it8, iSet, iField, Buffer)) + return FALSE; + + iField++; + + InSymbol(it8); + SkipEOLN(it8); + } + } + + SkipEOLN(it8); + Skip(it8, SEND_DATA); + SkipEOLN(it8); + + // Check for data completion. + + if ((iSet+1) != t -> nPatches) + return SynError(it8, "Count mismatch. NUMBER_OF_SETS was %d, found %d\n", t ->nPatches, iSet+1); + + return TRUE; +} + + + + +static +cmsBool HeaderSection(cmsIT8* it8) +{ + char VarName[MAXID]; + char Buffer[MAXSTR]; + KEYVALUE* Key; + + while (it8->sy != SEOF && + it8->sy != SSYNERROR && + it8->sy != SBEGIN_DATA_FORMAT && + it8->sy != SBEGIN_DATA) { + + + switch (it8 -> sy) { + + case SKEYWORD: + InSymbol(it8); + if (!GetVal(it8, Buffer, MAXSTR-1, "Keyword expected")) return FALSE; + if (!AddAvailableProperty(it8, Buffer, WRITE_UNCOOKED)) return FALSE; + InSymbol(it8); + break; + + + case SDATA_FORMAT_ID: + InSymbol(it8); + if (!GetVal(it8, Buffer, MAXSTR-1, "Keyword expected")) return FALSE; + if (!AddAvailableSampleID(it8, Buffer)) return FALSE; + InSymbol(it8); + break; + + + case SIDENT: + strncpy(VarName, it8->id, MAXID-1); + VarName[MAXID-1] = 0; + + if (!IsAvailableOnList(it8-> ValidKeywords, VarName, NULL, &Key)) { + +#ifdef CMS_STRICT_CGATS + return SynError(it8, "Undefined keyword '%s'", VarName); +#else + Key = AddAvailableProperty(it8, VarName, WRITE_UNCOOKED); + if (Key == NULL) return FALSE; +#endif + } + + InSymbol(it8); + if (!GetVal(it8, Buffer, MAXSTR-1, "Property data expected")) return FALSE; + + if(Key->WriteAs != WRITE_PAIR) { + AddToList(it8, &GetTable(it8)->HeaderList, VarName, NULL, Buffer, + (it8->sy == SSTRING) ? WRITE_STRINGIFY : WRITE_UNCOOKED); + } + else { + const char *Subkey; + char *Nextkey; + if (it8->sy != SSTRING) + return SynError(it8, "Invalid value '%s' for property '%s'.", Buffer, VarName); + + // chop the string as a list of "subkey, value" pairs, using ';' as a separator + for (Subkey = Buffer; Subkey != NULL; Subkey = Nextkey) + { + char *Value, *temp; + + // identify token pair boundary + Nextkey = (char*) strchr(Subkey, ';'); + if(Nextkey) + *Nextkey++ = '\0'; + + // for each pair, split the subkey and the value + Value = (char*) strrchr(Subkey, ','); + if(Value == NULL) + return SynError(it8, "Invalid value for property '%s'.", VarName); + + // gobble the spaces before the coma, and the coma itself + temp = Value++; + do *temp-- = '\0'; while(temp >= Subkey && *temp == ' '); + + // gobble any space at the right + temp = Value + strlen(Value) - 1; + while(*temp == ' ') *temp-- = '\0'; + + // trim the strings from the left + Subkey += strspn(Subkey, " "); + Value += strspn(Value, " "); + + if(Subkey[0] == 0 || Value[0] == 0) + return SynError(it8, "Invalid value for property '%s'.", VarName); + AddToList(it8, &GetTable(it8)->HeaderList, VarName, Subkey, Value, WRITE_PAIR); + } + } + + InSymbol(it8); + break; + + + case SEOLN: break; + + default: + return SynError(it8, "expected keyword or identifier"); + } + + SkipEOLN(it8); + } + + return TRUE; + +} + + +static +void ReadType(cmsIT8* it8, char* SheetTypePtr) +{ + // First line is a very special case. + + while (isseparator(it8->ch)) + NextCh(it8); + + while (it8->ch != '\r' && it8 ->ch != '\n' && it8->ch != '\t' && it8 -> ch != -1) { + + *SheetTypePtr++= (char) it8 ->ch; + NextCh(it8); + } + + *SheetTypePtr = 0; +} + + +static +cmsBool ParseIT8(cmsIT8* it8, cmsBool nosheet) +{ + char* SheetTypePtr = it8 ->Tab[0].SheetType; + + if (nosheet == 0) { + ReadType(it8, SheetTypePtr); + } + + InSymbol(it8); + + SkipEOLN(it8); + + while (it8-> sy != SEOF && + it8-> sy != SSYNERROR) { + + switch (it8 -> sy) { + + case SBEGIN_DATA_FORMAT: + if (!DataFormatSection(it8)) return FALSE; + break; + + case SBEGIN_DATA: + + if (!DataSection(it8)) return FALSE; + + if (it8 -> sy != SEOF) { + + AllocTable(it8); + it8 ->nTable = it8 ->TablesCount - 1; + + // Read sheet type if present. We only support identifier and string. + // is a type string + // anything else, is not a type string + if (nosheet == 0) { + + if (it8 ->sy == SIDENT) { + + // May be a type sheet or may be a prop value statement. We cannot use insymbol in + // this special case... + while (isseparator(it8->ch)) + NextCh(it8); + + // If a newline is found, then this is a type string + if (it8 ->ch == '\n') { + + cmsIT8SetSheetType(it8, it8 ->id); + InSymbol(it8); + } + else + { + // It is not. Just continue + cmsIT8SetSheetType(it8, ""); + } + } + else + // Validate quoted strings + if (it8 ->sy == SSTRING) { + cmsIT8SetSheetType(it8, it8 ->str); + InSymbol(it8); + } + } + + } + break; + + case SEOLN: + SkipEOLN(it8); + break; + + default: + if (!HeaderSection(it8)) return FALSE; + } + + } + + return (it8 -> sy != SSYNERROR); +} + + + +// Init usefull pointers + +static +void CookPointers(cmsIT8* it8) +{ + int idField, i; + char* Fld; + cmsUInt32Number j; + cmsUInt32Number nOldTable = it8 ->nTable; + + for (j=0; j < it8 ->TablesCount; j++) { + + TABLE* t = it8 ->Tab + j; + + t -> SampleID = 0; + it8 ->nTable = j; + + for (idField = 0; idField < t -> nSamples; idField++) + { + if (t ->DataFormat == NULL){ + SynError(it8, "Undefined DATA_FORMAT"); + return; + } + + Fld = t->DataFormat[idField]; + if (!Fld) continue; + + + if (cmsstrcasecmp(Fld, "SAMPLE_ID") == 0) { + + t -> SampleID = idField; + + for (i=0; i < t -> nPatches; i++) { + + char *Data = GetData(it8, i, idField); + if (Data) { + char Buffer[256]; + + strncpy(Buffer, Data, 255); + Buffer[255] = 0; + + if (strlen(Buffer) <= strlen(Data)) + strcpy(Data, Buffer); + else + SetData(it8, i, idField, Buffer); + + } + } + + } + + // "LABEL" is an extension. It keeps references to forward tables + + if ((cmsstrcasecmp(Fld, "LABEL") == 0) || Fld[0] == '$' ) { + + // Search for table references... + for (i=0; i < t -> nPatches; i++) { + + char *Label = GetData(it8, i, idField); + + if (Label) { + + cmsUInt32Number k; + + // This is the label, search for a table containing + // this property + + for (k=0; k < it8 ->TablesCount; k++) { + + TABLE* Table = it8 ->Tab + k; + KEYVALUE* p; + + if (IsAvailableOnList(Table->HeaderList, Label, NULL, &p)) { + + // Available, keep type and table + char Buffer[256]; + + char *Type = p ->Value; + int nTable = k; + + snprintf(Buffer, 255, "%s %d %s", Label, nTable, Type ); + + SetData(it8, i, idField, Buffer); + } + } + + + } + + } + + + } + + } + } + + it8 ->nTable = nOldTable; +} + +// Try to infere if the file is a CGATS/IT8 file at all. Read first line +// that should be something like some printable characters plus a \n +// returns 0 if this is not like a CGATS, or an integer otherwise +static +int IsMyBlock(cmsUInt8Number* Buffer, int n) +{ + int cols = 1, space = 0, quot = 0; + int i; + + if (n < 10) return 0; // Too small + + if (n > 132) + n = 132; + + for (i = 1; i < n; i++) { + + switch(Buffer[i]) + { + case '\n': + case '\r': + return ((quot == 1) || (cols > 2)) ? 0 : cols; + case '\t': + case ' ': + if(!quot && !space) + space = 1; + break; + case '\"': + quot = !quot; + break; + default: + if (Buffer[i] < 32) return 0; + if (Buffer[i] > 127) return 0; + cols += space; + space = 0; + break; + } + } + + return 0; +} + + +static +cmsBool IsMyFile(const char* FileName) +{ + FILE *fp; + cmsUInt32Number Size; + cmsUInt8Number Ptr[133]; + + fp = fopen(FileName, "rt"); + if (!fp) { + cmsSignalError(0, cmsERROR_FILE, "File '%s' not found", FileName); + return FALSE; + } + + Size = (cmsUInt32Number) fread(Ptr, 1, 132, fp); + + if (fclose(fp) != 0) + return FALSE; + + Ptr[Size] = '\0'; + + return IsMyBlock(Ptr, Size); +} + +// ---------------------------------------------------------- Exported routines + + +cmsHANDLE CMSEXPORT cmsIT8LoadFromMem(cmsContext ContextID, void *Ptr, cmsUInt32Number len) +{ + cmsHANDLE hIT8; + cmsIT8* it8; + int type; + + _cmsAssert(Ptr != NULL); + _cmsAssert(len != 0); + + type = IsMyBlock((cmsUInt8Number*)Ptr, len); + if (type == 0) return NULL; + + hIT8 = cmsIT8Alloc(ContextID); + if (!hIT8) return NULL; + + it8 = (cmsIT8*) hIT8; + it8 ->MemoryBlock = (char*) _cmsMalloc(ContextID, len + 1); + + strncpy(it8 ->MemoryBlock, (const char*) Ptr, len); + it8 ->MemoryBlock[len] = 0; + + strncpy(it8->FileStack[0]->FileName, "", cmsMAX_PATH-1); + it8-> Source = it8 -> MemoryBlock; + + if (!ParseIT8(it8, type-1)) { + + cmsIT8Free(hIT8); + return FALSE; + } + + CookPointers(it8); + it8 ->nTable = 0; + + _cmsFree(ContextID, it8->MemoryBlock); + it8 -> MemoryBlock = NULL; + + return hIT8; + + +} + + +cmsHANDLE CMSEXPORT cmsIT8LoadFromFile(cmsContext ContextID, const char* cFileName) +{ + + cmsHANDLE hIT8; + cmsIT8* it8; + int type; + + _cmsAssert(cFileName != NULL); + + type = IsMyFile(cFileName); + if (type == 0) return NULL; + + hIT8 = cmsIT8Alloc(ContextID); + it8 = (cmsIT8*) hIT8; + if (!hIT8) return NULL; + + + it8 ->FileStack[0]->Stream = fopen(cFileName, "rt"); + + if (!it8 ->FileStack[0]->Stream) { + cmsIT8Free(hIT8); + return NULL; + } + + + strncpy(it8->FileStack[0]->FileName, cFileName, cmsMAX_PATH-1); + it8->FileStack[0]->FileName[cmsMAX_PATH-1] = 0; + + if (!ParseIT8(it8, type-1)) { + + fclose(it8 ->FileStack[0]->Stream); + cmsIT8Free(hIT8); + return NULL; + } + + CookPointers(it8); + it8 ->nTable = 0; + + if (fclose(it8 ->FileStack[0]->Stream)!= 0) { + cmsIT8Free(hIT8); + return NULL; + } + + return hIT8; + +} + +int CMSEXPORT cmsIT8EnumDataFormat(cmsHANDLE hIT8, char ***SampleNames) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + TABLE* t; + + _cmsAssert(hIT8 != NULL); + + t = GetTable(it8); + + if (SampleNames) + *SampleNames = t -> DataFormat; + return t -> nSamples; +} + + +cmsUInt32Number CMSEXPORT cmsIT8EnumProperties(cmsHANDLE hIT8, char ***PropertyNames) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + KEYVALUE* p; + cmsUInt32Number n; + char **Props; + TABLE* t; + + _cmsAssert(hIT8 != NULL); + + t = GetTable(it8); + + // Pass#1 - count properties + + n = 0; + for (p = t -> HeaderList; p != NULL; p = p->Next) { + n++; + } + + + Props = (char **) AllocChunk(it8, sizeof(char *) * n); + + // Pass#2 - Fill pointers + n = 0; + for (p = t -> HeaderList; p != NULL; p = p->Next) { + Props[n++] = p -> Keyword; + } + + *PropertyNames = Props; + return n; +} + +cmsUInt32Number CMSEXPORT cmsIT8EnumPropertyMulti(cmsHANDLE hIT8, const char* cProp, const char ***SubpropertyNames) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + KEYVALUE *p, *tmp; + cmsUInt32Number n; + const char **Props; + TABLE* t; + + _cmsAssert(hIT8 != NULL); + + + t = GetTable(it8); + + if(!IsAvailableOnList(t->HeaderList, cProp, NULL, &p)) { + *SubpropertyNames = 0; + return 0; + } + + // Pass#1 - count properties + + n = 0; + for (tmp = p; tmp != NULL; tmp = tmp->NextSubkey) { + if(tmp->Subkey != NULL) + n++; + } + + + Props = (const char **) AllocChunk(it8, sizeof(char *) * n); + + // Pass#2 - Fill pointers + n = 0; + for (tmp = p; tmp != NULL; tmp = tmp->NextSubkey) { + if(tmp->Subkey != NULL) + Props[n++] = p ->Subkey; + } + + *SubpropertyNames = Props; + return n; +} + +static +int LocatePatch(cmsIT8* it8, const char* cPatch) +{ + int i; + const char *data; + TABLE* t = GetTable(it8); + + for (i=0; i < t-> nPatches; i++) { + + data = GetData(it8, i, t->SampleID); + + if (data != NULL) { + + if (cmsstrcasecmp(data, cPatch) == 0) + return i; + } + } + + // SynError(it8, "Couldn't find patch '%s'\n", cPatch); + return -1; +} + + +static +int LocateEmptyPatch(cmsIT8* it8) +{ + int i; + const char *data; + TABLE* t = GetTable(it8); + + for (i=0; i < t-> nPatches; i++) { + + data = GetData(it8, i, t->SampleID); + + if (data == NULL) + return i; + + } + + return -1; +} + +static +int LocateSample(cmsIT8* it8, const char* cSample) +{ + int i; + const char *fld; + TABLE* t = GetTable(it8); + + for (i=0; i < t->nSamples; i++) { + + fld = GetDataFormat(it8, i); + if (cmsstrcasecmp(fld, cSample) == 0) + return i; + } + + return -1; + +} + + +int CMSEXPORT cmsIT8FindDataFormat(cmsHANDLE hIT8, const char* cSample) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + + _cmsAssert(hIT8 != NULL); + + return LocateSample(it8, cSample); +} + + + +const char* CMSEXPORT cmsIT8GetDataRowCol(cmsHANDLE hIT8, int row, int col) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + + _cmsAssert(hIT8 != NULL); + + return GetData(it8, row, col); +} + + +cmsFloat64Number CMSEXPORT cmsIT8GetDataRowColDbl(cmsHANDLE hIT8, int row, int col) +{ + const char* Buffer; + + Buffer = cmsIT8GetDataRowCol(hIT8, row, col); + + if (Buffer) { + + return atof(Buffer); + + } else + return 0; + +} + + +cmsBool CMSEXPORT cmsIT8SetDataRowCol(cmsHANDLE hIT8, int row, int col, const char* Val) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + + _cmsAssert(hIT8 != NULL); + + return SetData(it8, row, col, Val); +} + + +cmsBool CMSEXPORT cmsIT8SetDataRowColDbl(cmsHANDLE hIT8, int row, int col, cmsFloat64Number Val) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + char Buff[256]; + + _cmsAssert(hIT8 != NULL); + + sprintf(Buff, it8->DoubleFormatter, Val); + + return SetData(it8, row, col, Buff); +} + + + +const char* CMSEXPORT cmsIT8GetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + int iField, iSet; + + _cmsAssert(hIT8 != NULL); + + iField = LocateSample(it8, cSample); + if (iField < 0) { + return NULL; + } + + iSet = LocatePatch(it8, cPatch); + if (iSet < 0) { + return NULL; + } + + return GetData(it8, iSet, iField); +} + + +cmsFloat64Number CMSEXPORT cmsIT8GetDataDbl(cmsHANDLE it8, const char* cPatch, const char* cSample) +{ + const char* Buffer; + + Buffer = cmsIT8GetData(it8, cPatch, cSample); + + if (Buffer) { + + return atof(Buffer); + + } else { + + return 0; + } +} + + + +cmsBool CMSEXPORT cmsIT8SetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample, const char *Val) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + int iField, iSet; + TABLE* t; + + _cmsAssert(hIT8 != NULL); + + t = GetTable(it8); + + iField = LocateSample(it8, cSample); + + if (iField < 0) + return FALSE; + + if (t-> nPatches == 0) { + + AllocateDataFormat(it8); + AllocateDataSet(it8); + CookPointers(it8); + } + + if (cmsstrcasecmp(cSample, "SAMPLE_ID") == 0) { + + iSet = LocateEmptyPatch(it8); + if (iSet < 0) { + return SynError(it8, "Couldn't add more patches '%s'\n", cPatch); + } + + iField = t -> SampleID; + } + else { + iSet = LocatePatch(it8, cPatch); + if (iSet < 0) { + return FALSE; + } + } + + return SetData(it8, iSet, iField, Val); +} + + +cmsBool CMSEXPORT cmsIT8SetDataDbl(cmsHANDLE hIT8, const char* cPatch, + const char* cSample, + cmsFloat64Number Val) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + char Buff[256]; + + _cmsAssert(hIT8 != NULL); + + snprintf(Buff, 255, it8->DoubleFormatter, Val); + return cmsIT8SetData(hIT8, cPatch, cSample, Buff); +} + +// Buffer should get MAXSTR at least + +const char* CMSEXPORT cmsIT8GetPatchName(cmsHANDLE hIT8, int nPatch, char* buffer) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + TABLE* t; + char* Data; + + _cmsAssert(hIT8 != NULL); + + t = GetTable(it8); + Data = GetData(it8, nPatch, t->SampleID); + + if (!Data) return NULL; + if (!buffer) return Data; + + strncpy(buffer, Data, MAXSTR-1); + buffer[MAXSTR-1] = 0; + return buffer; +} + +int CMSEXPORT cmsIT8GetPatchByName(cmsHANDLE hIT8, const char *cPatch) +{ + _cmsAssert(hIT8 != NULL); + + return LocatePatch((cmsIT8*)hIT8, cPatch); +} + +cmsUInt32Number CMSEXPORT cmsIT8TableCount(cmsHANDLE hIT8) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + + _cmsAssert(hIT8 != NULL); + + return it8 ->TablesCount; +} + +// This handles the "LABEL" extension. +// Label, nTable, Type + +int CMSEXPORT cmsIT8SetTableByLabel(cmsHANDLE hIT8, const char* cSet, const char* cField, const char* ExpectedType) +{ + const char* cLabelFld; + char Type[256], Label[256]; + int nTable; + + _cmsAssert(hIT8 != NULL); + + if (cField != NULL && *cField == 0) + cField = "LABEL"; + + if (cField == NULL) + cField = "LABEL"; + + cLabelFld = cmsIT8GetData(hIT8, cSet, cField); + if (!cLabelFld) return -1; + + if (sscanf(cLabelFld, "%255s %d %255s", Label, &nTable, Type) != 3) + return -1; + + if (ExpectedType != NULL && *ExpectedType == 0) + ExpectedType = NULL; + + if (ExpectedType) { + + if (cmsstrcasecmp(Type, ExpectedType) != 0) return -1; + } + + return cmsIT8SetTable(hIT8, nTable); +} + + +cmsBool CMSEXPORT cmsIT8SetIndexColumn(cmsHANDLE hIT8, const char* cSample) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + int pos; + + _cmsAssert(hIT8 != NULL); + + pos = LocateSample(it8, cSample); + if(pos == -1) + return FALSE; + + it8->Tab[it8->nTable].SampleID = pos; + return TRUE; +} + + +void CMSEXPORT cmsIT8DefineDblFormat(cmsHANDLE hIT8, const char* Formatter) +{ + cmsIT8* it8 = (cmsIT8*) hIT8; + + _cmsAssert(hIT8 != NULL); + + if (Formatter == NULL) + strcpy(it8->DoubleFormatter, DEFAULT_DBL_FORMAT); + else + strcpy(it8->DoubleFormatter, Formatter); + + it8 ->DoubleFormatter[sizeof(it8 ->DoubleFormatter)-1] = 0; +} + diff --git a/src/cmscnvrt.c b/src/cmscnvrt.c new file mode 100644 index 0000000..1a8e6d8 --- /dev/null +++ b/src/cmscnvrt.c @@ -0,0 +1,1057 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + + +// Link several profiles to obtain a single LUT modelling the whole color transform. Intents, Black point +// compensation and Adaptation parameters may vary across profiles. BPC and Adaptation refers to the PCS +// after the profile. I.e, BPC[0] refers to connexion between profile(0) and profile(1) +cmsPipeline* _cmsLinkProfiles(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number Intents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags); + +//--------------------------------------------------------------------------------- + +// This is the default routine for ICC-style intents. A user may decide to override it by using a plugin. +// Supported intents are perceptual, relative colorimetric, saturation and ICC-absolute colorimetric +static +cmsPipeline* DefaultICCintents(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number Intents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags); + +//--------------------------------------------------------------------------------- + +// This is the entry for black-preserving K-only intents, which are non-ICC. Last profile have to be a output profile +// to do the trick (no devicelinks allowed at that position) +static +cmsPipeline* BlackPreservingKOnlyIntents(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number Intents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags); + +//--------------------------------------------------------------------------------- + +// This is the entry for black-plane preserving, which are non-ICC. Again, Last profile have to be a output profile +// to do the trick (no devicelinks allowed at that position) +static +cmsPipeline* BlackPreservingKPlaneIntents(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number Intents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags); + +//--------------------------------------------------------------------------------- + + +// This is a structure holding implementations for all supported intents. +typedef struct _cms_intents_list { + + cmsUInt32Number Intent; + char Description[256]; + cmsIntentFn Link; + struct _cms_intents_list* Next; + +} cmsIntentsList; + + +// Built-in intents +static cmsIntentsList DefaultIntents[] = { + + { INTENT_PERCEPTUAL, "Perceptual", DefaultICCintents, &DefaultIntents[1] }, + { INTENT_RELATIVE_COLORIMETRIC, "Relative colorimetric", DefaultICCintents, &DefaultIntents[2] }, + { INTENT_SATURATION, "Saturation", DefaultICCintents, &DefaultIntents[3] }, + { INTENT_ABSOLUTE_COLORIMETRIC, "Absolute colorimetric", DefaultICCintents, &DefaultIntents[4] }, + { INTENT_PRESERVE_K_ONLY_PERCEPTUAL, "Perceptual preserving black ink", BlackPreservingKOnlyIntents, &DefaultIntents[5] }, + { INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC, "Relative colorimetric preserving black ink", BlackPreservingKOnlyIntents, &DefaultIntents[6] }, + { INTENT_PRESERVE_K_ONLY_SATURATION, "Saturation preserving black ink", BlackPreservingKOnlyIntents, &DefaultIntents[7] }, + { INTENT_PRESERVE_K_PLANE_PERCEPTUAL, "Perceptual preserving black plane", BlackPreservingKPlaneIntents, &DefaultIntents[8] }, + { INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC,"Relative colorimetric preserving black plane", BlackPreservingKPlaneIntents, &DefaultIntents[9] }, + { INTENT_PRESERVE_K_PLANE_SATURATION, "Saturation preserving black plane", BlackPreservingKPlaneIntents, NULL } +}; + + +// A pointer to the begining of the list +static cmsIntentsList *Intents = DefaultIntents; + +// Search the list for a suitable intent. Returns NULL if not found +static +cmsIntentsList* SearchIntent(cmsUInt32Number Intent) +{ + cmsIntentsList* pt; + + for (pt = Intents; pt != NULL; pt = pt -> Next) + if (pt ->Intent == Intent) return pt; + + return NULL; +} + +// Black point compensation. Implemented as a linear scaling in XYZ. Black points +// should come relative to the white point. Fills an matrix/offset element m +// which is organized as a 4x4 matrix. +static +void ComputeBlackPointCompensation(const cmsCIEXYZ* BlackPointIn, + const cmsCIEXYZ* BlackPointOut, + cmsMAT3* m, cmsVEC3* off) +{ + cmsFloat64Number ax, ay, az, bx, by, bz, tx, ty, tz; + + // Now we need to compute a matrix plus an offset m and of such of + // [m]*bpin + off = bpout + // [m]*D50 + off = D50 + // + // This is a linear scaling in the form ax+b, where + // a = (bpout - D50) / (bpin - D50) + // b = - D50* (bpout - bpin) / (bpin - D50) + + tx = BlackPointIn->X - cmsD50_XYZ()->X; + ty = BlackPointIn->Y - cmsD50_XYZ()->Y; + tz = BlackPointIn->Z - cmsD50_XYZ()->Z; + + ax = (BlackPointOut->X - cmsD50_XYZ()->X) / tx; + ay = (BlackPointOut->Y - cmsD50_XYZ()->Y) / ty; + az = (BlackPointOut->Z - cmsD50_XYZ()->Z) / tz; + + bx = - cmsD50_XYZ()-> X * (BlackPointOut->X - BlackPointIn->X) / tx; + by = - cmsD50_XYZ()-> Y * (BlackPointOut->Y - BlackPointIn->Y) / ty; + bz = - cmsD50_XYZ()-> Z * (BlackPointOut->Z - BlackPointIn->Z) / tz; + + _cmsVEC3init(&m ->v[0], ax, 0, 0); + _cmsVEC3init(&m ->v[1], 0, ay, 0); + _cmsVEC3init(&m ->v[2], 0, 0, az); + _cmsVEC3init(off, bx, by, bz); + +} + + +// Approximate a blackbody illuminant based on CHAD information +static +cmsFloat64Number CHAD2Temp(const cmsMAT3* Chad) +{ + // Convert D50 across inverse CHAD to get the absolute white point + cmsVEC3 d, s; + cmsCIEXYZ Dest; + cmsCIExyY DestChromaticity; + cmsFloat64Number TempK; + cmsMAT3 m1, m2; + + m1 = *Chad; + if (!_cmsMAT3inverse(&m1, &m2)) return FALSE; + + s.n[VX] = cmsD50_XYZ() -> X; + s.n[VY] = cmsD50_XYZ() -> Y; + s.n[VZ] = cmsD50_XYZ() -> Z; + + _cmsMAT3eval(&d, &m2, &s); + + Dest.X = d.n[VX]; + Dest.Y = d.n[VY]; + Dest.Z = d.n[VZ]; + + cmsXYZ2xyY(&DestChromaticity, &Dest); + + if (!cmsTempFromWhitePoint(&TempK, &DestChromaticity)) + return -1.0; + + return TempK; +} + +// Compute a CHAD based on a given temperature +static + void Temp2CHAD(cmsMAT3* Chad, cmsFloat64Number Temp) +{ + cmsCIEXYZ White; + cmsCIExyY ChromaticityOfWhite; + + cmsWhitePointFromTemp(&ChromaticityOfWhite, Temp); + cmsxyY2XYZ(&White, &ChromaticityOfWhite); + _cmsAdaptationMatrix(Chad, NULL, &White, cmsD50_XYZ()); +} + +// Join scalings to obtain relative input to absolute and then to relative output. +// Result is stored in a 3x3 matrix +static +cmsBool ComputeAbsoluteIntent(cmsFloat64Number AdaptationState, + const cmsCIEXYZ* WhitePointIn, + const cmsMAT3* ChromaticAdaptationMatrixIn, + const cmsCIEXYZ* WhitePointOut, + const cmsMAT3* ChromaticAdaptationMatrixOut, + cmsMAT3* m) +{ + cmsMAT3 Scale, m1, m2, m3, m4; + + // Adaptation state + if (AdaptationState == 1.0) { + + // Observer is fully adapted. Keep chromatic adaptation. + // That is the standard V4 behaviour + _cmsVEC3init(&m->v[0], WhitePointIn->X / WhitePointOut->X, 0, 0); + _cmsVEC3init(&m->v[1], 0, WhitePointIn->Y / WhitePointOut->Y, 0); + _cmsVEC3init(&m->v[2], 0, 0, WhitePointIn->Z / WhitePointOut->Z); + + } + else { + + // Incomplete adaptation. This is an advanced feature. + _cmsVEC3init(&Scale.v[0], WhitePointIn->X / WhitePointOut->X, 0, 0); + _cmsVEC3init(&Scale.v[1], 0, WhitePointIn->Y / WhitePointOut->Y, 0); + _cmsVEC3init(&Scale.v[2], 0, 0, WhitePointIn->Z / WhitePointOut->Z); + + + if (AdaptationState == 0.0) { + + m1 = *ChromaticAdaptationMatrixOut; + _cmsMAT3per(&m2, &m1, &Scale); + // m2 holds CHAD from output white to D50 times abs. col. scaling + + // Observer is not adapted, undo the chromatic adaptation + _cmsMAT3per(m, &m3, ChromaticAdaptationMatrixOut); + + m3 = *ChromaticAdaptationMatrixIn; + if (!_cmsMAT3inverse(&m3, &m4)) return FALSE; + _cmsMAT3per(m, &m2, &m4); + + } else { + + cmsMAT3 MixedCHAD; + cmsFloat64Number TempSrc, TempDest, Temp; + + m1 = *ChromaticAdaptationMatrixIn; + if (!_cmsMAT3inverse(&m1, &m2)) return FALSE; + _cmsMAT3per(&m3, &m2, &Scale); + // m3 holds CHAD from input white to D50 times abs. col. scaling + + TempSrc = CHAD2Temp(ChromaticAdaptationMatrixIn); + TempDest = CHAD2Temp(ChromaticAdaptationMatrixOut); + + if (TempSrc < 0.0 || TempDest < 0.0) return FALSE; // Something went wrong + + if (_cmsMAT3isIdentity(&Scale) && fabs(TempSrc - TempDest) < 0.01) { + + _cmsMAT3identity(m); + return TRUE; + } + + Temp = (1.0 - AdaptationState) * TempDest + AdaptationState * TempSrc; + + // Get a CHAD from whatever output temperature to D50. This replaces output CHAD + Temp2CHAD(&MixedCHAD, Temp); + + _cmsMAT3per(m, &m3, &MixedCHAD); + } + + } + return TRUE; + +} + +// Just to see if m matrix should be applied +static +cmsBool IsEmptyLayer(cmsMAT3* m, cmsVEC3* off) +{ + cmsFloat64Number diff = 0; + cmsMAT3 Ident; + int i; + + if (m == NULL && off == NULL) return TRUE; // NULL is allowed as an empty layer + if (m == NULL && off != NULL) return FALSE; // This is an internal error + + _cmsMAT3identity(&Ident); + + for (i=0; i < 3*3; i++) + diff += fabs(((cmsFloat64Number*)m)[i] - ((cmsFloat64Number*)&Ident)[i]); + + for (i=0; i < 3; i++) + diff += fabs(((cmsFloat64Number*)off)[i]); + + + return (diff < 0.002); +} + + +// Compute the conversion layer +static +cmsBool ComputeConversion(int i, cmsHPROFILE hProfiles[], + cmsUInt32Number Intent, + cmsBool BPC, + cmsFloat64Number AdaptationState, + cmsMAT3* m, cmsVEC3* off) +{ + + int k; + + // m and off are set to identity and this is detected latter on + _cmsMAT3identity(m); + _cmsVEC3init(off, 0, 0, 0); + + // If intent is abs. colorimetric, + if (Intent == INTENT_ABSOLUTE_COLORIMETRIC) { + + cmsCIEXYZ WhitePointIn, WhitePointOut; + cmsMAT3 ChromaticAdaptationMatrixIn, ChromaticAdaptationMatrixOut; + + _cmsReadMediaWhitePoint(&WhitePointIn, hProfiles[i-1]); + _cmsReadCHAD(&ChromaticAdaptationMatrixIn, hProfiles[i-1]); + + _cmsReadMediaWhitePoint(&WhitePointOut, hProfiles[i]); + _cmsReadCHAD(&ChromaticAdaptationMatrixOut, hProfiles[i]); + + if (!ComputeAbsoluteIntent(AdaptationState, + &WhitePointIn, &ChromaticAdaptationMatrixIn, + &WhitePointOut, &ChromaticAdaptationMatrixOut, m)) return FALSE; + + } + else { + // Rest of intents may apply BPC. + + if (BPC) { + + cmsCIEXYZ BlackPointIn, BlackPointOut; + + cmsDetectBlackPoint(&BlackPointIn, hProfiles[i-1], Intent, 0); + cmsDetectBlackPoint(&BlackPointOut, hProfiles[i], Intent, 0); + + // If black points are equal, then do nothing + if (BlackPointIn.X != BlackPointOut.X || + BlackPointIn.Y != BlackPointOut.Y || + BlackPointIn.Z != BlackPointOut.Z) + ComputeBlackPointCompensation(&BlackPointIn, &BlackPointOut, m, off); + } + } + + // Offset should be adjusted because the encoding. We encode XYZ normalized to 0..1.0, + // to do that, we divide by MAX_ENCODEABLE_XZY. The conversion stage goes XYZ -> XYZ so + // we have first to convert from encoded to XYZ and then convert back to encoded. + // y = Mx + Off + // x = x'c + // y = M x'c + Off + // y = y'c; y' = y / c + // y' = (Mx'c + Off) /c = Mx' + (Off / c) + + for (k=0; k < 3; k++) { + off ->n[k] /= MAX_ENCODEABLE_XYZ; + } + + return TRUE; +} + + +// Add a conversion stage if needed. If a matrix/offset m is given, it applies to XYZ space +static +cmsBool AddConversion(cmsPipeline* Result, cmsColorSpaceSignature InPCS, cmsColorSpaceSignature OutPCS, cmsMAT3* m, cmsVEC3* off) +{ + cmsFloat64Number* m_as_dbl = (cmsFloat64Number*) m; + cmsFloat64Number* off_as_dbl = (cmsFloat64Number*) off; + + // Handle PCS mismatches. A specialized stage is added to the LUT in such case + switch (InPCS) { + + case cmsSigXYZData: // Input profile operates in XYZ + + switch (OutPCS) { + + case cmsSigXYZData: // XYZ -> XYZ + if (!IsEmptyLayer(m, off)) + cmsPipelineInsertStage(Result, cmsAT_END, cmsStageAllocMatrix(Result ->ContextID, 3, 3, m_as_dbl, off_as_dbl)); + break; + + case cmsSigLabData: // XYZ -> Lab + if (!IsEmptyLayer(m, off)) + cmsPipelineInsertStage(Result, cmsAT_END, cmsStageAllocMatrix(Result ->ContextID, 3, 3, m_as_dbl, off_as_dbl)); + cmsPipelineInsertStage(Result, cmsAT_END, _cmsStageAllocXYZ2Lab(Result ->ContextID)); + break; + + default: + return FALSE; // Colorspace mismatch + } + break; + + + case cmsSigLabData: // Input profile operates in Lab + + switch (OutPCS) { + + case cmsSigXYZData: // Lab -> XYZ + + cmsPipelineInsertStage(Result, cmsAT_END, _cmsStageAllocLab2XYZ(Result ->ContextID)); + if (!IsEmptyLayer(m, off)) + cmsPipelineInsertStage(Result, cmsAT_END, cmsStageAllocMatrix(Result ->ContextID, 3, 3, m_as_dbl, off_as_dbl)); + break; + + case cmsSigLabData: // Lab -> Lab + + if (!IsEmptyLayer(m, off)) { + cmsPipelineInsertStage(Result, cmsAT_END, _cmsStageAllocLab2XYZ(Result ->ContextID)); + cmsPipelineInsertStage(Result, cmsAT_END, cmsStageAllocMatrix(Result ->ContextID, 3, 3, m_as_dbl, off_as_dbl)); + cmsPipelineInsertStage(Result, cmsAT_END, _cmsStageAllocXYZ2Lab(Result ->ContextID)); + } + break; + + default: + return FALSE; // Mismatch + } + break; + + + // On colorspaces other than PCS, check for same space + default: + if (InPCS != OutPCS) return FALSE; + break; + } + + return TRUE; +} + + +// Is a given space compatible with another? +static +cmsBool ColorSpaceIsCompatible(cmsColorSpaceSignature a, cmsColorSpaceSignature b) +{ + // If they are same, they are compatible. + if (a == b) return TRUE; + + // Check for XYZ/Lab. Those spaces are interchangeable as they can be computed one from other. + if ((a == cmsSigXYZData) && (b == cmsSigLabData)) return TRUE; + if ((a == cmsSigLabData) && (b == cmsSigXYZData)) return TRUE; + + return FALSE; +} + + +// Default handler for ICC-style intents +static +cmsPipeline* DefaultICCintents(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number TheIntents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags) +{ + cmsPipeline* Lut, *Result; + cmsHPROFILE hProfile; + cmsMAT3 m; + cmsVEC3 off; + cmsColorSpaceSignature ColorSpaceIn, ColorSpaceOut, CurrentColorSpace; + cmsProfileClassSignature ClassSig; + cmsUInt32Number i, Intent; + + // For safety + if (nProfiles == 0) return NULL; + + // Allocate an empty LUT for holding the result. 0 as channel count means 'undefined' + Result = cmsPipelineAlloc(ContextID, 0, 0); + if (Result == NULL) return NULL; + + CurrentColorSpace = cmsGetColorSpace(hProfiles[0]); + + for (i=0; i < nProfiles; i++) { + + cmsBool lIsDeviceLink, lIsInput; + + hProfile = hProfiles[i]; + ClassSig = cmsGetDeviceClass(hProfile); + lIsDeviceLink = (ClassSig == cmsSigLinkClass || ClassSig == cmsSigAbstractClass ); + + // First profile is used as input unless devicelink or abstract + if ((i == 0) && !lIsDeviceLink) { + lIsInput = TRUE; + } + else { + // Else use profile in the input direction if current space is not PCS + lIsInput = (CurrentColorSpace != cmsSigXYZData) && + (CurrentColorSpace != cmsSigLabData); + } + + Intent = TheIntents[i]; + + if (lIsInput || lIsDeviceLink) { + + ColorSpaceIn = cmsGetColorSpace(hProfile); + ColorSpaceOut = cmsGetPCS(hProfile); + } + else { + + ColorSpaceIn = cmsGetPCS(hProfile); + ColorSpaceOut = cmsGetColorSpace(hProfile); + } + + if (!ColorSpaceIsCompatible(ColorSpaceIn, CurrentColorSpace)) { + + cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "ColorSpace mismatch"); + goto Error; + } + + // If devicelink is found, then no custom intent is allowed and we can + // read the LUT to be applied. Settings don't apply here. + if (lIsDeviceLink || ((ClassSig == cmsSigNamedColorClass) && (nProfiles == 1))) { + + // Get the involved LUT from the profile + Lut = _cmsReadDevicelinkLUT(hProfile, Intent); + if (Lut == NULL) goto Error; + + // What about abstract profiles? + if (ClassSig == cmsSigAbstractClass && i > 0) { + if (!ComputeConversion(i, hProfiles, Intent, BPC[i], AdaptationStates[i], &m, &off)) goto Error; + } + else { + _cmsMAT3identity(&m); + _cmsVEC3init(&off, 0, 0, 0); + } + + + if (!AddConversion(Result, CurrentColorSpace, ColorSpaceIn, &m, &off)) goto Error; + + } + else { + + if (lIsInput) { + // Input direction means non-pcs connection, so proceed like devicelinks + Lut = _cmsReadInputLUT(hProfile, Intent); + if (Lut == NULL) goto Error; + } + else { + + // Output direction means PCS connection. Intent may apply here + Lut = _cmsReadOutputLUT(hProfile, Intent); + if (Lut == NULL) goto Error; + + + if (!ComputeConversion(i, hProfiles, Intent, BPC[i], AdaptationStates[i], &m, &off)) goto Error; + if (!AddConversion(Result, CurrentColorSpace, ColorSpaceIn, &m, &off)) goto Error; + + } + } + + // Concatenate to the output LUT + cmsPipelineCat(Result, Lut); + cmsPipelineFree(Lut); + + // Update current space + CurrentColorSpace = ColorSpaceOut; + } + + return Result; + +Error: + + if (Result != NULL) cmsPipelineFree(Result); + return NULL; + + cmsUNUSED_PARAMETER(dwFlags); +} + + +// Wrapper for DLL calling convention +cmsPipeline* CMSEXPORT _cmsDefaultICCintents(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number TheIntents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags) +{ + return DefaultICCintents(ContextID, nProfiles, TheIntents, hProfiles, BPC, AdaptationStates, dwFlags); +} + +// Black preserving intents --------------------------------------------------------------------------------------------- + +// Translate black-preserving intents to ICC ones +static +int TranslateNonICCIntents(int Intent) +{ + switch (Intent) { + case INTENT_PRESERVE_K_ONLY_PERCEPTUAL: + case INTENT_PRESERVE_K_PLANE_PERCEPTUAL: + return INTENT_PERCEPTUAL; + + case INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC: + case INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC: + return INTENT_RELATIVE_COLORIMETRIC; + + case INTENT_PRESERVE_K_ONLY_SATURATION: + case INTENT_PRESERVE_K_PLANE_SATURATION: + return INTENT_SATURATION; + + default: return Intent; + } +} + +// Sampler for Black-only preserving CMYK->CMYK transforms + +typedef struct { + cmsPipeline* cmyk2cmyk; // The original transform + cmsToneCurve* KTone; // Black-to-black tone curve + +} GrayOnlyParams; + + +// Preserve black only if that is the only ink used +static +int BlackPreservingGrayOnlySampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +{ + GrayOnlyParams* bp = (GrayOnlyParams*) Cargo; + + // If going across black only, keep black only + if (In[0] == 0 && In[1] == 0 && In[2] == 0) { + + // TAC does not apply because it is black ink! + Out[0] = Out[1] = Out[2] = 0; + Out[3] = cmsEvalToneCurve16(bp->KTone, In[3]); + return TRUE; + } + + // Keep normal transform for other colors + bp ->cmyk2cmyk ->Eval16Fn(In, Out, bp ->cmyk2cmyk->Data); + return TRUE; +} + +// This is the entry for black-preserving K-only intents, which are non-ICC +static +cmsPipeline* BlackPreservingKOnlyIntents(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number TheIntents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags) +{ + GrayOnlyParams bp; + cmsPipeline* Result; + cmsUInt32Number ICCIntents[256]; + cmsStage* CLUT; + cmsUInt32Number i, nGridPoints; + + + // Sanity check + if (nProfiles < 1 || nProfiles > 255) return NULL; + + // Translate black-preserving intents to ICC ones + for (i=0; i < nProfiles; i++) + ICCIntents[i] = TranslateNonICCIntents(TheIntents[i]); + + // Check for non-cmyk profiles + if (cmsGetColorSpace(hProfiles[0]) != cmsSigCmykData || + cmsGetColorSpace(hProfiles[nProfiles-1]) != cmsSigCmykData) + return DefaultICCintents(ContextID, nProfiles, ICCIntents, hProfiles, BPC, AdaptationStates, dwFlags); + + memset(&bp, 0, sizeof(bp)); + + // Allocate an empty LUT for holding the result + Result = cmsPipelineAlloc(ContextID, 4, 4); + if (Result == NULL) return NULL; + + // Create a LUT holding normal ICC transform + bp.cmyk2cmyk = DefaultICCintents(ContextID, + nProfiles, + ICCIntents, + hProfiles, + BPC, + AdaptationStates, + dwFlags); + + if (bp.cmyk2cmyk == NULL) goto Error; + + // Now, compute the tone curve + bp.KTone = _cmsBuildKToneCurve(ContextID, + 4096, + nProfiles, + ICCIntents, + hProfiles, + BPC, + AdaptationStates, + dwFlags); + + if (bp.KTone == NULL) goto Error; + + + // How many gridpoints are we going to use? + nGridPoints = _cmsReasonableGridpointsByColorspace(cmsSigCmykData, dwFlags); + + // Create the CLUT. 16 bits + CLUT = cmsStageAllocCLut16bit(ContextID, nGridPoints, 4, 4, NULL); + if (CLUT == NULL) goto Error; + + // This is the one and only MPE in this LUT + cmsPipelineInsertStage(Result, cmsAT_BEGIN, CLUT); + + // Sample it. We cannot afford pre/post linearization this time. + if (!cmsStageSampleCLut16bit(CLUT, BlackPreservingGrayOnlySampler, (void*) &bp, 0)) + goto Error; + + // Get rid of xform and tone curve + cmsPipelineFree(bp.cmyk2cmyk); + cmsFreeToneCurve(bp.KTone); + + return Result; + +Error: + + if (bp.cmyk2cmyk != NULL) cmsPipelineFree(bp.cmyk2cmyk); + if (bp.KTone != NULL) cmsFreeToneCurve(bp.KTone); + if (Result != NULL) cmsPipelineFree(Result); + return NULL; + +} + +// K Plane-preserving CMYK to CMYK ------------------------------------------------------------------------------------ + +typedef struct { + + cmsPipeline* cmyk2cmyk; // The original transform + cmsHTRANSFORM hProofOutput; // Output CMYK to Lab (last profile) + cmsHTRANSFORM cmyk2Lab; // The input chain + cmsToneCurve* KTone; // Black-to-black tone curve + cmsPipeline* LabK2cmyk; // The output profile + cmsFloat64Number MaxError; + + cmsHTRANSFORM hRoundTrip; + cmsFloat64Number MaxTAC; + + +} PreserveKPlaneParams; + + +// The CLUT will be stored at 16 bits, but calculations are performed at cmsFloat32Number precision +static +int BlackPreservingSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +{ + int i; + cmsFloat32Number Inf[4], Outf[4]; + cmsFloat32Number LabK[4]; + cmsFloat64Number SumCMY, SumCMYK, Error, Ratio; + cmsCIELab ColorimetricLab, BlackPreservingLab; + PreserveKPlaneParams* bp = (PreserveKPlaneParams*) Cargo; + + // Convert from 16 bits to floating point + for (i=0; i < 4; i++) + Inf[i] = (cmsFloat32Number) (In[i] / 65535.0); + + // Get the K across Tone curve + LabK[3] = cmsEvalToneCurveFloat(bp ->KTone, Inf[3]); + + // If going across black only, keep black only + if (In[0] == 0 && In[1] == 0 && In[2] == 0) { + + Out[0] = Out[1] = Out[2] = 0; + Out[3] = _cmsQuickSaturateWord(LabK[3] * 65535.0); + return TRUE; + } + + // Try the original transform, + cmsPipelineEvalFloat( Inf, Outf, bp ->cmyk2cmyk); + + // Store a copy of the floating point result into 16-bit + for (i=0; i < 4; i++) + Out[i] = _cmsQuickSaturateWord(Outf[i] * 65535.0); + + // Maybe K is already ok (mostly on K=0) + if ( fabs(Outf[3] - LabK[3]) < (3.0 / 65535.0) ) { + return TRUE; + } + + // K differ, mesure and keep Lab measurement for further usage + // this is done in relative colorimetric intent + cmsDoTransform(bp->hProofOutput, Out, &ColorimetricLab, 1); + + // Is not black only and the transform doesn't keep black. + // Obtain the Lab of output CMYK. After that we have Lab + K + cmsDoTransform(bp ->cmyk2Lab, Outf, LabK, 1); + + // Obtain the corresponding CMY using reverse interpolation + // (K is fixed in LabK[3]) + if (!cmsPipelineEvalReverseFloat(LabK, Outf, Outf, bp ->LabK2cmyk)) { + + // Cannot find a suitable value, so use colorimetric xform + // which is already stored in Out[] + return TRUE; + } + + // Make sure to pass thru K (which now is fixed) + Outf[3] = LabK[3]; + + // Apply TAC if needed + SumCMY = Outf[0] + Outf[1] + Outf[2]; + SumCMYK = SumCMY + Outf[3]; + + if (SumCMYK > bp ->MaxTAC) { + + Ratio = 1 - ((SumCMYK - bp->MaxTAC) / SumCMY); + if (Ratio < 0) + Ratio = 0; + } + else + Ratio = 1.0; + + Out[0] = _cmsQuickSaturateWord(Outf[0] * Ratio * 65535.0); // C + Out[1] = _cmsQuickSaturateWord(Outf[1] * Ratio * 65535.0); // M + Out[2] = _cmsQuickSaturateWord(Outf[2] * Ratio * 65535.0); // Y + Out[3] = _cmsQuickSaturateWord(Outf[3] * 65535.0); + + // Estimate the error (this goes 16 bits to Lab DBL) + cmsDoTransform(bp->hProofOutput, Out, &BlackPreservingLab, 1); + Error = cmsDeltaE(&ColorimetricLab, &BlackPreservingLab); + if (Error > bp -> MaxError) + bp->MaxError = Error; + + return TRUE; +} + +// This is the entry for black-plane preserving, which are non-ICC +static +cmsPipeline* BlackPreservingKPlaneIntents(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number TheIntents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags) +{ + PreserveKPlaneParams bp; + cmsPipeline* Result = NULL; + cmsUInt32Number ICCIntents[256]; + cmsStage* CLUT; + cmsUInt32Number i, nGridPoints; + cmsHPROFILE hLab; + + // Sanity check + if (nProfiles < 1 || nProfiles > 255) return NULL; + + // Translate black-preserving intents to ICC ones + for (i=0; i < nProfiles; i++) + ICCIntents[i] = TranslateNonICCIntents(TheIntents[i]); + + // Check for non-cmyk profiles + if (cmsGetColorSpace(hProfiles[0]) != cmsSigCmykData || + cmsGetColorSpace(hProfiles[nProfiles-1]) != cmsSigCmykData || + cmsGetDeviceClass(hProfiles[nProfiles-1]) != cmsSigOutputClass) + return DefaultICCintents(ContextID, nProfiles, ICCIntents, hProfiles, BPC, AdaptationStates, dwFlags); + + // Allocate an empty LUT for holding the result + Result = cmsPipelineAlloc(ContextID, 4, 4); + if (Result == NULL) return NULL; + + + memset(&bp, 0, sizeof(bp)); + + // We need the input LUT of the last profile, assuming this one is responsible of + // black generation. This LUT will be seached in inverse order. + bp.LabK2cmyk = _cmsReadInputLUT(hProfiles[nProfiles-1], INTENT_RELATIVE_COLORIMETRIC); + if (bp.LabK2cmyk == NULL) goto Cleanup; + + // Get total area coverage (in 0..1 domain) + bp.MaxTAC = cmsDetectTAC(hProfiles[nProfiles-1]) / 100.0; + if (bp.MaxTAC <= 0) goto Cleanup; + + + // Create a LUT holding normal ICC transform + bp.cmyk2cmyk = DefaultICCintents(ContextID, + nProfiles, + ICCIntents, + hProfiles, + BPC, + AdaptationStates, + dwFlags); + if (bp.cmyk2cmyk == NULL) goto Cleanup; + + // Now the tone curve + bp.KTone = _cmsBuildKToneCurve(ContextID, 4096, nProfiles, + ICCIntents, + hProfiles, + BPC, + AdaptationStates, + dwFlags); + if (bp.KTone == NULL) goto Cleanup; + + // To measure the output, Last profile to Lab + hLab = cmsCreateLab4ProfileTHR(ContextID, NULL); + bp.hProofOutput = cmsCreateTransformTHR(ContextID, hProfiles[nProfiles-1], + CHANNELS_SH(4)|BYTES_SH(2), hLab, TYPE_Lab_DBL, + INTENT_RELATIVE_COLORIMETRIC, + cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); + if ( bp.hProofOutput == NULL) goto Cleanup; + + // Same as anterior, but lab in the 0..1 range + bp.cmyk2Lab = cmsCreateTransformTHR(ContextID, hProfiles[nProfiles-1], + FLOAT_SH(1)|CHANNELS_SH(4)|BYTES_SH(4), hLab, + FLOAT_SH(1)|CHANNELS_SH(3)|BYTES_SH(4), + INTENT_RELATIVE_COLORIMETRIC, + cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); + if (bp.cmyk2Lab == NULL) goto Cleanup; + cmsCloseProfile(hLab); + + // Error estimation (for debug only) + bp.MaxError = 0; + + // How many gridpoints are we going to use? + nGridPoints = _cmsReasonableGridpointsByColorspace(cmsSigCmykData, dwFlags); + + + CLUT = cmsStageAllocCLut16bit(ContextID, nGridPoints, 4, 4, NULL); + if (CLUT == NULL) goto Cleanup; + + cmsPipelineInsertStage(Result, cmsAT_BEGIN, CLUT); + + cmsStageSampleCLut16bit(CLUT, BlackPreservingSampler, (void*) &bp, 0); + +Cleanup: + + if (bp.cmyk2cmyk) cmsPipelineFree(bp.cmyk2cmyk); + if (bp.cmyk2Lab) cmsDeleteTransform(bp.cmyk2Lab); + if (bp.hProofOutput) cmsDeleteTransform(bp.hProofOutput); + + if (bp.KTone) cmsFreeToneCurve(bp.KTone); + if (bp.LabK2cmyk) cmsPipelineFree(bp.LabK2cmyk); + + return Result; +} + +// Link routines ------------------------------------------------------------------------------------------------------ + +// Chain several profiles into a single LUT. It just checks the parameters and then calls the handler +// for the first intent in chain. The handler may be user-defined. Is up to the handler to deal with the +// rest of intents in chain. A maximum of 255 profiles at time are supported, which is pretty reasonable. +cmsPipeline* _cmsLinkProfiles(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number TheIntents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags) +{ + cmsUInt32Number i; + cmsIntentsList* Intent; + + // Make sure a reasonable number of profiles is provided + if (nProfiles <= 0 || nProfiles > 255) { + cmsSignalError(ContextID, cmsERROR_RANGE, "Couldn't link '%d' profiles", nProfiles); + return NULL; + } + + for (i=0; i < nProfiles; i++) { + + // Check if black point is really needed or allowed. Note that + // following Adobe's document: + // BPC does not apply to devicelink profiles, nor to abs colorimetric, + // and applies always on V4 perceptual and saturation. + + if (TheIntents[i] == INTENT_ABSOLUTE_COLORIMETRIC) + BPC[i] = FALSE; + + if (TheIntents[i] == INTENT_PERCEPTUAL || TheIntents[i] == INTENT_SATURATION) { + + // Force BPC for V4 profiles in perceptual and saturation + if (cmsGetProfileVersion(hProfiles[i]) >= 4.0) + BPC[i] = TRUE; + } + } + + // Search for a handler. The first intent in the chain defines the handler. That would + // prevent using multiple custom intents in a multiintent chain, but the behaviour of + // this case would present some issues if the custom intent tries to do things like + // preserve primaries. This solution is not perfect, but works well on most cases. + + Intent = SearchIntent(TheIntents[0]); + if (Intent == NULL) { + cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported intent '%d'", TheIntents[0]); + return NULL; + } + + // Call the handler + return Intent ->Link(ContextID, nProfiles, TheIntents, hProfiles, BPC, AdaptationStates, dwFlags); +} + +// ------------------------------------------------------------------------------------------------- + +// Get information about available intents. nMax is the maximum space for the supplied "Codes" +// and "Descriptions" the function returns the total number of intents, which may be greater +// than nMax, although the matrices are not populated beyond this level. +cmsUInt32Number CMSEXPORT cmsGetSupportedIntents(cmsUInt32Number nMax, cmsUInt32Number* Codes, char** Descriptions) +{ + cmsIntentsList* pt; + cmsUInt32Number nIntents; + + for (nIntents=0, pt = Intents; pt != NULL; pt = pt -> Next) + { + if (nIntents < nMax) { + if (Codes != NULL) + Codes[nIntents] = pt ->Intent; + + if (Descriptions != NULL) + Descriptions[nIntents] = pt ->Description; + } + + nIntents++; + } + + return nIntents; +} + +// The plug-in registration. User can add new intents or override default routines +cmsBool _cmsRegisterRenderingIntentPlugin(cmsPluginBase* Data) +{ + cmsPluginRenderingIntent* Plugin = (cmsPluginRenderingIntent*) Data; + cmsIntentsList* fl; + + // Do we have to reset the intents? + if (Data == NULL) { + + Intents = DefaultIntents; + return TRUE; + } + + fl = SearchIntent(Plugin ->Intent); + + if (fl == NULL) { + fl = (cmsIntentsList*) _cmsPluginMalloc(sizeof(cmsIntentsList)); + if (fl == NULL) return FALSE; + } + + fl ->Intent = Plugin ->Intent; + strncpy(fl ->Description, Plugin ->Description, 255); + fl ->Description[255] = 0; + + fl ->Link = Plugin ->Link; + + fl ->Next = Intents; + Intents = fl; + + return TRUE; +} + diff --git a/src/cmserr.c b/src/cmserr.c new file mode 100644 index 0000000..5f93c16 --- /dev/null +++ b/src/cmserr.c @@ -0,0 +1,430 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- + +#include "lcms2_internal.h" + +// I am so tired about incompatibilities on those functions that here are some replacements +// that hopefully would be fully portable. + +// compare two strings ignoring case +int CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2) +{ + register const unsigned char *us1 = (const unsigned char *)s1, + *us2 = (const unsigned char *)s2; + + while (toupper(*us1) == toupper(*us2++)) + if (*us1++ == '\0') + return (0); + return (toupper(*us1) - toupper(*--us2)); +} + +// long int because C99 specifies ftell in such way (7.19.9.2) +long int CMSEXPORT cmsfilelength(FILE* f) +{ + long int p , n; + + p = ftell(f); // register current file position + + if (fseek(f, 0, SEEK_END) != 0) { + return -1; + } + + n = ftell(f); + fseek(f, p, SEEK_SET); // file position restored + + return n; +} + + +// Memory handling ------------------------------------------------------------------ +// +// This is the interface to low-level memory management routines. By default a simple +// wrapping to malloc/free/realloc is provided, although there is a limit on the max +// amount of memoy that can be reclaimed. This is mostly as a safety feature to +// prevent bogus or malintentionated code to allocate huge blocks that otherwise lcms +// would never need. + +#define MAX_MEMORY_FOR_ALLOC ((cmsUInt32Number)(1024U*1024U*512U)) + +// User may override this behaviour by using a memory plug-in, which basically replaces +// the default memory management functions. In this case, no check is performed and it +// is up to the plug-in writter to keep in the safe side. There are only three functions +// required to be implemented: malloc, realloc and free, although the user may want to +// replace the optional mallocZero, calloc and dup as well. + +cmsBool _cmsRegisterMemHandlerPlugin(cmsPluginBase* Plugin); + +// ********************************************************************************* + +// This is the default memory allocation function. It does a very coarse +// check of amout of memory, just to prevent exploits +static +void* _cmsMallocDefaultFn(cmsContext ContextID, cmsUInt32Number size) +{ + if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never allow over maximum + + return (void*) malloc(size); + + cmsUNUSED_PARAMETER(ContextID); +} + +// Generic allocate & zero +static +void* _cmsMallocZeroDefaultFn(cmsContext ContextID, cmsUInt32Number size) +{ + void *pt = _cmsMalloc(ContextID, size); + if (pt == NULL) return NULL; + + memset(pt, 0, size); + return pt; +} + + +// The default free function. The only check proformed is against NULL pointers +static +void _cmsFreeDefaultFn(cmsContext ContextID, void *Ptr) +{ + // free(NULL) is defined a no-op by C99, therefore it is safe to + // avoid the check, but it is here just in case... + + if (Ptr) free(Ptr); + + cmsUNUSED_PARAMETER(ContextID); +} + +// The default realloc function. Again it check for exploits. If Ptr is NULL, +// realloc behaves the same way as malloc and allocates a new block of size bytes. +static +void* _cmsReallocDefaultFn(cmsContext ContextID, void* Ptr, cmsUInt32Number size) +{ + + if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never realloc over 512Mb + + return realloc(Ptr, size); + + cmsUNUSED_PARAMETER(ContextID); +} + + +// The default calloc function. Allocates an array of num elements, each one of size bytes +// all memory is initialized to zero. +static +void* _cmsCallocDefaultFn(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) +{ + cmsUInt32Number Total = num * size; + + // Preserve calloc behaviour + if (Total == 0) return NULL; + + // Safe check for overflow. + if (num >= UINT_MAX / size) return NULL; + + // Check for overflow + if (Total < num || Total < size) { + return NULL; + } + + if (Total > MAX_MEMORY_FOR_ALLOC) return NULL; // Never alloc over 512Mb + + return _cmsMallocZero(ContextID, Total); +} + +// Generic block duplication +static +void* _cmsDupDefaultFn(cmsContext ContextID, const void* Org, cmsUInt32Number size) +{ + void* mem; + + if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never dup over 512Mb + + mem = _cmsMalloc(ContextID, size); + + if (mem != NULL && Org != NULL) + memmove(mem, Org, size); + + return mem; +} + +// Pointers to malloc and _cmsFree functions in current environment +static void * (* MallocPtr)(cmsContext ContextID, cmsUInt32Number size) = _cmsMallocDefaultFn; +static void * (* MallocZeroPtr)(cmsContext ContextID, cmsUInt32Number size) = _cmsMallocZeroDefaultFn; +static void (* FreePtr)(cmsContext ContextID, void *Ptr) = _cmsFreeDefaultFn; +static void * (* ReallocPtr)(cmsContext ContextID, void *Ptr, cmsUInt32Number NewSize) = _cmsReallocDefaultFn; +static void * (* CallocPtr)(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size)= _cmsCallocDefaultFn; +static void * (* DupPtr)(cmsContext ContextID, const void* Org, cmsUInt32Number size) = _cmsDupDefaultFn; + +// Plug-in replacement entry +cmsBool _cmsRegisterMemHandlerPlugin(cmsPluginBase *Data) +{ + cmsPluginMemHandler* Plugin = (cmsPluginMemHandler*) Data; + + // NULL forces to reset to defaults + if (Data == NULL) { + + MallocPtr = _cmsMallocDefaultFn; + MallocZeroPtr= _cmsMallocZeroDefaultFn; + FreePtr = _cmsFreeDefaultFn; + ReallocPtr = _cmsReallocDefaultFn; + CallocPtr = _cmsCallocDefaultFn; + DupPtr = _cmsDupDefaultFn; + return TRUE; + } + + // Check for required callbacks + if (Plugin -> MallocPtr == NULL || + Plugin -> FreePtr == NULL || + Plugin -> ReallocPtr == NULL) return FALSE; + + // Set replacement functions + MallocPtr = Plugin -> MallocPtr; + FreePtr = Plugin -> FreePtr; + ReallocPtr = Plugin -> ReallocPtr; + + if (Plugin ->MallocZeroPtr != NULL) MallocZeroPtr = Plugin ->MallocZeroPtr; + if (Plugin ->CallocPtr != NULL) CallocPtr = Plugin -> CallocPtr; + if (Plugin ->DupPtr != NULL) DupPtr = Plugin -> DupPtr; + + return TRUE; +} + +// Generic allocate +void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size) +{ + return MallocPtr(ContextID, size); +} + +// Generic allocate & zero +void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size) +{ + return MallocZeroPtr(ContextID, size); +} + +// Generic calloc +void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) +{ + return CallocPtr(ContextID, num, size); +} + +// Generic reallocate +void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number size) +{ + return ReallocPtr(ContextID, Ptr, size); +} + +// Generic free memory +void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr) +{ + if (Ptr != NULL) FreePtr(ContextID, Ptr); +} + +// Generic block duplication +void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size) +{ + return DupPtr(ContextID, Org, size); +} + +// ******************************************************************************************** + +// Sub allocation takes care of many pointers of small size. The memory allocated in +// this way have be freed at once. Next function allocates a single chunk for linked list +// I prefer this method over realloc due to the big inpact on xput realloc may have if +// memory is being swapped to disk. This approach is safer (although that may not be true on all platforms) +static +_cmsSubAllocator_chunk* _cmsCreateSubAllocChunk(cmsContext ContextID, cmsUInt32Number Initial) +{ + _cmsSubAllocator_chunk* chunk; + + // 20K by default + if (Initial == 0) + Initial = 20*1024; + + // Create the container + chunk = (_cmsSubAllocator_chunk*) _cmsMallocZero(ContextID, sizeof(_cmsSubAllocator_chunk)); + if (chunk == NULL) return NULL; + + // Initialize values + chunk ->Block = (cmsUInt8Number*) _cmsMalloc(ContextID, Initial); + if (chunk ->Block == NULL) { + + // Something went wrong + _cmsFree(ContextID, chunk); + return NULL; + } + + + + chunk ->BlockSize = Initial; + chunk ->Used = 0; + chunk ->next = NULL; + + return chunk; +} + +// The suballocated is nothing but a pointer to the first element in the list. We also keep +// the thread ID in this structure. +_cmsSubAllocator* _cmsCreateSubAlloc(cmsContext ContextID, cmsUInt32Number Initial) +{ + _cmsSubAllocator* sub; + + // Create the container + sub = (_cmsSubAllocator*) _cmsMallocZero(ContextID, sizeof(_cmsSubAllocator)); + if (sub == NULL) return NULL; + + sub ->ContextID = ContextID; + + sub ->h = _cmsCreateSubAllocChunk(ContextID, Initial); + if (sub ->h == NULL) { + _cmsFree(ContextID, sub); + return NULL; + } + + return sub; +} + + +// Get rid of whole linked list +void _cmsSubAllocDestroy(_cmsSubAllocator* sub) +{ + _cmsSubAllocator_chunk *chunk, *n; + + for (chunk = sub ->h; chunk != NULL; chunk = n) { + + n = chunk->next; + if (chunk->Block != NULL) _cmsFree(sub ->ContextID, chunk->Block); + _cmsFree(sub ->ContextID, chunk); + } + + // Free the header + _cmsFree(sub ->ContextID, sub); +} + + +// Get a pointer to small memory block. +void* _cmsSubAlloc(_cmsSubAllocator* sub, cmsUInt32Number size) +{ + cmsUInt32Number Free = sub -> h ->BlockSize - sub -> h -> Used; + cmsUInt8Number* ptr; + + size = _cmsALIGNMEM(size); + + // Check for memory. If there is no room, allocate a new chunk of double memory size. + if (size > Free) { + + _cmsSubAllocator_chunk* chunk; + cmsUInt32Number newSize; + + newSize = sub -> h ->BlockSize * 2; + if (newSize < size) newSize = size; + + chunk = _cmsCreateSubAllocChunk(sub -> ContextID, newSize); + if (chunk == NULL) return NULL; + + // Link list + chunk ->next = sub ->h; + sub ->h = chunk; + + } + + ptr = sub -> h ->Block + sub -> h ->Used; + sub -> h -> Used += size; + + return (void*) ptr; +} + +// Error logging ****************************************************************** + +// There is no error handling at all. When a funtion fails, it returns proper value. +// For example, all create functions does return NULL on failure. Other return FALSE +// It may be interesting, for the developer, to know why the function is failing. +// for that reason, lcms2 does offer a logging function. This function does recive +// a ENGLISH string with some clues on what is going wrong. You can show this +// info to the end user, or just create some sort of log. +// The logging function should NOT terminate the program, as this obviously can leave +// resources. It is the programmer's responsability to check each function return code +// to make sure it didn't fail. + +// Error messages are limited to MAX_ERROR_MESSAGE_LEN + +#define MAX_ERROR_MESSAGE_LEN 1024 + +// --------------------------------------------------------------------------------------------------------- + +// This is our default log error +static void DefaultLogErrorHandlerFunction(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text); + +// The current handler in actual environment +static cmsLogErrorHandlerFunction LogErrorHandler = DefaultLogErrorHandlerFunction; + +// The default error logger does nothing. +static +void DefaultLogErrorHandlerFunction(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text) +{ + // fprintf(stderr, "[lcms]: %s\n", Text); + // fflush(stderr); + + cmsUNUSED_PARAMETER(ContextID); + cmsUNUSED_PARAMETER(ErrorCode); + cmsUNUSED_PARAMETER(Text); +} + +// Change log error +void CMSEXPORT cmsSetLogErrorHandler(cmsLogErrorHandlerFunction Fn) +{ + if (Fn == NULL) + LogErrorHandler = DefaultLogErrorHandlerFunction; + else + LogErrorHandler = Fn; +} + +// Log an error +// ErrorText is a text holding an english description of error. +void CMSEXPORT cmsSignalError(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *ErrorText, ...) +{ + va_list args; + char Buffer[MAX_ERROR_MESSAGE_LEN]; + + va_start(args, ErrorText); + vsnprintf(Buffer, MAX_ERROR_MESSAGE_LEN-1, ErrorText, args); + va_end(args); + + // Call handler + LogErrorHandler(ContextID, ErrorCode, Buffer); +} + +// Utility function to print signatures +void _cmsTagSignature2String(char String[5], cmsTagSignature sig) +{ + cmsUInt32Number be; + + // Convert to big endian + be = _cmsAdjustEndianess32((cmsUInt32Number) sig); + + // Move chars + memmove(String, &be, 4); + + // Make sure of terminator + String[4] = 0; +} + diff --git a/src/cmsgamma.c b/src/cmsgamma.c new file mode 100644 index 0000000..02dc910 --- /dev/null +++ b/src/cmsgamma.c @@ -0,0 +1,1160 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// +#include "lcms2_internal.h" + +// Tone curves are powerful constructs that can contain curves specified in diverse ways. +// The curve is stored in segments, where each segment can be sampled or specified by parameters. +// a 16.bit simplification of the *whole* curve is kept for optimization purposes. For float operation, +// each segment is evaluated separately. Plug-ins may be used to define new parametric schemes, +// each plug-in may define up to MAX_TYPES_IN_LCMS_PLUGIN functions types. For defining a function, +// the plug-in should provide the type id, how many parameters each type has, and a pointer to +// a procedure that evaluates the function. In the case of reverse evaluation, the evaluator will +// be called with the type id as a negative value, and a sampled version of the reversed curve +// will be built. + +// ----------------------------------------------------------------- Implementation +// Maxim number of nodes +#define MAX_NODES_IN_CURVE 4097 +#define MINUS_INF (-1E22F) +#define PLUS_INF (+1E22F) + +// The list of supported parametric curves +typedef struct _cmsParametricCurvesCollection_st { + + int nFunctions; // Number of supported functions in this chunk + int FunctionTypes[MAX_TYPES_IN_LCMS_PLUGIN]; // The identification types + int ParameterCount[MAX_TYPES_IN_LCMS_PLUGIN]; // Number of parameters for each function + cmsParametricCurveEvaluator Evaluator; // The evaluator + + struct _cmsParametricCurvesCollection_st* Next; // Next in list + +} _cmsParametricCurvesCollection; + + +// This is the default (built-in) evaluator +static cmsFloat64Number DefaultEvalParametricFn(cmsInt32Number Type, const cmsFloat64Number Params[], cmsFloat64Number R); + +// The built-in list +static _cmsParametricCurvesCollection DefaultCurves = { + 9, // # of curve types + { 1, 2, 3, 4, 5, 6, 7, 8, 108 }, // Parametric curve ID + { 1, 3, 4, 5, 7, 4, 5, 5, 1 }, // Parameters by type + DefaultEvalParametricFn, // Evaluator + NULL // Next in chain +}; + +// The linked list head +static _cmsParametricCurvesCollection* ParametricCurves = &DefaultCurves; + +// As a way to install new parametric curves +cmsBool _cmsRegisterParametricCurvesPlugin(cmsPluginBase* Data) +{ + cmsPluginParametricCurves* Plugin = (cmsPluginParametricCurves*) Data; + _cmsParametricCurvesCollection* fl; + + if (Data == NULL) { + + ParametricCurves = &DefaultCurves; + return TRUE; + } + + fl = (_cmsParametricCurvesCollection*) _cmsPluginMalloc(sizeof(_cmsParametricCurvesCollection)); + if (fl == NULL) return FALSE; + + // Copy the parameters + fl ->Evaluator = Plugin ->Evaluator; + fl ->nFunctions = Plugin ->nFunctions; + + // Make sure no mem overwrites + if (fl ->nFunctions > MAX_TYPES_IN_LCMS_PLUGIN) + fl ->nFunctions = MAX_TYPES_IN_LCMS_PLUGIN; + + // Copy the data + memmove(fl->FunctionTypes, Plugin ->FunctionTypes, fl->nFunctions * sizeof(cmsUInt32Number)); + memmove(fl->ParameterCount, Plugin ->ParameterCount, fl->nFunctions * sizeof(cmsUInt32Number)); + + // Keep linked list + fl ->Next = ParametricCurves; + ParametricCurves = fl; + + // All is ok + return TRUE; +} + + +// Search in type list, return position or -1 if not found +static +int IsInSet(int Type, _cmsParametricCurvesCollection* c) +{ + int i; + + for (i=0; i < c ->nFunctions; i++) + if (abs(Type) == c ->FunctionTypes[i]) return i; + + return -1; +} + + +// Search for the collection which contains a specific type +static +_cmsParametricCurvesCollection *GetParametricCurveByType(int Type, int* index) +{ + _cmsParametricCurvesCollection* c; + int Position; + + for (c = ParametricCurves; c != NULL; c = c ->Next) { + + Position = IsInSet(Type, c); + + if (Position != -1) { + if (index != NULL) + *index = Position; + return c; + } + } + + return NULL; +} + +// Low level allocate, which takes care of memory details. nEntries may be zero, and in this case +// no optimation curve is computed. nSegments may also be zero in the inverse case, where only the +// optimization curve is given. Both features simultaneously is an error +static +cmsToneCurve* AllocateToneCurveStruct(cmsContext ContextID, cmsInt32Number nEntries, + cmsInt32Number nSegments, const cmsCurveSegment* Segments, + const cmsUInt16Number* Values) +{ + cmsToneCurve* p; + int i; + + // We allow huge tables, which are then restricted for smoothing operations + if (nEntries > 65530 || nEntries < 0) { + cmsSignalError(ContextID, cmsERROR_RANGE, "Couldn't create tone curve of more than 65530 entries"); + return NULL; + } + + if (nEntries <= 0 && nSegments <= 0) { + cmsSignalError(ContextID, cmsERROR_RANGE, "Couldn't create tone curve with zero segments and no table"); + return NULL; + } + + // Allocate all required pointers, etc. + p = (cmsToneCurve*) _cmsMallocZero(ContextID, sizeof(cmsToneCurve)); + if (!p) return NULL; + + // In this case, there are no segments + if (nSegments <= 0) { + p ->Segments = NULL; + p ->Evals = NULL; + } + else { + p ->Segments = (cmsCurveSegment*) _cmsCalloc(ContextID, nSegments, sizeof(cmsCurveSegment)); + if (p ->Segments == NULL) goto Error; + + p ->Evals = (cmsParametricCurveEvaluator*) _cmsCalloc(ContextID, nSegments, sizeof(cmsParametricCurveEvaluator)); + if (p ->Evals == NULL) goto Error; + } + + p -> nSegments = nSegments; + + // This 16-bit table contains a limited precision representation of the whole curve and is kept for + // increasing xput on certain operations. + if (nEntries <= 0) { + p ->Table16 = NULL; + } + else { + p ->Table16 = (cmsUInt16Number*) _cmsCalloc(ContextID, nEntries, sizeof(cmsUInt16Number)); + if (p ->Table16 == NULL) goto Error; + } + + p -> nEntries = nEntries; + + // Initialize members if requested + if (Values != NULL && (nEntries > 0)) { + + for (i=0; i < nEntries; i++) + p ->Table16[i] = Values[i]; + } + + // Initialize the segments stuff. The evaluator for each segment is located and a pointer to it + // is placed in advance to maximize performance. + if (Segments != NULL && (nSegments > 0)) { + + _cmsParametricCurvesCollection *c; + + p ->SegInterp = (cmsInterpParams**) _cmsCalloc(ContextID, nSegments, sizeof(cmsInterpParams*)); + if (p ->SegInterp == NULL) goto Error; + + for (i=0; i< nSegments; i++) { + + // Type 0 is a special marker for table-based curves + if (Segments[i].Type == 0) + p ->SegInterp[i] = _cmsComputeInterpParams(ContextID, Segments[i].nGridPoints, 1, 1, NULL, CMS_LERP_FLAGS_FLOAT); + + memmove(&p ->Segments[i], &Segments[i], sizeof(cmsCurveSegment)); + + if (Segments[i].Type == 0 && Segments[i].SampledPoints != NULL) + p ->Segments[i].SampledPoints = (cmsFloat32Number*) _cmsDupMem(ContextID, Segments[i].SampledPoints, sizeof(cmsFloat32Number) * Segments[i].nGridPoints); + else + p ->Segments[i].SampledPoints = NULL; + + + c = GetParametricCurveByType(Segments[i].Type, NULL); + if (c != NULL) + p ->Evals[i] = c ->Evaluator; + } + } + + p ->InterpParams = _cmsComputeInterpParams(ContextID, p ->nEntries, 1, 1, p->Table16, CMS_LERP_FLAGS_16BITS); + return p; + +Error: + if (p -> Segments) _cmsFree(ContextID, p ->Segments); + if (p -> Evals) _cmsFree(ContextID, p -> Evals); + if (p ->Table16) _cmsFree(ContextID, p ->Table16); + _cmsFree(ContextID, p); + return NULL; +} + + +// Parametric Fn using floating point +static +cmsFloat64Number DefaultEvalParametricFn(cmsInt32Number Type, const cmsFloat64Number Params[], cmsFloat64Number R) +{ + cmsFloat64Number e, Val, disc; + + switch (Type) { + + // X = Y ^ Gamma + case 1: + if (R < 0) + Val = 0; + else + Val = pow(R, Params[0]); + break; + + // Type 1 Reversed: X = Y ^1/gamma + case -1: + if (R < 0) + Val = 0; + else + Val = pow(R, 1/Params[0]); + break; + + // CIE 122-1966 + // Y = (aX + b)^Gamma | X >= -b/a + // Y = 0 | else + case 2: + disc = -Params[2] / Params[1]; + + if (R >= disc ) { + + e = Params[1]*R + Params[2]; + + if (e > 0) + Val = pow(e, Params[0]); + else + Val = 0; + } + else + Val = 0; + break; + + // Type 2 Reversed + // X = (Y ^1/g - b) / a + case -2: + if (R < 0) + Val = 0; + else + Val = (pow(R, 1.0/Params[0]) - Params[2]) / Params[1]; + + if (Val < 0) + Val = 0; + break; + + + // IEC 61966-3 + // Y = (aX + b)^Gamma | X <= -b/a + // Y = c | else + case 3: + disc = -Params[2] / Params[1]; + if (disc < 0) + disc = 0; + + if (R >= disc) { + + e = Params[1]*R + Params[2]; + + if (e > 0) + Val = pow(e, Params[0]) + Params[3]; + else + Val = 0; + } + else + Val = Params[3]; + break; + + + // Type 3 reversed + // X=((Y-c)^1/g - b)/a | (Y>=c) + // X=-b/a | (Y= Params[3]) { + + e = R - Params[3]; + + if (e > 0) + Val = (pow(e, 1/Params[0]) - Params[2]) / Params[1]; + else + Val = 0; + } + else { + Val = -Params[2] / Params[1]; + } + break; + + + // IEC 61966-2.1 (sRGB) + // Y = (aX + b)^Gamma | X >= d + // Y = cX | X < d + case 4: + if (R >= Params[4]) { + + e = Params[1]*R + Params[2]; + + if (e > 0) + Val = pow(e, Params[0]); + else + Val = 0; + } + else + Val = R * Params[3]; + break; + + // Type 4 reversed + // X=((Y^1/g-b)/a) | Y >= (ad+b)^g + // X=Y/c | Y< (ad+b)^g + case -4: + e = Params[1] * Params[4] + Params[2]; + if (e < 0) + disc = 0; + else + disc = pow(e, Params[0]); + + if (R >= disc) { + + Val = (pow(R, 1.0/Params[0]) - Params[2]) / Params[1]; + } + else { + Val = R / Params[3]; + } + break; + + + // Y = (aX + b)^Gamma + e | X >= d + // Y = cX + f | X < d + case 5: + if (R >= Params[4]) { + + e = Params[1]*R + Params[2]; + + if (e > 0) + Val = pow(e, Params[0]) + Params[5]; + else + Val = 0; + } + else + Val = R*Params[3] + Params[6]; + break; + + + // Reversed type 5 + // X=((Y-e)1/g-b)/a | Y >=(ad+b)^g+e), cd+f + // X=(Y-f)/c | else + case -5: + + disc = Params[3] * Params[4] + Params[6]; + if (R >= disc) { + + e = R - Params[5]; + if (e < 0) + Val = 0; + else + Val = (pow(e, 1.0/Params[0]) - Params[2]) / Params[1]; + } + else { + Val = (R - Params[6]) / Params[3]; + } + break; + + + // Types 6,7,8 comes from segmented curves as described in ICCSpecRevision_02_11_06_Float.pdf + // Type 6 is basically identical to type 5 without d + + // Y = (a * X + b) ^ Gamma + c + case 6: + e = Params[1]*R + Params[2]; + + if (e < 0) + Val = 0; + else + Val = pow(e, Params[0]) + Params[3]; + break; + + // ((Y - c) ^1/Gamma - b) / a + case -6: + e = R - Params[3]; + if (e < 0) + Val = 0; + else + Val = (pow(e, 1.0/Params[0]) - Params[2]) / Params[1]; + break; + + + // Y = a * log (b * X^Gamma + c) + d + case 7: + + e = Params[2] * pow(R, Params[0]) + Params[3]; + if (e <= 0) + Val = 0; + else + Val = Params[1]*log10(e) + Params[4]; + break; + + // (Y - d) / a = log(b * X ^Gamma + c) + // pow(10, (Y-d) / a) = b * X ^Gamma + c + // pow((pow(10, (Y-d) / a) - c) / b, 1/g) = X + case -7: + Val = pow((pow(10.0, (R-Params[4]) / Params[1]) - Params[3]) / Params[2], 1.0 / Params[0]); + break; + + + //Y = a * b^(c*X+d) + e + case 8: + Val = (Params[0] * pow(Params[1], Params[2] * R + Params[3]) + Params[4]); + break; + + + // Y = (log((y-e) / a) / log(b) - d ) / c + // a=0, b=1, c=2, d=3, e=4, + case -8: + + disc = R - Params[4]; + if (disc < 0) Val = 0; + else + Val = (log(disc / Params[0]) / log(Params[1]) - Params[3]) / Params[2]; + break; + + // S-Shaped: (1 - (1-x)^1/g)^1/g + case 108: + Val = pow(1.0 - pow(1 - R, 1/Params[0]), 1/Params[0]); + break; + + // y = (1 - (1-x)^1/g)^1/g + // y^g = (1 - (1-x)^1/g) + // 1 - y^g = (1-x)^1/g + // (1 - y^g)^g = 1 - x + // 1 - (1 - y^g)^g + case -108: + Val = 1 - pow(1 - pow(R, Params[0]), Params[0]); + break; + + default: + // Unsupported parametric curve. Should never reach here + return 0; + } + + return Val; +} + +// Evaluate a segmented funtion for a single value. Return -1 if no valid segment found . +// If fn type is 0, perform an interpolation on the table +static +cmsFloat64Number EvalSegmentedFn(const cmsToneCurve *g, cmsFloat64Number R) +{ + int i; + + for (i = g ->nSegments-1; i >= 0 ; --i) { + + // Check for domain + if ((R > g ->Segments[i].x0) && (R <= g ->Segments[i].x1)) { + + // Type == 0 means segment is sampled + if (g ->Segments[i].Type == 0) { + + cmsFloat32Number R1 = (cmsFloat32Number) (R - g ->Segments[i].x0); + cmsFloat32Number Out; + + // Setup the table (TODO: clean that) + g ->SegInterp[i]-> Table = g ->Segments[i].SampledPoints; + + g ->SegInterp[i] -> Interpolation.LerpFloat(&R1, &Out, g ->SegInterp[i]); + + return Out; + } + else + return g ->Evals[i](g->Segments[i].Type, g ->Segments[i].Params, R); + } + } + + return MINUS_INF; +} + + +// Create an empty gamma curve, by using tables. This specifies only the limited-precision part, and leaves the +// floating point description empty. +cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurve16(cmsContext ContextID, cmsInt32Number nEntries, const cmsUInt16Number Values[]) +{ + return AllocateToneCurveStruct(ContextID, nEntries, 0, NULL, Values); +} + +static +int EntriesByGamma(cmsFloat64Number Gamma) +{ + if (fabs(Gamma - 1.0) < 0.001) return 2; + return 4096; +} + + +// Create a segmented gamma, fill the table +cmsToneCurve* CMSEXPORT cmsBuildSegmentedToneCurve(cmsContext ContextID, + cmsInt32Number nSegments, const cmsCurveSegment Segments[]) +{ + int i; + cmsFloat64Number R, Val; + cmsToneCurve* g; + int nGridPoints = 4096; + + _cmsAssert(Segments != NULL); + + // Optimizatin for identity curves. + if (nSegments == 1 && Segments[0].Type == 1) { + + nGridPoints = EntriesByGamma(Segments[0].Params[0]); + } + + g = AllocateToneCurveStruct(ContextID, nGridPoints, nSegments, Segments, NULL); + if (g == NULL) return NULL; + + // Once we have the floating point version, we can approximate a 16 bit table of 4096 entries + // for performance reasons. This table would normally not be used except on 8/16 bits transforms. + for (i=0; i < nGridPoints; i++) { + + R = (cmsFloat64Number) i / (nGridPoints-1); + + Val = EvalSegmentedFn(g, R); + + // Round and saturate + g ->Table16[i] = _cmsQuickSaturateWord(Val * 65535.0); + } + + return g; +} + +// Use a segmented curve to store the floating point table +cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurveFloat(cmsContext ContextID, cmsUInt32Number nEntries, const cmsFloat32Number values[]) +{ + cmsCurveSegment Seg[2]; + + // Initialize segmented curve part up to 0 + Seg[0].x0 = -1; + Seg[0].x1 = 0; + Seg[0].Type = 6; + + Seg[0].Params[0] = 1; + Seg[0].Params[1] = 0; + Seg[0].Params[2] = 0; + Seg[0].Params[3] = 0; + Seg[0].Params[4] = 0; + + // From zero to any + Seg[1].x0 = 0; + Seg[1].x1 = 1.0; + Seg[1].Type = 0; + + Seg[1].nGridPoints = nEntries; + Seg[1].SampledPoints = (cmsFloat32Number*) values; + + return cmsBuildSegmentedToneCurve(ContextID, 2, Seg); +} + +// Parametric curves +// +// Parameters goes as: Curve, a, b, c, d, e, f +// Type is the ICC type +1 +// if type is negative, then the curve is analyticaly inverted +cmsToneCurve* CMSEXPORT cmsBuildParametricToneCurve(cmsContext ContextID, cmsInt32Number Type, const cmsFloat64Number Params[]) +{ + cmsCurveSegment Seg0; + int Pos = 0; + cmsUInt32Number size; + _cmsParametricCurvesCollection* c = GetParametricCurveByType(Type, &Pos); + + _cmsAssert(Params != NULL); + + if (c == NULL) { + cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Invalid parametric curve type %d", Type); + return NULL; + } + + memset(&Seg0, 0, sizeof(Seg0)); + + Seg0.x0 = MINUS_INF; + Seg0.x1 = PLUS_INF; + Seg0.Type = Type; + + size = c->ParameterCount[Pos] * sizeof(cmsFloat64Number); + memmove(Seg0.Params, Params, size); + + return cmsBuildSegmentedToneCurve(ContextID, 1, &Seg0); +} + + + +// Build a gamma table based on gamma constant +cmsToneCurve* CMSEXPORT cmsBuildGamma(cmsContext ContextID, cmsFloat64Number Gamma) +{ + return cmsBuildParametricToneCurve(ContextID, 1, &Gamma); +} + + +// Free all memory taken by the gamma curve +void CMSEXPORT cmsFreeToneCurve(cmsToneCurve* Curve) +{ + cmsContext ContextID; + + if (Curve == NULL) return; + + ContextID = Curve ->InterpParams->ContextID; + + _cmsFreeInterpParams(Curve ->InterpParams); + + if (Curve -> Table16) + _cmsFree(ContextID, Curve ->Table16); + + if (Curve ->Segments) { + + cmsUInt32Number i; + + for (i=0; i < Curve ->nSegments; i++) { + + if (Curve ->Segments[i].SampledPoints) { + _cmsFree(ContextID, Curve ->Segments[i].SampledPoints); + } + + if (Curve ->SegInterp[i] != 0) + _cmsFreeInterpParams(Curve->SegInterp[i]); + } + + _cmsFree(ContextID, Curve ->Segments); + _cmsFree(ContextID, Curve ->SegInterp); + } + + if (Curve -> Evals) + _cmsFree(ContextID, Curve -> Evals); + + if (Curve) _cmsFree(ContextID, Curve); +} + +// Utility function, free 3 gamma tables +void CMSEXPORT cmsFreeToneCurveTriple(cmsToneCurve* Curve[3]) +{ + + _cmsAssert(Curve != NULL); + + if (Curve[0] != NULL) cmsFreeToneCurve(Curve[0]); + if (Curve[1] != NULL) cmsFreeToneCurve(Curve[1]); + if (Curve[2] != NULL) cmsFreeToneCurve(Curve[2]); + + Curve[0] = Curve[1] = Curve[2] = NULL; +} + + +// Duplicate a gamma table +cmsToneCurve* CMSEXPORT cmsDupToneCurve(const cmsToneCurve* In) +{ + if (In == NULL) return NULL; + + return AllocateToneCurveStruct(In ->InterpParams ->ContextID, In ->nEntries, In ->nSegments, In ->Segments, In ->Table16); +} + +// Joins two curves for X and Y. Curves should be monotonic. +// We want to get +// +// y = Y^-1(X(t)) +// +cmsToneCurve* CMSEXPORT cmsJoinToneCurve(cmsContext ContextID, + const cmsToneCurve* X, + const cmsToneCurve* Y, cmsUInt32Number nResultingPoints) +{ + cmsToneCurve* out = NULL; + cmsToneCurve* Yreversed = NULL; + cmsFloat32Number t, x; + cmsFloat32Number* Res = NULL; + cmsUInt32Number i; + + + _cmsAssert(X != NULL); + _cmsAssert(Y != NULL); + + Yreversed = cmsReverseToneCurveEx(nResultingPoints, Y); + if (Yreversed == NULL) goto Error; + + Res = (cmsFloat32Number*) _cmsCalloc(ContextID, nResultingPoints, sizeof(cmsFloat32Number)); + if (Res == NULL) goto Error; + + //Iterate + for (i=0; i < nResultingPoints; i++) { + + t = (cmsFloat32Number) i / (nResultingPoints-1); + x = cmsEvalToneCurveFloat(X, t); + Res[i] = cmsEvalToneCurveFloat(Yreversed, x); + } + + // Allocate space for output + out = cmsBuildTabulatedToneCurveFloat(ContextID, nResultingPoints, Res); + +Error: + + if (Res != NULL) _cmsFree(ContextID, Res); + if (Yreversed != NULL) cmsFreeToneCurve(Yreversed); + + return out; +} + + + +// Get the surrounding nodes. This is tricky on non-monotonic tables +static +int GetInterval(cmsFloat64Number In, const cmsUInt16Number LutTable[], const struct _cms_interp_struc* p) +{ + int i; + int y0, y1; + + // A 1 point table is not allowed + if (p -> Domain[0] < 1) return -1; + + // Let's see if ascending or descending. + if (LutTable[0] < LutTable[p ->Domain[0]]) { + + // Table is overall ascending + for (i=p->Domain[0]-1; i >=0; --i) { + + y0 = LutTable[i]; + y1 = LutTable[i+1]; + + if (y0 <= y1) { // Increasing + if (In >= y0 && In <= y1) return i; + } + else + if (y1 < y0) { // Decreasing + if (In >= y1 && In <= y0) return i; + } + } + } + else { + // Table is overall descending + for (i=0; i < (int) p -> Domain[0]; i++) { + + y0 = LutTable[i]; + y1 = LutTable[i+1]; + + if (y0 <= y1) { // Increasing + if (In >= y0 && In <= y1) return i; + } + else + if (y1 < y0) { // Decreasing + if (In >= y1 && In <= y0) return i; + } + } + } + + return -1; +} + +// Reverse a gamma table +cmsToneCurve* CMSEXPORT cmsReverseToneCurveEx(cmsInt32Number nResultSamples, const cmsToneCurve* InCurve) +{ + cmsToneCurve *out; + cmsFloat64Number a = 0, b = 0, y, x1, y1, x2, y2; + int i, j; + int Ascending; + + _cmsAssert(InCurve != NULL); + + // Try to reverse it analytically whatever possible + if (InCurve ->nSegments == 1 && InCurve ->Segments[0].Type > 0 && InCurve -> Segments[0].Type <= 5) { + + return cmsBuildParametricToneCurve(InCurve ->InterpParams->ContextID, + -(InCurve -> Segments[0].Type), + InCurve -> Segments[0].Params); + } + + // Nope, reverse the table. + out = cmsBuildTabulatedToneCurve16(InCurve ->InterpParams->ContextID, nResultSamples, NULL); + if (out == NULL) + return NULL; + + // We want to know if this is an ascending or descending table + Ascending = !cmsIsToneCurveDescending(InCurve); + + // Iterate across Y axis + for (i=0; i < nResultSamples; i++) { + + y = (cmsFloat64Number) i * 65535.0 / (nResultSamples - 1); + + // Find interval in which y is within. + j = GetInterval(y, InCurve->Table16, InCurve->InterpParams); + if (j >= 0) { + + + // Get limits of interval + x1 = InCurve ->Table16[j]; + x2 = InCurve ->Table16[j+1]; + + y1 = (cmsFloat64Number) (j * 65535.0) / (InCurve ->nEntries - 1); + y2 = (cmsFloat64Number) ((j+1) * 65535.0 ) / (InCurve ->nEntries - 1); + + // If collapsed, then use any + if (x1 == x2) { + + out ->Table16[i] = _cmsQuickSaturateWord(Ascending ? y2 : y1); + continue; + + } else { + + // Interpolate + a = (y2 - y1) / (x2 - x1); + b = y2 - a * x2; + } + } + + out ->Table16[i] = _cmsQuickSaturateWord(a* y + b); + } + + + return out; +} + +// Reverse a gamma table +cmsToneCurve* CMSEXPORT cmsReverseToneCurve(const cmsToneCurve* InGamma) +{ + _cmsAssert(InGamma != NULL); + + return cmsReverseToneCurveEx(4096, InGamma); +} + +// From: Eilers, P.H.C. (1994) Smoothing and interpolation with finite +// differences. in: Graphic Gems IV, Heckbert, P.S. (ed.), Academic press. +// +// Smoothing and interpolation with second differences. +// +// Input: weights (w), data (y): vector from 1 to m. +// Input: smoothing parameter (lambda), length (m). +// Output: smoothed vector (z): vector from 1 to m. + +static +cmsBool smooth2(cmsContext ContextID, cmsFloat32Number w[], cmsFloat32Number y[], cmsFloat32Number z[], cmsFloat32Number lambda, int m) +{ + int i, i1, i2; + cmsFloat32Number *c, *d, *e; + cmsBool st; + + + c = (cmsFloat32Number*) _cmsCalloc(ContextID, MAX_NODES_IN_CURVE, sizeof(cmsFloat32Number)); + d = (cmsFloat32Number*) _cmsCalloc(ContextID, MAX_NODES_IN_CURVE, sizeof(cmsFloat32Number)); + e = (cmsFloat32Number*) _cmsCalloc(ContextID, MAX_NODES_IN_CURVE, sizeof(cmsFloat32Number)); + + if (c != NULL && d != NULL && e != NULL) { + + + d[1] = w[1] + lambda; + c[1] = -2 * lambda / d[1]; + e[1] = lambda /d[1]; + z[1] = w[1] * y[1]; + d[2] = w[2] + 5 * lambda - d[1] * c[1] * c[1]; + c[2] = (-4 * lambda - d[1] * c[1] * e[1]) / d[2]; + e[2] = lambda / d[2]; + z[2] = w[2] * y[2] - c[1] * z[1]; + + for (i = 3; i < m - 1; i++) { + i1 = i - 1; i2 = i - 2; + d[i]= w[i] + 6 * lambda - c[i1] * c[i1] * d[i1] - e[i2] * e[i2] * d[i2]; + c[i] = (-4 * lambda -d[i1] * c[i1] * e[i1])/ d[i]; + e[i] = lambda / d[i]; + z[i] = w[i] * y[i] - c[i1] * z[i1] - e[i2] * z[i2]; + } + + i1 = m - 2; i2 = m - 3; + + d[m - 1] = w[m - 1] + 5 * lambda -c[i1] * c[i1] * d[i1] - e[i2] * e[i2] * d[i2]; + c[m - 1] = (-2 * lambda - d[i1] * c[i1] * e[i1]) / d[m - 1]; + z[m - 1] = w[m - 1] * y[m - 1] - c[i1] * z[i1] - e[i2] * z[i2]; + i1 = m - 1; i2 = m - 2; + + d[m] = w[m] + lambda - c[i1] * c[i1] * d[i1] - e[i2] * e[i2] * d[i2]; + z[m] = (w[m] * y[m] - c[i1] * z[i1] - e[i2] * z[i2]) / d[m]; + z[m - 1] = z[m - 1] / d[m - 1] - c[m - 1] * z[m]; + + for (i = m - 2; 1<= i; i--) + z[i] = z[i] / d[i] - c[i] * z[i + 1] - e[i] * z[i + 2]; + + st = TRUE; + } + else st = FALSE; + + if (c != NULL) _cmsFree(ContextID, c); + if (d != NULL) _cmsFree(ContextID, d); + if (e != NULL) _cmsFree(ContextID, e); + + return st; +} + +// Smooths a curve sampled at regular intervals. +cmsBool CMSEXPORT cmsSmoothToneCurve(cmsToneCurve* Tab, cmsFloat64Number lambda) +{ + cmsFloat32Number w[MAX_NODES_IN_CURVE], y[MAX_NODES_IN_CURVE], z[MAX_NODES_IN_CURVE]; + int i, nItems, Zeros, Poles; + + if (Tab == NULL) return FALSE; + + if (cmsIsToneCurveLinear(Tab)) return FALSE; // Nothing to do + + nItems = Tab -> nEntries; + + if (nItems >= MAX_NODES_IN_CURVE) { + cmsSignalError(Tab ->InterpParams->ContextID, cmsERROR_RANGE, "cmsSmoothToneCurve: too many points."); + return FALSE; + } + + memset(w, 0, nItems * sizeof(cmsFloat32Number)); + memset(y, 0, nItems * sizeof(cmsFloat32Number)); + memset(z, 0, nItems * sizeof(cmsFloat32Number)); + + for (i=0; i < nItems; i++) + { + y[i+1] = (cmsFloat32Number) Tab -> Table16[i]; + w[i+1] = 1.0; + } + + if (!smooth2(Tab ->InterpParams->ContextID, w, y, z, (cmsFloat32Number) lambda, nItems)) return FALSE; + + // Do some reality - checking... + Zeros = Poles = 0; + for (i=nItems; i > 1; --i) { + + if (z[i] == 0.) Zeros++; + if (z[i] >= 65535.) Poles++; + if (z[i] < z[i-1]) return FALSE; // Non-Monotonic + } + + if (Zeros > (nItems / 3)) return FALSE; // Degenerated, mostly zeros + if (Poles > (nItems / 3)) return FALSE; // Degenerated, mostly poles + + // Seems ok + for (i=0; i < nItems; i++) { + + // Clamp to cmsUInt16Number + Tab -> Table16[i] = _cmsQuickSaturateWord(z[i+1]); + } + + return TRUE; +} + +// Is a table linear? Do not use parametric since we cannot guarantee some weird parameters resulting +// in a linear table. This way assures it is linear in 12 bits, which should be enought in most cases. +cmsBool CMSEXPORT cmsIsToneCurveLinear(const cmsToneCurve* Curve) +{ + cmsUInt32Number i; + int diff; + + _cmsAssert(Curve != NULL); + + for (i=0; i < Curve ->nEntries; i++) { + + diff = abs((int) Curve->Table16[i] - (int) _cmsQuantizeVal(i, Curve ->nEntries)); + if (diff > 0x0f) + return FALSE; + } + + return TRUE; +} + +// Same, but for monotonicity +cmsBool CMSEXPORT cmsIsToneCurveMonotonic(const cmsToneCurve* t) +{ + int n; + int i, last; + cmsBool lDescending; + + _cmsAssert(t != NULL); + + // Degenerated curves are monotonic? Ok, let's pass them + n = t ->nEntries; + if (n < 2) return TRUE; + + // Curve direction + lDescending = cmsIsToneCurveDescending(t); + + if (lDescending) { + + last = t ->Table16[0]; + + for (i = 1; i < n; i++) { + + if (t ->Table16[i] - last > 2) // We allow some ripple + return FALSE; + else + last = t ->Table16[i]; + + } + } + else { + + last = t ->Table16[n-1]; + + for (i = n-2; i >= 0; --i) { + + if (t ->Table16[i] - last > 2) + return FALSE; + else + last = t ->Table16[i]; + + } + } + + return TRUE; +} + +// Same, but for descending tables +cmsBool CMSEXPORT cmsIsToneCurveDescending(const cmsToneCurve* t) +{ + _cmsAssert(t != NULL); + + return t ->Table16[0] > t ->Table16[t ->nEntries-1]; +} + + +// Another info fn: is out gamma table multisegment? +cmsBool CMSEXPORT cmsIsToneCurveMultisegment(const cmsToneCurve* t) +{ + _cmsAssert(t != NULL); + + return t -> nSegments > 1; +} + +cmsInt32Number CMSEXPORT cmsGetToneCurveParametricType(const cmsToneCurve* t) +{ + _cmsAssert(t != NULL); + + if (t -> nSegments != 1) return 0; + return t ->Segments[0].Type; +} + +// We need accuracy this time +cmsFloat32Number CMSEXPORT cmsEvalToneCurveFloat(const cmsToneCurve* Curve, cmsFloat32Number v) +{ + _cmsAssert(Curve != NULL); + + // Check for 16 bits table. If so, this is a limited-precision tone curve + if (Curve ->nSegments == 0) { + + cmsUInt16Number In, Out; + + In = (cmsUInt16Number) _cmsQuickSaturateWord(v * 65535.0); + Out = cmsEvalToneCurve16(Curve, In); + + return (cmsFloat32Number) (Out / 65535.0); + } + + return (cmsFloat32Number) EvalSegmentedFn(Curve, v); +} + +// We need xput over here +cmsUInt16Number CMSEXPORT cmsEvalToneCurve16(const cmsToneCurve* Curve, cmsUInt16Number v) +{ + cmsUInt16Number out; + + _cmsAssert(Curve != NULL); + + Curve ->InterpParams ->Interpolation.Lerp16(&v, &out, Curve ->InterpParams); + return out; +} + + +// Least squares fitting. +// A mathematical procedure for finding the best-fitting curve to a given set of points by +// minimizing the sum of the squares of the offsets ("the residuals") of the points from the curve. +// The sum of the squares of the offsets is used instead of the offset absolute values because +// this allows the residuals to be treated as a continuous differentiable quantity. +// +// y = f(x) = x ^ g +// +// R = (yi - (xi^g)) +// R2 = (yi - (xi^g))2 +// SUM R2 = SUM (yi - (xi^g))2 +// +// dR2/dg = -2 SUM x^g log(x)(y - x^g) +// solving for dR2/dg = 0 +// +// g = 1/n * SUM(log(y) / log(x)) + +cmsFloat64Number CMSEXPORT cmsEstimateGamma(const cmsToneCurve* t, cmsFloat64Number Precision) +{ + cmsFloat64Number gamma, sum, sum2; + cmsFloat64Number n, x, y, Std; + cmsUInt32Number i; + + _cmsAssert(t != NULL); + + sum = sum2 = n = 0; + + // Excluding endpoints + for (i=1; i < (MAX_NODES_IN_CURVE-1); i++) { + + x = (cmsFloat64Number) i / (MAX_NODES_IN_CURVE-1); + y = (cmsFloat64Number) cmsEvalToneCurveFloat(t, (cmsFloat32Number) x); + + // Avoid 7% on lower part to prevent + // artifacts due to linear ramps + + if (y > 0. && y < 1. && x > 0.07) { + + gamma = log(y) / log(x); + sum += gamma; + sum2 += gamma * gamma; + n++; + } + } + + // Take a look on SD to see if gamma isn't exponential at all + Std = sqrt((n * sum2 - sum * sum) / (n*(n-1))); + + if (Std > Precision) + return -1.0; + + return (sum / n); // The mean +} diff --git a/src/cmsgmt.c b/src/cmsgmt.c new file mode 100644 index 0000000..9fec390 --- /dev/null +++ b/src/cmsgmt.c @@ -0,0 +1,590 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + + +// Auxiliar: append a Lab identity after the given sequence of profiles +// and return the transform. Lab profile is closed, rest of profiles are kept open. +cmsHTRANSFORM _cmsChain2Lab(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat, + const cmsUInt32Number Intents[], + const cmsHPROFILE hProfiles[], + const cmsBool BPC[], + const cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags) +{ + cmsHTRANSFORM xform; + cmsHPROFILE hLab; + cmsHPROFILE ProfileList[256]; + cmsBool BPCList[256]; + cmsFloat64Number AdaptationList[256]; + cmsUInt32Number IntentList[256]; + cmsUInt32Number i; + + // This is a rather big number and there is no need of dynamic memory + // since we are adding a profile, 254 + 1 = 255 and this is the limit + if (nProfiles > 254) return NULL; + + // The output space + hLab = cmsCreateLab4ProfileTHR(ContextID, NULL); + if (hLab == NULL) return NULL; + + // Create a copy of parameters + for (i=0; i < nProfiles; i++) { + + ProfileList[i] = hProfiles[i]; + BPCList[i] = BPC[i]; + AdaptationList[i] = AdaptationStates[i]; + IntentList[i] = Intents[i]; + } + + // Place Lab identity at chain's end. + ProfileList[nProfiles] = hLab; + BPCList[nProfiles] = 0; + AdaptationList[nProfiles] = 1.0; + IntentList[nProfiles] = INTENT_RELATIVE_COLORIMETRIC; + + // Create the transform + xform = cmsCreateExtendedTransform(ContextID, nProfiles + 1, ProfileList, + BPCList, + IntentList, + AdaptationList, + NULL, 0, + InputFormat, + OutputFormat, + dwFlags); + + cmsCloseProfile(hLab); + + return xform; +} + + +// Compute K -> L* relationship. Flags may include black point compensation. In this case, +// the relationship is assumed from the profile with BPC to a black point zero. +static +cmsToneCurve* ComputeKToLstar(cmsContext ContextID, + cmsUInt32Number nPoints, + cmsUInt32Number nProfiles, + const cmsUInt32Number Intents[], + const cmsHPROFILE hProfiles[], + const cmsBool BPC[], + const cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags) +{ + cmsToneCurve* out = NULL; + cmsUInt32Number i; + cmsHTRANSFORM xform; + cmsCIELab Lab; + cmsFloat32Number cmyk[4]; + cmsFloat32Number* SampledPoints; + + xform = _cmsChain2Lab(ContextID, nProfiles, TYPE_CMYK_FLT, TYPE_Lab_DBL, Intents, hProfiles, BPC, AdaptationStates, dwFlags); + if (xform == NULL) return NULL; + + SampledPoints = (cmsFloat32Number*) _cmsCalloc(ContextID, nPoints, sizeof(cmsFloat32Number)); + if (SampledPoints == NULL) goto Error; + + for (i=0; i < nPoints; i++) { + + cmyk[0] = 0; + cmyk[1] = 0; + cmyk[2] = 0; + cmyk[3] = (cmsFloat32Number) ((i * 100.0) / (nPoints-1)); + + cmsDoTransform(xform, cmyk, &Lab, 1); + SampledPoints[i]= (cmsFloat32Number) (1.0 - Lab.L / 100.0); // Negate K for easier operation + } + + out = cmsBuildTabulatedToneCurveFloat(ContextID, nPoints, SampledPoints); + +Error: + + cmsDeleteTransform(xform); + if (SampledPoints) _cmsFree(ContextID, SampledPoints); + + return out; +} + + +// Compute Black tone curve on a CMYK -> CMYK transform. This is done by +// using the proof direction on both profiles to find K->L* relationship +// then joining both curves. dwFlags may include black point compensation. +cmsToneCurve* _cmsBuildKToneCurve(cmsContext ContextID, + cmsUInt32Number nPoints, + cmsUInt32Number nProfiles, + const cmsUInt32Number Intents[], + const cmsHPROFILE hProfiles[], + const cmsBool BPC[], + const cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags) +{ + cmsToneCurve *in, *out, *KTone; + + // Make sure CMYK -> CMYK + if (cmsGetColorSpace(hProfiles[0]) != cmsSigCmykData || + cmsGetColorSpace(hProfiles[nProfiles-1])!= cmsSigCmykData) return NULL; + + + // Make sure last is an output profile + if (cmsGetDeviceClass(hProfiles[nProfiles - 1]) != cmsSigOutputClass) return NULL; + + // Create individual curves. BPC works also as each K to L* is + // computed as a BPC to zero black point in case of L* + in = ComputeKToLstar(ContextID, nPoints, nProfiles - 1, Intents, hProfiles, BPC, AdaptationStates, dwFlags); + if (in == NULL) return NULL; + + out = ComputeKToLstar(ContextID, nPoints, 1, + Intents + (nProfiles - 1), + hProfiles + (nProfiles - 1), + BPC + (nProfiles - 1), + AdaptationStates + (nProfiles - 1), + dwFlags); + if (out == NULL) { + cmsFreeToneCurve(in); + return NULL; + } + + // Build the relationship. This effectively limits the maximum accuracy to 16 bits, but + // since this is used on black-preserving LUTs, we are not loosing accuracy in any case + KTone = cmsJoinToneCurve(ContextID, in, out, nPoints); + + // Get rid of components + cmsFreeToneCurve(in); cmsFreeToneCurve(out); + + // Something went wrong... + if (KTone == NULL) return NULL; + + // Make sure it is monotonic + if (!cmsIsToneCurveMonotonic(KTone)) { + cmsFreeToneCurve(KTone); + return NULL; + } + + return KTone; +} + + +// Gamut LUT Creation ----------------------------------------------------------------------------------------- + +// Used by gamut & softproofing + +typedef struct { + + cmsHTRANSFORM hInput; // From whatever input color space. 16 bits to DBL + cmsHTRANSFORM hForward, hReverse; // Transforms going from Lab to colorant and back + cmsFloat64Number Thereshold; // The thereshold after which is considered out of gamut + + } GAMUTCHAIN; + +// This sampler does compute gamut boundaries by comparing original +// values with a transform going back and forth. Values above ERR_THERESHOLD +// of maximum are considered out of gamut. + +#define ERR_THERESHOLD 5 + + +static +int GamutSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +{ + GAMUTCHAIN* t = (GAMUTCHAIN* ) Cargo; + cmsCIELab LabIn1, LabOut1; + cmsCIELab LabIn2, LabOut2; + cmsUInt16Number Proof[cmsMAXCHANNELS], Proof2[cmsMAXCHANNELS]; + cmsFloat64Number dE1, dE2, ErrorRatio; + + // Assume in-gamut by default. + dE1 = 0.; + dE2 = 0; + ErrorRatio = 1.0; + + // Convert input to Lab + if (t -> hInput != NULL) + cmsDoTransform(t -> hInput, In, &LabIn1, 1); + + // converts from PCS to colorant. This always + // does return in-gamut values, + cmsDoTransform(t -> hForward, &LabIn1, Proof, 1); + + // Now, do the inverse, from colorant to PCS. + cmsDoTransform(t -> hReverse, Proof, &LabOut1, 1); + + memmove(&LabIn2, &LabOut1, sizeof(cmsCIELab)); + + // Try again, but this time taking Check as input + cmsDoTransform(t -> hForward, &LabOut1, Proof2, 1); + cmsDoTransform(t -> hReverse, Proof2, &LabOut2, 1); + + // Take difference of direct value + dE1 = cmsDeltaE(&LabIn1, &LabOut1); + + // Take difference of converted value + dE2 = cmsDeltaE(&LabIn2, &LabOut2); + + + // if dE1 is small and dE2 is small, value is likely to be in gamut + if (dE1 < t->Thereshold && dE2 < t->Thereshold) + Out[0] = 0; + else { + + // if dE1 is small and dE2 is big, undefined. Assume in gamut + if (dE1 < t->Thereshold && dE2 > t->Thereshold) + Out[0] = 0; + else + // dE1 is big and dE2 is small, clearly out of gamut + if (dE1 > t->Thereshold && dE2 < t->Thereshold) + Out[0] = (cmsUInt16Number) _cmsQuickFloor((dE1 - t->Thereshold) + .5); + else { + + // dE1 is big and dE2 is also big, could be due to perceptual mapping + // so take error ratio + if (dE2 == 0.0) + ErrorRatio = dE1; + else + ErrorRatio = dE1 / dE2; + + if (ErrorRatio > t->Thereshold) + Out[0] = (cmsUInt16Number) _cmsQuickFloor((ErrorRatio - t->Thereshold) + .5); + else + Out[0] = 0; + } + } + + + return TRUE; +} + +// Does compute a gamut LUT going back and forth across pcs -> relativ. colorimetric intent -> pcs +// the dE obtained is then annotated on the LUT. Values truely out of gamut are clipped to dE = 0xFFFE +// and values changed are supposed to be handled by any gamut remapping, so, are out of gamut as well. +// +// **WARNING: This algorithm does assume that gamut remapping algorithms does NOT move in-gamut colors, +// of course, many perceptual and saturation intents does not work in such way, but relativ. ones should. + +cmsPipeline* _cmsCreateGamutCheckPipeline(cmsContext ContextID, + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsUInt32Number Intents[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number nGamutPCSposition, + cmsHPROFILE hGamut) +{ + cmsHPROFILE hLab; + cmsPipeline* Gamut; + cmsStage* CLUT; + cmsUInt32Number dwFormat; + GAMUTCHAIN Chain; + int nChannels, nGridpoints; + cmsColorSpaceSignature ColorSpace; + cmsUInt32Number i; + cmsHPROFILE ProfileList[256]; + cmsBool BPCList[256]; + cmsFloat64Number AdaptationList[256]; + cmsUInt32Number IntentList[256]; + + memset(&Chain, 0, sizeof(GAMUTCHAIN)); + + + if (nGamutPCSposition <= 0 || nGamutPCSposition > 255) { + cmsSignalError(ContextID, cmsERROR_RANGE, "Wrong position of PCS. 1..255 expected, %d found.", nGamutPCSposition); + return NULL; + } + + hLab = cmsCreateLab4ProfileTHR(ContextID, NULL); + if (hLab == NULL) return NULL; + + + // The figure of merit. On matrix-shaper profiles, should be almost zero as + // the conversion is pretty exact. On LUT based profiles, different resolutions + // of input and output CLUT may result in differences. + + if (cmsIsMatrixShaper(hGamut)) { + + Chain.Thereshold = 1.0; + } + else { + Chain.Thereshold = ERR_THERESHOLD; + } + + + // Create a copy of parameters + for (i=0; i < nGamutPCSposition; i++) { + ProfileList[i] = hProfiles[i]; + BPCList[i] = BPC[i]; + AdaptationList[i] = AdaptationStates[i]; + IntentList[i] = Intents[i]; + } + + // Fill Lab identity + ProfileList[nGamutPCSposition] = hLab; + BPCList[nGamutPCSposition] = 0; + AdaptationList[nGamutPCSposition] = 1.0; + Intents[nGamutPCSposition] = INTENT_RELATIVE_COLORIMETRIC; + + + ColorSpace = cmsGetColorSpace(hGamut); + + nChannels = cmsChannelsOf(ColorSpace); + nGridpoints = _cmsReasonableGridpointsByColorspace(ColorSpace, cmsFLAGS_HIGHRESPRECALC); + dwFormat = (CHANNELS_SH(nChannels)|BYTES_SH(2)); + + // 16 bits to Lab double + Chain.hInput = cmsCreateExtendedTransform(ContextID, + nGamutPCSposition + 1, + ProfileList, + BPCList, + Intents, + AdaptationList, + NULL, 0, + dwFormat, TYPE_Lab_DBL, + cmsFLAGS_NOCACHE); + + + // Does create the forward step. Lab double to device + dwFormat = (CHANNELS_SH(nChannels)|BYTES_SH(2)); + Chain.hForward = cmsCreateTransformTHR(ContextID, + hLab, TYPE_Lab_DBL, + hGamut, dwFormat, + INTENT_RELATIVE_COLORIMETRIC, + cmsFLAGS_NOCACHE); + + // Does create the backwards step + Chain.hReverse = cmsCreateTransformTHR(ContextID, hGamut, dwFormat, + hLab, TYPE_Lab_DBL, + INTENT_RELATIVE_COLORIMETRIC, + cmsFLAGS_NOCACHE); + + + // All ok? + if (Chain.hForward && Chain.hReverse) { + + // Go on, try to compute gamut LUT from PCS. This consist on a single channel containing + // dE when doing a transform back and forth on the colorimetric intent. + + Gamut = cmsPipelineAlloc(ContextID, 3, 1); + + if (Gamut != NULL) { + + CLUT = cmsStageAllocCLut16bit(ContextID, nGridpoints, nChannels, 1, NULL); + cmsPipelineInsertStage(Gamut, cmsAT_BEGIN, CLUT); + + cmsStageSampleCLut16bit(CLUT, GamutSampler, (void*) &Chain, 0); + } + } + else + Gamut = NULL; // Didn't work... + + // Free all needed stuff. + if (Chain.hInput) cmsDeleteTransform(Chain.hInput); + if (Chain.hForward) cmsDeleteTransform(Chain.hForward); + if (Chain.hReverse) cmsDeleteTransform(Chain.hReverse); + if (hLab) cmsCloseProfile(hLab); + + // And return computed hull + return Gamut; +} + +// Total Area Coverage estimation ---------------------------------------------------------------- + +typedef struct { + cmsUInt32Number nOutputChans; + cmsHTRANSFORM hRoundTrip; + cmsFloat32Number MaxTAC; + cmsFloat32Number MaxInput[cmsMAXCHANNELS]; + +} cmsTACestimator; + + +// This callback just accounts the maximum ink dropped in the given node. It does not populate any +// memory, as the destination table is NULL. Its only purpose it to know the global maximum. +static +int EstimateTAC(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo) +{ + cmsTACestimator* bp = (cmsTACestimator*) Cargo; + cmsFloat32Number RoundTrip[cmsMAXCHANNELS]; + cmsUInt32Number i; + cmsFloat32Number Sum; + + + // Evaluate the xform + cmsDoTransform(bp->hRoundTrip, In, RoundTrip, 1); + + // All all amounts of ink + for (Sum=0, i=0; i < bp ->nOutputChans; i++) + Sum += RoundTrip[i]; + + // If above maximum, keep track of input values + if (Sum > bp ->MaxTAC) { + + bp ->MaxTAC = Sum; + + for (i=0; i < bp ->nOutputChans; i++) { + bp ->MaxInput[i] = In[i]; + } + } + + return TRUE; + + cmsUNUSED_PARAMETER(Out); +} + + +// Detect Total area coverage of the profile +cmsFloat64Number CMSEXPORT cmsDetectTAC(cmsHPROFILE hProfile) +{ + cmsTACestimator bp; + cmsUInt32Number dwFormatter; + cmsUInt32Number GridPoints[MAX_INPUT_DIMENSIONS]; + cmsHPROFILE hLab; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + + // TAC only works on output profiles + if (cmsGetDeviceClass(hProfile) != cmsSigOutputClass) { + return 0; + } + + // Create a fake formatter for result + dwFormatter = cmsFormatterForColorspaceOfProfile(hProfile, 4, TRUE); + + bp.nOutputChans = T_CHANNELS(dwFormatter); + bp.MaxTAC = 0; // Initial TAC is 0 + + // for safety + if (bp.nOutputChans >= cmsMAXCHANNELS) return 0; + + hLab = cmsCreateLab4ProfileTHR(ContextID, NULL); + if (hLab == NULL) return 0; + // Setup a roundtrip on perceptual intent in output profile for TAC estimation + bp.hRoundTrip = cmsCreateTransformTHR(ContextID, hLab, TYPE_Lab_16, + hProfile, dwFormatter, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE); + + cmsCloseProfile(hLab); + if (bp.hRoundTrip == NULL) return 0; + + // For L* we only need black and white. For C* we need many points + GridPoints[0] = 6; + GridPoints[1] = 74; + GridPoints[2] = 74; + + + if (!cmsSliceSpace16(3, GridPoints, EstimateTAC, &bp)) { + bp.MaxTAC = 0; + } + + cmsDeleteTransform(bp.hRoundTrip); + + // Results in % + return bp.MaxTAC; +} + + +// Carefully, clamp on CIELab space. + +cmsBool CMSEXPORT cmsDesaturateLab(cmsCIELab* Lab, + double amax, double amin, + double bmax, double bmin) +{ + + // Whole Luma surface to zero + + if (Lab -> L < 0) { + + Lab-> L = Lab->a = Lab-> b = 0.0; + return FALSE; + } + + // Clamp white, DISCARD HIGHLIGHTS. This is done + // in such way because icc spec doesn't allow the + // use of L>100 as a highlight means. + + if (Lab->L > 100) + Lab -> L = 100; + + // Check out gamut prism, on a, b faces + + if (Lab -> a < amin || Lab->a > amax|| + Lab -> b < bmin || Lab->b > bmax) { + + cmsCIELCh LCh; + double h, slope; + + // Falls outside a, b limits. Transports to LCh space, + // and then do the clipping + + + if (Lab -> a == 0.0) { // Is hue exactly 90? + + // atan will not work, so clamp here + Lab -> b = Lab->b < 0 ? bmin : bmax; + return TRUE; + } + + cmsLab2LCh(&LCh, Lab); + + slope = Lab -> b / Lab -> a; + h = LCh.h; + + // There are 4 zones + + if ((h >= 0. && h < 45.) || + (h >= 315 && h <= 360.)) { + + // clip by amax + Lab -> a = amax; + Lab -> b = amax * slope; + } + else + if (h >= 45. && h < 135.) + { + // clip by bmax + Lab -> b = bmax; + Lab -> a = bmax / slope; + } + else + if (h >= 135. && h < 225.) { + // clip by amin + Lab -> a = amin; + Lab -> b = amin * slope; + + } + else + if (h >= 225. && h < 315.) { + // clip by bmin + Lab -> b = bmin; + Lab -> a = bmin / slope; + } + else { + cmsSignalError(0, cmsERROR_RANGE, "Invalid angle"); + return FALSE; + } + + } + + return TRUE; +} diff --git a/src/cmsintrp.c b/src/cmsintrp.c new file mode 100644 index 0000000..5b9a09a --- /dev/null +++ b/src/cmsintrp.c @@ -0,0 +1,1463 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + +// This module incorporates several interpolation routines, for 1 to 8 channels on input and +// up to 65535 channels on output. The user may change those by using the interpolation plug-in + +// Interpolation routines by default +static cmsInterpFunction DefaultInterpolatorsFactory(cmsUInt32Number nInputChannels, cmsUInt32Number nOutputChannels, cmsUInt32Number dwFlags); + +// This is the default factory +static cmsInterpFnFactory Interpolators = DefaultInterpolatorsFactory; + + +// Main plug-in entry +cmsBool _cmsRegisterInterpPlugin(cmsPluginBase* Data) +{ + cmsPluginInterpolation* Plugin = (cmsPluginInterpolation*) Data; + + if (Data == NULL) { + + Interpolators = DefaultInterpolatorsFactory; + return TRUE; + } + + // Set replacement functions + Interpolators = Plugin ->InterpolatorsFactory; + return TRUE; +} + + +// Set the interpolation method + +cmsBool _cmsSetInterpolationRoutine(cmsInterpParams* p) +{ + // Invoke factory, possibly in the Plug-in + p ->Interpolation = Interpolators(p -> nInputs, p ->nOutputs, p ->dwFlags); + + // If unsupported by the plug-in, go for the LittleCMS default. + // If happens only if an extern plug-in is being used + if (p ->Interpolation.Lerp16 == NULL) + p ->Interpolation = DefaultInterpolatorsFactory(p ->nInputs, p ->nOutputs, p ->dwFlags); + + // Check for valid interpolator (we just check one member of the union) + if (p ->Interpolation.Lerp16 == NULL) { + return FALSE; + } + return TRUE; +} + + +// This function precalculates as many parameters as possible to speed up the interpolation. +cmsInterpParams* _cmsComputeInterpParamsEx(cmsContext ContextID, + const cmsUInt32Number nSamples[], + int InputChan, int OutputChan, + const void *Table, + cmsUInt32Number dwFlags) +{ + cmsInterpParams* p; + int i; + + // Check for maximum inputs + if (InputChan > MAX_INPUT_DIMENSIONS) { + cmsSignalError(ContextID, cmsERROR_RANGE, "Too many input channels (%d channels, max=%d)", InputChan, MAX_INPUT_DIMENSIONS); + return NULL; + } + + // Creates an empty object + p = (cmsInterpParams*) _cmsMallocZero(ContextID, sizeof(cmsInterpParams)); + if (p == NULL) return NULL; + + // Keep original parameters + p -> dwFlags = dwFlags; + p -> nInputs = InputChan; + p -> nOutputs = OutputChan; + p ->Table = Table; + p ->ContextID = ContextID; + + // Fill samples per input direction and domain (which is number of nodes minus one) + for (i=0; i < InputChan; i++) { + + p -> nSamples[i] = nSamples[i]; + p -> Domain[i] = nSamples[i] - 1; + } + + // Compute factors to apply to each component to index the grid array + p -> opta[0] = p -> nOutputs; + for (i=1; i < InputChan; i++) + p ->opta[i] = p ->opta[i-1] * nSamples[InputChan-i]; + + + if (!_cmsSetInterpolationRoutine(p)) { + cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported interpolation (%d->%d channels)", InputChan, OutputChan); + _cmsFree(ContextID, p); + return NULL; + } + + // All seems ok + return p; +} + + +// This one is a wrapper on the anterior, but assuming all directions have same number of nodes +cmsInterpParams* _cmsComputeInterpParams(cmsContext ContextID, int nSamples, int InputChan, int OutputChan, const void* Table, cmsUInt32Number dwFlags) +{ + int i; + cmsUInt32Number Samples[MAX_INPUT_DIMENSIONS]; + + // Fill the auxiliar array + for (i=0; i < MAX_INPUT_DIMENSIONS; i++) + Samples[i] = nSamples; + + // Call the extended function + return _cmsComputeInterpParamsEx(ContextID, Samples, InputChan, OutputChan, Table, dwFlags); +} + + +// Free all associated memory +void _cmsFreeInterpParams(cmsInterpParams* p) +{ + if (p != NULL) _cmsFree(p ->ContextID, p); +} + + +// Inline fixed point interpolation +cmsINLINE cmsUInt16Number LinearInterp(cmsS15Fixed16Number a, cmsS15Fixed16Number l, cmsS15Fixed16Number h) +{ + cmsUInt32Number dif = (cmsUInt32Number) (h - l) * a + 0x8000; + dif = (dif >> 16) + l; + return (cmsUInt16Number) (dif); +} + + +// Linear interpolation (Fixed-point optimized) +static +void LinLerp1D(register const cmsUInt16Number Value[], + register cmsUInt16Number Output[], + register const cmsInterpParams* p) +{ + cmsUInt16Number y1, y0; + int cell0, rest; + int val3; + const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table; + + // if last value... + if (Value[0] == 0xffff) { + + Output[0] = LutTable[p -> Domain[0]]; + return; + } + + val3 = p -> Domain[0] * Value[0]; + val3 = _cmsToFixedDomain(val3); // To fixed 15.16 + + cell0 = FIXED_TO_INT(val3); // Cell is 16 MSB bits + rest = FIXED_REST_TO_INT(val3); // Rest is 16 LSB bits + + y0 = LutTable[cell0]; + y1 = LutTable[cell0+1]; + + + Output[0] = LinearInterp(rest, y0, y1); +} + + +// Floating-point version of 1D interpolation +static +void LinLerp1Dfloat(const cmsFloat32Number Value[], + cmsFloat32Number Output[], + const cmsInterpParams* p) +{ + cmsFloat32Number y1, y0; + cmsFloat32Number val2, rest; + int cell0, cell1; + const cmsFloat32Number* LutTable = (cmsFloat32Number*) p ->Table; + + // if last value... + if (Value[0] == 1.0) { + Output[0] = LutTable[p -> Domain[0]]; + return; + } + + val2 = p -> Domain[0] * Value[0]; + + cell0 = (int) floor(val2); + cell1 = (int) ceil(val2); + + // Rest is 16 LSB bits + rest = val2 - cell0; + + y0 = LutTable[cell0] ; + y1 = LutTable[cell1] ; + + Output[0] = y0 + (y1 - y0) * rest; +} + + + +// Eval gray LUT having only one input channel +static +void Eval1Input(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const cmsInterpParams* p16) +{ + cmsS15Fixed16Number fk; + cmsS15Fixed16Number k0, k1, rk, K0, K1; + int v; + cmsUInt32Number OutChan; + const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; + + v = Input[0] * p16 -> Domain[0]; + fk = _cmsToFixedDomain(v); + + k0 = FIXED_TO_INT(fk); + rk = (cmsUInt16Number) FIXED_REST_TO_INT(fk); + + k1 = k0 + (Input[0] != 0xFFFFU ? 1 : 0); + + K0 = p16 -> opta[0] * k0; + K1 = p16 -> opta[0] * k1; + + for (OutChan=0; OutChan < p16->nOutputs; OutChan++) { + + Output[OutChan] = LinearInterp(rk, LutTable[K0+OutChan], LutTable[K1+OutChan]); + } +} + + + +// Eval gray LUT having only one input channel +static +void Eval1InputFloat(const cmsFloat32Number Value[], + cmsFloat32Number Output[], + const cmsInterpParams* p) +{ + cmsFloat32Number y1, y0; + cmsFloat32Number val2, rest; + int cell0, cell1; + cmsUInt32Number OutChan; + const cmsFloat32Number* LutTable = (cmsFloat32Number*) p ->Table; + + // if last value... + if (Value[0] == 1.0) { + Output[0] = LutTable[p -> Domain[0]]; + return; + } + + val2 = p -> Domain[0] * Value[0]; + + cell0 = (int) floor(val2); + cell1 = (int) ceil(val2); + + // Rest is 16 LSB bits + rest = val2 - cell0; + + cell0 *= p -> opta[0]; + cell1 *= p -> opta[0]; + + for (OutChan=0; OutChan < p->nOutputs; OutChan++) { + + y0 = LutTable[cell0 + OutChan] ; + y1 = LutTable[cell1 + OutChan] ; + + Output[OutChan] = y0 + (y1 - y0) * rest; + } +} + +// Bilinear interpolation (16 bits) - cmsFloat32Number version +static +void BilinearInterpFloat(const cmsFloat32Number Input[], + cmsFloat32Number Output[], + const cmsInterpParams* p) + +{ +# define LERP(a,l,h) (cmsFloat32Number) ((l)+(((h)-(l))*(a))) +# define DENS(i,j) (LutTable[(i)+(j)+OutChan]) + + const cmsFloat32Number* LutTable = (cmsFloat32Number*) p ->Table; + cmsFloat32Number px, py; + int x0, y0, + X0, Y0, X1, Y1; + int TotalOut, OutChan; + cmsFloat32Number fx, fy, + d00, d01, d10, d11, + dx0, dx1, + dxy; + + TotalOut = p -> nOutputs; + px = Input[0] * p->Domain[0]; + py = Input[1] * p->Domain[1]; + + x0 = (int) _cmsQuickFloor(px); fx = px - (cmsFloat32Number) x0; + y0 = (int) _cmsQuickFloor(py); fy = py - (cmsFloat32Number) y0; + + X0 = p -> opta[1] * x0; + X1 = X0 + (Input[0] >= 1.0 ? 0 : p->opta[1]); + + Y0 = p -> opta[0] * y0; + Y1 = Y0 + (Input[1] >= 1.0 ? 0 : p->opta[0]); + + for (OutChan = 0; OutChan < TotalOut; OutChan++) { + + d00 = DENS(X0, Y0); + d01 = DENS(X0, Y1); + d10 = DENS(X1, Y0); + d11 = DENS(X1, Y1); + + dx0 = LERP(fx, d00, d10); + dx1 = LERP(fx, d01, d11); + + dxy = LERP(fy, dx0, dx1); + + Output[OutChan] = dxy; + } + + +# undef LERP +# undef DENS +} + +// Bilinear interpolation (16 bits) - optimized version +static +void BilinearInterp16(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const cmsInterpParams* p) + +{ +#define DENS(i,j) (LutTable[(i)+(j)+OutChan]) +#define LERP(a,l,h) (cmsUInt16Number) (l + ROUND_FIXED_TO_INT(((h-l)*a))) + + const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table; + int OutChan, TotalOut; + cmsS15Fixed16Number fx, fy; + register int rx, ry; + int x0, y0; + register int X0, X1, Y0, Y1; + int d00, d01, d10, d11, + dx0, dx1, + dxy; + + TotalOut = p -> nOutputs; + + fx = _cmsToFixedDomain((int) Input[0] * p -> Domain[0]); + x0 = FIXED_TO_INT(fx); + rx = FIXED_REST_TO_INT(fx); // Rest in 0..1.0 domain + + + fy = _cmsToFixedDomain((int) Input[1] * p -> Domain[1]); + y0 = FIXED_TO_INT(fy); + ry = FIXED_REST_TO_INT(fy); + + + X0 = p -> opta[1] * x0; + X1 = X0 + (Input[0] == 0xFFFFU ? 0 : p->opta[1]); + + Y0 = p -> opta[0] * y0; + Y1 = Y0 + (Input[1] == 0xFFFFU ? 0 : p->opta[0]); + + for (OutChan = 0; OutChan < TotalOut; OutChan++) { + + d00 = DENS(X0, Y0); + d01 = DENS(X0, Y1); + d10 = DENS(X1, Y0); + d11 = DENS(X1, Y1); + + dx0 = LERP(rx, d00, d10); + dx1 = LERP(rx, d01, d11); + + dxy = LERP(ry, dx0, dx1); + + Output[OutChan] = (cmsUInt16Number) dxy; + } + + +# undef LERP +# undef DENS +} + + +// Trilinear interpolation (16 bits) - cmsFloat32Number version +static +void TrilinearInterpFloat(const cmsFloat32Number Input[], + cmsFloat32Number Output[], + const cmsInterpParams* p) + +{ +# define LERP(a,l,h) (cmsFloat32Number) ((l)+(((h)-(l))*(a))) +# define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) + + const cmsFloat32Number* LutTable = (cmsFloat32Number*) p ->Table; + cmsFloat32Number px, py, pz; + int x0, y0, z0, + X0, Y0, Z0, X1, Y1, Z1; + int TotalOut, OutChan; + cmsFloat32Number fx, fy, fz, + d000, d001, d010, d011, + d100, d101, d110, d111, + dx00, dx01, dx10, dx11, + dxy0, dxy1, dxyz; + + TotalOut = p -> nOutputs; + + // We need some clipping here + px = Input[0]; + py = Input[1]; + pz = Input[2]; + + if (px < 0) px = 0; + if (px > 1) px = 1; + if (py < 0) py = 0; + if (py > 1) py = 1; + if (pz < 0) pz = 0; + if (pz > 1) pz = 1; + + px *= p->Domain[0]; + py *= p->Domain[1]; + pz *= p->Domain[2]; + + x0 = (int) _cmsQuickFloor(px); fx = px - (cmsFloat32Number) x0; + y0 = (int) _cmsQuickFloor(py); fy = py - (cmsFloat32Number) y0; + z0 = (int) _cmsQuickFloor(pz); fz = pz - (cmsFloat32Number) z0; + + X0 = p -> opta[2] * x0; + X1 = X0 + (Input[0] >= 1.0 ? 0 : p->opta[2]); + + Y0 = p -> opta[1] * y0; + Y1 = Y0 + (Input[1] >= 1.0 ? 0 : p->opta[1]); + + Z0 = p -> opta[0] * z0; + Z1 = Z0 + (Input[2] >= 1.0 ? 0 : p->opta[0]); + + for (OutChan = 0; OutChan < TotalOut; OutChan++) { + + d000 = DENS(X0, Y0, Z0); + d001 = DENS(X0, Y0, Z1); + d010 = DENS(X0, Y1, Z0); + d011 = DENS(X0, Y1, Z1); + + d100 = DENS(X1, Y0, Z0); + d101 = DENS(X1, Y0, Z1); + d110 = DENS(X1, Y1, Z0); + d111 = DENS(X1, Y1, Z1); + + + dx00 = LERP(fx, d000, d100); + dx01 = LERP(fx, d001, d101); + dx10 = LERP(fx, d010, d110); + dx11 = LERP(fx, d011, d111); + + dxy0 = LERP(fy, dx00, dx10); + dxy1 = LERP(fy, dx01, dx11); + + dxyz = LERP(fz, dxy0, dxy1); + + Output[OutChan] = dxyz; + } + + +# undef LERP +# undef DENS +} + +// Trilinear interpolation (16 bits) - optimized version +static +void TrilinearInterp16(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const cmsInterpParams* p) + +{ +#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) +#define LERP(a,l,h) (cmsUInt16Number) (l + ROUND_FIXED_TO_INT(((h-l)*a))) + + const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table; + int OutChan, TotalOut; + cmsS15Fixed16Number fx, fy, fz; + register int rx, ry, rz; + int x0, y0, z0; + register int X0, X1, Y0, Y1, Z0, Z1; + int d000, d001, d010, d011, + d100, d101, d110, d111, + dx00, dx01, dx10, dx11, + dxy0, dxy1, dxyz; + + TotalOut = p -> nOutputs; + + fx = _cmsToFixedDomain((int) Input[0] * p -> Domain[0]); + x0 = FIXED_TO_INT(fx); + rx = FIXED_REST_TO_INT(fx); // Rest in 0..1.0 domain + + + fy = _cmsToFixedDomain((int) Input[1] * p -> Domain[1]); + y0 = FIXED_TO_INT(fy); + ry = FIXED_REST_TO_INT(fy); + + fz = _cmsToFixedDomain((int) Input[2] * p -> Domain[2]); + z0 = FIXED_TO_INT(fz); + rz = FIXED_REST_TO_INT(fz); + + + X0 = p -> opta[2] * x0; + X1 = X0 + (Input[0] == 0xFFFFU ? 0 : p->opta[2]); + + Y0 = p -> opta[1] * y0; + Y1 = Y0 + (Input[1] == 0xFFFFU ? 0 : p->opta[1]); + + Z0 = p -> opta[0] * z0; + Z1 = Z0 + (Input[2] == 0xFFFFU ? 0 : p->opta[0]); + + for (OutChan = 0; OutChan < TotalOut; OutChan++) { + + d000 = DENS(X0, Y0, Z0); + d001 = DENS(X0, Y0, Z1); + d010 = DENS(X0, Y1, Z0); + d011 = DENS(X0, Y1, Z1); + + d100 = DENS(X1, Y0, Z0); + d101 = DENS(X1, Y0, Z1); + d110 = DENS(X1, Y1, Z0); + d111 = DENS(X1, Y1, Z1); + + + dx00 = LERP(rx, d000, d100); + dx01 = LERP(rx, d001, d101); + dx10 = LERP(rx, d010, d110); + dx11 = LERP(rx, d011, d111); + + dxy0 = LERP(ry, dx00, dx10); + dxy1 = LERP(ry, dx01, dx11); + + dxyz = LERP(rz, dxy0, dxy1); + + Output[OutChan] = (cmsUInt16Number) dxyz; + } + + +# undef LERP +# undef DENS +} + + +// Tetrahedral interpolation, using Sakamoto algorithm. +#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) +static +void TetrahedralInterpFloat(const cmsFloat32Number Input[], + cmsFloat32Number Output[], + const cmsInterpParams* p) +{ + const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table; + cmsFloat32Number px, py, pz; + int x0, y0, z0, + X0, Y0, Z0, X1, Y1, Z1; + cmsFloat32Number rx, ry, rz; + cmsFloat32Number c0, c1=0, c2=0, c3=0; + int OutChan, TotalOut; + + TotalOut = p -> nOutputs; + + // We need some clipping here + px = Input[0]; + py = Input[1]; + pz = Input[2]; + + if (px < 0) px = 0; + if (px > 1) px = 1; + if (py < 0) py = 0; + if (py > 1) py = 1; + if (pz < 0) pz = 0; + if (pz > 1) pz = 1; + + px *= p->Domain[0]; + py *= p->Domain[1]; + pz *= p->Domain[2]; + + x0 = (int) _cmsQuickFloor(px); rx = (px - (cmsFloat32Number) x0); + y0 = (int) _cmsQuickFloor(py); ry = (py - (cmsFloat32Number) y0); + z0 = (int) _cmsQuickFloor(pz); rz = (pz - (cmsFloat32Number) z0); + + + X0 = p -> opta[2] * x0; + X1 = X0 + (Input[0] >= 1.0 ? 0 : p->opta[2]); + + Y0 = p -> opta[1] * y0; + Y1 = Y0 + (Input[1] >= 1.0 ? 0 : p->opta[1]); + + Z0 = p -> opta[0] * z0; + Z1 = Z0 + (Input[2] >= 1.0 ? 0 : p->opta[0]); + + for (OutChan=0; OutChan < TotalOut; OutChan++) { + + // These are the 6 Tetrahedral + + c0 = DENS(X0, Y0, Z0); + + if (rx >= ry && ry >= rz) { + + c1 = DENS(X1, Y0, Z0) - c0; + c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); + c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); + + } + else + if (rx >= rz && rz >= ry) { + + c1 = DENS(X1, Y0, Z0) - c0; + c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); + c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); + + } + else + if (rz >= rx && rx >= ry) { + + c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); + c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); + c3 = DENS(X0, Y0, Z1) - c0; + + } + else + if (ry >= rx && rx >= rz) { + + c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); + c2 = DENS(X0, Y1, Z0) - c0; + c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); + + } + else + if (ry >= rz && rz >= rx) { + + c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); + c2 = DENS(X0, Y1, Z0) - c0; + c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); + + } + else + if (rz >= ry && ry >= rx) { + + c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); + c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); + c3 = DENS(X0, Y0, Z1) - c0; + + } + else { + c1 = c2 = c3 = 0; + } + + Output[OutChan] = c0 + c1 * rx + c2 * ry + c3 * rz; + } + +} + +#undef DENS + + + +#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) + +static +void TetrahedralInterp16(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const cmsInterpParams* p) +{ + const cmsUInt16Number* LutTable = (cmsUInt16Number*) p -> Table; + cmsS15Fixed16Number fx, fy, fz; + cmsS15Fixed16Number rx, ry, rz; + int x0, y0, z0; + cmsS15Fixed16Number c0, c1, c2, c3, Rest; + cmsUInt32Number OutChan; + cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1; + cmsUInt32Number TotalOut = p -> nOutputs; + + + fx = _cmsToFixedDomain((int) Input[0] * p -> Domain[0]); + fy = _cmsToFixedDomain((int) Input[1] * p -> Domain[1]); + fz = _cmsToFixedDomain((int) Input[2] * p -> Domain[2]); + + x0 = FIXED_TO_INT(fx); + y0 = FIXED_TO_INT(fy); + z0 = FIXED_TO_INT(fz); + + rx = FIXED_REST_TO_INT(fx); + ry = FIXED_REST_TO_INT(fy); + rz = FIXED_REST_TO_INT(fz); + + X0 = p -> opta[2] * x0; + X1 = X0 + (Input[0] == 0xFFFFU ? 0 : p->opta[2]); + + Y0 = p -> opta[1] * y0; + Y1 = Y0 + (Input[1] == 0xFFFFU ? 0 : p->opta[1]); + + Z0 = p -> opta[0] * z0; + Z1 = Z0 + (Input[2] == 0xFFFFU ? 0 : p->opta[0]); + + // These are the 6 Tetrahedral + for (OutChan=0; OutChan < TotalOut; OutChan++) { + + c0 = DENS(X0, Y0, Z0); + + if (rx >= ry && ry >= rz) { + + c1 = DENS(X1, Y0, Z0) - c0; + c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); + c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); + + } + else + if (rx >= rz && rz >= ry) { + + c1 = DENS(X1, Y0, Z0) - c0; + c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); + c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); + + } + else + if (rz >= rx && rx >= ry) { + + c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); + c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); + c3 = DENS(X0, Y0, Z1) - c0; + + } + else + if (ry >= rx && rx >= rz) { + + c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); + c2 = DENS(X0, Y1, Z0) - c0; + c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); + + } + else + if (ry >= rz && rz >= rx) { + + c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); + c2 = DENS(X0, Y1, Z0) - c0; + c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); + + } + else + if (rz >= ry && ry >= rx) { + + c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); + c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); + c3 = DENS(X0, Y0, Z1) - c0; + + } + else { + c1 = c2 = c3 = 0; + } + + Rest = c1 * rx + c2 * ry + c3 * rz; + + Output[OutChan] = (cmsUInt16Number) c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)); + } + +} +#undef DENS + + +#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) +static +void Eval4Inputs(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const cmsInterpParams* p16) +{ + const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; + cmsS15Fixed16Number fk; + cmsS15Fixed16Number k0, rk; + int K0, K1; + cmsS15Fixed16Number fx, fy, fz; + cmsS15Fixed16Number rx, ry, rz; + int x0, y0, z0; + cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1; + cmsUInt32Number i; + cmsS15Fixed16Number c0, c1, c2, c3, Rest; + cmsUInt32Number OutChan; + cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; + + + fk = _cmsToFixedDomain((int) Input[0] * p16 -> Domain[0]); + fx = _cmsToFixedDomain((int) Input[1] * p16 -> Domain[1]); + fy = _cmsToFixedDomain((int) Input[2] * p16 -> Domain[2]); + fz = _cmsToFixedDomain((int) Input[3] * p16 -> Domain[3]); + + k0 = FIXED_TO_INT(fk); + x0 = FIXED_TO_INT(fx); + y0 = FIXED_TO_INT(fy); + z0 = FIXED_TO_INT(fz); + + rk = FIXED_REST_TO_INT(fk); + rx = FIXED_REST_TO_INT(fx); + ry = FIXED_REST_TO_INT(fy); + rz = FIXED_REST_TO_INT(fz); + + K0 = p16 -> opta[3] * k0; + K1 = K0 + (Input[0] == 0xFFFFU ? 0 : p16->opta[3]); + + X0 = p16 -> opta[2] * x0; + X1 = X0 + (Input[1] == 0xFFFFU ? 0 : p16->opta[2]); + + Y0 = p16 -> opta[1] * y0; + Y1 = Y0 + (Input[2] == 0xFFFFU ? 0 : p16->opta[1]); + + Z0 = p16 -> opta[0] * z0; + Z1 = Z0 + (Input[3] == 0xFFFFU ? 0 : p16->opta[0]); + + LutTable = (cmsUInt16Number*) p16 -> Table; + LutTable += K0; + + for (OutChan=0; OutChan < p16 -> nOutputs; OutChan++) { + + c0 = DENS(X0, Y0, Z0); + + if (rx >= ry && ry >= rz) { + + c1 = DENS(X1, Y0, Z0) - c0; + c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); + c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); + + } + else + if (rx >= rz && rz >= ry) { + + c1 = DENS(X1, Y0, Z0) - c0; + c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); + c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); + + } + else + if (rz >= rx && rx >= ry) { + + c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); + c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); + c3 = DENS(X0, Y0, Z1) - c0; + + } + else + if (ry >= rx && rx >= rz) { + + c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); + c2 = DENS(X0, Y1, Z0) - c0; + c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); + + } + else + if (ry >= rz && rz >= rx) { + + c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); + c2 = DENS(X0, Y1, Z0) - c0; + c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); + + } + else + if (rz >= ry && ry >= rx) { + + c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); + c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); + c3 = DENS(X0, Y0, Z1) - c0; + + } + else { + c1 = c2 = c3 = 0; + } + + Rest = c1 * rx + c2 * ry + c3 * rz; + + Tmp1[OutChan] = (cmsUInt16Number) c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)); + } + + + LutTable = (cmsUInt16Number*) p16 -> Table; + LutTable += K1; + + for (OutChan=0; OutChan < p16 -> nOutputs; OutChan++) { + + c0 = DENS(X0, Y0, Z0); + + if (rx >= ry && ry >= rz) { + + c1 = DENS(X1, Y0, Z0) - c0; + c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); + c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); + + } + else + if (rx >= rz && rz >= ry) { + + c1 = DENS(X1, Y0, Z0) - c0; + c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); + c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); + + } + else + if (rz >= rx && rx >= ry) { + + c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); + c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); + c3 = DENS(X0, Y0, Z1) - c0; + + } + else + if (ry >= rx && rx >= rz) { + + c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); + c2 = DENS(X0, Y1, Z0) - c0; + c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); + + } + else + if (ry >= rz && rz >= rx) { + + c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); + c2 = DENS(X0, Y1, Z0) - c0; + c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); + + } + else + if (rz >= ry && ry >= rx) { + + c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); + c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); + c3 = DENS(X0, Y0, Z1) - c0; + + } + else { + c1 = c2 = c3 = 0; + } + + Rest = c1 * rx + c2 * ry + c3 * rz; + + Tmp2[OutChan] = (cmsUInt16Number) c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)); + } + + + + for (i=0; i < p16 -> nOutputs; i++) { + Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]); + } +} +#undef DENS + + +// For more that 3 inputs (i.e., CMYK) +// evaluate two 3-dimensional interpolations and then linearly interpolate between them. + + +static +void Eval4InputsFloat(const cmsFloat32Number Input[], + cmsFloat32Number Output[], + const cmsInterpParams* p) +{ + const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table; + cmsFloat32Number rest; + cmsFloat32Number pk; + int k0, K0, K1; + const cmsFloat32Number* T; + cmsUInt32Number i; + cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; + cmsInterpParams p1; + + + pk = Input[0] * p->Domain[0]; + k0 = _cmsQuickFloor(pk); + rest = pk - (cmsFloat32Number) k0; + + K0 = p -> opta[3] * k0; + K1 = K0 + (Input[0] >= 1.0 ? 0 : p->opta[3]); + + p1 = *p; + memmove(&p1.Domain[0], &p ->Domain[1], 3*sizeof(cmsUInt32Number)); + + T = LutTable + K0; + p1.Table = T; + + TetrahedralInterpFloat(Input + 1, Tmp1, &p1); + + T = LutTable + K1; + p1.Table = T; + TetrahedralInterpFloat(Input + 1, Tmp2, &p1); + + for (i=0; i < p -> nOutputs; i++) + { + cmsFloat32Number y0 = Tmp1[i]; + cmsFloat32Number y1 = Tmp2[i]; + + Output[i] = y0 + (y1 - y0) * rest; + } +} + + +static +void Eval5Inputs(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + + register const cmsInterpParams* p16) +{ + const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; + cmsS15Fixed16Number fk; + cmsS15Fixed16Number k0, rk; + int K0, K1; + const cmsUInt16Number* T; + cmsUInt32Number i; + cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; + cmsInterpParams p1; + + + fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]); + k0 = FIXED_TO_INT(fk); + rk = FIXED_REST_TO_INT(fk); + + K0 = p16 -> opta[4] * k0; + K1 = p16 -> opta[4] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0)); + + p1 = *p16; + memmove(&p1.Domain[0], &p16 ->Domain[1], 4*sizeof(cmsUInt32Number)); + + T = LutTable + K0; + p1.Table = T; + + Eval4Inputs(Input + 1, Tmp1, &p1); + + T = LutTable + K1; + p1.Table = T; + + Eval4Inputs(Input + 1, Tmp2, &p1); + + for (i=0; i < p16 -> nOutputs; i++) { + + Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]); + } + +} + + +static +void Eval5InputsFloat(const cmsFloat32Number Input[], + cmsFloat32Number Output[], + const cmsInterpParams* p) +{ + const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table; + cmsFloat32Number rest; + cmsFloat32Number pk; + int k0, K0, K1; + const cmsFloat32Number* T; + cmsUInt32Number i; + cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; + cmsInterpParams p1; + + pk = Input[0] * p->Domain[0]; + k0 = _cmsQuickFloor(pk); + rest = pk - (cmsFloat32Number) k0; + + K0 = p -> opta[4] * k0; + K1 = K0 + (Input[0] >= 1.0 ? 0 : p->opta[4]); + + p1 = *p; + memmove(&p1.Domain[0], &p ->Domain[1], 4*sizeof(cmsUInt32Number)); + + T = LutTable + K0; + p1.Table = T; + + Eval4InputsFloat(Input + 1, Tmp1, &p1); + + T = LutTable + K1; + p1.Table = T; + + Eval4InputsFloat(Input + 1, Tmp2, &p1); + + for (i=0; i < p -> nOutputs; i++) { + + cmsFloat32Number y0 = Tmp1[i]; + cmsFloat32Number y1 = Tmp2[i]; + + Output[i] = y0 + (y1 - y0) * rest; + } +} + + + +static +void Eval6Inputs(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const cmsInterpParams* p16) +{ + const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; + cmsS15Fixed16Number fk; + cmsS15Fixed16Number k0, rk; + int K0, K1; + const cmsUInt16Number* T; + cmsUInt32Number i; + cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; + cmsInterpParams p1; + + fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]); + k0 = FIXED_TO_INT(fk); + rk = FIXED_REST_TO_INT(fk); + + K0 = p16 -> opta[5] * k0; + K1 = p16 -> opta[5] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0)); + + p1 = *p16; + memmove(&p1.Domain[0], &p16 ->Domain[1], 5*sizeof(cmsUInt32Number)); + + T = LutTable + K0; + p1.Table = T; + + Eval5Inputs(Input + 1, Tmp1, &p1); + + T = LutTable + K1; + p1.Table = T; + + Eval5Inputs(Input + 1, Tmp2, &p1); + + for (i=0; i < p16 -> nOutputs; i++) { + + Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]); + } + +} + + +static +void Eval6InputsFloat(const cmsFloat32Number Input[], + cmsFloat32Number Output[], + const cmsInterpParams* p) +{ + const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table; + cmsFloat32Number rest; + cmsFloat32Number pk; + int k0, K0, K1; + const cmsFloat32Number* T; + cmsUInt32Number i; + cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; + cmsInterpParams p1; + + pk = Input[0] * p->Domain[0]; + k0 = _cmsQuickFloor(pk); + rest = pk - (cmsFloat32Number) k0; + + K0 = p -> opta[5] * k0; + K1 = K0 + (Input[0] >= 1.0 ? 0 : p->opta[5]); + + p1 = *p; + memmove(&p1.Domain[0], &p ->Domain[1], 5*sizeof(cmsUInt32Number)); + + T = LutTable + K0; + p1.Table = T; + + Eval5InputsFloat(Input + 1, Tmp1, &p1); + + T = LutTable + K1; + p1.Table = T; + + Eval5InputsFloat(Input + 1, Tmp2, &p1); + + for (i=0; i < p -> nOutputs; i++) { + + cmsFloat32Number y0 = Tmp1[i]; + cmsFloat32Number y1 = Tmp2[i]; + + Output[i] = y0 + (y1 - y0) * rest; + } +} + + +static +void Eval7Inputs(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const cmsInterpParams* p16) +{ + const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; + cmsS15Fixed16Number fk; + cmsS15Fixed16Number k0, rk; + int K0, K1; + const cmsUInt16Number* T; + cmsUInt32Number i; + cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; + cmsInterpParams p1; + + + fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]); + k0 = FIXED_TO_INT(fk); + rk = FIXED_REST_TO_INT(fk); + + K0 = p16 -> opta[6] * k0; + K1 = p16 -> opta[6] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0)); + + p1 = *p16; + memmove(&p1.Domain[0], &p16 ->Domain[1], 6*sizeof(cmsUInt32Number)); + + T = LutTable + K0; + p1.Table = T; + + Eval6Inputs(Input + 1, Tmp1, &p1); + + T = LutTable + K1; + p1.Table = T; + + Eval6Inputs(Input + 1, Tmp2, &p1); + + for (i=0; i < p16 -> nOutputs; i++) { + Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]); + } +} + + +static +void Eval7InputsFloat(const cmsFloat32Number Input[], + cmsFloat32Number Output[], + const cmsInterpParams* p) +{ + const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table; + cmsFloat32Number rest; + cmsFloat32Number pk; + int k0, K0, K1; + const cmsFloat32Number* T; + cmsUInt32Number i; + cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; + cmsInterpParams p1; + + pk = Input[0] * p->Domain[0]; + k0 = _cmsQuickFloor(pk); + rest = pk - (cmsFloat32Number) k0; + + K0 = p -> opta[6] * k0; + K1 = K0 + (Input[0] >= 1.0 ? 0 : p->opta[6]); + + p1 = *p; + memmove(&p1.Domain[0], &p ->Domain[1], 6*sizeof(cmsUInt32Number)); + + T = LutTable + K0; + p1.Table = T; + + Eval6InputsFloat(Input + 1, Tmp1, &p1); + + T = LutTable + K1; + p1.Table = T; + + Eval6InputsFloat(Input + 1, Tmp2, &p1); + + + for (i=0; i < p -> nOutputs; i++) { + + cmsFloat32Number y0 = Tmp1[i]; + cmsFloat32Number y1 = Tmp2[i]; + + Output[i] = y0 + (y1 - y0) * rest; + + } +} + +static +void Eval8Inputs(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const cmsInterpParams* p16) +{ + const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; + cmsS15Fixed16Number fk; + cmsS15Fixed16Number k0, rk; + int K0, K1; + const cmsUInt16Number* T; + cmsUInt32Number i; + cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; + cmsInterpParams p1; + + fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]); + k0 = FIXED_TO_INT(fk); + rk = FIXED_REST_TO_INT(fk); + + K0 = p16 -> opta[7] * k0; + K1 = p16 -> opta[7] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0)); + + p1 = *p16; + memmove(&p1.Domain[0], &p16 ->Domain[1], 7*sizeof(cmsUInt32Number)); + + T = LutTable + K0; + p1.Table = T; + + Eval7Inputs(Input + 1, Tmp1, &p1); + + T = LutTable + K1; + p1.Table = T; + Eval7Inputs(Input + 1, Tmp2, &p1); + + for (i=0; i < p16 -> nOutputs; i++) { + Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]); + } +} + + + +static +void Eval8InputsFloat(const cmsFloat32Number Input[], + cmsFloat32Number Output[], + const cmsInterpParams* p) +{ + const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table; + cmsFloat32Number rest; + cmsFloat32Number pk; + int k0, K0, K1; + const cmsFloat32Number* T; + cmsUInt32Number i; + cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; + cmsInterpParams p1; + + pk = Input[0] * p->Domain[0]; + k0 = _cmsQuickFloor(pk); + rest = pk - (cmsFloat32Number) k0; + + K0 = p -> opta[7] * k0; + K1 = K0 + (Input[0] >= 1.0 ? 0 : p->opta[7]); + + p1 = *p; + memmove(&p1.Domain[0], &p ->Domain[1], 7*sizeof(cmsUInt32Number)); + + T = LutTable + K0; + p1.Table = T; + + Eval7InputsFloat(Input + 1, Tmp1, &p1); + + T = LutTable + K1; + p1.Table = T; + + Eval7InputsFloat(Input + 1, Tmp2, &p1); + + + for (i=0; i < p -> nOutputs; i++) { + + cmsFloat32Number y0 = Tmp1[i]; + cmsFloat32Number y1 = Tmp2[i]; + + Output[i] = y0 + (y1 - y0) * rest; + } +} + +// The default factory +static +cmsInterpFunction DefaultInterpolatorsFactory(cmsUInt32Number nInputChannels, cmsUInt32Number nOutputChannels, cmsUInt32Number dwFlags) +{ + + cmsInterpFunction Interpolation; + cmsBool IsFloat = (dwFlags & CMS_LERP_FLAGS_FLOAT); + cmsBool IsTrilinear = (dwFlags & CMS_LERP_FLAGS_TRILINEAR); + + memset(&Interpolation, 0, sizeof(Interpolation)); + + // Safety check + if (nInputChannels >= 4 && nOutputChannels >= MAX_STAGE_CHANNELS) + return Interpolation; + + switch (nInputChannels) { + + case 1: // Gray LUT / linear + + if (nOutputChannels == 1) { + + if (IsFloat) + Interpolation.LerpFloat = LinLerp1Dfloat; + else + Interpolation.Lerp16 = LinLerp1D; + + } + else { + + if (IsFloat) + Interpolation.LerpFloat = Eval1InputFloat; + else + Interpolation.Lerp16 = Eval1Input; + } + break; + + case 2: // Duotone + if (IsFloat) + Interpolation.LerpFloat = BilinearInterpFloat; + else + Interpolation.Lerp16 = BilinearInterp16; + break; + + case 3: // RGB et al + + if (IsTrilinear) { + + if (IsFloat) + Interpolation.LerpFloat = TrilinearInterpFloat; + else + Interpolation.Lerp16 = TrilinearInterp16; + } + else { + + if (IsFloat) + Interpolation.LerpFloat = TetrahedralInterpFloat; + else { + + Interpolation.Lerp16 = TetrahedralInterp16; + } + } + break; + + case 4: // CMYK lut + + if (IsFloat) + Interpolation.LerpFloat = Eval4InputsFloat; + else + Interpolation.Lerp16 = Eval4Inputs; + break; + + case 5: // 5 Inks + if (IsFloat) + Interpolation.LerpFloat = Eval5InputsFloat; + else + Interpolation.Lerp16 = Eval5Inputs; + break; + + case 6: // 6 Inks + if (IsFloat) + Interpolation.LerpFloat = Eval6InputsFloat; + else + Interpolation.Lerp16 = Eval6Inputs; + break; + + case 7: // 7 inks + if (IsFloat) + Interpolation.LerpFloat = Eval7InputsFloat; + else + Interpolation.Lerp16 = Eval7Inputs; + break; + + case 8: // 8 inks + if (IsFloat) + Interpolation.LerpFloat = Eval8InputsFloat; + else + Interpolation.Lerp16 = Eval8Inputs; + break; + + break; + + default: + Interpolation.Lerp16 = NULL; + } + + return Interpolation; +} diff --git a/src/cmsio0.c b/src/cmsio0.c new file mode 100644 index 0000000..5fb542e --- /dev/null +++ b/src/cmsio0.c @@ -0,0 +1,1735 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + +// Generic I/O, tag dictionary management, profile struct + +// IOhandlers are abstractions used by littleCMS to read from whatever file, stream, +// memory block or any storage. Each IOhandler provides implementations for read, +// write, seek and tell functions. LittleCMS code deals with IO across those objects. +// In this way, is easier to add support for new storage media. + +// NULL stream, for taking care of used space ------------------------------------- + +// NULL IOhandler basically does nothing but keep track on how many bytes have been +// written. This is handy when creating profiles, where the file size is needed in the +// header. Then, whole profile is serialized across NULL IOhandler and a second pass +// writes the bytes to the pertinent IOhandler. + +typedef struct { + cmsUInt32Number Pointer; // Points to current location +} FILENULL; + +static +cmsUInt32Number NULLRead(cmsIOHANDLER* iohandler, void *Buffer, cmsUInt32Number size, cmsUInt32Number count) +{ + FILENULL* ResData = (FILENULL*) iohandler ->stream; + + cmsUInt32Number len = size * count; + ResData -> Pointer += len; + return count; + + cmsUNUSED_PARAMETER(Buffer); +} + +static +cmsBool NULLSeek(cmsIOHANDLER* iohandler, cmsUInt32Number offset) +{ + FILENULL* ResData = (FILENULL*) iohandler ->stream; + + ResData ->Pointer = offset; + return TRUE; +} + +static +cmsUInt32Number NULLTell(cmsIOHANDLER* iohandler) +{ + FILENULL* ResData = (FILENULL*) iohandler ->stream; + return ResData -> Pointer; +} + +static +cmsBool NULLWrite(cmsIOHANDLER* iohandler, cmsUInt32Number size, const void *Ptr) +{ + FILENULL* ResData = (FILENULL*) iohandler ->stream; + + ResData ->Pointer += size; + if (ResData ->Pointer > iohandler->UsedSpace) + iohandler->UsedSpace = ResData ->Pointer; + + return TRUE; + + cmsUNUSED_PARAMETER(Ptr); +} + +static +cmsBool NULLClose(cmsIOHANDLER* iohandler) +{ + FILENULL* ResData = (FILENULL*) iohandler ->stream; + + _cmsFree(iohandler ->ContextID, ResData); + _cmsFree(iohandler ->ContextID, iohandler); + return TRUE; +} + +// The NULL IOhandler creator +cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromNULL(cmsContext ContextID) +{ + struct _cms_io_handler* iohandler = NULL; + FILENULL* fm = NULL; + + iohandler = (struct _cms_io_handler*) _cmsMallocZero(ContextID, sizeof(struct _cms_io_handler)); + if (iohandler == NULL) return NULL; + + fm = (FILENULL*) _cmsMallocZero(ContextID, sizeof(FILENULL)); + if (fm == NULL) goto Error; + + fm ->Pointer = 0; + + iohandler ->ContextID = ContextID; + iohandler ->stream = (void*) fm; + iohandler ->UsedSpace = 0; + iohandler ->ReportedSize = 0; + iohandler ->PhysicalFile[0] = 0; + + iohandler ->Read = NULLRead; + iohandler ->Seek = NULLSeek; + iohandler ->Close = NULLClose; + iohandler ->Tell = NULLTell; + iohandler ->Write = NULLWrite; + + return iohandler; + +Error: + if (fm) _cmsFree(ContextID, fm); + if (iohandler) _cmsFree(ContextID, iohandler); + return NULL; + +} + + +// Memory-based stream -------------------------------------------------------------- + +// Those functions implements an iohandler which takes a block of memory as storage medium. + +typedef struct { + cmsUInt8Number* Block; // Points to allocated memory + cmsUInt32Number Size; // Size of allocated memory + cmsUInt32Number Pointer; // Points to current location + int FreeBlockOnClose; // As title + +} FILEMEM; + +static +cmsUInt32Number MemoryRead(struct _cms_io_handler* iohandler, void *Buffer, cmsUInt32Number size, cmsUInt32Number count) +{ + FILEMEM* ResData = (FILEMEM*) iohandler ->stream; + cmsUInt8Number* Ptr; + cmsUInt32Number len = size * count; + + if (ResData -> Pointer + len > ResData -> Size){ + + len = (ResData -> Size - ResData -> Pointer); + cmsSignalError(iohandler ->ContextID, cmsERROR_READ, "Read from memory error. Got %d bytes, block should be of %d bytes", len, count * size); + return 0; + } + + Ptr = ResData -> Block; + Ptr += ResData -> Pointer; + memmove(Buffer, Ptr, len); + ResData -> Pointer += len; + + return count; +} + +// SEEK_CUR is assumed +static +cmsBool MemorySeek(struct _cms_io_handler* iohandler, cmsUInt32Number offset) +{ + FILEMEM* ResData = (FILEMEM*) iohandler ->stream; + + if (offset > ResData ->Size) { + cmsSignalError(iohandler ->ContextID, cmsERROR_SEEK, "Too few data; probably corrupted profile"); + return FALSE; + } + + ResData ->Pointer = offset; + return TRUE; +} + +// Tell for memory +static +cmsUInt32Number MemoryTell(struct _cms_io_handler* iohandler) +{ + FILEMEM* ResData = (FILEMEM*) iohandler ->stream; + + if (ResData == NULL) return 0; + return ResData -> Pointer; +} + + +// Writes data to memory, also keeps used space for further reference. +static +cmsBool MemoryWrite(struct _cms_io_handler* iohandler, cmsUInt32Number size, const void *Ptr) +{ + FILEMEM* ResData = (FILEMEM*) iohandler ->stream; + + if (ResData == NULL) return FALSE; // Housekeeping + + if (size == 0) return TRUE; // Write zero bytes is ok, but does nothing + + memmove(ResData ->Block + ResData ->Pointer, Ptr, size); + ResData ->Pointer += size; + + if (ResData ->Pointer > iohandler->UsedSpace) + iohandler->UsedSpace = ResData ->Pointer; + + + iohandler->UsedSpace += size; + + return TRUE; +} + + +static +cmsBool MemoryClose(struct _cms_io_handler* iohandler) +{ + FILEMEM* ResData = (FILEMEM*) iohandler ->stream; + + if (ResData ->FreeBlockOnClose) { + + if (ResData ->Block) _cmsFree(iohandler ->ContextID, ResData ->Block); + } + + _cmsFree(iohandler ->ContextID, ResData); + _cmsFree(iohandler ->ContextID, iohandler); + + return TRUE; +} + +// Create a iohandler for memory block. AccessMode=='r' assumes the iohandler is going to read, and makes +// a copy of the memory block for letting user to free the memory after invoking open profile. In write +// mode ("w"), Buffere points to the begin of memory block to be written. +cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromMem(cmsContext ContextID, void *Buffer, cmsUInt32Number size, const char* AccessMode) +{ + cmsIOHANDLER* iohandler = NULL; + FILEMEM* fm = NULL; + + _cmsAssert(AccessMode != NULL); + + iohandler = (cmsIOHANDLER*) _cmsMallocZero(ContextID, sizeof(cmsIOHANDLER)); + if (iohandler == NULL) return NULL; + + switch (*AccessMode) { + + case 'r': + fm = (FILEMEM*) _cmsMallocZero(ContextID, sizeof(FILEMEM)); + if (fm == NULL) goto Error; + + if (Buffer == NULL) { + cmsSignalError(ContextID, cmsERROR_READ, "Couldn't read profile from NULL pointer"); + goto Error; + } + + fm ->Block = (cmsUInt8Number*) _cmsMalloc(ContextID, size); + if (fm ->Block == NULL) { + + _cmsFree(ContextID, fm); + _cmsFree(ContextID, iohandler); + cmsSignalError(ContextID, cmsERROR_READ, "Couldn't allocate %ld bytes for profile", size); + return NULL; + } + + + memmove(fm->Block, Buffer, size); + fm ->FreeBlockOnClose = TRUE; + fm ->Size = size; + fm ->Pointer = 0; + iohandler -> ReportedSize = size; + break; + + case 'w': + fm = (FILEMEM*) _cmsMallocZero(ContextID, sizeof(FILEMEM)); + if (fm == NULL) goto Error; + + fm ->Block = (cmsUInt8Number*) Buffer; + fm ->FreeBlockOnClose = FALSE; + fm ->Size = size; + fm ->Pointer = 0; + iohandler -> ReportedSize = 0; + break; + + default: + cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown access mode '%c'", *AccessMode); + return NULL; + } + + iohandler ->ContextID = ContextID; + iohandler ->stream = (void*) fm; + iohandler ->UsedSpace = 0; + iohandler ->PhysicalFile[0] = 0; + + iohandler ->Read = MemoryRead; + iohandler ->Seek = MemorySeek; + iohandler ->Close = MemoryClose; + iohandler ->Tell = MemoryTell; + iohandler ->Write = MemoryWrite; + + return iohandler; + +Error: + if (fm) _cmsFree(ContextID, fm); + if (iohandler) _cmsFree(ContextID, iohandler); + return NULL; +} + +// File-based stream ------------------------------------------------------- + +// Read count elements of size bytes each. Return number of elements read +static +cmsUInt32Number FileRead(cmsIOHANDLER* iohandler, void *Buffer, cmsUInt32Number size, cmsUInt32Number count) +{ + cmsUInt32Number nReaded = (cmsUInt32Number) fread(Buffer, size, count, (FILE*) iohandler->stream); + + if (nReaded != count) { + cmsSignalError(iohandler ->ContextID, cmsERROR_FILE, "Read error. Got %d bytes, block should be of %d bytes", nReaded * size, count * size); + return 0; + } + + return nReaded; +} + +// Postion file pointer in the file +static +cmsBool FileSeek(cmsIOHANDLER* iohandler, cmsUInt32Number offset) +{ + if (fseek((FILE*) iohandler ->stream, (long) offset, SEEK_SET) != 0) { + + cmsSignalError(iohandler ->ContextID, cmsERROR_FILE, "Seek error; probably corrupted file"); + return FALSE; + } + + return TRUE; +} + +// Returns file pointer position +static +cmsUInt32Number FileTell(cmsIOHANDLER* iohandler) +{ + return ftell((FILE*)iohandler ->stream); +} + +// Writes data to stream, also keeps used space for further reference. Returns TRUE on success, FALSE on error +static +cmsBool FileWrite(cmsIOHANDLER* iohandler, cmsUInt32Number size, const void* Buffer) +{ + if (size == 0) return TRUE; // We allow to write 0 bytes, but nothing is written + + iohandler->UsedSpace += size; + return (fwrite(Buffer, size, 1, (FILE*) iohandler->stream) == 1); +} + +// Closes the file +static +cmsBool FileClose(cmsIOHANDLER* iohandler) +{ + if (fclose((FILE*) iohandler ->stream) != 0) return FALSE; + _cmsFree(iohandler ->ContextID, iohandler); + return TRUE; +} + +// Create a iohandler for disk based files. if FileName is NULL, then 'stream' member is also set +// to NULL and no real writting is performed. This only happens in writting access mode +cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromFile(cmsContext ContextID, const char* FileName, const char* AccessMode) +{ + cmsIOHANDLER* iohandler = NULL; + FILE* fm = NULL; + + iohandler = (cmsIOHANDLER*) _cmsMallocZero(ContextID, sizeof(cmsIOHANDLER)); + if (iohandler == NULL) return NULL; + + switch (*AccessMode) { + + case 'r': + fm = fopen(FileName, "rb"); + if (fm == NULL) { + _cmsFree(ContextID, iohandler); + cmsSignalError(ContextID, cmsERROR_FILE, "File '%s' not found", FileName); + return NULL; + } + iohandler -> ReportedSize = cmsfilelength(fm); + break; + + case 'w': + fm = fopen(FileName, "wb"); + if (fm == NULL) { + _cmsFree(ContextID, iohandler); + cmsSignalError(ContextID, cmsERROR_FILE, "Couldn't create '%s'", FileName); + return NULL; + } + iohandler -> ReportedSize = 0; + break; + + default: + _cmsFree(ContextID, iohandler); + cmsSignalError(ContextID, cmsERROR_FILE, "Unknown access mode '%c'", *AccessMode); + return NULL; + } + + iohandler ->ContextID = ContextID; + iohandler ->stream = (void*) fm; + iohandler ->UsedSpace = 0; + + // Keep track of the original file + if (FileName != NULL) { + + strncpy(iohandler -> PhysicalFile, FileName, sizeof(iohandler -> PhysicalFile)-1); + iohandler -> PhysicalFile[sizeof(iohandler -> PhysicalFile)-1] = 0; + } + + iohandler ->Read = FileRead; + iohandler ->Seek = FileSeek; + iohandler ->Close = FileClose; + iohandler ->Tell = FileTell; + iohandler ->Write = FileWrite; + + return iohandler; +} + +// Create a iohandler for stream based files +cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream) +{ + cmsIOHANDLER* iohandler = NULL; + + iohandler = (cmsIOHANDLER*) _cmsMallocZero(ContextID, sizeof(cmsIOHANDLER)); + if (iohandler == NULL) return NULL; + + iohandler -> ContextID = ContextID; + iohandler -> stream = (void*) Stream; + iohandler -> UsedSpace = 0; + iohandler -> ReportedSize = cmsfilelength(Stream); + iohandler -> PhysicalFile[0] = 0; + + iohandler ->Read = FileRead; + iohandler ->Seek = FileSeek; + iohandler ->Close = FileClose; + iohandler ->Tell = FileTell; + iohandler ->Write = FileWrite; + + return iohandler; +} + + + +// Close an open IO handler +cmsBool CMSEXPORT cmsCloseIOhandler(cmsIOHANDLER* io) +{ + return io -> Close(io); +} + +// ------------------------------------------------------------------------------------------------------- + +// Creates an empty structure holding all required parameters +cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID) +{ + time_t now = time(NULL); + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) _cmsMallocZero(ContextID, sizeof(_cmsICCPROFILE)); + if (Icc == NULL) return NULL; + + Icc ->ContextID = ContextID; + + // Set it to empty + Icc -> TagCount = 0; + + // Set default version + Icc ->Version = 0x02100000; + + // Set creation date/time + memmove(&Icc ->Created, gmtime(&now), sizeof(Icc ->Created)); + + // Return the handle + return (cmsHPROFILE) Icc; +} + +cmsContext CMSEXPORT cmsGetProfileContextID(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + + if (Icc == NULL) return NULL; + return Icc -> ContextID; +} + + +// Return the number of tags +cmsInt32Number CMSEXPORT cmsGetTagCount(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + if (Icc == NULL) return -1; + + return Icc->TagCount; +} + +// Return the tag signature of a given tag number +cmsTagSignature CMSEXPORT cmsGetTagSignature(cmsHPROFILE hProfile, cmsUInt32Number n) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + + if (n > Icc->TagCount) return (cmsTagSignature) 0; // Mark as not available + if (n >= MAX_TABLE_TAG) return (cmsTagSignature) 0; // As double check + + return Icc ->TagNames[n]; +} + + +static +int SearchOneTag(_cmsICCPROFILE* Profile, cmsTagSignature sig) +{ + cmsUInt32Number i; + + for (i=0; i < Profile -> TagCount; i++) { + + if (sig == Profile -> TagNames[i]) + return i; + } + + return -1; +} + +// Search for a specific tag in tag dictionary. Returns position or -1 if tag not found. +// If followlinks is turned on, then the position of the linked tag is returned +int _cmsSearchTag(_cmsICCPROFILE* Icc, cmsTagSignature sig, cmsBool lFollowLinks) +{ + int n; + cmsTagSignature LinkedSig; + + do { + + // Search for given tag in ICC profile directory + n = SearchOneTag(Icc, sig); + if (n < 0) + return -1; // Not found + + if (!lFollowLinks) + return n; // Found, don't follow links + + // Is this a linked tag? + LinkedSig = Icc ->TagLinked[n]; + + // Yes, follow link + if (LinkedSig != (cmsTagSignature) 0) { + sig = LinkedSig; + } + + } while (LinkedSig != (cmsTagSignature) 0); + + return n; +} + + +// Create a new tag entry + +static +cmsBool _cmsNewTag(_cmsICCPROFILE* Icc, cmsTagSignature sig, int* NewPos) +{ + int i; + + // Search for the tag + i = _cmsSearchTag(Icc, sig, FALSE); + + // Now let's do it easy. If the tag has been already written, that's an error + if (i >= 0) { + cmsSignalError(Icc ->ContextID, cmsERROR_ALREADY_DEFINED, "Tag '%x' already exists", sig); + return FALSE; + } + else { + + // New one + + if (Icc -> TagCount >= MAX_TABLE_TAG) { + cmsSignalError(Icc ->ContextID, cmsERROR_RANGE, "Too many tags (%d)", MAX_TABLE_TAG); + return FALSE; + } + + *NewPos = Icc ->TagCount; + Icc -> TagCount++; + } + + return TRUE; +} + + +// Check existance +cmsBool CMSEXPORT cmsIsTag(cmsHPROFILE hProfile, cmsTagSignature sig) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) (void*) hProfile; + return _cmsSearchTag(Icc, sig, FALSE) >= 0; +} + + +// Read profile header and validate it +cmsBool _cmsReadHeader(_cmsICCPROFILE* Icc) +{ + cmsTagEntry Tag; + cmsICCHeader Header; + cmsUInt32Number i, j; + cmsUInt32Number HeaderSize; + cmsIOHANDLER* io = Icc ->IOhandler; + cmsUInt32Number TagCount; + + + // Read the header + if (io -> Read(io, &Header, sizeof(cmsICCHeader), 1) != 1) { + return FALSE; + } + + // Validate file as an ICC profile + if (_cmsAdjustEndianess32(Header.magic) != cmsMagicNumber) { + cmsSignalError(Icc ->ContextID, cmsERROR_BAD_SIGNATURE, "not an ICC profile, invalid signature"); + return FALSE; + } + + // Adjust endianess of the used parameters + Icc -> DeviceClass = (cmsProfileClassSignature) _cmsAdjustEndianess32(Header.deviceClass); + Icc -> ColorSpace = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Header.colorSpace); + Icc -> PCS = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Header.pcs); + Icc -> RenderingIntent = _cmsAdjustEndianess32(Header.renderingIntent); + Icc -> flags = _cmsAdjustEndianess32(Header.flags); + Icc -> manufacturer = _cmsAdjustEndianess32(Header.manufacturer); + Icc -> model = _cmsAdjustEndianess32(Header.model); + _cmsAdjustEndianess64(&Icc -> attributes, Header.attributes); + Icc -> Version = _cmsAdjustEndianess32(Header.version); + + // Get size as reported in header + HeaderSize = _cmsAdjustEndianess32(Header.size); + + // Make sure HeaderSize is lower than profile size + if (HeaderSize >= Icc ->IOhandler ->ReportedSize) + HeaderSize = Icc ->IOhandler ->ReportedSize; + + + // Get creation date/time + _cmsDecodeDateTimeNumber(&Header.date, &Icc ->Created); + + // The profile ID are 32 raw bytes + memmove(Icc ->ProfileID.ID32, Header.profileID.ID32, 16); + + + // Read tag directory + if (!_cmsReadUInt32Number(io, &TagCount)) return FALSE; + if (TagCount > MAX_TABLE_TAG) { + + cmsSignalError(Icc ->ContextID, cmsERROR_RANGE, "Too many tags (%d)", TagCount); + return FALSE; + } + + + // Read tag directory + Icc -> TagCount = 0; + for (i=0; i < TagCount; i++) { + + if (!_cmsReadUInt32Number(io, (cmsUInt32Number *) &Tag.sig)) return FALSE; + if (!_cmsReadUInt32Number(io, &Tag.offset)) return FALSE; + if (!_cmsReadUInt32Number(io, &Tag.size)) return FALSE; + + // Perform some sanity check. Offset + size should fall inside file. + if (Tag.offset + Tag.size > HeaderSize || + Tag.offset + Tag.size < Tag.offset) + continue; + + Icc -> TagNames[Icc ->TagCount] = Tag.sig; + Icc -> TagOffsets[Icc ->TagCount] = Tag.offset; + Icc -> TagSizes[Icc ->TagCount] = Tag.size; + + // Search for links + for (j=0; j < Icc ->TagCount; j++) { + + if ((Icc ->TagOffsets[j] == Tag.offset) && + (Icc ->TagSizes[j] == Tag.size)) { + + Icc ->TagLinked[Icc ->TagCount] = Icc ->TagNames[j]; + } + + } + + Icc ->TagCount++; + } + + return TRUE; +} + +// Saves profile header +cmsBool _cmsWriteHeader(_cmsICCPROFILE* Icc, cmsUInt32Number UsedSpace) +{ + cmsICCHeader Header; + cmsUInt32Number i; + cmsTagEntry Tag; + cmsInt32Number Count = 0; + + Header.size = _cmsAdjustEndianess32(UsedSpace); + Header.cmmId = _cmsAdjustEndianess32(lcmsSignature); + Header.version = _cmsAdjustEndianess32(Icc ->Version); + + Header.deviceClass = (cmsProfileClassSignature) _cmsAdjustEndianess32(Icc -> DeviceClass); + Header.colorSpace = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Icc -> ColorSpace); + Header.pcs = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Icc -> PCS); + + // NOTE: in v4 Timestamp must be in UTC rather than in local time + _cmsEncodeDateTimeNumber(&Header.date, &Icc ->Created); + + Header.magic = _cmsAdjustEndianess32(cmsMagicNumber); + +#ifdef CMS_IS_WINDOWS_ + Header.platform = (cmsPlatformSignature) _cmsAdjustEndianess32(cmsSigMicrosoft); +#else + Header.platform = (cmsPlatformSignature) _cmsAdjustEndianess32(cmsSigMacintosh); +#endif + + Header.flags = _cmsAdjustEndianess32(Icc -> flags); + Header.manufacturer = _cmsAdjustEndianess32(Icc -> manufacturer); + Header.model = _cmsAdjustEndianess32(Icc -> model); + + _cmsAdjustEndianess64(&Header.attributes, Icc -> attributes); + + // Rendering intent in the header (for embedded profiles) + Header.renderingIntent = _cmsAdjustEndianess32(Icc -> RenderingIntent); + + // Illuminant is always D50 + Header.illuminant.X = _cmsAdjustEndianess32(_cmsDoubleTo15Fixed16(cmsD50_XYZ()->X)); + Header.illuminant.Y = _cmsAdjustEndianess32(_cmsDoubleTo15Fixed16(cmsD50_XYZ()->Y)); + Header.illuminant.Z = _cmsAdjustEndianess32(_cmsDoubleTo15Fixed16(cmsD50_XYZ()->Z)); + + // Created by LittleCMS (that's me!) + Header.creator = _cmsAdjustEndianess32(lcmsSignature); + + memset(&Header.reserved, 0, sizeof(Header.reserved)); + + // Set profile ID. Endianess is always big endian + memmove(&Header.profileID, &Icc ->ProfileID, 16); + + // Dump the header + if (!Icc -> IOhandler->Write(Icc->IOhandler, sizeof(cmsICCHeader), &Header)) return FALSE; + + // Saves Tag directory + + // Get true count + for (i=0; i < Icc -> TagCount; i++) { + if (Icc ->TagNames[i] != 0) + Count++; + } + + // Store number of tags + if (!_cmsWriteUInt32Number(Icc ->IOhandler, Count)) return FALSE; + + for (i=0; i < Icc -> TagCount; i++) { + + if (Icc ->TagNames[i] == 0) continue; // It is just a placeholder + + Tag.sig = (cmsTagSignature) _cmsAdjustEndianess32((cmsInt32Number) Icc -> TagNames[i]); + Tag.offset = _cmsAdjustEndianess32((cmsInt32Number) Icc -> TagOffsets[i]); + Tag.size = _cmsAdjustEndianess32((cmsInt32Number) Icc -> TagSizes[i]); + + if (!Icc ->IOhandler -> Write(Icc-> IOhandler, sizeof(cmsTagEntry), &Tag)) return FALSE; + } + + return TRUE; +} + +// ----------------------------------------------------------------------- Set/Get several struct members + + +cmsUInt32Number CMSEXPORT cmsGetHeaderRenderingIntent(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + return Icc -> RenderingIntent; +} + +void CMSEXPORT cmsSetHeaderRenderingIntent(cmsHPROFILE hProfile, cmsUInt32Number RenderingIntent) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + Icc -> RenderingIntent = RenderingIntent; +} + +cmsUInt32Number CMSEXPORT cmsGetHeaderFlags(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + return (cmsUInt32Number) Icc -> flags; +} + +void CMSEXPORT cmsSetHeaderFlags(cmsHPROFILE hProfile, cmsUInt32Number Flags) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + Icc -> flags = (cmsUInt32Number) Flags; +} + +cmsUInt32Number CMSEXPORT cmsGetHeaderManufacturer(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + return (cmsUInt32Number) Icc ->manufacturer; +} + +void CMSEXPORT cmsSetHeaderManufacturer(cmsHPROFILE hProfile, cmsUInt32Number manufacturer) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + Icc -> manufacturer = (cmsUInt32Number) manufacturer; +} + +cmsUInt32Number CMSEXPORT cmsGetHeaderModel(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + return (cmsUInt32Number) Icc ->model; +} + +void CMSEXPORT cmsSetHeaderModel(cmsHPROFILE hProfile, cmsUInt32Number model) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + Icc -> model = (cmsUInt32Number) model; +} + + +void CMSEXPORT cmsGetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number* Flags) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + memmove(Flags, &Icc -> attributes, sizeof(cmsUInt64Number)); +} + +void CMSEXPORT cmsSetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number Flags) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + memmove(&Icc -> attributes, &Flags, sizeof(cmsUInt64Number)); +} + +void CMSEXPORT cmsGetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + memmove(ProfileID, Icc ->ProfileID.ID8, 16); +} + +void CMSEXPORT cmsSetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + memmove(&Icc -> ProfileID, ProfileID, 16); +} + +cmsBool CMSEXPORT cmsGetHeaderCreationDateTime(cmsHPROFILE hProfile, struct tm *Dest) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + memmove(Dest, &Icc ->Created, sizeof(struct tm)); + return TRUE; +} + +cmsColorSpaceSignature CMSEXPORT cmsGetPCS(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + return Icc -> PCS; +} + +void CMSEXPORT cmsSetPCS(cmsHPROFILE hProfile, cmsColorSpaceSignature pcs) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + Icc -> PCS = pcs; +} + +cmsColorSpaceSignature CMSEXPORT cmsGetColorSpace(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + return Icc -> ColorSpace; +} + +void CMSEXPORT cmsSetColorSpace(cmsHPROFILE hProfile, cmsColorSpaceSignature sig) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + Icc -> ColorSpace = sig; +} + +cmsProfileClassSignature CMSEXPORT cmsGetDeviceClass(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + return Icc -> DeviceClass; +} + +void CMSEXPORT cmsSetDeviceClass(cmsHPROFILE hProfile, cmsProfileClassSignature sig) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + Icc -> DeviceClass = sig; +} + +cmsUInt32Number CMSEXPORT cmsGetEncodedICCversion(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + return Icc -> Version; +} + +void CMSEXPORT cmsSetEncodedICCversion(cmsHPROFILE hProfile, cmsUInt32Number Version) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + Icc -> Version = Version; +} + +// Get an hexadecimal number with same digits as v +static +cmsUInt32Number BaseToBase(cmsUInt32Number in, int BaseIn, int BaseOut) +{ + char Buff[100]; + int i, len; + cmsUInt32Number out; + + for (len=0; in > 0 && len < 100; len++) { + + Buff[len] = (char) (in % BaseIn); + in /= BaseIn; + } + + for (i=len-1, out=0; i >= 0; --i) { + out = out * BaseOut + Buff[i]; + } + + return out; +} + +void CMSEXPORT cmsSetProfileVersion(cmsHPROFILE hProfile, cmsFloat64Number Version) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + + // 4.2 -> 0x4200000 + + Icc -> Version = BaseToBase((cmsUInt32Number) floor(Version * 100.0), 10, 16) << 16; +} + +cmsFloat64Number CMSEXPORT cmsGetProfileVersion(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + cmsUInt32Number n = Icc -> Version >> 16; + + return BaseToBase(n, 16, 10) / 100.0; +} +// -------------------------------------------------------------------------------------------------------------- + + +// Create profile from IOhandler +cmsHPROFILE CMSEXPORT cmsOpenProfileFromIOhandlerTHR(cmsContext ContextID, cmsIOHANDLER* io) +{ + _cmsICCPROFILE* NewIcc; + cmsHPROFILE hEmpty = cmsCreateProfilePlaceholder(ContextID); + + if (hEmpty == NULL) return NULL; + + NewIcc = (_cmsICCPROFILE*) hEmpty; + + NewIcc ->IOhandler = io; + if (!_cmsReadHeader(NewIcc)) goto Error; + return hEmpty; + +Error: + cmsCloseProfile(hEmpty); + return NULL; +} + +// Create profile from disk file +cmsHPROFILE CMSEXPORT cmsOpenProfileFromFileTHR(cmsContext ContextID, const char *lpFileName, const char *sAccess) +{ + _cmsICCPROFILE* NewIcc; + cmsHPROFILE hEmpty = cmsCreateProfilePlaceholder(ContextID); + + if (hEmpty == NULL) return NULL; + + NewIcc = (_cmsICCPROFILE*) hEmpty; + + NewIcc ->IOhandler = cmsOpenIOhandlerFromFile(ContextID, lpFileName, sAccess); + if (NewIcc ->IOhandler == NULL) goto Error; + + if (*sAccess == 'W' || *sAccess == 'w') { + + NewIcc -> IsWrite = TRUE; + + return hEmpty; + } + + if (!_cmsReadHeader(NewIcc)) goto Error; + return hEmpty; + +Error: + cmsCloseProfile(hEmpty); + return NULL; +} + + +cmsHPROFILE CMSEXPORT cmsOpenProfileFromFile(const char *ICCProfile, const char *sAccess) +{ + return cmsOpenProfileFromFileTHR(NULL, ICCProfile, sAccess); +} + + +cmsHPROFILE CMSEXPORT cmsOpenProfileFromStreamTHR(cmsContext ContextID, FILE* ICCProfile, const char *sAccess) +{ + _cmsICCPROFILE* NewIcc; + cmsHPROFILE hEmpty = cmsCreateProfilePlaceholder(ContextID); + + if (hEmpty == NULL) return NULL; + + NewIcc = (_cmsICCPROFILE*) hEmpty; + + NewIcc ->IOhandler = cmsOpenIOhandlerFromStream(ContextID, ICCProfile); + if (NewIcc ->IOhandler == NULL) goto Error; + + if (*sAccess == 'w') { + + NewIcc -> IsWrite = TRUE; + return hEmpty; + } + + if (!_cmsReadHeader(NewIcc)) goto Error; + return hEmpty; + +Error: + cmsCloseProfile(hEmpty); + return NULL; + +} + +cmsHPROFILE CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char *sAccess) +{ + return cmsOpenProfileFromStreamTHR(NULL, ICCProfile, sAccess); +} + + +// Open from memory block +cmsHPROFILE CMSEXPORT cmsOpenProfileFromMemTHR(cmsContext ContextID, const void* MemPtr, cmsUInt32Number dwSize) +{ + _cmsICCPROFILE* NewIcc; + cmsHPROFILE hEmpty; + + hEmpty = cmsCreateProfilePlaceholder(ContextID); + if (hEmpty == NULL) return NULL; + + NewIcc = (_cmsICCPROFILE*) hEmpty; + + // Ok, in this case const void* is casted to void* just because open IO handler + // shares read and writting modes. Don't abuse this feature! + NewIcc ->IOhandler = cmsOpenIOhandlerFromMem(ContextID, (void*) MemPtr, dwSize, "r"); + if (NewIcc ->IOhandler == NULL) goto Error; + + if (!_cmsReadHeader(NewIcc)) goto Error; + + return hEmpty; + +Error: + cmsCloseProfile(hEmpty); + return NULL; +} + +cmsHPROFILE CMSEXPORT cmsOpenProfileFromMem(const void* MemPtr, cmsUInt32Number dwSize) +{ + return cmsOpenProfileFromMemTHR(NULL, MemPtr, dwSize); +} + + + +// Dump tag contents. If the profile is being modified, untouched tags are copied from FileOrig +static +cmsBool SaveTags(_cmsICCPROFILE* Icc, _cmsICCPROFILE* FileOrig) +{ + cmsUInt8Number* Data; + cmsUInt32Number i; + cmsUInt32Number Begin; + cmsIOHANDLER* io = Icc ->IOhandler; + cmsTagDescriptor* TagDescriptor; + cmsTagTypeSignature TypeBase; + cmsTagTypeHandler* TypeHandler; + + + for (i=0; i < Icc -> TagCount; i++) { + + + if (Icc ->TagNames[i] == 0) continue; + + // Linked tags are not written + if (Icc ->TagLinked[i] != (cmsTagSignature) 0) continue; + + Icc -> TagOffsets[i] = Begin = io ->UsedSpace; + + Data = (cmsUInt8Number*) Icc -> TagPtrs[i]; + + if (!Data) { + + // Reach here if we are copying a tag from a disk-based ICC profile which has not been modified by user. + // In this case a blind copy of the block data is performed + if (FileOrig != NULL && Icc -> TagOffsets[i]) { + + cmsUInt32Number TagSize = FileOrig -> TagSizes[i]; + cmsUInt32Number TagOffset = FileOrig -> TagOffsets[i]; + void* Mem; + + if (!FileOrig ->IOhandler->Seek(FileOrig ->IOhandler, TagOffset)) return FALSE; + + Mem = _cmsMalloc(Icc ->ContextID, TagSize); + if (Mem == NULL) return FALSE; + + if (FileOrig ->IOhandler->Read(FileOrig->IOhandler, Mem, TagSize, 1) != 1) return FALSE; + if (!io ->Write(io, TagSize, Mem)) return FALSE; + _cmsFree(Icc ->ContextID, Mem); + + Icc -> TagSizes[i] = (io ->UsedSpace - Begin); + + + // Align to 32 bit boundary. + if (! _cmsWriteAlignment(io)) + return FALSE; + } + + continue; + } + + + // Should this tag be saved as RAW? If so, tagsizes should be specified in advance (no further cooking is done) + if (Icc ->TagSaveAsRaw[i]) { + + if (io -> Write(io, Icc ->TagSizes[i], Data) != 1) return FALSE; + } + else { + + // Search for support on this tag + TagDescriptor = _cmsGetTagDescriptor(Icc -> TagNames[i]); + if (TagDescriptor == NULL) continue; // Unsupported, ignore it + + TypeHandler = Icc ->TagTypeHandlers[i]; + + if (TypeHandler == NULL) { + cmsSignalError(Icc ->ContextID, cmsERROR_INTERNAL, "(Internal) no handler for tag %x", Icc -> TagNames[i]); + continue; + } + + TypeBase = TypeHandler ->Signature; + if (!_cmsWriteTypeBase(io, TypeBase)) + return FALSE; + + TypeHandler ->ContextID = Icc ->ContextID; + TypeHandler ->ICCVersion = Icc ->Version; + if (!TypeHandler ->WritePtr(TypeHandler, io, Data, TagDescriptor ->ElemCount)) { + + char String[5]; + + _cmsTagSignature2String(String, (cmsTagSignature) TypeBase); + cmsSignalError(Icc ->ContextID, cmsERROR_WRITE, "Couldn't write type '%s'", String); + return FALSE; + } + } + + + Icc -> TagSizes[i] = (io ->UsedSpace - Begin); + + // Align to 32 bit boundary. + if (! _cmsWriteAlignment(io)) + return FALSE; + } + + + return TRUE; +} + + +// Fill the offset and size fields for all linked tags +static +cmsBool SetLinks( _cmsICCPROFILE* Icc) +{ + cmsUInt32Number i; + + for (i=0; i < Icc -> TagCount; i++) { + + cmsTagSignature lnk = Icc ->TagLinked[i]; + if (lnk != (cmsTagSignature) 0) { + + int j = _cmsSearchTag(Icc, lnk, FALSE); + if (j >= 0) { + + Icc ->TagOffsets[i] = Icc ->TagOffsets[j]; + Icc ->TagSizes[i] = Icc ->TagSizes[j]; + } + + } + } + + return TRUE; +} + +// Low-level save to IOHANDLER. It returns the number of bytes used to +// store the profile, or zero on error. io may be NULL and in this case +// no data is written--only sizes are calculated +cmsUInt32Number CMSEXPORT cmsSaveProfileToIOhandler(cmsHPROFILE hProfile, cmsIOHANDLER* io) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + _cmsICCPROFILE Keep; + cmsIOHANDLER* PrevIO; + cmsUInt32Number UsedSpace; + cmsContext ContextID; + + memmove(&Keep, Icc, sizeof(_cmsICCPROFILE)); + + ContextID = cmsGetProfileContextID(hProfile); + PrevIO = Icc ->IOhandler = cmsOpenIOhandlerFromNULL(ContextID); + if (PrevIO == NULL) return 0; + + // Pass #1 does compute offsets + + if (!_cmsWriteHeader(Icc, 0)) return 0; + if (!SaveTags(Icc, &Keep)) return 0; + + UsedSpace = PrevIO ->UsedSpace; + + // Pass #2 does save to iohandler + + if (io != NULL) { + Icc ->IOhandler = io; + if (!SetLinks(Icc)) goto CleanUp; + if (!_cmsWriteHeader(Icc, UsedSpace)) goto CleanUp; + if (!SaveTags(Icc, &Keep)) goto CleanUp; + } + + memmove(Icc, &Keep, sizeof(_cmsICCPROFILE)); + if (!cmsCloseIOhandler(PrevIO)) return 0; + + return UsedSpace; + + +CleanUp: + cmsCloseIOhandler(PrevIO); + memmove(Icc, &Keep, sizeof(_cmsICCPROFILE)); + return 0; +} + + +// Low-level save to disk. +cmsBool CMSEXPORT cmsSaveProfileToFile(cmsHPROFILE hProfile, const char* FileName) +{ + cmsContext ContextID = cmsGetProfileContextID(hProfile); + cmsIOHANDLER* io = cmsOpenIOhandlerFromFile(ContextID, FileName, "w"); + cmsBool rc; + + if (io == NULL) return FALSE; + + rc = (cmsSaveProfileToIOhandler(hProfile, io) != 0); + rc &= cmsCloseIOhandler(io); + + if (rc == FALSE) { // remove() is C99 per 7.19.4.1 + remove(FileName); // We have to IGNORE return value in this case + } + return rc; +} + +// Same as anterior, but for streams +cmsBool CMSEXPORT cmsSaveProfileToStream(cmsHPROFILE hProfile, FILE* Stream) +{ + cmsBool rc; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + cmsIOHANDLER* io = cmsOpenIOhandlerFromStream(ContextID, Stream); + + if (io == NULL) return FALSE; + + rc = (cmsSaveProfileToIOhandler(hProfile, io) != 0); + rc &= cmsCloseIOhandler(io); + + return rc; +} + + +// Same as anterior, but for memory blocks. In this case, a NULL as MemPtr means calculate needed space only +cmsBool CMSEXPORT cmsSaveProfileToMem(cmsHPROFILE hProfile, void *MemPtr, cmsUInt32Number* BytesNeeded) +{ + cmsBool rc; + cmsIOHANDLER* io; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + + // Should we just calculate the needed space? + if (MemPtr == NULL) { + + *BytesNeeded = cmsSaveProfileToIOhandler(hProfile, NULL); + return TRUE; + } + + // That is a real write operation + io = cmsOpenIOhandlerFromMem(ContextID, MemPtr, *BytesNeeded, "w"); + if (io == NULL) return FALSE; + + rc = (cmsSaveProfileToIOhandler(hProfile, io) != 0); + rc &= cmsCloseIOhandler(io); + + return rc; +} + + + +// Closes a profile freeing any involved resources +cmsBool CMSEXPORT cmsCloseProfile(cmsHPROFILE hProfile) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + cmsBool rc = TRUE; + cmsUInt32Number i; + + if (!Icc) return FALSE; + + // Was open in write mode? + if (Icc ->IsWrite) { + + Icc ->IsWrite = FALSE; // Assure no further writting + rc &= cmsSaveProfileToFile(hProfile, Icc ->IOhandler->PhysicalFile); + } + + for (i=0; i < Icc -> TagCount; i++) { + + if (Icc -> TagPtrs[i]) { + + cmsTagTypeHandler* TypeHandler = Icc ->TagTypeHandlers[i]; + + if (TypeHandler != NULL) { + + TypeHandler ->ContextID = Icc ->ContextID; // As an additional parameters + TypeHandler ->ICCVersion = Icc ->Version; + TypeHandler ->FreePtr(TypeHandler, Icc -> TagPtrs[i]); + } + else + _cmsFree(Icc ->ContextID, Icc ->TagPtrs[i]); + } + } + + if (Icc ->IOhandler != NULL) { + rc &= cmsCloseIOhandler(Icc->IOhandler); + } + + _cmsFree(Icc ->ContextID, Icc); // Free placeholder memory + + return rc; +} + + +// ------------------------------------------------------------------------------------------------------------------- + + +// Returns TRUE if a given tag is supported by a plug-in +static +cmsBool IsTypeSupported(cmsTagDescriptor* TagDescriptor, cmsTagTypeSignature Type) +{ + cmsUInt32Number i, nMaxTypes; + + nMaxTypes = TagDescriptor->nSupportedTypes; + if (nMaxTypes >= MAX_TYPES_IN_LCMS_PLUGIN) + nMaxTypes = MAX_TYPES_IN_LCMS_PLUGIN; + + for (i=0; i < nMaxTypes; i++) { + if (Type == TagDescriptor ->SupportedTypes[i]) return TRUE; + } + + return FALSE; +} + + +// That's the main read function +void* CMSEXPORT cmsReadTag(cmsHPROFILE hProfile, cmsTagSignature sig) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + cmsIOHANDLER* io = Icc ->IOhandler; + cmsTagTypeHandler* TypeHandler; + cmsTagDescriptor* TagDescriptor; + cmsTagTypeSignature BaseType; + cmsUInt32Number Offset, TagSize; + cmsUInt32Number ElemCount; + int n; + + n = _cmsSearchTag(Icc, sig, TRUE); + if (n < 0) return NULL; // Not found, return NULL + + + // If the element is already in memory, return the pointer + if (Icc -> TagPtrs[n]) { + + if (Icc ->TagSaveAsRaw[n]) return NULL; // We don't support read raw tags as cooked + return Icc -> TagPtrs[n]; + } + + // We need to read it. Get the offset and size to the file + Offset = Icc -> TagOffsets[n]; + TagSize = Icc -> TagSizes[n]; + + // Seek to its location + if (!io -> Seek(io, Offset)) + return NULL; + + // Search for support on this tag + TagDescriptor = _cmsGetTagDescriptor(sig); + if (TagDescriptor == NULL) return NULL; // Unsupported. + + // if supported, get type and check if in list + BaseType = _cmsReadTypeBase(io); + if (BaseType == 0) return NULL; + + if (!IsTypeSupported(TagDescriptor, BaseType)) return NULL; + + TagSize -= 8; // Alredy read by the type base logic + + // Get type handler + TypeHandler = _cmsGetTagTypeHandler(BaseType); + if (TypeHandler == NULL) return NULL; + + + // Read the tag + Icc -> TagTypeHandlers[n] = TypeHandler; + + TypeHandler ->ContextID = Icc ->ContextID; + TypeHandler ->ICCVersion = Icc ->Version; + Icc -> TagPtrs[n] = TypeHandler ->ReadPtr(TypeHandler, io, &ElemCount, TagSize); + + // The tag type is supported, but something wrong happend and we cannot read the tag. + // let know the user about this (although it is just a warning) + if (Icc -> TagPtrs[n] == NULL) { + + char String[5]; + + _cmsTagSignature2String(String, sig); + cmsSignalError(Icc ->ContextID, cmsERROR_CORRUPTION_DETECTED, "Corrupted tag '%s'", String); + return NULL; + } + + // This is a weird error that may be a symptom of something more serious, the number of + // stored item is actually less than the number of required elements. + if (ElemCount < TagDescriptor ->ElemCount) { + + char String[5]; + + _cmsTagSignature2String(String, sig); + cmsSignalError(Icc ->ContextID, cmsERROR_CORRUPTION_DETECTED, "'%s' Inconsistent number of items: expected %d, got %d", + String, TagDescriptor ->ElemCount, ElemCount); + } + + + // Return the data + return Icc -> TagPtrs[n]; +} + + +// Get true type of data +cmsTagTypeSignature _cmsGetTagTrueType(cmsHPROFILE hProfile, cmsTagSignature sig) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + cmsTagTypeHandler* TypeHandler; + int n; + + // Search for given tag in ICC profile directory + n = _cmsSearchTag(Icc, sig, TRUE); + if (n < 0) return (cmsTagTypeSignature) 0; // Not found, return NULL + + // Get the handler. The true type is there + TypeHandler = Icc -> TagTypeHandlers[n]; + return TypeHandler ->Signature; +} + + +// Write a single tag. This just keeps track of the tak into a list of "to be written". If the tag is already +// in that list, the previous version is deleted. +cmsBool CMSEXPORT cmsWriteTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + cmsTagTypeHandler* TypeHandler = NULL; + cmsTagDescriptor* TagDescriptor = NULL; + cmsTagTypeSignature Type; + int i; + cmsFloat64Number Version; + char TypeString[5], SigString[5]; + + + if (data == NULL) { + + i = _cmsSearchTag(Icc, sig, FALSE); + if (i >= 0) + Icc ->TagNames[i] = (cmsTagSignature) 0; + // Unsupported by now, reserved for future ampliations (delete) + return FALSE; + } + + i = _cmsSearchTag(Icc, sig, FALSE); + if (i >=0) { + + if (Icc -> TagPtrs[i] != NULL) { + + // Already exists. Free previous version + if (Icc ->TagSaveAsRaw[i]) { + _cmsFree(Icc ->ContextID, Icc ->TagPtrs[i]); + } + else { + TypeHandler = Icc ->TagTypeHandlers[i]; + + if (TypeHandler != NULL) { + + TypeHandler ->ContextID = Icc ->ContextID; // As an additional parameter + TypeHandler ->ICCVersion = Icc ->Version; + TypeHandler->FreePtr(TypeHandler, Icc -> TagPtrs[i]); + } + } + } + } + else { + // New one + i = Icc -> TagCount; + + if (i >= MAX_TABLE_TAG) { + cmsSignalError(Icc ->ContextID, cmsERROR_RANGE, "Too many tags (%d)", MAX_TABLE_TAG); + return FALSE; + } + + Icc -> TagCount++; + } + + // This is not raw + Icc ->TagSaveAsRaw[i] = FALSE; + + // This is not a link + Icc ->TagLinked[i] = (cmsTagSignature) 0; + + // Get information about the TAG. + TagDescriptor = _cmsGetTagDescriptor(sig); + if (TagDescriptor == NULL){ + cmsSignalError(Icc ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported tag '%x'", sig); + return FALSE; + } + + + // Now we need to know which type to use. It depends on the version. + Version = cmsGetProfileVersion(hProfile); + + if (TagDescriptor ->DecideType != NULL) { + + // Let the tag descriptor to decide the type base on depending on + // the data. This is useful for example on parametric curves, where + // curves specified by a table cannot be saved as parametric and needs + // to be revented to single v2-curves, even on v4 profiles. + + Type = TagDescriptor ->DecideType(Version, data); + } + else { + + + Type = TagDescriptor ->SupportedTypes[0]; + } + + // Does the tag support this type? + if (!IsTypeSupported(TagDescriptor, Type)) { + + _cmsTagSignature2String(TypeString, (cmsTagSignature) Type); + _cmsTagSignature2String(SigString, sig); + + cmsSignalError(Icc ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported type '%s' for tag '%s'", TypeString, SigString); + return FALSE; + } + + // Does we have a handler for this type? + TypeHandler = _cmsGetTagTypeHandler(Type); + if (TypeHandler == NULL) { + + _cmsTagSignature2String(TypeString, (cmsTagSignature) Type); + _cmsTagSignature2String(SigString, sig); + + cmsSignalError(Icc ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported type '%s' for tag '%s'", TypeString, SigString); + return FALSE; // Should never happen + } + + + // Fill fields on icc structure + Icc ->TagTypeHandlers[i] = TypeHandler; + Icc ->TagNames[i] = sig; + Icc ->TagSizes[i] = 0; + Icc ->TagOffsets[i] = 0; + + TypeHandler ->ContextID = Icc ->ContextID; + TypeHandler ->ICCVersion = Icc ->Version; + Icc ->TagPtrs[i] = TypeHandler ->DupPtr(TypeHandler, data, TagDescriptor ->ElemCount); + + if (Icc ->TagPtrs[i] == NULL) { + + _cmsTagSignature2String(TypeString, (cmsTagSignature) Type); + _cmsTagSignature2String(SigString, sig); + cmsSignalError(Icc ->ContextID, cmsERROR_CORRUPTION_DETECTED, "Malformed struct in type '%s' for tag '%s'", TypeString, SigString); + + return FALSE; + } + + return TRUE; +} + +// Read and write raw data. The only way those function would work and keep consistence with normal read and write +// is to do an additional step of serialization. That means, readRaw would issue a normal read and then convert the obtained +// data to raw bytes by using the "write" serialization logic. And vice-versa. I know this may end in situations where +// raw data written does not exactly correspond with the raw data proposed to cmsWriteRaw data, but this approach allows +// to write a tag as raw data and the read it as handled. + +cmsInt32Number CMSEXPORT cmsReadRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, void* data, cmsUInt32Number BufferSize) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + void *Object; + int i; + cmsIOHANDLER* MemIO; + cmsTagTypeHandler* TypeHandler = NULL; + cmsTagDescriptor* TagDescriptor = NULL; + cmsUInt32Number rc; + cmsUInt32Number Offset, TagSize; + + // Search for given tag in ICC profile directory + i = _cmsSearchTag(Icc, sig, TRUE); + if (i < 0) return 0; // Not found, return 0 + + // It is already read? + if (Icc -> TagPtrs[i] == NULL) { + + // No yet, get original position + Offset = Icc ->TagOffsets[i]; + TagSize = Icc ->TagSizes[i]; + + + // read the data directly, don't keep copy + if (data != NULL) { + + if (BufferSize < TagSize) + TagSize = BufferSize; + + if (!Icc ->IOhandler ->Seek(Icc ->IOhandler, Offset)) return 0; + if (!Icc ->IOhandler ->Read(Icc ->IOhandler, data, 1, TagSize)) return 0; + } + + return Icc ->TagSizes[i]; + } + + // The data has been already read, or written. But wait!, maybe the user choosed to save as + // raw data. In this case, return the raw data directly + if (Icc ->TagSaveAsRaw[i]) { + + if (data != NULL) { + + TagSize = Icc ->TagSizes[i]; + if (BufferSize < TagSize) + TagSize = BufferSize; + + memmove(data, Icc ->TagPtrs[i], TagSize); + } + + return Icc ->TagSizes[i]; + } + + // Already readed, or previously set by cmsWriteTag(). We need to serialize that + // data to raw in order to maintain consistency. + Object = cmsReadTag(hProfile, sig); + if (Object == NULL) return 0; + + // Now we need to serialize to a memory block: just use a memory iohandler + + if (data == NULL) { + MemIO = cmsOpenIOhandlerFromNULL(cmsGetProfileContextID(hProfile)); + } else{ + MemIO = cmsOpenIOhandlerFromMem(cmsGetProfileContextID(hProfile), data, BufferSize, "w"); + } + if (MemIO == NULL) return 0; + + // Obtain type handling for the tag + TypeHandler = Icc ->TagTypeHandlers[i]; + TagDescriptor = _cmsGetTagDescriptor(sig); + if (TagDescriptor == NULL) { + cmsCloseIOhandler(MemIO); + return 0; + } + + // Serialize + TypeHandler ->ContextID = Icc ->ContextID; + TypeHandler ->ICCVersion = Icc ->Version; + + if (!_cmsWriteTypeBase(MemIO, TypeHandler ->Signature)) { + cmsCloseIOhandler(MemIO); + return 0; + } + + if (!TypeHandler ->WritePtr(TypeHandler, MemIO, Object, TagDescriptor ->ElemCount)) { + cmsCloseIOhandler(MemIO); + return 0; + } + + // Get Size and close + rc = MemIO ->Tell(MemIO); + cmsCloseIOhandler(MemIO); // Ignore return code this time + + return rc; +} + +// Similar to the anterior. This function allows to write directly to the ICC profile any data, without +// checking anything. As a rule, mixing Raw with cooked doesn't work, so writting a tag as raw and then reading +// it as cooked without serializing does result into an error. If that is wha you want, you will need to dump +// the profile to memry or disk and then reopen it. +cmsBool CMSEXPORT cmsWriteRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data, cmsUInt32Number Size) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + int i; + + if (!_cmsNewTag(Icc, sig, &i)) return FALSE; + + // Mark the tag as being written as RAW + Icc ->TagSaveAsRaw[i] = TRUE; + Icc ->TagNames[i] = sig; + Icc ->TagLinked[i] = (cmsTagSignature) 0; + + // Keep a copy of the block + Icc ->TagPtrs[i] = _cmsDupMem(Icc ->ContextID, data, Size); + Icc ->TagSizes[i] = Size; + + return TRUE; +} + +// Using this function you can collapse several tag entries to the same block in the profile +cmsBool CMSEXPORT cmsLinkTag(cmsHPROFILE hProfile, cmsTagSignature sig, cmsTagSignature dest) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + int i; + + if (!_cmsNewTag(Icc, sig, &i)) return FALSE; + + // Keep necessary information + Icc ->TagSaveAsRaw[i] = FALSE; + Icc ->TagNames[i] = sig; + Icc ->TagLinked[i] = dest; + + Icc ->TagPtrs[i] = NULL; + Icc ->TagSizes[i] = 0; + Icc ->TagOffsets[i] = 0; + + return TRUE; +} + + +// Returns the tag linked to sig, in the case two tags are sharing same resource +cmsTagSignature CMSEXPORT cmsTagLinkedTo(cmsHPROFILE hProfile, cmsTagSignature sig) +{ + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + int i; + + // Search for given tag in ICC profile directory + i = _cmsSearchTag(Icc, sig, FALSE); + if (i < 0) return (cmsTagSignature) 0; // Not found, return 0 + + return Icc -> TagLinked[i]; +} diff --git a/src/cmsio1.c b/src/cmsio1.c new file mode 100644 index 0000000..0787503 --- /dev/null +++ b/src/cmsio1.c @@ -0,0 +1,897 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + +// Read tags using low-level functions, provides necessary glue code to adapt versions, etc. + +// LUT tags +static const cmsTagSignature Device2PCS16[] = {cmsSigAToB0Tag, // Perceptual + cmsSigAToB1Tag, // Relative colorimetric + cmsSigAToB2Tag, // Saturation + cmsSigAToB1Tag }; // Absolute colorimetric + +static const cmsTagSignature Device2PCSFloat[] = {cmsSigDToB0Tag, // Perceptual + cmsSigDToB1Tag, // Relative colorimetric + cmsSigDToB2Tag, // Saturation + cmsSigDToB3Tag }; // Absolute colorimetric + +static const cmsTagSignature PCS2Device16[] = {cmsSigBToA0Tag, // Perceptual + cmsSigBToA1Tag, // Relative colorimetric + cmsSigBToA2Tag, // Saturation + cmsSigBToA1Tag }; // Absolute colorimetric + +static const cmsTagSignature PCS2DeviceFloat[] = {cmsSigBToD0Tag, // Perceptual + cmsSigBToD1Tag, // Relative colorimetric + cmsSigBToD2Tag, // Saturation + cmsSigBToD3Tag }; // Absolute colorimetric + + +// Factors to convert from 1.15 fixed point to 0..1.0 range and vice-versa +#define InpAdj (1.0/MAX_ENCODEABLE_XYZ) // (65536.0/(65535.0*2.0)) +#define OutpAdj (MAX_ENCODEABLE_XYZ) // ((2.0*65535.0)/65536.0) + +// Several resources for gray conversions. +static const cmsFloat64Number GrayInputMatrix[] = { (InpAdj*cmsD50X), (InpAdj*cmsD50Y), (InpAdj*cmsD50Z) }; +static const cmsFloat64Number OneToThreeInputMatrix[] = { 1, 1, 1 }; +static const cmsFloat64Number PickYMatrix[] = { 0, (OutpAdj*cmsD50Y), 0 }; +static const cmsFloat64Number PickLstarMatrix[] = { 1, 0, 0 }; + +// Get a media white point fixing some issues found in certain old profiles +cmsBool _cmsReadMediaWhitePoint(cmsCIEXYZ* Dest, cmsHPROFILE hProfile) +{ + cmsCIEXYZ* Tag; + + _cmsAssert(Dest != NULL); + + Tag = (cmsCIEXYZ*) cmsReadTag(hProfile, cmsSigMediaWhitePointTag); + + // If no wp, take D50 + if (Tag == NULL) { + *Dest = *cmsD50_XYZ(); + return TRUE; + } + + // V2 display profiles should give D50 + if (cmsGetEncodedICCversion(hProfile) < 0x4000000) { + + if (cmsGetDeviceClass(hProfile) == cmsSigDisplayClass) { + *Dest = *cmsD50_XYZ(); + return TRUE; + } + } + + // All seems ok + *Dest = *Tag; + return TRUE; +} + + +// Chromatic adaptation matrix. Fix some issues as well +cmsBool _cmsReadCHAD(cmsMAT3* Dest, cmsHPROFILE hProfile) +{ + cmsMAT3* Tag; + + _cmsAssert(Dest != NULL); + + Tag = (cmsMAT3*) cmsReadTag(hProfile, cmsSigChromaticAdaptationTag); + + if (Tag != NULL) { + + *Dest = *Tag; + return TRUE; + } + + // No CHAD available, default it to identity + _cmsMAT3identity(Dest); + + // V2 display profiles should give D50 + if (cmsGetEncodedICCversion(hProfile) < 0x4000000) { + + if (cmsGetDeviceClass(hProfile) == cmsSigDisplayClass) { + + cmsCIEXYZ* White = (cmsCIEXYZ*) cmsReadTag(hProfile, cmsSigMediaWhitePointTag); + + if (White == NULL) { + + _cmsMAT3identity(Dest); + return TRUE; + } + + return _cmsAdaptationMatrix(Dest, NULL, White, cmsD50_XYZ()); + } + } + + return TRUE; +} + + +// Auxiliar, read colorants as a MAT3 structure. Used by any function that needs a matrix-shaper +static +cmsBool ReadICCMatrixRGB2XYZ(cmsMAT3* r, cmsHPROFILE hProfile) +{ + cmsCIEXYZ *PtrRed, *PtrGreen, *PtrBlue; + + _cmsAssert(r != NULL); + + PtrRed = (cmsCIEXYZ *) cmsReadTag(hProfile, cmsSigRedColorantTag); + PtrGreen = (cmsCIEXYZ *) cmsReadTag(hProfile, cmsSigGreenColorantTag); + PtrBlue = (cmsCIEXYZ *) cmsReadTag(hProfile, cmsSigBlueColorantTag); + + if (PtrRed == NULL || PtrGreen == NULL || PtrBlue == NULL) + return FALSE; + + _cmsVEC3init(&r -> v[0], PtrRed -> X, PtrGreen -> X, PtrBlue -> X); + _cmsVEC3init(&r -> v[1], PtrRed -> Y, PtrGreen -> Y, PtrBlue -> Y); + _cmsVEC3init(&r -> v[2], PtrRed -> Z, PtrGreen -> Z, PtrBlue -> Z); + + return TRUE; +} + + +// Gray input pipeline +static +cmsPipeline* BuildGrayInputMatrixPipeline(cmsHPROFILE hProfile) +{ + cmsToneCurve *GrayTRC; + cmsPipeline* Lut; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + + GrayTRC = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigGrayTRCTag); + if (GrayTRC == NULL) return NULL; + + Lut = cmsPipelineAlloc(ContextID, 1, 3); + if (Lut == NULL) return NULL; + + if (cmsGetPCS(hProfile) == cmsSigLabData) { + + // In this case we implement the profile as an identity matrix plus 3 tone curves + cmsUInt16Number Zero[2] = { 0x8080, 0x8080 }; + cmsToneCurve* EmptyTab; + cmsToneCurve* LabCurves[3]; + + EmptyTab = cmsBuildTabulatedToneCurve16(ContextID, 2, Zero); + + if (EmptyTab == NULL) { + + cmsPipelineFree(Lut); + return NULL; + } + + LabCurves[0] = GrayTRC; + LabCurves[1] = EmptyTab; + LabCurves[2] = EmptyTab; + + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 1, OneToThreeInputMatrix, NULL)); + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 3, LabCurves)); + + cmsFreeToneCurve(EmptyTab); + + } + else { + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 1, &GrayTRC)); + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 1, GrayInputMatrix, NULL)); + } + + return Lut; +} + +// RGB Matrix shaper +static +cmsPipeline* BuildRGBInputMatrixShaper(cmsHPROFILE hProfile) +{ + cmsPipeline* Lut; + cmsMAT3 Mat; + cmsToneCurve *Shapes[3]; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + int i, j; + + if (!ReadICCMatrixRGB2XYZ(&Mat, hProfile)) return NULL; + + // XYZ PCS in encoded in 1.15 format, and the matrix output comes in 0..0xffff range, so + // we need to adjust the output by a factor of (0x10000/0xffff) to put data in + // a 1.16 range, and then a >> 1 to obtain 1.15. The total factor is (65536.0)/(65535.0*2) + + for (i=0; i < 3; i++) + for (j=0; j < 3; j++) + Mat.v[i].n[j] *= InpAdj; + + + Shapes[0] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigRedTRCTag); + Shapes[1] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigGreenTRCTag); + Shapes[2] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigBlueTRCTag); + + if (!Shapes[0] || !Shapes[1] || !Shapes[2]) + return NULL; + + Lut = cmsPipelineAlloc(ContextID, 3, 3); + if (Lut != NULL) { + + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 3, Shapes)); + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 3, (cmsFloat64Number*) &Mat, NULL)); + } + + return Lut; +} + + + +// Read the DToAX tag, adjusting the encoding of Lab or XYZ if neded +static +cmsPipeline* _cmsReadFloatInputTag(cmsHPROFILE hProfile, cmsTagSignature tagFloat) +{ + cmsContext ContextID = cmsGetProfileContextID(hProfile); + cmsPipeline* Lut = cmsPipelineDup((cmsPipeline*) cmsReadTag(hProfile, tagFloat)); + cmsColorSpaceSignature spc = cmsGetColorSpace(hProfile); + + if (Lut == NULL) return NULL; + + // If PCS is Lab or XYZ, the floating point tag is accepting data in the space encoding, + // and since the formatter has already accomodated to 0..1.0, we should undo this change + if ( spc == cmsSigLabData) + { + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageNormalizeFromLabFloat(ContextID)); + } + else + if (spc == cmsSigXYZData) + { + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageNormalizeFromXyzFloat(ContextID)); + } + + return Lut; +} + + +// Read and create a BRAND NEW MPE LUT from a given profile. All stuff dependent of version, etc +// is adjusted here in order to create a LUT that takes care of all those details +cmsPipeline* _cmsReadInputLUT(cmsHPROFILE hProfile, int Intent) +{ + cmsTagTypeSignature OriginalType; + cmsTagSignature tag16 = Device2PCS16[Intent]; + cmsTagSignature tagFloat = Device2PCSFloat[Intent]; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + + // On named color, take the appropiate tag + if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) { + + cmsPipeline* Lut; + cmsNAMEDCOLORLIST* nc = (cmsNAMEDCOLORLIST*) cmsReadTag(hProfile, cmsSigNamedColor2Tag); + + if (nc == NULL) return NULL; + + Lut = cmsPipelineAlloc(ContextID, 0, 0); + if (Lut == NULL) { + cmsFreeNamedColorList(nc); + return NULL; + } + + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocNamedColor(nc, TRUE)); + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV2ToV4(ContextID)); + return Lut; + } + + if (cmsIsTag(hProfile, tagFloat)) { // Float tag takes precedence + + // Floating point LUT are always V4, but the encoding range is no + // longer 0..1.0, so we need to add an stage depending on the color space + return _cmsReadFloatInputTag(hProfile, tagFloat); + } + + // Revert to perceptual if no tag is found + if (!cmsIsTag(hProfile, tag16)) { + tag16 = Device2PCS16[0]; + } + + if (cmsIsTag(hProfile, tag16)) { // Is there any LUT-Based table? + + // Check profile version and LUT type. Do the necessary adjustments if needed + + // First read the tag + cmsPipeline* Lut = (cmsPipeline*) cmsReadTag(hProfile, tag16); + if (Lut == NULL) return NULL; + + // After reading it, we have now info about the original type + OriginalType = _cmsGetTagTrueType(hProfile, tag16); + + // The profile owns the Lut, so we need to copy it + Lut = cmsPipelineDup(Lut); + + // We need to adjust data only for Lab16 on output + if (OriginalType != cmsSigLut16Type || cmsGetPCS(hProfile) != cmsSigLabData) + return Lut; + + // If the input is Lab, add also a conversion at the begin + if (cmsGetColorSpace(hProfile) == cmsSigLabData) + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocLabV4ToV2(ContextID)); + + // Add a matrix for conversion V2 to V4 Lab PCS + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV2ToV4(ContextID)); + return Lut; + } + + // Lut was not found, try to create a matrix-shaper + + // Check if this is a grayscale profile. + if (cmsGetColorSpace(hProfile) == cmsSigGrayData) { + + // if so, build appropiate conversion tables. + // The tables are the PCS iluminant, scaled across GrayTRC + return BuildGrayInputMatrixPipeline(hProfile); + } + + // Not gray, create a normal matrix-shaper + return BuildRGBInputMatrixShaper(hProfile); +} + +// --------------------------------------------------------------------------------------------------------------- + +// Gray output pipeline. +// XYZ -> Gray or Lab -> Gray. Since we only know the GrayTRC, we need to do some assumptions. Gray component will be +// given by Y on XYZ PCS and by L* on Lab PCS, Both across inverse TRC curve. +// The complete pipeline on XYZ is Matrix[3:1] -> Tone curve and in Lab Matrix[3:1] -> Tone Curve as well. + +static +cmsPipeline* BuildGrayOutputPipeline(cmsHPROFILE hProfile) +{ + cmsToneCurve *GrayTRC, *RevGrayTRC; + cmsPipeline* Lut; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + + GrayTRC = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigGrayTRCTag); + if (GrayTRC == NULL) return NULL; + + RevGrayTRC = cmsReverseToneCurve(GrayTRC); + if (RevGrayTRC == NULL) return NULL; + + Lut = cmsPipelineAlloc(ContextID, 3, 1); + if (Lut == NULL) { + cmsFreeToneCurve(RevGrayTRC); + return NULL; + } + + if (cmsGetPCS(hProfile) == cmsSigLabData) { + + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 1, 3, PickLstarMatrix, NULL)); + } + else { + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 1, 3, PickYMatrix, NULL)); + } + + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 1, &RevGrayTRC)); + cmsFreeToneCurve(RevGrayTRC); + + return Lut; +} + + + + +static +cmsPipeline* BuildRGBOutputMatrixShaper(cmsHPROFILE hProfile) +{ + cmsPipeline* Lut; + cmsToneCurve *Shapes[3], *InvShapes[3]; + cmsMAT3 Mat, Inv; + int i, j; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + + if (!ReadICCMatrixRGB2XYZ(&Mat, hProfile)) + return NULL; + + if (!_cmsMAT3inverse(&Mat, &Inv)) + return NULL; + + // XYZ PCS in encoded in 1.15 format, and the matrix input should come in 0..0xffff range, so + // we need to adjust the input by a << 1 to obtain a 1.16 fixed and then by a factor of + // (0xffff/0x10000) to put data in 0..0xffff range. Total factor is (2.0*65535.0)/65536.0; + + for (i=0; i < 3; i++) + for (j=0; j < 3; j++) + Inv.v[i].n[j] *= OutpAdj; + + Shapes[0] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigRedTRCTag); + Shapes[1] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigGreenTRCTag); + Shapes[2] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigBlueTRCTag); + + if (!Shapes[0] || !Shapes[1] || !Shapes[2]) + return NULL; + + InvShapes[0] = cmsReverseToneCurve(Shapes[0]); + InvShapes[1] = cmsReverseToneCurve(Shapes[1]); + InvShapes[2] = cmsReverseToneCurve(Shapes[2]); + + if (!InvShapes[0] || !InvShapes[1] || !InvShapes[2]) { + return NULL; + } + + Lut = cmsPipelineAlloc(ContextID, 3, 3); + if (Lut != NULL) { + + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 3, (cmsFloat64Number*) &Inv, NULL)); + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 3, InvShapes)); + } + + cmsFreeToneCurveTriple(InvShapes); + return Lut; +} + + +// Change CLUT interpolation to trilinear +static +void ChangeInterpolationToTrilinear(cmsPipeline* Lut) +{ + cmsStage* Stage; + + for (Stage = cmsPipelineGetPtrToFirstStage(Lut); + Stage != NULL; + Stage = cmsStageNext(Stage)) { + + if (cmsStageType(Stage) == cmsSigCLutElemType) { + + _cmsStageCLutData* CLUT = (_cmsStageCLutData*) Stage ->Data; + + CLUT ->Params->dwFlags |= CMS_LERP_FLAGS_TRILINEAR; + _cmsSetInterpolationRoutine(CLUT ->Params); + } + } +} + + +// Read the DToAX tag, adjusting the encoding of Lab or XYZ if neded +static +cmsPipeline* _cmsReadFloatOutputTag(cmsHPROFILE hProfile, cmsTagSignature tagFloat) +{ + cmsContext ContextID = cmsGetProfileContextID(hProfile); + cmsPipeline* Lut = cmsPipelineDup((cmsPipeline*) cmsReadTag(hProfile, tagFloat)); + cmsColorSpaceSignature PCS = cmsGetPCS(hProfile); + + if (Lut == NULL) return NULL; + + // If PCS is Lab or XYZ, the floating point tag is accepting data in the space encoding, + // and since the formatter has already accomodated to 0..1.0, we should undo this change + if ( PCS == cmsSigLabData) + { + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToLabFloat(ContextID)); + } + else + if (PCS == cmsSigXYZData) + { + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToXyzFloat(ContextID)); + } + + return Lut; +} + +// Create an output MPE LUT from agiven profile. Version mismatches are handled here +cmsPipeline* _cmsReadOutputLUT(cmsHPROFILE hProfile, int Intent) +{ + cmsTagTypeSignature OriginalType; + cmsTagSignature tag16 = PCS2Device16[Intent]; + cmsTagSignature tagFloat = PCS2DeviceFloat[Intent]; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + + if (cmsIsTag(hProfile, tagFloat)) { // Float tag takes precedence + + // Floating point LUT are always V4 + return _cmsReadFloatOutputTag(hProfile, tagFloat); + } + + // Revert to perceptual if no tag is found + if (!cmsIsTag(hProfile, tag16)) { + tag16 = PCS2Device16[0]; + } + + if (cmsIsTag(hProfile, tag16)) { // Is there any LUT-Based table? + + // Check profile version and LUT type. Do the necessary adjustments if needed + + // First read the tag + cmsPipeline* Lut = (cmsPipeline*) cmsReadTag(hProfile, tag16); + if (Lut == NULL) return NULL; + + // After reading it, we have info about the original type + OriginalType = _cmsGetTagTrueType(hProfile, tag16); + + // The profile owns the Lut, so we need to copy it + Lut = cmsPipelineDup(Lut); + if (Lut == NULL) return NULL; + + // Now it is time for a controversial stuff. I found that for 3D LUTS using + // Lab used as indexer space, trilinear interpolation should be used + if (cmsGetPCS(hProfile) == cmsSigLabData) + ChangeInterpolationToTrilinear(Lut); + + // We need to adjust data only for Lab and Lut16 type + if (OriginalType != cmsSigLut16Type || cmsGetPCS(hProfile) != cmsSigLabData) + return Lut; + + // Add a matrix for conversion V4 to V2 Lab PCS + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocLabV4ToV2(ContextID)); + + // If the output is Lab, add also a conversion at the end + if (cmsGetColorSpace(hProfile) == cmsSigLabData) + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV2ToV4(ContextID)); + + return Lut; + } + + // Lut not found, try to create a matrix-shaper + + // Check if this is a grayscale profile. + if (cmsGetColorSpace(hProfile) == cmsSigGrayData) { + + // if so, build appropiate conversion tables. + // The tables are the PCS iluminant, scaled across GrayTRC + return BuildGrayOutputPipeline(hProfile); + } + + // Not gray, create a normal matrix-shaper + return BuildRGBOutputMatrixShaper(hProfile); +} + +// --------------------------------------------------------------------------------------------------------------- + +// Read the AToD0 tag, adjusting the encoding of Lab or XYZ if neded +static +cmsPipeline* _cmsReadFloatDevicelinkTag(cmsHPROFILE hProfile, cmsTagSignature tagFloat) +{ + cmsContext ContextID = cmsGetProfileContextID(hProfile); + cmsPipeline* Lut = cmsPipelineDup((cmsPipeline*) cmsReadTag(hProfile, tagFloat)); + cmsColorSpaceSignature PCS = cmsGetPCS(hProfile); + cmsColorSpaceSignature spc = cmsGetColorSpace(hProfile); + + if (Lut == NULL) return NULL; + + if (spc == cmsSigLabData) + { + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToLabFloat(ContextID)); + } + else + if (spc == cmsSigXYZData) + { + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToXyzFloat(ContextID)); + } + + if (PCS == cmsSigLabData) + { + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageNormalizeFromLabFloat(ContextID)); + } + else + if (PCS == cmsSigXYZData) + { + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageNormalizeFromXyzFloat(ContextID)); + } + + return Lut; +} + +// This one includes abstract profiles as well. Matrix-shaper cannot be obtained on that device class. The +// tag name here may default to AToB0 +cmsPipeline* _cmsReadDevicelinkLUT(cmsHPROFILE hProfile, int Intent) +{ + cmsPipeline* Lut; + cmsTagTypeSignature OriginalType; + cmsTagSignature tag16 = Device2PCS16[Intent]; + cmsTagSignature tagFloat = Device2PCSFloat[Intent]; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + + + // On named color, take the appropiate tag + if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) { + + cmsNAMEDCOLORLIST* nc = (cmsNAMEDCOLORLIST*) cmsReadTag(hProfile, cmsSigNamedColor2Tag); + + if (nc == NULL) return NULL; + + Lut = cmsPipelineAlloc(ContextID, 0, 0); + if (Lut == NULL) { + cmsFreeNamedColorList(nc); + return NULL; + } + + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocNamedColor(nc, FALSE)); + if (cmsGetColorSpace(hProfile) == cmsSigLabData) + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV2ToV4(ContextID)); + return Lut; + } + + if (cmsIsTag(hProfile, tagFloat)) { // Float tag takes precedence + + // Floating point LUT are always V + return _cmsReadFloatDevicelinkTag(hProfile, tagFloat); + } + + tagFloat = Device2PCSFloat[0]; + if (cmsIsTag(hProfile, tagFloat)) { + + return cmsPipelineDup((cmsPipeline*) cmsReadTag(hProfile, tagFloat)); + } + + if (!cmsIsTag(hProfile, tag16)) { // Is there any LUT-Based table? + + tag16 = Device2PCS16[0]; + if (!cmsIsTag(hProfile, tag16)) return NULL; + } + + // Check profile version and LUT type. Do the necessary adjustments if needed + + // Read the tag + Lut = (cmsPipeline*) cmsReadTag(hProfile, tag16); + if (Lut == NULL) return NULL; + + // The profile owns the Lut, so we need to copy it + Lut = cmsPipelineDup(Lut); + if (Lut == NULL) return NULL; + + // Now it is time for a controversial stuff. I found that for 3D LUTS using + // Lab used as indexer space, trilinear interpolation should be used + if (cmsGetColorSpace(hProfile) == cmsSigLabData) + ChangeInterpolationToTrilinear(Lut); + + // After reading it, we have info about the original type + OriginalType = _cmsGetTagTrueType(hProfile, tag16); + + // We need to adjust data for Lab16 on output + if (OriginalType != cmsSigLut16Type) return Lut; + + // Here it is possible to get Lab on both sides + + if (cmsGetPCS(hProfile) == cmsSigLabData) { + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocLabV4ToV2(ContextID)); + } + + if (cmsGetColorSpace(hProfile) == cmsSigLabData) { + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV2ToV4(ContextID)); + } + + return Lut; + + +} + +// --------------------------------------------------------------------------------------------------------------- + +// Returns TRUE if the profile is implemented as matrix-shaper +cmsBool CMSEXPORT cmsIsMatrixShaper(cmsHPROFILE hProfile) +{ + switch (cmsGetColorSpace(hProfile)) { + + case cmsSigGrayData: + + return cmsIsTag(hProfile, cmsSigGrayTRCTag); + + case cmsSigRgbData: + + return (cmsIsTag(hProfile, cmsSigRedColorantTag) && + cmsIsTag(hProfile, cmsSigGreenColorantTag) && + cmsIsTag(hProfile, cmsSigBlueColorantTag) && + cmsIsTag(hProfile, cmsSigRedTRCTag) && + cmsIsTag(hProfile, cmsSigGreenTRCTag) && + cmsIsTag(hProfile, cmsSigBlueTRCTag)); + + default: + + return FALSE; + } +} + +// Returns TRUE if the intent is implemented as CLUT +cmsBool CMSEXPORT cmsIsCLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number UsedDirection) +{ + const cmsTagSignature* TagTable; + + // For devicelinks, the supported intent is that one stated in the header + if (cmsGetDeviceClass(hProfile) == cmsSigLinkClass) { + return (cmsGetHeaderRenderingIntent(hProfile) == Intent); + } + + switch (UsedDirection) { + + case LCMS_USED_AS_INPUT: TagTable = Device2PCS16; break; + case LCMS_USED_AS_OUTPUT:TagTable = PCS2Device16; break; + + // For proofing, we need rel. colorimetric in output. Let's do some recursion + case LCMS_USED_AS_PROOF: + return cmsIsIntentSupported(hProfile, Intent, LCMS_USED_AS_INPUT) && + cmsIsIntentSupported(hProfile, INTENT_RELATIVE_COLORIMETRIC, LCMS_USED_AS_OUTPUT); + + default: + cmsSignalError(cmsGetProfileContextID(hProfile), cmsERROR_RANGE, "Unexpected direction (%d)", UsedDirection); + return FALSE; + } + + return cmsIsTag(hProfile, TagTable[Intent]); + +} + + +// Return info about supported intents +cmsBool CMSEXPORT cmsIsIntentSupported(cmsHPROFILE hProfile, + cmsUInt32Number Intent, cmsUInt32Number UsedDirection) +{ + + if (cmsIsCLUT(hProfile, Intent, UsedDirection)) return TRUE; + + // Is there any matrix-shaper? If so, the intent is supported. This is a bit odd, since V2 matrix shaper + // does not fully support relative colorimetric because they cannot deal with non-zero black points, but + // many profiles claims that, and this is certainly not true for V4 profiles. Lets answer "yes" no matter + // the accuracy would be less than optimal in rel.col and v2 case. + + return cmsIsMatrixShaper(hProfile); +} + + +// --------------------------------------------------------------------------------------------------------------- + +// Read both, profile sequence description and profile sequence id if present. Then combine both to +// create qa unique structure holding both. Shame on ICC to store things in such complicated way. +cmsSEQ* _cmsReadProfileSequence(cmsHPROFILE hProfile) +{ + cmsSEQ* ProfileSeq; + cmsSEQ* ProfileId; + cmsSEQ* NewSeq; + cmsUInt32Number i; + + // Take profile sequence description first + ProfileSeq = (cmsSEQ*) cmsReadTag(hProfile, cmsSigProfileSequenceDescTag); + + // Take profile sequence ID + ProfileId = (cmsSEQ*) cmsReadTag(hProfile, cmsSigProfileSequenceIdTag); + + if (ProfileSeq == NULL && ProfileId == NULL) return NULL; + + if (ProfileSeq == NULL) return cmsDupProfileSequenceDescription(ProfileId); + if (ProfileId == NULL) return cmsDupProfileSequenceDescription(ProfileSeq); + + // We have to mix both together. For that they must agree + if (ProfileSeq ->n != ProfileId ->n) return cmsDupProfileSequenceDescription(ProfileSeq); + + NewSeq = cmsDupProfileSequenceDescription(ProfileSeq); + + // Ok, proceed to the mixing + if (NewSeq != NULL) { + for (i=0; i < ProfileSeq ->n; i++) { + + memmove(&NewSeq ->seq[i].ProfileID, &ProfileId ->seq[i].ProfileID, sizeof(cmsProfileID)); + NewSeq ->seq[i].Description = cmsMLUdup(ProfileId ->seq[i].Description); + } + } + return NewSeq; +} + +// Dump the contents of profile sequence in both tags (if v4 available) +cmsBool _cmsWriteProfileSequence(cmsHPROFILE hProfile, const cmsSEQ* seq) +{ + if (!cmsWriteTag(hProfile, cmsSigProfileSequenceDescTag, seq)) return FALSE; + + if (cmsGetProfileVersion(hProfile) >= 4.0) { + + if (!cmsWriteTag(hProfile, cmsSigProfileSequenceIdTag, seq)) return FALSE; + } + + return TRUE; +} + + +// Auxiliar, read and duplicate a MLU if found. +static +cmsMLU* GetMLUFromProfile(cmsHPROFILE h, cmsTagSignature sig) +{ + cmsMLU* mlu = (cmsMLU*) cmsReadTag(h, sig); + if (mlu == NULL) return NULL; + + return cmsMLUdup(mlu); +} + +// Create a sequence description out of an array of profiles +cmsSEQ* _cmsCompileProfileSequence(cmsContext ContextID, cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[]) +{ + cmsUInt32Number i; + cmsSEQ* seq = cmsAllocProfileSequenceDescription(ContextID, nProfiles); + + if (seq == NULL) return NULL; + + for (i=0; i < nProfiles; i++) { + + cmsPSEQDESC* ps = &seq ->seq[i]; + cmsHPROFILE h = hProfiles[i]; + cmsTechnologySignature* techpt; + + cmsGetHeaderAttributes(h, &ps ->attributes); + cmsGetHeaderProfileID(h, ps ->ProfileID.ID8); + ps ->deviceMfg = cmsGetHeaderManufacturer(h); + ps ->deviceModel = cmsGetHeaderModel(h); + + techpt = (cmsTechnologySignature*) cmsReadTag(h, cmsSigTechnologyTag); + if (techpt == NULL) + ps ->technology = (cmsTechnologySignature) 0; + else + ps ->technology = *techpt; + + ps ->Manufacturer = GetMLUFromProfile(h, cmsSigDeviceMfgDescTag); + ps ->Model = GetMLUFromProfile(h, cmsSigDeviceModelDescTag); + ps ->Description = GetMLUFromProfile(h, cmsSigProfileDescriptionTag); + + } + + return seq; +} + +// ------------------------------------------------------------------------------------------------------------------- + + +static +const cmsMLU* GetInfo(cmsHPROFILE hProfile, cmsInfoType Info) +{ + cmsTagSignature sig; + + switch (Info) { + + case cmsInfoDescription: + sig = cmsSigProfileDescriptionTag; + break; + + case cmsInfoManufacturer: + sig = cmsSigDeviceMfgDescTag; + break; + + case cmsInfoModel: + sig = cmsSigDeviceModelDescTag; + break; + + case cmsInfoCopyright: + sig = cmsSigCopyrightTag; + break; + + default: return NULL; + } + + + return (cmsMLU*) cmsReadTag(hProfile, sig); +} + + + +cmsUInt32Number CMSEXPORT cmsGetProfileInfo(cmsHPROFILE hProfile, cmsInfoType Info, + const char LanguageCode[3], const char CountryCode[3], + wchar_t* Buffer, cmsUInt32Number BufferSize) +{ + const cmsMLU* mlu = GetInfo(hProfile, Info); + if (mlu == NULL) return 0; + + return cmsMLUgetWide(mlu, LanguageCode, CountryCode, Buffer, BufferSize); +} + + +cmsUInt32Number CMSEXPORT cmsGetProfileInfoASCII(cmsHPROFILE hProfile, cmsInfoType Info, + const char LanguageCode[3], const char CountryCode[3], + char* Buffer, cmsUInt32Number BufferSize) +{ + const cmsMLU* mlu = GetInfo(hProfile, Info); + if (mlu == NULL) return 0; + + return cmsMLUgetASCII(mlu, LanguageCode, CountryCode, Buffer, BufferSize); +} diff --git a/src/cmslut.c b/src/cmslut.c new file mode 100644 index 0000000..52204be --- /dev/null +++ b/src/cmslut.c @@ -0,0 +1,1734 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + + +// Allocates an empty multi profile element +cmsStage* CMSEXPORT _cmsStageAllocPlaceholder(cmsContext ContextID, + cmsStageSignature Type, + cmsUInt32Number InputChannels, + cmsUInt32Number OutputChannels, + _cmsStageEvalFn EvalPtr, + _cmsStageDupElemFn DupElemPtr, + _cmsStageFreeElemFn FreePtr, + void* Data) +{ + cmsStage* ph = (cmsStage*) _cmsMallocZero(ContextID, sizeof(cmsStage)); + + if (ph == NULL) return NULL; + + + ph ->ContextID = ContextID; + + ph ->Type = Type; + ph ->Implements = Type; // By default, no clue on what is implementing + + ph ->InputChannels = InputChannels; + ph ->OutputChannels = OutputChannels; + ph ->EvalPtr = EvalPtr; + ph ->DupElemPtr = DupElemPtr; + ph ->FreePtr = FreePtr; + ph ->Data = Data; + + return ph; +} + + +static +void EvaluateIdentity(const cmsFloat32Number In[], + cmsFloat32Number Out[], + const cmsStage *mpe) +{ + memmove(Out, In, mpe ->InputChannels * sizeof(cmsFloat32Number)); +} + + +cmsStage* CMSEXPORT cmsStageAllocIdentity(cmsContext ContextID, cmsUInt32Number nChannels) +{ + return _cmsStageAllocPlaceholder(ContextID, + cmsSigIdentityElemType, + nChannels, nChannels, + EvaluateIdentity, + NULL, + NULL, + NULL); + } + +// Conversion functions. From floating point to 16 bits +static +void FromFloatTo16(const cmsFloat32Number In[], cmsUInt16Number Out[], cmsUInt32Number n) +{ + cmsUInt32Number i; + + for (i=0; i < n; i++) { + Out[i] = _cmsQuickSaturateWord(In[i] * 65535.0); + } +} + +// From 16 bits to floating point +static +void From16ToFloat(const cmsUInt16Number In[], cmsFloat32Number Out[], cmsUInt32Number n) +{ + cmsUInt32Number i; + + for (i=0; i < n; i++) { + Out[i] = (cmsFloat32Number) In[i] / 65535.0F; + } +} + + +// This function is quite useful to analyze the structure of a LUT and retrieve the MPE elements +// that conform the LUT. It should be called with the LUT, the number of expected elements and +// then a list of expected types followed with a list of cmsFloat64Number pointers to MPE elements. If +// the function founds a match with current pipeline, it fills the pointers and returns TRUE +// if not, returns FALSE without touching anything. Setting pointers to NULL does bypass +// the storage process. +cmsBool CMSEXPORT cmsPipelineCheckAndRetreiveStages(const cmsPipeline* Lut, cmsUInt32Number n, ...) +{ + va_list args; + cmsUInt32Number i; + cmsStage* mpe; + cmsStageSignature Type; + void** ElemPtr; + + // Make sure same number of elements + if (cmsPipelineStageCount(Lut) != n) return FALSE; + + va_start(args, n); + + // Iterate across asked types + mpe = Lut ->Elements; + for (i=0; i < n; i++) { + + // Get asked type + Type = (cmsStageSignature)va_arg(args, cmsStageSignature); + if (mpe ->Type != Type) { + + va_end(args); // Mismatch. We are done. + return FALSE; + } + mpe = mpe ->Next; + } + + // Found a combination, fill pointers if not NULL + mpe = Lut ->Elements; + for (i=0; i < n; i++) { + + ElemPtr = va_arg(args, void**); + if (ElemPtr != NULL) + *ElemPtr = mpe; + + mpe = mpe ->Next; + } + + va_end(args); + return TRUE; +} + +// Below there are implementations for several types of elements. Each type may be implemented by a +// evaluation function, a duplication function, a function to free resources and a constructor. + +// ************************************************************************************************* +// Type cmsSigCurveSetElemType (curves) +// ************************************************************************************************* + +cmsToneCurve** _cmsStageGetPtrToCurveSet(const cmsStage* mpe) +{ + _cmsStageToneCurvesData* Data = (_cmsStageToneCurvesData*) mpe ->Data; + + return Data ->TheCurves; +} + +static +void EvaluateCurves(const cmsFloat32Number In[], + cmsFloat32Number Out[], + const cmsStage *mpe) +{ + _cmsStageToneCurvesData* Data; + cmsUInt32Number i; + + _cmsAssert(mpe != NULL); + + Data = (_cmsStageToneCurvesData*) mpe ->Data; + if (Data == NULL) return; + + if (Data ->TheCurves == NULL) return; + + for (i=0; i < Data ->nCurves; i++) { + Out[i] = cmsEvalToneCurveFloat(Data ->TheCurves[i], In[i]); + } +} + +static +void CurveSetElemTypeFree(cmsStage* mpe) +{ + _cmsStageToneCurvesData* Data; + cmsUInt32Number i; + + _cmsAssert(mpe != NULL); + + Data = (_cmsStageToneCurvesData*) mpe ->Data; + if (Data == NULL) return; + + if (Data ->TheCurves != NULL) { + for (i=0; i < Data ->nCurves; i++) { + if (Data ->TheCurves[i] != NULL) + cmsFreeToneCurve(Data ->TheCurves[i]); + } + } + _cmsFree(mpe ->ContextID, Data ->TheCurves); + _cmsFree(mpe ->ContextID, Data); +} + + +static +void* CurveSetDup(cmsStage* mpe) +{ + _cmsStageToneCurvesData* Data = (_cmsStageToneCurvesData*) mpe ->Data; + _cmsStageToneCurvesData* NewElem; + cmsUInt32Number i; + + NewElem = (_cmsStageToneCurvesData*) _cmsMallocZero(mpe ->ContextID, sizeof(_cmsStageToneCurvesData)); + if (NewElem == NULL) return NULL; + + NewElem ->nCurves = Data ->nCurves; + NewElem ->TheCurves = (cmsToneCurve**) _cmsCalloc(mpe ->ContextID, NewElem ->nCurves, sizeof(cmsToneCurve*)); + + if (NewElem ->TheCurves == NULL) goto Error; + + for (i=0; i < NewElem ->nCurves; i++) { + + // Duplicate each curve. It may fail. + NewElem ->TheCurves[i] = cmsDupToneCurve(Data ->TheCurves[i]); + if (NewElem ->TheCurves[i] == NULL) goto Error; + + + } + return (void*) NewElem; + +Error: + + if (NewElem ->TheCurves != NULL) { + for (i=0; i < NewElem ->nCurves; i++) { + if (NewElem ->TheCurves[i]) + cmsFreeToneCurve(Data ->TheCurves[i]); + } + } + _cmsFree(mpe ->ContextID, Data ->TheCurves); + _cmsFree(mpe ->ContextID, NewElem); + return NULL; +} + + +// Curves == NULL forces identity curves +cmsStage* CMSEXPORT cmsStageAllocToneCurves(cmsContext ContextID, cmsUInt32Number nChannels, cmsToneCurve* const Curves[]) +{ + cmsUInt32Number i; + _cmsStageToneCurvesData* NewElem; + cmsStage* NewMPE; + + + NewMPE = _cmsStageAllocPlaceholder(ContextID, cmsSigCurveSetElemType, nChannels, nChannels, + EvaluateCurves, CurveSetDup, CurveSetElemTypeFree, NULL ); + if (NewMPE == NULL) return NULL; + + NewElem = (_cmsStageToneCurvesData*) _cmsMallocZero(ContextID, sizeof(_cmsStageToneCurvesData)); + if (NewElem == NULL) { + cmsStageFree(NewMPE); + return NULL; + } + + NewMPE ->Data = (void*) NewElem; + + NewElem ->nCurves = nChannels; + NewElem ->TheCurves = (cmsToneCurve**) _cmsCalloc(ContextID, nChannels, sizeof(cmsToneCurve*)); + if (NewElem ->TheCurves == NULL) { + cmsStageFree(NewMPE); + return NULL; + } + + for (i=0; i < nChannels; i++) { + + if (Curves == NULL) { + NewElem ->TheCurves[i] = cmsBuildGamma(ContextID, 1.0); + } + else { + NewElem ->TheCurves[i] = cmsDupToneCurve(Curves[i]); + } + + if (NewElem ->TheCurves[i] == NULL) { + cmsStageFree(NewMPE); + return NULL; + } + } + + return NewMPE; +} + + +// Create a bunch of identity curves +cmsStage* _cmsStageAllocIdentityCurves(cmsContext ContextID, int nChannels) +{ + cmsStage* mpe = cmsStageAllocToneCurves(ContextID, nChannels, NULL); + + if (mpe == NULL) return NULL; + mpe ->Implements = cmsSigIdentityElemType; + return mpe; +} + + +// ************************************************************************************************* +// Type cmsSigMatrixElemType (Matrices) +// ************************************************************************************************* + + +// Special care should be taken here because precision loss. A temporary cmsFloat64Number buffer is being used +static +void EvaluateMatrix(const cmsFloat32Number In[], + cmsFloat32Number Out[], + const cmsStage *mpe) +{ + cmsUInt32Number i, j; + _cmsStageMatrixData* Data = (_cmsStageMatrixData*) mpe ->Data; + cmsFloat64Number Tmp; + + // Input is already in 0..1.0 notation + for (i=0; i < mpe ->OutputChannels; i++) { + + Tmp = 0; + for (j=0; j < mpe->InputChannels; j++) { + Tmp += In[j] * Data->Double[i*mpe->InputChannels + j]; + } + + if (Data ->Offset != NULL) + Tmp += Data->Offset[i]; + + Out[i] = (cmsFloat32Number) Tmp; + } + + + // Output in 0..1.0 domain +} + + +// Duplicate a yet-existing matrix element +static +void* MatrixElemDup(cmsStage* mpe) +{ + _cmsStageMatrixData* Data = (_cmsStageMatrixData*) mpe ->Data; + _cmsStageMatrixData* NewElem; + cmsUInt32Number sz; + + NewElem = (_cmsStageMatrixData*) _cmsMallocZero(mpe ->ContextID, sizeof(_cmsStageMatrixData)); + if (NewElem == NULL) return NULL; + + sz = mpe ->InputChannels * mpe ->OutputChannels; + + NewElem ->Double = (cmsFloat64Number*) _cmsDupMem(mpe ->ContextID, Data ->Double, sz * sizeof(cmsFloat64Number)) ; + + if (Data ->Offset) + NewElem ->Offset = (cmsFloat64Number*) _cmsDupMem(mpe ->ContextID, + Data ->Offset, mpe -> OutputChannels * sizeof(cmsFloat64Number)) ; + + return (void*) NewElem; +} + + +static +void MatrixElemTypeFree(cmsStage* mpe) +{ + _cmsStageMatrixData* Data = (_cmsStageMatrixData*) mpe ->Data; + if (Data ->Double) + _cmsFree(mpe ->ContextID, Data ->Double); + + if (Data ->Offset) + _cmsFree(mpe ->ContextID, Data ->Offset); + + _cmsFree(mpe ->ContextID, mpe ->Data); +} + + + +cmsStage* CMSEXPORT cmsStageAllocMatrix(cmsContext ContextID, cmsUInt32Number Rows, cmsUInt32Number Cols, + const cmsFloat64Number* Matrix, const cmsFloat64Number* Offset) +{ + cmsUInt32Number i, n; + _cmsStageMatrixData* NewElem; + cmsStage* NewMPE; + + n = Rows * Cols; + + // Check for overflow + if (n == 0) return NULL; + if (n >= UINT_MAX / Cols) return NULL; + if (n >= UINT_MAX / Rows) return NULL; + if (n < Rows || n < Cols) return NULL; + + NewMPE = _cmsStageAllocPlaceholder(ContextID, cmsSigMatrixElemType, Cols, Rows, + EvaluateMatrix, MatrixElemDup, MatrixElemTypeFree, NULL ); + if (NewMPE == NULL) return NULL; + + + NewElem = (_cmsStageMatrixData*) _cmsMallocZero(ContextID, sizeof(_cmsStageMatrixData)); + if (NewElem == NULL) return NULL; + + + NewElem ->Double = (cmsFloat64Number*) _cmsCalloc(ContextID, n, sizeof(cmsFloat64Number)); + + if (NewElem->Double == NULL) { + MatrixElemTypeFree(NewMPE); + return NULL; + } + + for (i=0; i < n; i++) { + NewElem ->Double[i] = Matrix[i]; + } + + + if (Offset != NULL) { + + NewElem ->Offset = (cmsFloat64Number*) _cmsCalloc(ContextID, Cols, sizeof(cmsFloat64Number)); + if (NewElem->Offset == NULL) { + MatrixElemTypeFree(NewMPE); + return NULL; + } + + for (i=0; i < Cols; i++) { + NewElem ->Offset[i] = Offset[i]; + } + + } + + NewMPE ->Data = (void*) NewElem; + return NewMPE; +} + + +// ************************************************************************************************* +// Type cmsSigCLutElemType +// ************************************************************************************************* + + +// Evaluate in true floating point +static +void EvaluateCLUTfloat(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) +{ + _cmsStageCLutData* Data = (_cmsStageCLutData*) mpe ->Data; + + Data -> Params ->Interpolation.LerpFloat(In, Out, Data->Params); +} + + +// Convert to 16 bits, evaluate, and back to floating point +static +void EvaluateCLUTfloatIn16(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) +{ + _cmsStageCLutData* Data = (_cmsStageCLutData*) mpe ->Data; + cmsUInt16Number In16[MAX_STAGE_CHANNELS], Out16[MAX_STAGE_CHANNELS]; + + _cmsAssert(mpe ->InputChannels <= MAX_STAGE_CHANNELS); + _cmsAssert(mpe ->OutputChannels <= MAX_STAGE_CHANNELS); + + FromFloatTo16(In, In16, mpe ->InputChannels); + Data -> Params ->Interpolation.Lerp16(In16, Out16, Data->Params); + From16ToFloat(Out16, Out, mpe ->OutputChannels); +} + + +// Given an hypercube of b dimensions, with Dims[] number of nodes by dimension, calculate the total amount of nodes +static +cmsUInt32Number CubeSize(const cmsUInt32Number Dims[], cmsUInt32Number b) +{ + cmsUInt32Number rv, dim; + + _cmsAssert(Dims != NULL); + + for (rv = 1; b > 0; b--) { + + dim = Dims[b-1]; + if (dim == 0) return 0; // Error + + rv *= dim; + + // Check for overflow + if (rv > UINT_MAX / dim) return 0; + } + + return rv; +} + +static +void* CLUTElemDup(cmsStage* mpe) +{ + _cmsStageCLutData* Data = (_cmsStageCLutData*) mpe ->Data; + _cmsStageCLutData* NewElem; + + + NewElem = (_cmsStageCLutData*) _cmsMallocZero(mpe ->ContextID, sizeof(_cmsStageCLutData)); + if (NewElem == NULL) return NULL; + + NewElem ->nEntries = Data ->nEntries; + NewElem ->HasFloatValues = Data ->HasFloatValues; + + if (Data ->Tab.T) { + + if (Data ->HasFloatValues) + NewElem ->Tab.TFloat = (cmsFloat32Number*) _cmsDupMem(mpe ->ContextID, Data ->Tab.TFloat, Data ->nEntries * sizeof (cmsFloat32Number)); + else + NewElem ->Tab.T = (cmsUInt16Number*) _cmsDupMem(mpe ->ContextID, Data ->Tab.T, Data ->nEntries * sizeof (cmsUInt16Number)); + } + + NewElem ->Params = _cmsComputeInterpParamsEx(mpe ->ContextID, + Data ->Params ->nSamples, + Data ->Params ->nInputs, + Data ->Params ->nOutputs, + NewElem ->Tab.T, + Data ->Params ->dwFlags); + + return (void*) NewElem; +} + + +static +void CLutElemTypeFree(cmsStage* mpe) +{ + + _cmsStageCLutData* Data = (_cmsStageCLutData*) mpe ->Data; + + // Already empty + if (Data == NULL) return; + + // This works for both types + if (Data -> Tab.T) + _cmsFree(mpe ->ContextID, Data -> Tab.T); + + _cmsFreeInterpParams(Data ->Params); + _cmsFree(mpe ->ContextID, mpe ->Data); +} + + +// Allocates a 16-bit multidimensional CLUT. This is evaluated at 16-bit precision. Table may have different +// granularity on each dimension. +cmsStage* CMSEXPORT cmsStageAllocCLut16bitGranular(cmsContext ContextID, + const cmsUInt32Number clutPoints[], + cmsUInt32Number inputChan, + cmsUInt32Number outputChan, + const cmsUInt16Number* Table) +{ + cmsUInt32Number i, n; + _cmsStageCLutData* NewElem; + cmsStage* NewMPE; + + NewMPE = _cmsStageAllocPlaceholder(ContextID, cmsSigCLutElemType, inputChan, outputChan, + EvaluateCLUTfloatIn16, CLUTElemDup, CLutElemTypeFree, NULL ); + + if (NewMPE == NULL) return NULL; + + NewElem = (_cmsStageCLutData*) _cmsMallocZero(ContextID, sizeof(_cmsStageCLutData)); + if (NewElem == NULL) { + cmsStageFree(NewMPE); + return NULL; + } + + NewMPE ->Data = (void*) NewElem; + + NewElem -> nEntries = n = outputChan * CubeSize(clutPoints, inputChan); + NewElem -> HasFloatValues = FALSE; + + if (n == 0) { + cmsStageFree(NewMPE); + return NULL; + } + + + NewElem ->Tab.T = (cmsUInt16Number*) _cmsCalloc(ContextID, n, sizeof(cmsUInt16Number)); + if (NewElem ->Tab.T == NULL) { + cmsStageFree(NewMPE); + return NULL; + } + + if (Table != NULL) { + for (i=0; i < n; i++) { + NewElem ->Tab.T[i] = Table[i]; + } + } + + NewElem ->Params = _cmsComputeInterpParamsEx(ContextID, clutPoints, inputChan, outputChan, NewElem ->Tab.T, CMS_LERP_FLAGS_16BITS); + if (NewElem ->Params == NULL) { + cmsStageFree(NewMPE); + return NULL; + } + + return NewMPE; +} + +cmsStage* CMSEXPORT cmsStageAllocCLut16bit(cmsContext ContextID, + cmsUInt32Number nGridPoints, + cmsUInt32Number inputChan, + cmsUInt32Number outputChan, + const cmsUInt16Number* Table) +{ + cmsUInt32Number Dimensions[MAX_INPUT_DIMENSIONS]; + int i; + + // Our resulting LUT would be same gridpoints on all dimensions + for (i=0; i < MAX_INPUT_DIMENSIONS; i++) + Dimensions[i] = nGridPoints; + + + return cmsStageAllocCLut16bitGranular(ContextID, Dimensions, inputChan, outputChan, Table); +} + + +cmsStage* CMSEXPORT cmsStageAllocCLutFloat(cmsContext ContextID, + cmsUInt32Number nGridPoints, + cmsUInt32Number inputChan, + cmsUInt32Number outputChan, + const cmsFloat32Number* Table) +{ + cmsUInt32Number Dimensions[MAX_INPUT_DIMENSIONS]; + int i; + + // Our resulting LUT would be same gridpoints on all dimensions + for (i=0; i < MAX_INPUT_DIMENSIONS; i++) + Dimensions[i] = nGridPoints; + + return cmsStageAllocCLutFloatGranular(ContextID, Dimensions, inputChan, outputChan, Table); +} + + + +cmsStage* CMSEXPORT cmsStageAllocCLutFloatGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table) +{ + cmsUInt32Number i, n; + _cmsStageCLutData* NewElem; + cmsStage* NewMPE; + + _cmsAssert(clutPoints != NULL); + + NewMPE = _cmsStageAllocPlaceholder(ContextID, cmsSigCLutElemType, inputChan, outputChan, + EvaluateCLUTfloat, CLUTElemDup, CLutElemTypeFree, NULL); + if (NewMPE == NULL) return NULL; + + + NewElem = (_cmsStageCLutData*) _cmsMallocZero(ContextID, sizeof(_cmsStageCLutData)); + if (NewElem == NULL) { + cmsStageFree(NewMPE); + return NULL; + } + + NewMPE ->Data = (void*) NewElem; + + // There is a potential integer overflow on conputing n and nEntries. + NewElem -> nEntries = n = outputChan * CubeSize(clutPoints, inputChan); + NewElem -> HasFloatValues = TRUE; + + if (n == 0) { + cmsStageFree(NewMPE); + return NULL; + } + + NewElem ->Tab.TFloat = (cmsFloat32Number*) _cmsCalloc(ContextID, n, sizeof(cmsFloat32Number)); + if (NewElem ->Tab.TFloat == NULL) { + cmsStageFree(NewMPE); + return NULL; + } + + if (Table != NULL) { + for (i=0; i < n; i++) { + NewElem ->Tab.TFloat[i] = Table[i]; + } + } + + + + NewElem ->Params = _cmsComputeInterpParamsEx(ContextID, clutPoints, inputChan, outputChan, NewElem ->Tab.TFloat, CMS_LERP_FLAGS_FLOAT); + if (NewElem ->Params == NULL) { + cmsStageFree(NewMPE); + return NULL; + } + + + + return NewMPE; +} + + +static +int IdentitySampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo) +{ + int nChan = *(int*) Cargo; + int i; + + for (i=0; i < nChan; i++) + Out[i] = In[i]; + + return 1; +} + +// Creates an MPE that just copies input to output +cmsStage* _cmsStageAllocIdentityCLut(cmsContext ContextID, int nChan) +{ + cmsUInt32Number Dimensions[MAX_INPUT_DIMENSIONS]; + cmsStage* mpe ; + int i; + + for (i=0; i < MAX_INPUT_DIMENSIONS; i++) + Dimensions[i] = 2; + + mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, nChan, nChan, NULL); + if (mpe == NULL) return NULL; + + if (!cmsStageSampleCLut16bit(mpe, IdentitySampler, &nChan, 0)) { + cmsStageFree(mpe); + return NULL; + } + + mpe ->Implements = cmsSigIdentityElemType; + return mpe; +} + + + +// Quantize a value 0 <= i < MaxSamples to 0..0xffff +cmsUInt16Number _cmsQuantizeVal(cmsFloat64Number i, int MaxSamples) +{ + cmsFloat64Number x; + + x = ((cmsFloat64Number) i * 65535.) / (cmsFloat64Number) (MaxSamples - 1); + return _cmsQuickSaturateWord(x); +} + + +// This routine does a sweep on whole input space, and calls its callback +// function on knots. returns TRUE if all ok, FALSE otherwise. +cmsBool CMSEXPORT cmsStageSampleCLut16bit(cmsStage* mpe, cmsSAMPLER16 Sampler, void * Cargo, cmsUInt32Number dwFlags) +{ + int i, t, nTotalPoints, index, rest; + int nInputs, nOutputs; + cmsUInt32Number* nSamples; + cmsUInt16Number In[cmsMAXCHANNELS], Out[MAX_STAGE_CHANNELS]; + _cmsStageCLutData* clut; + + if (mpe == NULL) return FALSE; + + clut = (_cmsStageCLutData*) mpe->Data; + + if (clut == NULL) return FALSE; + + nSamples = clut->Params ->nSamples; + nInputs = clut->Params ->nInputs; + nOutputs = clut->Params ->nOutputs; + + if (nInputs >= cmsMAXCHANNELS) return FALSE; + if (nOutputs >= MAX_STAGE_CHANNELS) return FALSE; + + nTotalPoints = CubeSize(nSamples, nInputs); + if (nTotalPoints == 0) return FALSE; + + index = 0; + for (i = 0; i < nTotalPoints; i++) { + + rest = i; + for (t = nInputs-1; t >=0; --t) { + + cmsUInt32Number Colorant = rest % nSamples[t]; + + rest /= nSamples[t]; + + In[t] = _cmsQuantizeVal(Colorant, nSamples[t]); + } + + if (clut ->Tab.T != NULL) { + for (t=0; t < nOutputs; t++) + Out[t] = clut->Tab.T[index + t]; + } + + if (!Sampler(In, Out, Cargo)) + return FALSE; + + if (!(dwFlags & SAMPLER_INSPECT)) { + + if (clut ->Tab.T != NULL) { + for (t=0; t < nOutputs; t++) + clut->Tab.T[index + t] = Out[t]; + } + } + + index += nOutputs; + } + + return TRUE; +} + +// Same as anterior, but for floting point +cmsBool CMSEXPORT cmsStageSampleCLutFloat(cmsStage* mpe, cmsSAMPLERFLOAT Sampler, void * Cargo, cmsUInt32Number dwFlags) +{ + int i, t, nTotalPoints, index, rest; + int nInputs, nOutputs; + cmsUInt32Number* nSamples; + cmsFloat32Number In[cmsMAXCHANNELS], Out[MAX_STAGE_CHANNELS]; + _cmsStageCLutData* clut = (_cmsStageCLutData*) mpe->Data; + + nSamples = clut->Params ->nSamples; + nInputs = clut->Params ->nInputs; + nOutputs = clut->Params ->nOutputs; + + if (nInputs >= cmsMAXCHANNELS) return FALSE; + if (nOutputs >= MAX_STAGE_CHANNELS) return FALSE; + + nTotalPoints = CubeSize(nSamples, nInputs); + if (nTotalPoints == 0) return FALSE; + + index = 0; + for (i = 0; i < nTotalPoints; i++) { + + rest = i; + for (t = nInputs-1; t >=0; --t) { + + cmsUInt32Number Colorant = rest % nSamples[t]; + + rest /= nSamples[t]; + + In[t] = (cmsFloat32Number) (_cmsQuantizeVal(Colorant, nSamples[t]) / 65535.0); + } + + if (clut ->Tab.TFloat != NULL) { + for (t=0; t < nOutputs; t++) + Out[t] = clut->Tab.TFloat[index + t]; + } + + if (!Sampler(In, Out, Cargo)) + return FALSE; + + if (!(dwFlags & SAMPLER_INSPECT)) { + + if (clut ->Tab.TFloat != NULL) { + for (t=0; t < nOutputs; t++) + clut->Tab.TFloat[index + t] = Out[t]; + } + } + + index += nOutputs; + } + + return TRUE; +} + + + +// This routine does a sweep on whole input space, and calls its callback +// function on knots. returns TRUE if all ok, FALSE otherwise. +cmsBool CMSEXPORT cmsSliceSpace16(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], + cmsSAMPLER16 Sampler, void * Cargo) +{ + int i, t, nTotalPoints, rest; + cmsUInt16Number In[cmsMAXCHANNELS]; + + if (nInputs >= cmsMAXCHANNELS) return FALSE; + + nTotalPoints = CubeSize(clutPoints, nInputs); + if (nTotalPoints == 0) return FALSE; + + for (i = 0; i < nTotalPoints; i++) { + + rest = i; + for (t = nInputs-1; t >=0; --t) { + + cmsUInt32Number Colorant = rest % clutPoints[t]; + + rest /= clutPoints[t]; + In[t] = _cmsQuantizeVal(Colorant, clutPoints[t]); + + } + + if (!Sampler(In, NULL, Cargo)) + return FALSE; + } + + return TRUE; +} + +cmsInt32Number CMSEXPORT cmsSliceSpaceFloat(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], + cmsSAMPLERFLOAT Sampler, void * Cargo) +{ + int i, t, nTotalPoints, rest; + cmsFloat32Number In[cmsMAXCHANNELS]; + + if (nInputs >= cmsMAXCHANNELS) return FALSE; + + nTotalPoints = CubeSize(clutPoints, nInputs); + if (nTotalPoints == 0) return FALSE; + + for (i = 0; i < nTotalPoints; i++) { + + rest = i; + for (t = nInputs-1; t >=0; --t) { + + cmsUInt32Number Colorant = rest % clutPoints[t]; + + rest /= clutPoints[t]; + In[t] = (cmsFloat32Number) (_cmsQuantizeVal(Colorant, clutPoints[t]) / 65535.0); + + } + + if (!Sampler(In, NULL, Cargo)) + return FALSE; + } + + return TRUE; +} + +// ******************************************************************************** +// Type cmsSigLab2XYZElemType +// ******************************************************************************** + + +static +void EvaluateLab2XYZ(const cmsFloat32Number In[], + cmsFloat32Number Out[], + const cmsStage *mpe) +{ + cmsCIELab Lab; + cmsCIEXYZ XYZ; + const cmsFloat64Number XYZadj = MAX_ENCODEABLE_XYZ; + + // V4 rules + Lab.L = In[0] * 100.0; + Lab.a = In[1] * 255.0 - 128.0; + Lab.b = In[2] * 255.0 - 128.0; + + cmsLab2XYZ(NULL, &XYZ, &Lab); + + // From XYZ, range 0..19997 to 0..1.0, note that 1.99997 comes from 0xffff + // encoded as 1.15 fixed point, so 1 + (32767.0 / 32768.0) + + Out[0] = (cmsFloat32Number) ((cmsFloat64Number) XYZ.X / XYZadj); + Out[1] = (cmsFloat32Number) ((cmsFloat64Number) XYZ.Y / XYZadj); + Out[2] = (cmsFloat32Number) ((cmsFloat64Number) XYZ.Z / XYZadj); + return; + + cmsUNUSED_PARAMETER(mpe); +} + + +// No dup or free routines needed, as the structure has no pointers in it. +cmsStage* _cmsStageAllocLab2XYZ(cmsContext ContextID) +{ + return _cmsStageAllocPlaceholder(ContextID, cmsSigLab2XYZElemType, 3, 3, EvaluateLab2XYZ, NULL, NULL, NULL); +} + +// ******************************************************************************** + +// v2 L=100 is supposed to be placed on 0xFF00. There is no reasonable +// number of gridpoints that would make exact match. However, a prelinearization +// of 258 entries, would map 0xFF00 exactly on entry 257, and this is good to avoid scum dot. +// Almost all what we need but unfortunately, the rest of entries should be scaled by +// (255*257/256) and this is not exact. + +cmsStage* _cmsStageAllocLabV2ToV4curves(cmsContext ContextID) +{ + cmsStage* mpe; + cmsToneCurve* LabTable[3]; + int i, j; + + LabTable[0] = cmsBuildTabulatedToneCurve16(ContextID, 258, NULL); + LabTable[1] = cmsBuildTabulatedToneCurve16(ContextID, 258, NULL); + LabTable[2] = cmsBuildTabulatedToneCurve16(ContextID, 258, NULL); + + for (j=0; j < 3; j++) { + + if (LabTable[j] == NULL) { + cmsFreeToneCurveTriple(LabTable); + return NULL; + } + + // We need to map * (0xffff / 0xff00), thats same as (257 / 256) + // So we can use 258-entry tables to do the trick (i / 257) * (255 * 257) * (257 / 256); + for (i=0; i < 257; i++) { + + LabTable[j]->Table16[i] = (cmsUInt16Number) ((i * 0xffff + 0x80) >> 8); + } + + LabTable[j] ->Table16[257] = 0xffff; + } + + mpe = cmsStageAllocToneCurves(ContextID, 3, LabTable); + cmsFreeToneCurveTriple(LabTable); + + mpe ->Implements = cmsSigLabV2toV4; + return mpe; +} + +// ******************************************************************************** + +// Matrix-based conversion, which is more accurate, but slower and cannot properly be saved in devicelink profiles +cmsStage* _cmsStageAllocLabV2ToV4(cmsContext ContextID) +{ + static const cmsFloat64Number V2ToV4[] = { 65535.0/65280.0, 0, 0, + 0, 65535.0/65280.0, 0, + 0, 0, 65535.0/65280.0 + }; + + cmsStage *mpe = cmsStageAllocMatrix(ContextID, 3, 3, V2ToV4, NULL); + + if (mpe == NULL) return mpe; + mpe ->Implements = cmsSigLabV2toV4; + return mpe; +} + + +// Reverse direction +cmsStage* _cmsStageAllocLabV4ToV2(cmsContext ContextID) +{ + static const cmsFloat64Number V4ToV2[] = { 65280.0/65535.0, 0, 0, + 0, 65280.0/65535.0, 0, + 0, 0, 65280.0/65535.0 + }; + + cmsStage *mpe = cmsStageAllocMatrix(ContextID, 3, 3, V4ToV2, NULL); + + if (mpe == NULL) return mpe; + mpe ->Implements = cmsSigLabV4toV2; + return mpe; +} + + +// To Lab to float. Note that the MPE gives numbers in normal Lab range +// and we need 0..1.0 range for the formatters +// L* : 0...100 => 0...1.0 (L* / 100) +// ab* : -128..+127 to 0..1 ((ab* + 128) / 255) + +cmsStage* _cmsStageNormalizeFromLabFloat(cmsContext ContextID) +{ + static const cmsFloat64Number a1[] = { + 1.0/100.0, 0, 0, + 0, 1.0/255.0, 0, + 0, 0, 1.0/255.0 + }; + + static const cmsFloat64Number o1[] = { + 0, + 128.0/255.0, + 128.0/255.0 + }; + + return cmsStageAllocMatrix(ContextID, 3, 3, a1, o1); +} + +cmsStage* _cmsStageNormalizeFromXyzFloat(cmsContext ContextID) +{ + static const cmsFloat64Number a1[] = { + 1.0/100.0, 0, 0, + 0, 1.0/100.0, 0, + 0, 0, 1.0/100.0 + }; + + + return cmsStageAllocMatrix(ContextID, 3, 3, a1, NULL); +} + +cmsStage* _cmsStageNormalizeToLabFloat(cmsContext ContextID) +{ + static const cmsFloat64Number a1[] = { + 100.0, 0, 0, + 0, 255.0, 0, + 0, 0, 255.0 + }; + + static const cmsFloat64Number o1[] = { + 0, + -128.0, + -128.0 + }; + + return cmsStageAllocMatrix(ContextID, 3, 3, a1, o1); +} + +cmsStage* _cmsStageNormalizeToXyzFloat(cmsContext ContextID) +{ + static const cmsFloat64Number a1[] = { + 100.0, 0, 0, + 0, 100.0, 0, + 0, 0, 100.0 + }; + + return cmsStageAllocMatrix(ContextID, 3, 3, a1, NULL); +} + + + +// ******************************************************************************** +// Type cmsSigXYZ2LabElemType +// ******************************************************************************** + +static +void EvaluateXYZ2Lab(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) +{ + cmsCIELab Lab; + cmsCIEXYZ XYZ; + const cmsFloat64Number XYZadj = MAX_ENCODEABLE_XYZ; + + // From 0..1.0 to XYZ + + XYZ.X = In[0] * XYZadj; + XYZ.Y = In[1] * XYZadj; + XYZ.Z = In[2] * XYZadj; + + cmsXYZ2Lab(NULL, &Lab, &XYZ); + + // From V4 Lab to 0..1.0 + + Out[0] = (cmsFloat32Number) (Lab.L / 100.0); + Out[1] = (cmsFloat32Number) ((Lab.a + 128.0) / 255.0); + Out[2] = (cmsFloat32Number) ((Lab.b + 128.0) / 255.0); + return; + + cmsUNUSED_PARAMETER(mpe); +} + +cmsStage* _cmsStageAllocXYZ2Lab(cmsContext ContextID) +{ + return _cmsStageAllocPlaceholder(ContextID, cmsSigXYZ2LabElemType, 3, 3, EvaluateXYZ2Lab, NULL, NULL, NULL); + +} + +// ******************************************************************************** + +// For v4, S-Shaped curves are placed in a/b axis to increase resolution near gray + +cmsStage* _cmsStageAllocLabPrelin(cmsContext ContextID) +{ + cmsToneCurve* LabTable[3]; + cmsFloat64Number Params[1] = {2.4} ; + + LabTable[0] = cmsBuildGamma(ContextID, 1.0); + LabTable[1] = cmsBuildParametricToneCurve(ContextID, 108, Params); + LabTable[2] = cmsBuildParametricToneCurve(ContextID, 108, Params); + + return cmsStageAllocToneCurves(ContextID, 3, LabTable); +} + + +// Free a single MPE +void CMSEXPORT cmsStageFree(cmsStage* mpe) +{ + if (mpe ->FreePtr) + mpe ->FreePtr(mpe); + + _cmsFree(mpe ->ContextID, mpe); +} + + +cmsUInt32Number CMSEXPORT cmsStageInputChannels(const cmsStage* mpe) +{ + return mpe ->InputChannels; +} + +cmsUInt32Number CMSEXPORT cmsStageOutputChannels(const cmsStage* mpe) +{ + return mpe ->OutputChannels; +} + +cmsStageSignature CMSEXPORT cmsStageType(const cmsStage* mpe) +{ + return mpe -> Type; +} + +void* CMSEXPORT cmsStageData(const cmsStage* mpe) +{ + return mpe -> Data; +} + +cmsStage* CMSEXPORT cmsStageNext(const cmsStage* mpe) +{ + return mpe -> Next; +} + + +// Duplicates an MPE +cmsStage* CMSEXPORT cmsStageDup(cmsStage* mpe) +{ + cmsStage* NewMPE; + + if (mpe == NULL) return NULL; + NewMPE = _cmsStageAllocPlaceholder(mpe ->ContextID, + mpe ->Type, + mpe ->InputChannels, + mpe ->OutputChannels, + mpe ->EvalPtr, + mpe ->DupElemPtr, + mpe ->FreePtr, + NULL); + if (NewMPE == NULL) return NULL; + + NewMPE ->Implements = mpe ->Implements; + + if (mpe ->DupElemPtr) + NewMPE ->Data = mpe ->DupElemPtr(mpe); + else + NewMPE ->Data = NULL; + + return NewMPE; +} + + +// *********************************************************************************************************** + +// This function sets up the channel count + +static +void BlessLUT(cmsPipeline* lut) +{ + // We can set the input/ouput channels only if we have elements. + if (lut ->Elements != NULL) { + + cmsStage *First, *Last; + + First = cmsPipelineGetPtrToFirstStage(lut); + Last = cmsPipelineGetPtrToLastStage(lut); + + if (First != NULL)lut ->InputChannels = First ->InputChannels; + if (Last != NULL) lut ->OutputChannels = Last ->OutputChannels; + } +} + + +// Default to evaluate the LUT on 16 bit-basis. Precision is retained. +static +void _LUTeval16(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register const void* D) +{ + cmsPipeline* lut = (cmsPipeline*) D; + cmsStage *mpe; + cmsFloat32Number Storage[2][MAX_STAGE_CHANNELS]; + int Phase = 0, NextPhase; + + From16ToFloat(In, &Storage[Phase][0], lut ->InputChannels); + + for (mpe = lut ->Elements; + mpe != NULL; + mpe = mpe ->Next) { + + NextPhase = Phase ^ 1; + mpe ->EvalPtr(&Storage[Phase][0], &Storage[NextPhase][0], mpe); + Phase = NextPhase; + } + + + FromFloatTo16(&Storage[Phase][0], Out, lut ->OutputChannels); +} + + + +// Does evaluate the LUT on cmsFloat32Number-basis. +static +void _LUTevalFloat(register const cmsFloat32Number In[], register cmsFloat32Number Out[], const void* D) +{ + cmsPipeline* lut = (cmsPipeline*) D; + cmsStage *mpe; + cmsFloat32Number Storage[2][MAX_STAGE_CHANNELS]; + int Phase = 0, NextPhase; + + memmove(&Storage[Phase][0], In, lut ->InputChannels * sizeof(cmsFloat32Number)); + + for (mpe = lut ->Elements; + mpe != NULL; + mpe = mpe ->Next) { + + NextPhase = Phase ^ 1; + mpe ->EvalPtr(&Storage[Phase][0], &Storage[NextPhase][0], mpe); + Phase = NextPhase; + } + + memmove(Out, &Storage[Phase][0], lut ->OutputChannels * sizeof(cmsFloat32Number)); +} + + + + +// LUT Creation & Destruction + +cmsPipeline* CMSEXPORT cmsPipelineAlloc(cmsContext ContextID, cmsUInt32Number InputChannels, cmsUInt32Number OutputChannels) +{ + cmsPipeline* NewLUT; + + if (InputChannels >= cmsMAXCHANNELS || + OutputChannels >= cmsMAXCHANNELS) return NULL; + + NewLUT = (cmsPipeline*) _cmsMallocZero(ContextID, sizeof(cmsPipeline)); + if (NewLUT == NULL) return NULL; + + + NewLUT -> InputChannels = InputChannels; + NewLUT -> OutputChannels = OutputChannels; + + NewLUT ->Eval16Fn = _LUTeval16; + NewLUT ->EvalFloatFn = _LUTevalFloat; + NewLUT ->DupDataFn = NULL; + NewLUT ->FreeDataFn = NULL; + NewLUT ->Data = NewLUT; + NewLUT ->ContextID = ContextID; + + BlessLUT(NewLUT); + + return NewLUT; +} + + +cmsUInt32Number CMSEXPORT cmsPipelineInputChannels(const cmsPipeline* lut) +{ + return lut ->InputChannels; +} + +cmsUInt32Number CMSEXPORT cmsPipelineOutputChannels(const cmsPipeline* lut) +{ + return lut ->OutputChannels; +} + +// Free a profile elements LUT +void CMSEXPORT cmsPipelineFree(cmsPipeline* lut) +{ + cmsStage *mpe, *Next; + + if (lut == NULL) return; + + for (mpe = lut ->Elements; + mpe != NULL; + mpe = Next) { + + Next = mpe ->Next; + cmsStageFree(mpe); + } + + if (lut ->FreeDataFn) lut ->FreeDataFn(lut ->ContextID, lut ->Data); + + _cmsFree(lut ->ContextID, lut); +} + + +// Default to evaluate the LUT on 16 bit-basis. +void CMSEXPORT cmsPipelineEval16(const cmsUInt16Number In[], cmsUInt16Number Out[], const cmsPipeline* lut) +{ + lut ->Eval16Fn(In, Out, lut->Data); +} + + +// Does evaluate the LUT on cmsFloat32Number-basis. +void CMSEXPORT cmsPipelineEvalFloat(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsPipeline* lut) +{ + lut ->EvalFloatFn(In, Out, lut); +} + + + +// Duplicates a LUT +cmsPipeline* CMSEXPORT cmsPipelineDup(const cmsPipeline* lut) +{ + cmsPipeline* NewLUT; + cmsStage *NewMPE, *Anterior = NULL, *mpe; + cmsBool First = TRUE; + + if (lut == NULL) return NULL; + + NewLUT = cmsPipelineAlloc(lut ->ContextID, lut ->InputChannels, lut ->OutputChannels); + for (mpe = lut ->Elements; + mpe != NULL; + mpe = mpe ->Next) { + + NewMPE = cmsStageDup(mpe); + + if (NewMPE == NULL) { + cmsPipelineFree(NewLUT); + return NULL; + } + + if (First) { + NewLUT ->Elements = NewMPE; + First = FALSE; + } + else { + Anterior ->Next = NewMPE; + } + + Anterior = NewMPE; + } + + NewLUT ->DupDataFn = lut ->DupDataFn; + NewLUT ->FreeDataFn = lut ->FreeDataFn; + + if (NewLUT ->DupDataFn != NULL) + NewLUT ->Data = NewLUT ->DupDataFn(lut ->ContextID, lut->Data); + + + NewLUT ->SaveAs8Bits = lut ->SaveAs8Bits; + + BlessLUT(NewLUT); + return NewLUT; +} + + +void CMSEXPORT cmsPipelineInsertStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage* mpe) +{ + cmsStage* Anterior = NULL, *pt; + + _cmsAssert(lut != NULL); + _cmsAssert(mpe != NULL); + + switch (loc) { + + case cmsAT_BEGIN: + mpe ->Next = lut ->Elements; + lut ->Elements = mpe; + break; + + case cmsAT_END: + + if (lut ->Elements == NULL) + lut ->Elements = mpe; + else { + + for (pt = lut ->Elements; + pt != NULL; + pt = pt -> Next) Anterior = pt; + + Anterior ->Next = mpe; + mpe ->Next = NULL; + } + break; + default:; + } + + BlessLUT(lut); +} + +// Unlink an element and return the pointer to it +void CMSEXPORT cmsPipelineUnlinkStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage** mpe) +{ + cmsStage *Anterior, *pt, *Last; + cmsStage *Unlinked = NULL; + + + // If empty LUT, there is nothing to remove + if (lut ->Elements == NULL) { + if (mpe) *mpe = NULL; + return; + } + + // On depending on the strategy... + switch (loc) { + + case cmsAT_BEGIN: + { + cmsStage* elem = lut ->Elements; + + lut ->Elements = elem -> Next; + elem ->Next = NULL; + Unlinked = elem; + + } + break; + + case cmsAT_END: + Anterior = Last = NULL; + for (pt = lut ->Elements; + pt != NULL; + pt = pt -> Next) { + Anterior = Last; + Last = pt; + } + + Unlinked = Last; // Next already points to NULL + + // Truncate the chain + if (Anterior) + Anterior ->Next = NULL; + else + lut ->Elements = NULL; + break; + default:; + } + + if (mpe) + *mpe = Unlinked; + else + cmsStageFree(Unlinked); + + BlessLUT(lut); +} + + +// Concatenate two LUT into a new single one +cmsBool CMSEXPORT cmsPipelineCat(cmsPipeline* l1, const cmsPipeline* l2) +{ + cmsStage* mpe, *NewMPE; + + // If both LUTS does not have elements, we need to inherit + // the number of channels + if (l1 ->Elements == NULL && l2 ->Elements == NULL) { + l1 ->InputChannels = l2 ->InputChannels; + l1 ->OutputChannels = l2 ->OutputChannels; + } + + // Cat second + for (mpe = l2 ->Elements; + mpe != NULL; + mpe = mpe ->Next) { + + // We have to dup each element + NewMPE = cmsStageDup(mpe); + + if (NewMPE == NULL) { + return FALSE; + } + + cmsPipelineInsertStage(l1, cmsAT_END, NewMPE); + } + + BlessLUT(l1); + return TRUE; +} + + +cmsBool CMSEXPORT cmsPipelineSetSaveAs8bitsFlag(cmsPipeline* lut, cmsBool On) +{ + cmsBool Anterior = lut ->SaveAs8Bits; + + lut ->SaveAs8Bits = On; + return Anterior; +} + + +cmsStage* CMSEXPORT cmsPipelineGetPtrToFirstStage(const cmsPipeline* lut) +{ + return lut ->Elements; +} + +cmsStage* CMSEXPORT cmsPipelineGetPtrToLastStage(const cmsPipeline* lut) +{ + cmsStage *mpe, *Anterior = NULL; + + for (mpe = lut ->Elements; mpe != NULL; mpe = mpe ->Next) + Anterior = mpe; + + return Anterior; +} + +cmsUInt32Number CMSEXPORT cmsPipelineStageCount(const cmsPipeline* lut) +{ + cmsStage *mpe; + cmsUInt32Number n; + + for (n=0, mpe = lut ->Elements; mpe != NULL; mpe = mpe ->Next) + n++; + + return n; +} + +// This function may be used to set the optional evaluator and a block of private data. If private data is being used, an optional +// duplicator and free functions should also be specified in order to duplicate the LUT construct. Use NULL to inhibit such functionality. +void CMSEXPORT _cmsPipelineSetOptimizationParameters(cmsPipeline* Lut, + _cmsOPTeval16Fn Eval16, + void* PrivateData, + _cmsOPTfreeDataFn FreePrivateDataFn, + _cmsOPTdupDataFn DupPrivateDataFn) +{ + + Lut ->Eval16Fn = Eval16; + Lut ->DupDataFn = DupPrivateDataFn; + Lut ->FreeDataFn = FreePrivateDataFn; + Lut ->Data = PrivateData; +} + + +// ----------------------------------------------------------- Reverse interpolation +// Here's how it goes. The derivative Df(x) of the function f is the linear +// transformation that best approximates f near the point x. It can be represented +// by a matrix A whose entries are the partial derivatives of the components of f +// with respect to all the coordinates. This is know as the Jacobian +// +// The best linear approximation to f is given by the matrix equation: +// +// y-y0 = A (x-x0) +// +// So, if x0 is a good "guess" for the zero of f, then solving for the zero of this +// linear approximation will give a "better guess" for the zero of f. Thus let y=0, +// and since y0=f(x0) one can solve the above equation for x. This leads to the +// Newton's method formula: +// +// xn+1 = xn - A-1 f(xn) +// +// where xn+1 denotes the (n+1)-st guess, obtained from the n-th guess xn in the +// fashion described above. Iterating this will give better and better approximations +// if you have a "good enough" initial guess. + + +#define JACOBIAN_EPSILON 0.001f +#define INVERSION_MAX_ITERATIONS 30 + +// Increment with reflexion on boundary +static +void IncDelta(cmsFloat32Number *Val) +{ + if (*Val < (1.0 - JACOBIAN_EPSILON)) + + *Val += JACOBIAN_EPSILON; + + else + *Val -= JACOBIAN_EPSILON; + +} + + + +// Euclidean distance between two vectors of n elements each one +static +cmsFloat32Number EuclideanDistance(cmsFloat32Number a[], cmsFloat32Number b[], int n) +{ + cmsFloat32Number sum = 0; + int i; + + for (i=0; i < n; i++) { + cmsFloat32Number dif = b[i] - a[i]; + sum += dif * dif; + } + + return sqrtf(sum); +} + + +// Evaluate a LUT in reverse direction. It only searches on 3->3 LUT. Uses Newton method +// +// x1 <- x - [J(x)]^-1 * f(x) +// +// lut: The LUT on where to do the search +// Target: LabK, 3 values of Lab plus destination K which is fixed +// Result: The obtained CMYK +// Hint: Location where begin the search + +cmsBool CMSEXPORT cmsPipelineEvalReverseFloat(cmsFloat32Number Target[], + cmsFloat32Number Result[], + cmsFloat32Number Hint[], + const cmsPipeline* lut) +{ + cmsUInt32Number i, j; + cmsFloat64Number error, LastError = 1E20; + cmsFloat32Number fx[4], x[4], xd[4], fxd[4]; + cmsVEC3 tmp, tmp2; + cmsMAT3 Jacobian; + cmsFloat64Number LastResult[4]; + + + // Only 3->3 and 4->3 are supported + if (lut ->InputChannels != 3 && lut ->InputChannels != 4) return FALSE; + if (lut ->OutputChannels != 3) return FALSE; + + // Mark result of -1 + LastResult[0] = LastResult[1] = LastResult[2] = -1.0f; + + // Take the hint as starting point if specified + if (Hint == NULL) { + + // Begin at any point, we choose 1/3 of CMY axis + x[0] = x[1] = x[2] = 0.3f; + } + else { + + // Only copy 3 channels from hint... + for (j=0; j < 3; j++) + x[j] = Hint[j]; + } + + // If Lut is 4-dimensions, then grab target[3], which is fixed + if (lut ->InputChannels == 4) { + x[3] = Target[3]; + } + else x[3] = 0; // To keep lint happy + + + // Iterate + for (i = 0; i < INVERSION_MAX_ITERATIONS; i++) { + + // Get beginning fx + cmsPipelineEvalFloat(x, fx, lut); + + // Compute error + error = EuclideanDistance(fx, Target, 3); + + // If not convergent, return last safe value + if (error >= LastError) + break; + + // Keep latest values + LastError = error; + for (j=0; j < lut ->InputChannels; j++) + Result[j] = x[j]; + + // Found an exact match? + if (error <= 0) + break; + + // Obtain slope (the Jacobian) + for (j = 0; j < 3; j++) { + + xd[0] = x[0]; + xd[1] = x[1]; + xd[2] = x[2]; + xd[3] = x[3]; // Keep fixed channel + + IncDelta(&xd[j]); + + cmsPipelineEvalFloat(xd, fxd, lut); + + Jacobian.v[0].n[j] = ((fxd[0] - fx[0]) / JACOBIAN_EPSILON); + Jacobian.v[1].n[j] = ((fxd[1] - fx[1]) / JACOBIAN_EPSILON); + Jacobian.v[2].n[j] = ((fxd[2] - fx[2]) / JACOBIAN_EPSILON); + } + + // Solve system + tmp2.n[0] = fx[0] - Target[0]; + tmp2.n[1] = fx[1] - Target[1]; + tmp2.n[2] = fx[2] - Target[2]; + + if (!_cmsMAT3solve(&tmp, &Jacobian, &tmp2)) + return FALSE; + + // Move our guess + x[0] -= (cmsFloat32Number) tmp.n[0]; + x[1] -= (cmsFloat32Number) tmp.n[1]; + x[2] -= (cmsFloat32Number) tmp.n[2]; + + // Some clipping.... + for (j=0; j < 3; j++) { + if (x[j] < 0) x[j] = 0; + else + if (x[j] > 1.0) x[j] = 1.0; + } + } + + return TRUE; +} + diff --git a/src/cmsmd5.c b/src/cmsmd5.c new file mode 100644 index 0000000..ecf3d90 --- /dev/null +++ b/src/cmsmd5.c @@ -0,0 +1,317 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- + + +#include "lcms2_internal.h" + +#ifdef CMS_USE_BIG_ENDIAN + +static +void byteReverse(cmsUInt8Number * buf, cmsUInt32Number longs) +{ + do { + + cmsUInt32Number t = _cmsAdjustEndianess32(*(cmsUInt32Number *) buf); + *(cmsUInt32Number *) buf = t; + buf += sizeof(cmsUInt32Number); + + } while (--longs); + +} + +#else +#define byteReverse(buf, len) +#endif + + +typedef struct { + + cmsUInt32Number buf[4]; + cmsUInt32Number bits[2]; + cmsUInt8Number in[64]; + cmsContext ContextID; + +} _cmsMD5; + +#define F1(x, y, z) (z ^ (x & (y ^ z))) +#define F2(x, y, z) F1(z, x, y) +#define F3(x, y, z) (x ^ y ^ z) +#define F4(x, y, z) (y ^ (x | ~z)) + +#define STEP(f, w, x, y, z, data, s) \ + ( w += f(x, y, z) + data, w = w<>(32-s), w += x ) + + +static +void MD5_Transform(cmsUInt32Number buf[4], cmsUInt32Number in[16]) + +{ + register cmsUInt32Number a, b, c, d; + + a = buf[0]; + b = buf[1]; + c = buf[2]; + d = buf[3]; + + STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); + STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); + STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); + STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); + STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); + STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); + STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); + STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); + STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); + STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); + STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); + STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); + STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); + STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); + STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); + STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); + + STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); + STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); + STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); + STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); + STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); + STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); + STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); + STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); + STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); + STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); + STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); + STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); + STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); + STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); + STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); + STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); + + STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); + STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); + STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); + STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); + STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); + STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); + STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); + STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); + STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); + STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); + STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); + STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); + STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); + STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); + STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); + STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); + + STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); + STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); + STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); + STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); + STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); + STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); + STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); + STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); + STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); + STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); + STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); + STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); + STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); + STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); + STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); + STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); + + buf[0] += a; + buf[1] += b; + buf[2] += c; + buf[3] += d; +} + + +// Create a MD5 object +static +cmsHANDLE MD5alloc(cmsContext ContextID) +{ + _cmsMD5* ctx = (_cmsMD5*) _cmsMallocZero(ContextID, sizeof(_cmsMD5)); + if (ctx == NULL) return NULL; + + ctx ->ContextID = ContextID; + + ctx->buf[0] = 0x67452301; + ctx->buf[1] = 0xefcdab89; + ctx->buf[2] = 0x98badcfe; + ctx->buf[3] = 0x10325476; + + ctx->bits[0] = 0; + ctx->bits[1] = 0; + + return (cmsHANDLE) ctx; +} + + +static +void MD5add(cmsHANDLE Handle, cmsUInt8Number* buf, cmsUInt32Number len) +{ + _cmsMD5* ctx = (_cmsMD5*) Handle; + cmsUInt32Number t; + + t = ctx->bits[0]; + if ((ctx->bits[0] = t + (len << 3)) < t) + ctx->bits[1]++; + + ctx->bits[1] += len >> 29; + + t = (t >> 3) & 0x3f; + + if (t) { + + cmsUInt8Number *p = (cmsUInt8Number *) ctx->in + t; + + t = 64 - t; + if (len < t) { + memmove(p, buf, len); + return; + } + + memmove(p, buf, t); + byteReverse(ctx->in, 16); + + MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); + buf += t; + len -= t; + } + + while (len >= 64) { + memmove(ctx->in, buf, 64); + byteReverse(ctx->in, 16); + MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); + buf += 64; + len -= 64; + } + + memmove(ctx->in, buf, len); +} + +// Destroy the object and return the checksum +static +void MD5finish(cmsProfileID* ProfileID, cmsHANDLE Handle) +{ + _cmsMD5* ctx = (_cmsMD5*) Handle; + cmsUInt32Number count; + cmsUInt8Number *p; + + count = (ctx->bits[0] >> 3) & 0x3F; + + p = ctx->in + count; + *p++ = 0x80; + + count = 64 - 1 - count; + + if (count < 8) { + + memset(p, 0, count); + byteReverse(ctx->in, 16); + MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); + + memset(ctx->in, 0, 56); + } else { + memset(p, 0, count - 8); + } + byteReverse(ctx->in, 14); + + ((cmsUInt32Number *) ctx->in)[14] = ctx->bits[0]; + ((cmsUInt32Number *) ctx->in)[15] = ctx->bits[1]; + + MD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); + + byteReverse((cmsUInt8Number *) ctx->buf, 4); + memmove(ProfileID ->ID8, ctx->buf, 16); + + _cmsFree(ctx ->ContextID, ctx); +} + + + +// Assuming io points to an ICC profile, compute and store MD5 checksum +// In the header, rendering intentent, attributes and ID should be set to zero +// before computing MD5 checksum (per 6.1.13 in ICC spec) + +cmsBool CMSEXPORT cmsMD5computeID(cmsHPROFILE hProfile) +{ + cmsContext ContextID; + cmsUInt32Number BytesNeeded; + cmsUInt8Number* Mem = NULL; + cmsHANDLE MD5 = NULL; + _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; + _cmsICCPROFILE Keep; + + _cmsAssert(hProfile != NULL); + + ContextID = cmsGetProfileContextID(hProfile); + + // Save a copy of the profile header + memmove(&Keep, Icc, sizeof(_cmsICCPROFILE)); + + // Set RI, attributes and ID + memset(&Icc ->attributes, 0, sizeof(Icc ->attributes)); + Icc ->RenderingIntent = 0; + memset(&Icc ->ProfileID, 0, sizeof(Icc ->ProfileID)); + + // Compute needed storage + if (!cmsSaveProfileToMem(hProfile, NULL, &BytesNeeded)) goto Error; + + // Allocate memory + Mem = (cmsUInt8Number*) _cmsMalloc(ContextID, BytesNeeded); + if (Mem == NULL) goto Error; + + // Save to temporary storage + if (!cmsSaveProfileToMem(hProfile, Mem, &BytesNeeded)) goto Error; + + // Create MD5 object + MD5 = MD5alloc(ContextID); + if (MD5 == NULL) goto Error; + + // Add all bytes + MD5add(MD5, Mem, BytesNeeded); + + // Temp storage is no longer needed + _cmsFree(ContextID, Mem); + + // Restore header + memmove(Icc, &Keep, sizeof(_cmsICCPROFILE)); + + // And store the ID + MD5finish(&Icc ->ProfileID, MD5); + return TRUE; + +Error: + + // Free resources as something went wrong + if (MD5 != NULL) _cmsFree(ContextID, MD5); + if (Mem != NULL) _cmsFree(ContextID, Mem); + memmove(Icc, &Keep, sizeof(_cmsICCPROFILE)); + return FALSE; +} + diff --git a/src/cmsmtrx.c b/src/cmsmtrx.c new file mode 100644 index 0000000..84035c9 --- /dev/null +++ b/src/cmsmtrx.c @@ -0,0 +1,176 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + + +#define DSWAP(x, y) {cmsFloat64Number tmp = (x); (x)=(y); (y)=tmp;} + + +// Initiate a vector +void CMSEXPORT _cmsVEC3init(cmsVEC3* r, cmsFloat64Number x, cmsFloat64Number y, cmsFloat64Number z) +{ + r -> n[VX] = x; + r -> n[VY] = y; + r -> n[VZ] = z; +} + +// Vector substraction +void CMSEXPORT _cmsVEC3minus(cmsVEC3* r, const cmsVEC3* a, const cmsVEC3* b) +{ + r -> n[VX] = a -> n[VX] - b -> n[VX]; + r -> n[VY] = a -> n[VY] - b -> n[VY]; + r -> n[VZ] = a -> n[VZ] - b -> n[VZ]; +} + +// Vector cross product +void CMSEXPORT _cmsVEC3cross(cmsVEC3* r, const cmsVEC3* u, const cmsVEC3* v) +{ + r ->n[VX] = u->n[VY] * v->n[VZ] - v->n[VY] * u->n[VZ]; + r ->n[VY] = u->n[VZ] * v->n[VX] - v->n[VZ] * u->n[VX]; + r ->n[VZ] = u->n[VX] * v->n[VY] - v->n[VX] * u->n[VY]; +} + +// Vector dot product +cmsFloat64Number CMSEXPORT _cmsVEC3dot(const cmsVEC3* u, const cmsVEC3* v) +{ + return u->n[VX] * v->n[VX] + u->n[VY] * v->n[VY] + u->n[VZ] * v->n[VZ]; +} + +// Euclidean length +cmsFloat64Number CMSEXPORT _cmsVEC3length(const cmsVEC3* a) +{ + return sqrt(a ->n[VX] * a ->n[VX] + + a ->n[VY] * a ->n[VY] + + a ->n[VZ] * a ->n[VZ]); +} + +// Euclidean distance +cmsFloat64Number CMSEXPORT _cmsVEC3distance(const cmsVEC3* a, const cmsVEC3* b) +{ + cmsFloat64Number d1 = a ->n[VX] - b ->n[VX]; + cmsFloat64Number d2 = a ->n[VY] - b ->n[VY]; + cmsFloat64Number d3 = a ->n[VZ] - b ->n[VZ]; + + return sqrt(d1*d1 + d2*d2 + d3*d3); +} + + + +// 3x3 Identity +void CMSEXPORT _cmsMAT3identity(cmsMAT3* a) +{ + _cmsVEC3init(&a-> v[0], 1.0, 0.0, 0.0); + _cmsVEC3init(&a-> v[1], 0.0, 1.0, 0.0); + _cmsVEC3init(&a-> v[2], 0.0, 0.0, 1.0); +} + +static +cmsBool CloseEnough(cmsFloat64Number a, cmsFloat64Number b) +{ + return fabs(b - a) < (1.0 / 65535.0); +} + + +cmsBool CMSEXPORT _cmsMAT3isIdentity(const cmsMAT3* a) +{ + cmsMAT3 Identity; + int i, j; + + _cmsMAT3identity(&Identity); + + for (i=0; i < 3; i++) + for (j=0; j < 3; j++) + if (!CloseEnough(a ->v[i].n[j], Identity.v[i].n[j])) return FALSE; + + return TRUE; +} + + +// Multiply two matrices +void CMSEXPORT _cmsMAT3per(cmsMAT3* r, const cmsMAT3* a, const cmsMAT3* b) +{ +#define ROWCOL(i, j) \ + a->v[i].n[0]*b->v[0].n[j] + a->v[i].n[1]*b->v[1].n[j] + a->v[i].n[2]*b->v[2].n[j] + + _cmsVEC3init(&r-> v[0], ROWCOL(0,0), ROWCOL(0,1), ROWCOL(0,2)); + _cmsVEC3init(&r-> v[1], ROWCOL(1,0), ROWCOL(1,1), ROWCOL(1,2)); + _cmsVEC3init(&r-> v[2], ROWCOL(2,0), ROWCOL(2,1), ROWCOL(2,2)); + +#undef ROWCOL //(i, j) +} + + + +// Inverse of a matrix b = a^(-1) +cmsBool CMSEXPORT _cmsMAT3inverse(const cmsMAT3* a, cmsMAT3* b) +{ + cmsFloat64Number det, c0, c1, c2; + + c0 = a -> v[1].n[1]*a -> v[2].n[2] - a -> v[1].n[2]*a -> v[2].n[1]; + c1 = -a -> v[1].n[0]*a -> v[2].n[2] + a -> v[1].n[2]*a -> v[2].n[0]; + c2 = a -> v[1].n[0]*a -> v[2].n[1] - a -> v[1].n[1]*a -> v[2].n[0]; + + det = a -> v[0].n[0]*c0 + a -> v[0].n[1]*c1 + a -> v[0].n[2]*c2; + + if (fabs(det) < MATRIX_DET_TOLERANCE) return FALSE; // singular matrix; can't invert + + b -> v[0].n[0] = c0/det; + b -> v[0].n[1] = (a -> v[0].n[2]*a -> v[2].n[1] - a -> v[0].n[1]*a -> v[2].n[2])/det; + b -> v[0].n[2] = (a -> v[0].n[1]*a -> v[1].n[2] - a -> v[0].n[2]*a -> v[1].n[1])/det; + b -> v[1].n[0] = c1/det; + b -> v[1].n[1] = (a -> v[0].n[0]*a -> v[2].n[2] - a -> v[0].n[2]*a -> v[2].n[0])/det; + b -> v[1].n[2] = (a -> v[0].n[2]*a -> v[1].n[0] - a -> v[0].n[0]*a -> v[1].n[2])/det; + b -> v[2].n[0] = c2/det; + b -> v[2].n[1] = (a -> v[0].n[1]*a -> v[2].n[0] - a -> v[0].n[0]*a -> v[2].n[1])/det; + b -> v[2].n[2] = (a -> v[0].n[0]*a -> v[1].n[1] - a -> v[0].n[1]*a -> v[1].n[0])/det; + + return TRUE; +} + + +// Solve a system in the form Ax = b +cmsBool CMSEXPORT _cmsMAT3solve(cmsVEC3* x, cmsMAT3* a, cmsVEC3* b) +{ + cmsMAT3 m, a_1; + + memmove(&m, a, sizeof(cmsMAT3)); + + if (!_cmsMAT3inverse(&m, &a_1)) return FALSE; // Singular matrix + + _cmsMAT3eval(x, &a_1, b); + return TRUE; +} + +// Evaluate a vector across a matrix +void CMSEXPORT _cmsMAT3eval(cmsVEC3* r, const cmsMAT3* a, const cmsVEC3* v) +{ + r->n[VX] = a->v[0].n[VX]*v->n[VX] + a->v[0].n[VY]*v->n[VY] + a->v[0].n[VZ]*v->n[VZ]; + r->n[VY] = a->v[1].n[VX]*v->n[VX] + a->v[1].n[VY]*v->n[VY] + a->v[1].n[VZ]*v->n[VZ]; + r->n[VZ] = a->v[2].n[VX]*v->n[VX] + a->v[2].n[VY]*v->n[VY] + a->v[2].n[VZ]*v->n[VZ]; +} + + diff --git a/src/cmsnamed.c b/src/cmsnamed.c new file mode 100644 index 0000000..28ff45d --- /dev/null +++ b/src/cmsnamed.c @@ -0,0 +1,900 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + +// Multilocalized unicode objects. That is an attempt to encapsulate i18n. + + +// Allocates an empty multi localizad unicode object +cmsMLU* CMSEXPORT cmsMLUalloc(cmsContext ContextID, cmsUInt32Number nItems) +{ + cmsMLU* mlu; + + // nItems should be positive if given + if (nItems <= 0) nItems = 2; + + // Create the container + mlu = (cmsMLU*) _cmsMallocZero(ContextID, sizeof(cmsMLU)); + if (mlu == NULL) return NULL; + + mlu ->ContextID = ContextID; + + // Create entry array + mlu ->Entries = (_cmsMLUentry*) _cmsCalloc(ContextID, nItems, sizeof(_cmsMLUentry)); + if (mlu ->Entries == NULL) { + _cmsFree(ContextID, mlu); + return NULL; + } + + // Ok, keep indexes up to date + mlu ->AllocatedEntries = nItems; + mlu ->UsedEntries = 0; + + return mlu; +} + + +// Grows a mempool table for a MLU. Each time this function is called, mempool size is multiplied times two. +static +cmsBool GrowMLUpool(cmsMLU* mlu) +{ + cmsUInt32Number size; + void *NewPtr; + + // Sanity check + if (mlu == NULL) return FALSE; + + if (mlu ->PoolSize == 0) + size = 256; + else + size = mlu ->PoolSize * 2; + + // Check for overflow + if (size < mlu ->PoolSize) return FALSE; + + // Reallocate the pool + NewPtr = _cmsRealloc(mlu ->ContextID, mlu ->MemPool, size); + if (NewPtr == NULL) return FALSE; + + + mlu ->MemPool = NewPtr; + mlu ->PoolSize = size; + + return TRUE; +} + + +// Grows a ntry table for a MLU. Each time this function is called, table size is multiplied times two. +static +cmsBool GrowMLUtable(cmsMLU* mlu) +{ + int AllocatedEntries; + _cmsMLUentry *NewPtr; + + // Sanity check + if (mlu == NULL) return FALSE; + + AllocatedEntries = mlu ->AllocatedEntries * 2; + + // Check for overflow + if (AllocatedEntries / 2 != mlu ->AllocatedEntries) return FALSE; + + // Reallocate the memory + NewPtr = (_cmsMLUentry*)_cmsRealloc(mlu ->ContextID, mlu ->Entries, AllocatedEntries*sizeof(_cmsMLUentry)); + if (NewPtr == NULL) return FALSE; + + mlu ->Entries = NewPtr; + mlu ->AllocatedEntries = AllocatedEntries; + + return TRUE; +} + + +// Search for a specific entry in the structure. Language and Country are used. +static +int SearchMLUEntry(cmsMLU* mlu, cmsUInt16Number LanguageCode, cmsUInt16Number CountryCode) +{ + int i; + + // Sanity check + if (mlu == NULL) return -1; + + // Iterate whole table + for (i=0; i < mlu ->UsedEntries; i++) { + + if (mlu ->Entries[i].Country == CountryCode && + mlu ->Entries[i].Language == LanguageCode) return i; + } + + // Not found + return -1; +} + +// Add a block of characters to the intended MLU. Language and country are specified. +// Only one entry for Language/country pair is allowed. +static +cmsBool AddMLUBlock(cmsMLU* mlu, cmsUInt32Number size, const wchar_t *Block, + cmsUInt16Number LanguageCode, cmsUInt16Number CountryCode) +{ + cmsUInt32Number Offset; + cmsUInt8Number* Ptr; + + // Sanity check + if (mlu == NULL) return FALSE; + + // Is there any room available? + if (mlu ->UsedEntries >= mlu ->AllocatedEntries) { + if (!GrowMLUtable(mlu)) return FALSE; + } + + // Only one ASCII string + if (SearchMLUEntry(mlu, LanguageCode, CountryCode) >= 0) return FALSE; // Only one is allowed! + + // Check for size + while ((mlu ->PoolSize - mlu ->PoolUsed) < size) { + + if (!GrowMLUpool(mlu)) return FALSE; + } + + Offset = mlu ->PoolUsed; + + Ptr = (cmsUInt8Number*) mlu ->MemPool; + if (Ptr == NULL) return FALSE; + + // Set the entry + memmove(Ptr + Offset, Block, size); + mlu ->PoolUsed += size; + + mlu ->Entries[mlu ->UsedEntries].StrW = Offset; + mlu ->Entries[mlu ->UsedEntries].Len = size; + mlu ->Entries[mlu ->UsedEntries].Country = CountryCode; + mlu ->Entries[mlu ->UsedEntries].Language = LanguageCode; + mlu ->UsedEntries++; + + return TRUE; +} + + +// Add an ASCII entry. +cmsBool CMSEXPORT cmsMLUsetASCII(cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], const char* ASCIIString) +{ + cmsUInt32Number i, len = (cmsUInt32Number) strlen(ASCIIString)+1; + wchar_t* WStr; + cmsBool rc; + cmsUInt16Number Lang = _cmsAdjustEndianess16(*(cmsUInt16Number*) LanguageCode); + cmsUInt16Number Cntry = _cmsAdjustEndianess16(*(cmsUInt16Number*) CountryCode); + + if (mlu == NULL) return FALSE; + + WStr = (wchar_t*) _cmsCalloc(mlu ->ContextID, len, sizeof(wchar_t)); + if (WStr == NULL) return FALSE; + + for (i=0; i < len; i++) + WStr[i] = (wchar_t) ASCIIString[i]; + + rc = AddMLUBlock(mlu, len * sizeof(wchar_t), WStr, Lang, Cntry); + + _cmsFree(mlu ->ContextID, WStr); + return rc; + +} + +// We don't need any wcs support library +static +cmsUInt32Number mywcslen(const wchar_t *s) +{ + const wchar_t *p; + + p = s; + while (*p) + p++; + + return (cmsUInt32Number)(p - s); +} + + +// Add a wide entry +cmsBool CMSEXPORT cmsMLUsetWide(cmsMLU* mlu, const char Language[3], const char Country[3], const wchar_t* WideString) +{ + cmsUInt16Number Lang = _cmsAdjustEndianess16(*(cmsUInt16Number*) Language); + cmsUInt16Number Cntry = _cmsAdjustEndianess16(*(cmsUInt16Number*) Country); + cmsUInt32Number len; + + if (mlu == NULL) return FALSE; + if (WideString == NULL) return FALSE; + + len = (cmsUInt32Number) (mywcslen(WideString) + 1) * sizeof(wchar_t); + return AddMLUBlock(mlu, len, WideString, Lang, Cntry); +} + +// Duplicating a MLU is as easy as copying all members +cmsMLU* CMSEXPORT cmsMLUdup(const cmsMLU* mlu) +{ + cmsMLU* NewMlu = NULL; + + // Duplicating a NULL obtains a NULL + if (mlu == NULL) return NULL; + + NewMlu = cmsMLUalloc(mlu ->ContextID, mlu ->UsedEntries); + if (NewMlu == NULL) return NULL; + + // Should never happen + if (NewMlu ->AllocatedEntries < mlu ->UsedEntries) + goto Error; + + // Sanitize... + if (NewMlu ->Entries == NULL || mlu ->Entries == NULL) goto Error; + + memmove(NewMlu ->Entries, mlu ->Entries, mlu ->UsedEntries * sizeof(_cmsMLUentry)); + NewMlu ->UsedEntries = mlu ->UsedEntries; + + // The MLU may be empty + if (mlu ->PoolUsed == 0) { + NewMlu ->MemPool = NULL; + } + else { + // It is not empty + NewMlu ->MemPool = _cmsMalloc(mlu ->ContextID, mlu ->PoolUsed); + if (NewMlu ->MemPool == NULL) goto Error; + } + + NewMlu ->PoolSize = mlu ->PoolUsed; + + if (NewMlu ->MemPool == NULL || mlu ->MemPool == NULL) goto Error; + + memmove(NewMlu ->MemPool, mlu->MemPool, mlu ->PoolUsed); + NewMlu ->PoolUsed = mlu ->PoolUsed; + + return NewMlu; + +Error: + + if (NewMlu != NULL) cmsMLUfree(NewMlu); + return NULL; +} + +// Free any used memory +void CMSEXPORT cmsMLUfree(cmsMLU* mlu) +{ + if (mlu) { + + if (mlu -> Entries) _cmsFree(mlu ->ContextID, mlu->Entries); + if (mlu -> MemPool) _cmsFree(mlu ->ContextID, mlu->MemPool); + + _cmsFree(mlu ->ContextID, mlu); + } +} + + +// The algorithm first searches for an exact match of country and language, if not found it uses +// the Language. If none is found, first entry is used instead. +static +const wchar_t* _cmsMLUgetWide(const cmsMLU* mlu, + cmsUInt32Number *len, + cmsUInt16Number LanguageCode, cmsUInt16Number CountryCode, + cmsUInt16Number* UsedLanguageCode, cmsUInt16Number* UsedCountryCode) +{ + int i; + int Best = -1; + _cmsMLUentry* v; + + if (mlu == NULL) return NULL; + + if (mlu -> AllocatedEntries <= 0) return NULL; + + for (i=0; i < mlu ->UsedEntries; i++) { + + v = mlu ->Entries + i; + + if (v -> Language == LanguageCode) { + + if (Best == -1) Best = i; + + if (v -> Country == CountryCode) { + + if (UsedLanguageCode != NULL) *UsedLanguageCode = v ->Language; + if (UsedCountryCode != NULL) *UsedCountryCode = v ->Country; + + if (len != NULL) *len = v ->Len; + + return (wchar_t*) ((cmsUInt8Number*) mlu ->MemPool + v -> StrW); // Found exact match + } + } + } + + // No string found. Return First one + if (Best == -1) + Best = 0; + + v = mlu ->Entries + Best; + + if (UsedLanguageCode != NULL) *UsedLanguageCode = v ->Language; + if (UsedCountryCode != NULL) *UsedCountryCode = v ->Country; + + if (len != NULL) *len = v ->Len; + + return(wchar_t*) ((cmsUInt8Number*) mlu ->MemPool + v ->StrW); +} + + +// Obtain an ASCII representation of the wide string. Setting buffer to NULL returns the len +cmsUInt32Number CMSEXPORT cmsMLUgetASCII(const cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + char* Buffer, cmsUInt32Number BufferSize) +{ + const wchar_t *Wide; + cmsUInt32Number StrLen = 0; + cmsUInt32Number ASCIIlen, i; + + cmsUInt16Number Lang = _cmsAdjustEndianess16(*(cmsUInt16Number*) LanguageCode); + cmsUInt16Number Cntry = _cmsAdjustEndianess16(*(cmsUInt16Number*) CountryCode); + + // Sanitize + if (mlu == NULL) return 0; + + // Get WideChar + Wide = _cmsMLUgetWide(mlu, &StrLen, Lang, Cntry, NULL, NULL); + if (Wide == NULL) return 0; + + ASCIIlen = StrLen / sizeof(wchar_t); + + // Maybe we want only to know the len? + if (Buffer == NULL) return ASCIIlen + 1; // Note the zero at the end + + // No buffer size means no data + if (BufferSize <= 0) return 0; + + // Some clipping may be required + if (BufferSize < ASCIIlen + 1) + ASCIIlen = BufferSize - 1; + + // Precess each character + for (i=0; i < ASCIIlen; i++) { + + if (Wide[i] == 0) + Buffer[i] = 0; + else + Buffer[i] = (char) Wide[i]; + } + + // We put a termination "\0" + Buffer[ASCIIlen] = 0; + return ASCIIlen + 1; +} + +// Obtain a wide representation of the MLU, on depending on current locale settings +cmsUInt32Number CMSEXPORT cmsMLUgetWide(const cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + wchar_t* Buffer, cmsUInt32Number BufferSize) +{ + const wchar_t *Wide; + cmsUInt32Number StrLen = 0; + + cmsUInt16Number Lang = _cmsAdjustEndianess16(*(cmsUInt16Number*) LanguageCode); + cmsUInt16Number Cntry = _cmsAdjustEndianess16(*(cmsUInt16Number*) CountryCode); + + // Sanitize + if (mlu == NULL) return 0; + + Wide = _cmsMLUgetWide(mlu, &StrLen, Lang, Cntry, NULL, NULL); + if (Wide == NULL) return 0; + + // Maybe we want only to know the len? + if (Buffer == NULL) return StrLen + sizeof(wchar_t); + + // No buffer size means no data + if (BufferSize <= 0) return 0; + + // Some clipping may be required + if (BufferSize < StrLen + sizeof(wchar_t)) + StrLen = BufferSize - + sizeof(wchar_t); + + memmove(Buffer, Wide, StrLen); + Buffer[StrLen / sizeof(wchar_t)] = 0; + + return StrLen + sizeof(wchar_t); +} + + +// Get also the language and country +CMSAPI cmsBool CMSEXPORT cmsMLUgetTranslation(const cmsMLU* mlu, + const char LanguageCode[3], const char CountryCode[3], + char ObtainedLanguage[3], char ObtainedCountry[3]) +{ + const wchar_t *Wide; + + cmsUInt16Number Lang = _cmsAdjustEndianess16(*(cmsUInt16Number*) LanguageCode); + cmsUInt16Number Cntry = _cmsAdjustEndianess16(*(cmsUInt16Number*) CountryCode); + cmsUInt16Number ObtLang, ObtCode; + + // Sanitize + if (mlu == NULL) return FALSE; + + Wide = _cmsMLUgetWide(mlu, NULL, Lang, Cntry, &ObtLang, &ObtCode); + if (Wide == NULL) return FALSE; + + // Get used language and code + *(cmsUInt16Number *)ObtainedLanguage = _cmsAdjustEndianess16(ObtLang); + *(cmsUInt16Number *)ObtainedCountry = _cmsAdjustEndianess16(ObtCode); + + ObtainedLanguage[2] = ObtainedCountry[2] = 0; + return TRUE; +} + + +// Named color lists -------------------------------------------------------------------------------------------- + +// Grow the list to keep at least NumElements +static +cmsBool GrowNamedColorList(cmsNAMEDCOLORLIST* v) +{ + cmsUInt32Number size; + _cmsNAMEDCOLOR * NewPtr; + + if (v == NULL) return FALSE; + + if (v ->Allocated == 0) + size = 64; // Initial guess + else + size = v ->Allocated * 2; + + // Keep a maximum color lists can grow, 100K entries seems reasonable + if (size > 1024*100) return FALSE; + + NewPtr = (_cmsNAMEDCOLOR*) _cmsRealloc(v ->ContextID, v ->List, size * sizeof(_cmsNAMEDCOLOR)); + if (NewPtr == NULL) + return FALSE; + + v ->List = NewPtr; + v ->Allocated = size; + return TRUE; +} + +// Allocate a list for n elements +cmsNAMEDCOLORLIST* CMSEXPORT cmsAllocNamedColorList(cmsContext ContextID, cmsUInt32Number n, cmsUInt32Number ColorantCount, const char* Prefix, const char* Suffix) +{ + cmsNAMEDCOLORLIST* v = (cmsNAMEDCOLORLIST*) _cmsMallocZero(ContextID, sizeof(cmsNAMEDCOLORLIST)); + + if (v == NULL) return NULL; + + v ->List = NULL; + v ->nColors = 0; + v ->ContextID = ContextID; + + while (v -> Allocated < n) + GrowNamedColorList(v); + + strncpy(v ->Prefix, Prefix, sizeof(v ->Prefix)); + strncpy(v ->Suffix, Suffix, sizeof(v ->Suffix)); + v->Prefix[32] = v->Suffix[32] = 0; + + v -> ColorantCount = ColorantCount; + + return v; +} + +// Free a list +void CMSEXPORT cmsFreeNamedColorList(cmsNAMEDCOLORLIST* v) +{ + if (v ->List) _cmsFree(v ->ContextID, v ->List); + if (v) _cmsFree(v ->ContextID, v); +} + +cmsNAMEDCOLORLIST* CMSEXPORT cmsDupNamedColorList(const cmsNAMEDCOLORLIST* v) +{ + cmsNAMEDCOLORLIST* NewNC; + + if (v == NULL) return NULL; + + NewNC= cmsAllocNamedColorList(v ->ContextID, v -> nColors, v ->ColorantCount, v ->Prefix, v ->Suffix); + if (NewNC == NULL) return NULL; + + // For really large tables we need this + while (NewNC ->Allocated < v ->Allocated) + GrowNamedColorList(NewNC); + + memmove(NewNC ->Prefix, v ->Prefix, sizeof(v ->Prefix)); + memmove(NewNC ->Suffix, v ->Suffix, sizeof(v ->Suffix)); + NewNC ->ColorantCount = v ->ColorantCount; + memmove(NewNC->List, v ->List, v->nColors * sizeof(_cmsNAMEDCOLOR)); + NewNC ->nColors = v ->nColors; + return NewNC; +} + + +// Append a color to a list. List pointer may change if reallocated +cmsBool CMSEXPORT cmsAppendNamedColor(cmsNAMEDCOLORLIST* NamedColorList, + const char* Name, + cmsUInt16Number PCS[3], cmsUInt16Number Colorant[cmsMAXCHANNELS]) +{ + cmsUInt32Number i; + + if (NamedColorList == NULL) return FALSE; + + if (NamedColorList ->nColors + 1 > NamedColorList ->Allocated) { + if (!GrowNamedColorList(NamedColorList)) return FALSE; + } + + for (i=0; i < NamedColorList ->ColorantCount; i++) + NamedColorList ->List[NamedColorList ->nColors].DeviceColorant[i] = Colorant == NULL? 0 : Colorant[i]; + + for (i=0; i < 3; i++) + NamedColorList ->List[NamedColorList ->nColors].PCS[i] = PCS == NULL ? 0 : PCS[i]; + + if (Name != NULL) { + + strncpy(NamedColorList ->List[NamedColorList ->nColors].Name, Name, + sizeof(NamedColorList ->List[NamedColorList ->nColors].Name)); + + NamedColorList ->List[NamedColorList ->nColors].Name[cmsMAX_PATH-1] = 0; + + } + else + NamedColorList ->List[NamedColorList ->nColors].Name[0] = 0; + + + NamedColorList ->nColors++; + return TRUE; +} + +// Returns number of elements +cmsUInt32Number CMSEXPORT cmsNamedColorCount(const cmsNAMEDCOLORLIST* NamedColorList) +{ + if (NamedColorList == NULL) return 0; + return NamedColorList ->nColors; +} + +// Info aboout a given color +cmsBool CMSEXPORT cmsNamedColorInfo(const cmsNAMEDCOLORLIST* NamedColorList, cmsUInt32Number nColor, + char* Name, + char* Prefix, + char* Suffix, + cmsUInt16Number* PCS, + cmsUInt16Number* Colorant) +{ + if (NamedColorList == NULL) return FALSE; + + if (nColor >= cmsNamedColorCount(NamedColorList)) return FALSE; + + if (Name) strcpy(Name, NamedColorList->List[nColor].Name); + if (Prefix) strcpy(Prefix, NamedColorList->Prefix); + if (Suffix) strcpy(Suffix, NamedColorList->Suffix); + if (PCS) + memmove(PCS, NamedColorList ->List[nColor].PCS, 3*sizeof(cmsUInt16Number)); + + if (Colorant) + memmove(Colorant, NamedColorList ->List[nColor].DeviceColorant, + sizeof(cmsUInt16Number) * NamedColorList ->ColorantCount); + + + return TRUE; +} + +// Search for a given color name (no prefix or suffix) +cmsInt32Number CMSEXPORT cmsNamedColorIndex(const cmsNAMEDCOLORLIST* NamedColorList, const char* Name) +{ + int i, n; + + if (NamedColorList == NULL) return -1; + n = cmsNamedColorCount(NamedColorList); + for (i=0; i < n; i++) { + if (cmsstrcasecmp(Name, NamedColorList->List[i].Name) == 0) + return i; + } + + return -1; +} + +// MPE support ----------------------------------------------------------------------------------------------------------------- + +static +void FreeNamedColorList(cmsStage* mpe) +{ + cmsNAMEDCOLORLIST* List = (cmsNAMEDCOLORLIST*) mpe ->Data; + cmsFreeNamedColorList(List); +} + +static +void* DupNamedColorList(cmsStage* mpe) +{ + cmsNAMEDCOLORLIST* List = (cmsNAMEDCOLORLIST*) mpe ->Data; + return cmsDupNamedColorList(List); +} + +static +void EvalNamedColorPCS(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) +{ + cmsNAMEDCOLORLIST* NamedColorList = (cmsNAMEDCOLORLIST*) mpe ->Data; + cmsUInt16Number index = (cmsUInt16Number) _cmsQuickSaturateWord(In[0] * 65535.0); + + if (index >= NamedColorList-> nColors) { + cmsSignalError(NamedColorList ->ContextID, cmsERROR_RANGE, "Color %d out of range; ignored", index); + } + else { + + // Named color always uses Lab + Out[0] = (cmsFloat32Number) (NamedColorList->List[index].PCS[0] / 65535.0); + Out[1] = (cmsFloat32Number) (NamedColorList->List[index].PCS[1] / 65535.0); + Out[2] = (cmsFloat32Number) (NamedColorList->List[index].PCS[2] / 65535.0); + } +} + +static +void EvalNamedColor(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) +{ + cmsNAMEDCOLORLIST* NamedColorList = (cmsNAMEDCOLORLIST*) mpe ->Data; + cmsUInt16Number index = (cmsUInt16Number) _cmsQuickSaturateWord(In[0] * 65535.0); + cmsUInt32Number j; + + if (index >= NamedColorList-> nColors) { + cmsSignalError(NamedColorList ->ContextID, cmsERROR_RANGE, "Color %d out of range; ignored", index); + } + else { + for (j=0; j < NamedColorList ->ColorantCount; j++) + Out[j] = (cmsFloat32Number) (NamedColorList->List[index].DeviceColorant[j] / 65535.0); + } +} + + +// Named color lookup element +cmsStage* _cmsStageAllocNamedColor(cmsNAMEDCOLORLIST* NamedColorList, cmsBool UsePCS) +{ + return _cmsStageAllocPlaceholder(NamedColorList ->ContextID, + cmsSigNamedColorElemType, + 1, UsePCS ? 3 : NamedColorList ->ColorantCount, + UsePCS ? EvalNamedColorPCS : EvalNamedColor, + DupNamedColorList, + FreeNamedColorList, + cmsDupNamedColorList(NamedColorList)); + +} + + +// Retrieve the named color list from a transform. Should be first element in the LUT +cmsNAMEDCOLORLIST* CMSEXPORT cmsGetNamedColorList(cmsHTRANSFORM xform) +{ + _cmsTRANSFORM* v = (_cmsTRANSFORM*) xform; + cmsStage* mpe = v ->Lut->Elements; + + if (mpe ->Type != cmsSigNamedColorElemType) return NULL; + return (cmsNAMEDCOLORLIST*) mpe ->Data; +} + + +// Profile sequence description routines ------------------------------------------------------------------------------------- + +cmsSEQ* CMSEXPORT cmsAllocProfileSequenceDescription(cmsContext ContextID, cmsUInt32Number n) +{ + cmsSEQ* Seq; + cmsUInt32Number i; + + if (n == 0) return NULL; + + // In a absolutely arbitrary way, I hereby decide to allow a maxim of 255 profiles linked + // in a devicelink. It makes not sense anyway and may be used for exploits, so let's close the door! + if (n > 255) return NULL; + + Seq = (cmsSEQ*) _cmsMallocZero(ContextID, sizeof(cmsSEQ)); + if (Seq == NULL) return NULL; + + Seq -> ContextID = ContextID; + Seq -> seq = (cmsPSEQDESC*) _cmsCalloc(ContextID, n, sizeof(cmsPSEQDESC)); + Seq -> n = n; + + + for (i=0; i < n; i++) { + Seq -> seq[i].Manufacturer = NULL; + Seq -> seq[i].Model = NULL; + Seq -> seq[i].Description = NULL; + } + + return Seq; +} + +void CMSEXPORT cmsFreeProfileSequenceDescription(cmsSEQ* pseq) +{ + cmsUInt32Number i; + + for (i=0; i < pseq ->n; i++) { + if (pseq ->seq[i].Manufacturer != NULL) cmsMLUfree(pseq ->seq[i].Manufacturer); + if (pseq ->seq[i].Model != NULL) cmsMLUfree(pseq ->seq[i].Model); + if (pseq ->seq[i].Description != NULL) cmsMLUfree(pseq ->seq[i].Description); + } + + if (pseq ->seq != NULL) _cmsFree(pseq ->ContextID, pseq ->seq); + _cmsFree(pseq -> ContextID, pseq); +} + +cmsSEQ* CMSEXPORT cmsDupProfileSequenceDescription(const cmsSEQ* pseq) +{ + cmsSEQ *NewSeq; + cmsUInt32Number i; + + if (pseq == NULL) + return NULL; + + NewSeq = (cmsSEQ*) _cmsMalloc(pseq -> ContextID, sizeof(cmsSEQ)); + if (NewSeq == NULL) return NULL; + + + NewSeq -> seq = (cmsPSEQDESC*) _cmsCalloc(pseq ->ContextID, pseq ->n, sizeof(cmsPSEQDESC)); + if (NewSeq ->seq == NULL) goto Error; + + NewSeq -> ContextID = pseq ->ContextID; + NewSeq -> n = pseq ->n; + + for (i=0; i < pseq->n; i++) { + + memmove(&NewSeq ->seq[i].attributes, &pseq ->seq[i].attributes, sizeof(cmsUInt64Number)); + + NewSeq ->seq[i].deviceMfg = pseq ->seq[i].deviceMfg; + NewSeq ->seq[i].deviceModel = pseq ->seq[i].deviceModel; + memmove(&NewSeq ->seq[i].ProfileID, &pseq ->seq[i].ProfileID, sizeof(cmsProfileID)); + NewSeq ->seq[i].technology = pseq ->seq[i].technology; + + NewSeq ->seq[i].Manufacturer = cmsMLUdup(pseq ->seq[i].Manufacturer); + NewSeq ->seq[i].Model = cmsMLUdup(pseq ->seq[i].Model); + NewSeq ->seq[i].Description = cmsMLUdup(pseq ->seq[i].Description); + + } + + return NewSeq; + +Error: + + cmsFreeProfileSequenceDescription(NewSeq); + return NULL; +} + +// Dictionaries -------------------------------------------------------------------------------------------------------- + +// Dictionaries are just very simple linked lists + + +typedef struct _cmsDICT_struct { + cmsDICTentry* head; + cmsContext ContextID; +} _cmsDICT; + + +// Allocate an empty dictionary +cmsHANDLE CMSEXPORT cmsDictAlloc(cmsContext ContextID) +{ + _cmsDICT* dict = (_cmsDICT*) _cmsMallocZero(ContextID, sizeof(_cmsDICT)); + if (dict == NULL) return NULL; + + dict ->ContextID = ContextID; + return (cmsHANDLE) dict; + +} + +// Dispose resources +void CMSEXPORT cmsDictFree(cmsHANDLE hDict) +{ + _cmsDICT* dict = (_cmsDICT*) hDict; + cmsDICTentry *entry, *next; + + _cmsAssert(dict != NULL); + + // Walk the list freeing all nodes + entry = dict ->head; + while (entry != NULL) { + + if (entry ->DisplayName != NULL) cmsMLUfree(entry ->DisplayName); + if (entry ->DisplayValue != NULL) cmsMLUfree(entry ->DisplayValue); + if (entry ->Name != NULL) _cmsFree(dict ->ContextID, entry -> Name); + if (entry ->Value != NULL) _cmsFree(dict ->ContextID, entry -> Value); + + // Don't fall in the habitual trap... + next = entry ->Next; + _cmsFree(dict ->ContextID, entry); + + entry = next; + } + + _cmsFree(dict ->ContextID, dict); +} + + +// Duplicate a wide char string +static +wchar_t* DupWcs(cmsContext ContextID, const wchar_t* ptr) +{ + if (ptr == NULL) return NULL; + return (wchar_t*) _cmsDupMem(ContextID, ptr, (mywcslen(ptr) + 1) * sizeof(wchar_t)); +} + +// Add a new entry to the linked list +cmsBool CMSEXPORT cmsDictAddEntry(cmsHANDLE hDict, const wchar_t* Name, const wchar_t* Value, const cmsMLU *DisplayName, const cmsMLU *DisplayValue) +{ + _cmsDICT* dict = (_cmsDICT*) hDict; + cmsDICTentry *entry; + + _cmsAssert(dict != NULL); + _cmsAssert(Name != NULL); + + entry = (cmsDICTentry*) _cmsMallocZero(dict ->ContextID, sizeof(cmsDICTentry)); + if (entry == NULL) return FALSE; + + entry ->DisplayName = cmsMLUdup(DisplayName); + entry ->DisplayValue = cmsMLUdup(DisplayValue); + entry ->Name = DupWcs(dict ->ContextID, Name); + entry ->Value = DupWcs(dict ->ContextID, Value); + + entry ->Next = dict ->head; + dict ->head = entry; + + return TRUE; +} + + +// Duplicates an existing dictionary +cmsHANDLE CMSEXPORT cmsDictDup(cmsHANDLE hDict) +{ + _cmsDICT* old_dict = (_cmsDICT*) hDict; + cmsHANDLE hNew; + _cmsDICT* new_dict; + cmsDICTentry *entry; + + _cmsAssert(old_dict != NULL); + + hNew = cmsDictAlloc(old_dict ->ContextID); + if (hNew == NULL) return NULL; + + new_dict = (_cmsDICT*) hNew; + + // Walk the list freeing all nodes + entry = old_dict ->head; + while (entry != NULL) { + + if (!cmsDictAddEntry(hNew, entry ->Name, entry ->Value, entry ->DisplayName, entry ->DisplayValue)) { + + cmsDictFree(hNew); + return NULL; + } + + entry = entry -> Next; + } + + return hNew; +} + +// Get a pointer to the linked list +const cmsDICTentry* CMSEXPORT cmsDictGetEntryList(cmsHANDLE hDict) +{ + _cmsDICT* dict = (_cmsDICT*) hDict; + + if (dict == NULL) return NULL; + return dict ->head; +} + +// Helper For external languages +const cmsDICTentry* CMSEXPORT cmsDictNextEntry(const cmsDICTentry* e) +{ + if (e == NULL) return NULL; + return e ->Next; +} diff --git a/src/cmsopt.c b/src/cmsopt.c new file mode 100644 index 0000000..1b0d33e --- /dev/null +++ b/src/cmsopt.c @@ -0,0 +1,1657 @@ + +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + + +//---------------------------------------------------------------------------------- + +// Optimization for 8 bits, Shaper-CLUT (3 inputs only) +typedef struct { + + cmsContext ContextID; + + const cmsInterpParams* p; // Tetrahedrical interpolation parameters. This is a not-owned pointer. + + cmsUInt16Number rx[256], ry[256], rz[256]; + cmsUInt32Number X0[256], Y0[256], Z0[256]; // Precomputed nodes and offsets for 8-bit input data + + +} Prelin8Data; + + +// Generic optimization for 16 bits Shaper-CLUT-Shaper (any inputs) +typedef struct { + + cmsContext ContextID; + + // Number of channels + int nInputs; + int nOutputs; + + // Since there is no limitation of the output number of channels, this buffer holding the connexion CLUT-shaper + // has to be dynamically allocated. This is not the case of first step shaper-CLUT, which is limited to max inputs + cmsUInt16Number* StageDEF; + + _cmsInterpFn16 EvalCurveIn16[MAX_INPUT_DIMENSIONS]; // The maximum number of input channels is known in advance + cmsInterpParams* ParamsCurveIn16[MAX_INPUT_DIMENSIONS]; + + _cmsInterpFn16 EvalCLUT; // The evaluator for 3D grid + const cmsInterpParams* CLUTparams; // (not-owned pointer) + + + _cmsInterpFn16* EvalCurveOut16; // Points to an array of curve evaluators in 16 bits (not-owned pointer) + cmsInterpParams** ParamsCurveOut16; // Points to an array of references to interpolation params (not-owned pointer) + + +} Prelin16Data; + + +// Optimization for matrix-shaper in 8 bits. Numbers are operated in n.14 signed, tables are stored in 1.14 fixed + +typedef cmsInt32Number cmsS1Fixed14Number; // Note that this may hold more than 16 bits! + +#define DOUBLE_TO_1FIXED14(x) ((cmsS1Fixed14Number) floor((x) * 16384.0 + 0.5)) + +typedef struct { + + cmsContext ContextID; + + cmsS1Fixed14Number Shaper1R[256]; // from 0..255 to 1.14 (0.0...1.0) + cmsS1Fixed14Number Shaper1G[256]; + cmsS1Fixed14Number Shaper1B[256]; + + cmsS1Fixed14Number Mat[3][3]; // n.14 to n.14 (needs a saturation after that) + cmsS1Fixed14Number Off[3]; + + cmsUInt16Number Shaper2R[16385]; // 1.14 to 0..255 + cmsUInt16Number Shaper2G[16385]; + cmsUInt16Number Shaper2B[16385]; + +} MatShaper8Data; + +// Curves, optimization is shared between 8 and 16 bits +typedef struct { + + cmsContext ContextID; + + int nCurves; // Number of curves + int nElements; // Elements in curves + cmsUInt16Number** Curves; // Points to a dynamically allocated array + +} Curves16Data; + + +// Simple optimizations ---------------------------------------------------------------------------------------------------------- + + +// Remove an element in linked chain +static +void _RemoveElement(cmsStage** head) +{ + cmsStage* mpe = *head; + cmsStage* next = mpe ->Next; + *head = next; + cmsStageFree(mpe); +} + +// Remove all identities in chain. Note that pt actually is a double pointer to the element that holds the pointer. +static +cmsBool _Remove1Op(cmsPipeline* Lut, cmsStageSignature UnaryOp) +{ + cmsStage** pt = &Lut ->Elements; + cmsBool AnyOpt = FALSE; + + while (*pt != NULL) { + + if ((*pt) ->Implements == UnaryOp) { + _RemoveElement(pt); + AnyOpt = TRUE; + } + else + pt = &((*pt) -> Next); + } + + return AnyOpt; +} + +// Same, but only if two adjacent elements are found +static +cmsBool _Remove2Op(cmsPipeline* Lut, cmsStageSignature Op1, cmsStageSignature Op2) +{ + cmsStage** pt1; + cmsStage** pt2; + cmsBool AnyOpt = FALSE; + + pt1 = &Lut ->Elements; + if (*pt1 == NULL) return AnyOpt; + + while (*pt1 != NULL) { + + pt2 = &((*pt1) -> Next); + if (*pt2 == NULL) return AnyOpt; + + if ((*pt1) ->Implements == Op1 && (*pt2) ->Implements == Op2) { + _RemoveElement(pt2); + _RemoveElement(pt1); + AnyOpt = TRUE; + } + else + pt1 = &((*pt1) -> Next); + } + + return AnyOpt; +} + +// Preoptimize just gets rif of no-ops coming paired. Conversion from v2 to v4 followed +// by a v4 to v2 and vice-versa. The elements are then discarded. +static +cmsBool PreOptimize(cmsPipeline* Lut) +{ + cmsBool AnyOpt = FALSE, Opt; + + AnyOpt = FALSE; + + do { + + Opt = FALSE; + + // Remove all identities + Opt |= _Remove1Op(Lut, cmsSigIdentityElemType); + + // Remove XYZ2Lab followed by Lab2XYZ + Opt |= _Remove2Op(Lut, cmsSigXYZ2LabElemType, cmsSigLab2XYZElemType); + + // Remove Lab2XYZ followed by XYZ2Lab + Opt |= _Remove2Op(Lut, cmsSigLab2XYZElemType, cmsSigXYZ2LabElemType); + + // Remove V4 to V2 followed by V2 to V4 + Opt |= _Remove2Op(Lut, cmsSigLabV4toV2, cmsSigLabV2toV4); + + // Remove V2 to V4 followed by V4 to V2 + Opt |= _Remove2Op(Lut, cmsSigLabV2toV4, cmsSigLabV4toV2); + + if (Opt) AnyOpt = TRUE; + + } while (Opt); + + return AnyOpt; +} + +static +void Eval16nop1D(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const struct _cms_interp_struc* p) +{ + Output[0] = Input[0]; + + cmsUNUSED_PARAMETER(p); +} + +static +void PrelinEval16(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const void* D) +{ + Prelin16Data* p16 = (Prelin16Data*) D; + cmsUInt16Number StageABC[MAX_INPUT_DIMENSIONS]; + int i; + + for (i=0; i < p16 ->nInputs; i++) { + + p16 ->EvalCurveIn16[i](&Input[i], &StageABC[i], p16 ->ParamsCurveIn16[i]); + } + + p16 ->EvalCLUT(StageABC, p16 ->StageDEF, p16 ->CLUTparams); + + for (i=0; i < p16 ->nOutputs; i++) { + + p16 ->EvalCurveOut16[i](&p16->StageDEF[i], &Output[i], p16 ->ParamsCurveOut16[i]); + } +} + + +static +void PrelinOpt16free(cmsContext ContextID, void* ptr) +{ + Prelin16Data* p16 = (Prelin16Data*) ptr; + + _cmsFree(ContextID, p16 ->StageDEF); + _cmsFree(ContextID, p16 ->EvalCurveOut16); + _cmsFree(ContextID, p16 ->ParamsCurveOut16); + + _cmsFree(ContextID, p16); +} + +static +void* Prelin16dup(cmsContext ContextID, const void* ptr) +{ + Prelin16Data* p16 = (Prelin16Data*) ptr; + Prelin16Data* Duped = _cmsDupMem(ContextID, p16, sizeof(Prelin16Data)); + + if (Duped == NULL) return NULL; + + Duped ->StageDEF = _cmsCalloc(ContextID, p16 ->nOutputs, sizeof(cmsUInt16Number)); + Duped ->EvalCurveOut16 = _cmsDupMem(ContextID, p16 ->EvalCurveOut16, p16 ->nOutputs * sizeof(_cmsInterpFn16)); + Duped ->ParamsCurveOut16 = _cmsDupMem(ContextID, p16 ->ParamsCurveOut16, p16 ->nOutputs * sizeof(cmsInterpParams* )); + + return Duped; +} + + +static +Prelin16Data* PrelinOpt16alloc(cmsContext ContextID, + const cmsInterpParams* ColorMap, + int nInputs, cmsToneCurve** In, + int nOutputs, cmsToneCurve** Out ) +{ + int i; + Prelin16Data* p16 = (Prelin16Data*) _cmsMallocZero(ContextID, sizeof(Prelin16Data)); + if (p16 == NULL) return NULL; + + p16 ->nInputs = nInputs; + p16 -> nOutputs = nOutputs; + + + for (i=0; i < nInputs; i++) { + + if (In == NULL) { + p16 -> ParamsCurveIn16[i] = NULL; + p16 -> EvalCurveIn16[i] = Eval16nop1D; + + } + else { + p16 -> ParamsCurveIn16[i] = In[i] ->InterpParams; + p16 -> EvalCurveIn16[i] = p16 ->ParamsCurveIn16[i]->Interpolation.Lerp16; + } + } + + p16 ->CLUTparams = ColorMap; + p16 ->EvalCLUT = ColorMap ->Interpolation.Lerp16; + + + p16 -> StageDEF = _cmsCalloc(ContextID, p16 ->nOutputs, sizeof(cmsUInt16Number)); + p16 -> EvalCurveOut16 = (_cmsInterpFn16*) _cmsCalloc(ContextID, nOutputs, sizeof(_cmsInterpFn16)); + p16 -> ParamsCurveOut16 = (cmsInterpParams**) _cmsCalloc(ContextID, nOutputs, sizeof(cmsInterpParams* )); + + for (i=0; i < nOutputs; i++) { + + if (Out == NULL) { + p16 ->ParamsCurveOut16[i] = NULL; + p16 -> EvalCurveOut16[i] = Eval16nop1D; + } + else { + + p16 ->ParamsCurveOut16[i] = Out[i] ->InterpParams; + p16 -> EvalCurveOut16[i] = p16 ->ParamsCurveOut16[i]->Interpolation.Lerp16; + } + } + + return p16; +} + + + +// Resampling --------------------------------------------------------------------------------- + +#define PRELINEARIZATION_POINTS 4096 + +// Sampler implemented by another LUT. This is a clean way to precalculate the devicelink 3D CLUT for +// almost any transform. We use floating point precision and then convert from floating point to 16 bits. +static +int XFormSampler16(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +{ + cmsPipeline* Lut = (cmsPipeline*) Cargo; + cmsFloat32Number InFloat[cmsMAXCHANNELS], OutFloat[cmsMAXCHANNELS]; + cmsUInt32Number i; + + _cmsAssert(Lut -> InputChannels < cmsMAXCHANNELS); + _cmsAssert(Lut -> OutputChannels < cmsMAXCHANNELS); + + // From 16 bit to floating point + for (i=0; i < Lut ->InputChannels; i++) + InFloat[i] = (cmsFloat32Number) (In[i] / 65535.0); + + // Evaluate in floating point + cmsPipelineEvalFloat(InFloat, OutFloat, Lut); + + // Back to 16 bits representation + for (i=0; i < Lut ->OutputChannels; i++) + Out[i] = _cmsQuickSaturateWord(OutFloat[i] * 65535.0); + + // Always succeed + return TRUE; +} + +// Try to see if the curves of a given MPE are linear +static +cmsBool AllCurvesAreLinear(cmsStage* mpe) +{ + cmsToneCurve** Curves; + cmsUInt32Number i, n; + + Curves = _cmsStageGetPtrToCurveSet(mpe); + if (Curves == NULL) return FALSE; + + n = cmsStageOutputChannels(mpe); + + for (i=0; i < n; i++) { + if (!cmsIsToneCurveLinear(Curves[i])) return FALSE; + } + + return TRUE; +} + +// This function replaces a specific node placed in "At" by the "Value" numbers. Its purpose +// is to fix scum dot on broken profiles/transforms. Works on 1, 3 and 4 channels +static +cmsBool PatchLUT(cmsStage* CLUT, cmsUInt16Number At[], cmsUInt16Number Value[], + int nChannelsOut, int nChannelsIn) +{ + _cmsStageCLutData* Grid = (_cmsStageCLutData*) CLUT ->Data; + cmsInterpParams* p16 = Grid ->Params; + cmsFloat64Number px, py, pz, pw; + int x0, y0, z0, w0; + int i, index; + + if (CLUT -> Type != cmsSigCLutElemType) { + cmsSignalError(CLUT->ContextID, cmsERROR_INTERNAL, "(internal) Attempt to PatchLUT on non-lut MPE"); + return FALSE; + } + + px = ((cmsFloat64Number) At[0] * (p16->Domain[0])) / 65535.0; + py = ((cmsFloat64Number) At[1] * (p16->Domain[1])) / 65535.0; + pz = ((cmsFloat64Number) At[2] * (p16->Domain[2])) / 65535.0; + pw = ((cmsFloat64Number) At[3] * (p16->Domain[3])) / 65535.0; + + x0 = (int) floor(px); + y0 = (int) floor(py); + z0 = (int) floor(pz); + w0 = (int) floor(pw); + + if (nChannelsIn == 4) { + + if (((px - x0) != 0) || + ((py - y0) != 0) || + ((pz - z0) != 0) || + ((pw - w0) != 0)) return FALSE; // Not on exact node + + index = p16 -> opta[3] * x0 + + p16 -> opta[2] * y0 + + p16 -> opta[1] * z0 + + p16 -> opta[0] * w0; + } + else + if (nChannelsIn == 3) { + + if (((px - x0) != 0) || + ((py - y0) != 0) || + ((pz - z0) != 0)) return FALSE; // Not on exact node + + index = p16 -> opta[2] * x0 + + p16 -> opta[1] * y0 + + p16 -> opta[0] * z0; + } + else + if (nChannelsIn == 1) { + + if (((px - x0) != 0)) return FALSE; // Not on exact node + + index = p16 -> opta[0] * x0; + } + else { + cmsSignalError(CLUT->ContextID, cmsERROR_INTERNAL, "(internal) %d Channels are not supported on PatchLUT", nChannelsIn); + return FALSE; + } + + for (i=0; i < nChannelsOut; i++) + Grid -> Tab.T[index + i] = Value[i]; + + return TRUE; +} + +// Auxiliar, to see if two values are equal or very different +static +cmsBool WhitesAreEqual(int n, cmsUInt16Number White1[], cmsUInt16Number White2[] ) +{ + int i; + + for (i=0; i < n; i++) { + + if (abs(White1[i] - White2[i]) > 0xf000) return TRUE; // Values are so extremly different that the fixup should be avoided + if (White1[i] != White2[i]) return FALSE; + } + return TRUE; +} + + +// Locate the node for the white point and fix it to pure white in order to avoid scum dot. +static +cmsBool FixWhiteMisalignment(cmsPipeline* Lut, cmsColorSpaceSignature EntryColorSpace, cmsColorSpaceSignature ExitColorSpace) +{ + cmsUInt16Number *WhitePointIn, *WhitePointOut; + cmsUInt16Number WhiteIn[cmsMAXCHANNELS], WhiteOut[cmsMAXCHANNELS], ObtainedOut[cmsMAXCHANNELS]; + cmsUInt32Number i, nOuts, nIns; + cmsStage *PreLin = NULL, *CLUT = NULL, *PostLin = NULL; + + if (!_cmsEndPointsBySpace(EntryColorSpace, + &WhitePointIn, NULL, &nIns)) return FALSE; + + if (!_cmsEndPointsBySpace(ExitColorSpace, + &WhitePointOut, NULL, &nOuts)) return FALSE; + + // It needs to be fixed? + + cmsPipelineEval16(WhitePointIn, ObtainedOut, Lut); + + if (WhitesAreEqual(nOuts, WhitePointOut, ObtainedOut)) return TRUE; // whites already match + + // Check if the LUT comes as Prelin, CLUT or Postlin. We allow all combinations + if (!cmsPipelineCheckAndRetreiveStages(Lut, 3, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, &PreLin, &CLUT, &PostLin)) + if (!cmsPipelineCheckAndRetreiveStages(Lut, 2, cmsSigCurveSetElemType, cmsSigCLutElemType, &PreLin, &CLUT)) + if (!cmsPipelineCheckAndRetreiveStages(Lut, 2, cmsSigCLutElemType, cmsSigCurveSetElemType, &CLUT, &PostLin)) + if (!cmsPipelineCheckAndRetreiveStages(Lut, 1, cmsSigCLutElemType, &CLUT)) + return FALSE; + + // We need to interpolate white points of both, pre and post curves + if (PreLin) { + + cmsToneCurve** Curves = _cmsStageGetPtrToCurveSet(PreLin); + + for (i=0; i < nIns; i++) { + WhiteIn[i] = cmsEvalToneCurve16(Curves[i], WhitePointIn[i]); + } + } + else { + for (i=0; i < nIns; i++) + WhiteIn[i] = WhitePointIn[i]; + } + + // If any post-linearization, we need to find how is represented white before the curve, do + // a reverse interpolation in this case. + if (PostLin) { + + cmsToneCurve** Curves = _cmsStageGetPtrToCurveSet(PostLin); + + for (i=0; i < nOuts; i++) { + + cmsToneCurve* InversePostLin = cmsReverseToneCurve(Curves[i]); + WhiteOut[i] = cmsEvalToneCurve16(InversePostLin, WhitePointOut[i]); + cmsFreeToneCurve(InversePostLin); + } + } + else { + for (i=0; i < nOuts; i++) + WhiteOut[i] = WhitePointOut[i]; + } + + // Ok, proceed with patching. May fail and we don't care if it fails + PatchLUT(CLUT, WhiteIn, WhiteOut, nOuts, nIns); + + return TRUE; +} + +// ----------------------------------------------------------------------------------------------------------------------------------------------- +// This function creates simple LUT from complex ones. The generated LUT has an optional set of +// prelinearization curves, a CLUT of nGridPoints and optional postlinearization tables. +// These curves have to exist in the original LUT in order to be used in the simplified output. +// Caller may also use the flags to allow this feature. +// LUTS with all curves will be simplified to a single curve. Parametric curves are lost. +// This function should be used on 16-bits LUTS only, as floating point losses precision when simplified +// ----------------------------------------------------------------------------------------------------------------------------------------------- + +static +cmsBool OptimizeByResampling(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) +{ + cmsPipeline* Src; + cmsPipeline* Dest; + cmsStage* CLUT; + cmsStage *KeepPreLin = NULL, *KeepPostLin = NULL; + int nGridPoints; + cmsColorSpaceSignature ColorSpace, OutputColorSpace; + cmsStage *NewPreLin = NULL; + cmsStage *NewPostLin = NULL; + _cmsStageCLutData* DataCLUT; + cmsToneCurve** DataSetIn; + cmsToneCurve** DataSetOut; + Prelin16Data* p16; + + + // This is a loosy optimization! does not apply in floating-point cases + if (_cmsFormatterIsFloat(*InputFormat) || _cmsFormatterIsFloat(*OutputFormat)) return FALSE; + + ColorSpace = _cmsICCcolorSpace(T_COLORSPACE(*InputFormat)); + OutputColorSpace = _cmsICCcolorSpace(T_COLORSPACE(*OutputFormat)); + nGridPoints = _cmsReasonableGridpointsByColorspace(ColorSpace, *dwFlags); + + // For empty LUTs, 2 points are enough + if (cmsPipelineStageCount(*Lut) == 0) + nGridPoints = 2; + + Src = *Lut; + + // Allocate an empty LUT + Dest = cmsPipelineAlloc(Src ->ContextID, Src ->InputChannels, Src ->OutputChannels); + if (!Dest) return FALSE; + + // Prelinearization tables are kept unless indicated by flags + if (*dwFlags & cmsFLAGS_CLUT_PRE_LINEARIZATION) { + + // Get a pointer to the prelinearization element + cmsStage* PreLin = cmsPipelineGetPtrToFirstStage(Src); + + // Check if suitable + if (PreLin ->Type == cmsSigCurveSetElemType) { + + // Maybe this is a linear tram, so we can avoid the whole stuff + if (!AllCurvesAreLinear(PreLin)) { + + // All seems ok, proceed. + NewPreLin = cmsStageDup(PreLin); + cmsPipelineInsertStage(Dest, cmsAT_BEGIN, NewPreLin); + + // Remove prelinearization. Since we have duplicated the curve + // in destination LUT, the sampling shoud be applied after this stage. + cmsPipelineUnlinkStage(Src, cmsAT_BEGIN, &KeepPreLin); + } + } + } + + // Allocate the CLUT + CLUT = cmsStageAllocCLut16bit(Src ->ContextID, nGridPoints, Src ->InputChannels, Src->OutputChannels, NULL); + if (CLUT == NULL) return FALSE; + + // Add the CLUT to the destination LUT + cmsPipelineInsertStage(Dest, cmsAT_END, CLUT); + + // Postlinearization tables are kept unless indicated by flags + if (*dwFlags & cmsFLAGS_CLUT_POST_LINEARIZATION) { + + // Get a pointer to the postlinearization if present + cmsStage* PostLin = cmsPipelineGetPtrToLastStage(Src); + + // Check if suitable + if (cmsStageType(PostLin) == cmsSigCurveSetElemType) { + + // Maybe this is a linear tram, so we can avoid the whole stuff + if (!AllCurvesAreLinear(PostLin)) { + + // All seems ok, proceed. + NewPostLin = cmsStageDup(PostLin); + cmsPipelineInsertStage(Dest, cmsAT_END, NewPostLin); + + // In destination LUT, the sampling shoud be applied after this stage. + cmsPipelineUnlinkStage(Src, cmsAT_END, &KeepPostLin); + } + } + } + + // Now its time to do the sampling. We have to ignore pre/post linearization + // The source LUT whithout pre/post curves is passed as parameter. + if (!cmsStageSampleCLut16bit(CLUT, XFormSampler16, (void*) Src, 0)) { + + // Ops, something went wrong, Restore stages + if (KeepPreLin != NULL) cmsPipelineInsertStage(Src, cmsAT_BEGIN, KeepPreLin); + if (KeepPostLin != NULL) cmsPipelineInsertStage(Src, cmsAT_END, KeepPostLin); + cmsPipelineFree(Dest); + return FALSE; + } + + // Done. + + if (KeepPreLin != NULL) cmsStageFree(KeepPreLin); + if (KeepPostLin != NULL) cmsStageFree(KeepPostLin); + cmsPipelineFree(Src); + + DataCLUT = (_cmsStageCLutData*) CLUT ->Data; + + if (NewPreLin == NULL) DataSetIn = NULL; + else DataSetIn = ((_cmsStageToneCurvesData*) NewPreLin ->Data) ->TheCurves; + + if (NewPostLin == NULL) DataSetOut = NULL; + else DataSetOut = ((_cmsStageToneCurvesData*) NewPostLin ->Data) ->TheCurves; + + + if (DataSetIn == NULL && DataSetOut == NULL) { + + _cmsPipelineSetOptimizationParameters(Dest, (_cmsOPTeval16Fn) DataCLUT->Params->Interpolation.Lerp16, DataCLUT->Params, NULL, NULL); + } + else { + + p16 = PrelinOpt16alloc(Dest ->ContextID, + DataCLUT ->Params, + Dest ->InputChannels, + DataSetIn, + Dest ->OutputChannels, + DataSetOut); + + + _cmsPipelineSetOptimizationParameters(Dest, PrelinEval16, (void*) p16, PrelinOpt16free, Prelin16dup); + } + + + // Don't fix white on absolute colorimetric + if (Intent == INTENT_ABSOLUTE_COLORIMETRIC) + *dwFlags |= cmsFLAGS_NOWHITEONWHITEFIXUP; + + if (!(*dwFlags & cmsFLAGS_NOWHITEONWHITEFIXUP)) { + + FixWhiteMisalignment(Dest, ColorSpace, OutputColorSpace); + } + + *Lut = Dest; + return TRUE; + + cmsUNUSED_PARAMETER(Intent); +} + + +// ----------------------------------------------------------------------------------------------------------------------------------------------- +// Fixes the gamma balancing of transform. This is described in my paper "Prelinearization Stages on +// Color-Management Application-Specific Integrated Circuits (ASICs)" presented at NIP24. It only works +// for RGB transforms. See the paper for more details +// ----------------------------------------------------------------------------------------------------------------------------------------------- + + +// Normalize endpoints by slope limiting max and min. This assures endpoints as well. +// Descending curves are handled as well. +static +void SlopeLimiting(cmsToneCurve* g) +{ + int BeginVal, EndVal; + int AtBegin = (int) floor((cmsFloat64Number) g ->nEntries * 0.02 + 0.5); // Cutoff at 2% + int AtEnd = g ->nEntries - AtBegin - 1; // And 98% + cmsFloat64Number Val, Slope, beta; + int i; + + if (cmsIsToneCurveDescending(g)) { + BeginVal = 0xffff; EndVal = 0; + } + else { + BeginVal = 0; EndVal = 0xffff; + } + + // Compute slope and offset for begin of curve + Val = g ->Table16[AtBegin]; + Slope = (Val - BeginVal) / AtBegin; + beta = Val - Slope * AtBegin; + + for (i=0; i < AtBegin; i++) + g ->Table16[i] = _cmsQuickSaturateWord(i * Slope + beta); + + // Compute slope and offset for the end + Val = g ->Table16[AtEnd]; + Slope = (EndVal - Val) / AtBegin; // AtBegin holds the X interval, which is same in both cases + beta = Val - Slope * AtEnd; + + for (i = AtEnd; i < (int) g ->nEntries; i++) + g ->Table16[i] = _cmsQuickSaturateWord(i * Slope + beta); +} + + +// Precomputes tables for 8-bit on input devicelink. +static +Prelin8Data* PrelinOpt8alloc(cmsContext ContextID, const cmsInterpParams* p, cmsToneCurve* G[3]) +{ + int i; + cmsUInt16Number Input[3]; + cmsS15Fixed16Number v1, v2, v3; + Prelin8Data* p8; + + p8 = _cmsMallocZero(ContextID, sizeof(Prelin8Data)); + if (p8 == NULL) return NULL; + + // Since this only works for 8 bit input, values comes always as x * 257, + // we can safely take msb byte (x << 8 + x) + + for (i=0; i < 256; i++) { + + if (G != NULL) { + + // Get 16-bit representation + Input[0] = cmsEvalToneCurve16(G[0], FROM_8_TO_16(i)); + Input[1] = cmsEvalToneCurve16(G[1], FROM_8_TO_16(i)); + Input[2] = cmsEvalToneCurve16(G[2], FROM_8_TO_16(i)); + } + else { + Input[0] = FROM_8_TO_16(i); + Input[1] = FROM_8_TO_16(i); + Input[2] = FROM_8_TO_16(i); + } + + + // Move to 0..1.0 in fixed domain + v1 = _cmsToFixedDomain(Input[0] * p -> Domain[0]); + v2 = _cmsToFixedDomain(Input[1] * p -> Domain[1]); + v3 = _cmsToFixedDomain(Input[2] * p -> Domain[2]); + + // Store the precalculated table of nodes + p8 ->X0[i] = (p->opta[2] * FIXED_TO_INT(v1)); + p8 ->Y0[i] = (p->opta[1] * FIXED_TO_INT(v2)); + p8 ->Z0[i] = (p->opta[0] * FIXED_TO_INT(v3)); + + // Store the precalculated table of offsets + p8 ->rx[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v1); + p8 ->ry[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v2); + p8 ->rz[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v3); + } + + p8 ->ContextID = ContextID; + p8 ->p = p; + + return p8; +} + +static +void Prelin8free(cmsContext ContextID, void* ptr) +{ + _cmsFree(ContextID, ptr); +} + +static +void* Prelin8dup(cmsContext ContextID, const void* ptr) +{ + return _cmsDupMem(ContextID, ptr, sizeof(Prelin8Data)); +} + + + +// A optimized interpolation for 8-bit input. +#define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) +static +void PrelinEval8(register const cmsUInt16Number Input[], + register cmsUInt16Number Output[], + register const void* D) +{ + + cmsUInt8Number r, g, b; + cmsS15Fixed16Number rx, ry, rz; + cmsS15Fixed16Number c0, c1, c2, c3, Rest; + int OutChan; + register cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1; + Prelin8Data* p8 = (Prelin8Data*) D; + register const cmsInterpParams* p = p8 ->p; + int TotalOut = p -> nOutputs; + const cmsUInt16Number* LutTable = p -> Table; + + r = Input[0] >> 8; + g = Input[1] >> 8; + b = Input[2] >> 8; + + X0 = X1 = p8->X0[r]; + Y0 = Y1 = p8->Y0[g]; + Z0 = Z1 = p8->Z0[b]; + + rx = p8 ->rx[r]; + ry = p8 ->ry[g]; + rz = p8 ->rz[b]; + + X1 = X0 + ((rx == 0) ? 0 : p ->opta[2]); + Y1 = Y0 + ((ry == 0) ? 0 : p ->opta[1]); + Z1 = Z0 + ((rz == 0) ? 0 : p ->opta[0]); + + + // These are the 6 Tetrahedral + for (OutChan=0; OutChan < TotalOut; OutChan++) { + + c0 = DENS(X0, Y0, Z0); + + if (rx >= ry && ry >= rz) + { + c1 = DENS(X1, Y0, Z0) - c0; + c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); + c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); + } + else + if (rx >= rz && rz >= ry) + { + c1 = DENS(X1, Y0, Z0) - c0; + c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); + c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); + } + else + if (rz >= rx && rx >= ry) + { + c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); + c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); + c3 = DENS(X0, Y0, Z1) - c0; + } + else + if (ry >= rx && rx >= rz) + { + c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); + c2 = DENS(X0, Y1, Z0) - c0; + c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); + } + else + if (ry >= rz && rz >= rx) + { + c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); + c2 = DENS(X0, Y1, Z0) - c0; + c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); + } + else + if (rz >= ry && ry >= rx) + { + c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); + c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); + c3 = DENS(X0, Y0, Z1) - c0; + } + else { + c1 = c2 = c3 = 0; + } + + + Rest = c1 * rx + c2 * ry + c3 * rz; + + Output[OutChan] = (cmsUInt16Number)c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)); + + } +} + +#undef DENS + + +// Curves that contain wide empty areas are not optimizeable +static +cmsBool IsDegenerated(const cmsToneCurve* g) +{ + int i, Zeros = 0, Poles = 0; + int nEntries = g ->nEntries; + + for (i=0; i < nEntries; i++) { + + if (g ->Table16[i] == 0x0000) Zeros++; + if (g ->Table16[i] == 0xffff) Poles++; + } + + if (Zeros == 1 && Poles == 1) return FALSE; // For linear tables + if (Zeros > (nEntries / 4)) return TRUE; // Degenerated, mostly zeros + if (Poles > (nEntries / 4)) return TRUE; // Degenerated, mostly poles + + return FALSE; +} + +// -------------------------------------------------------------------------------------------------------------- +// We need xput over here + +static +cmsBool OptimizeByComputingLinearization(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) +{ + cmsPipeline* OriginalLut; + int nGridPoints; + cmsToneCurve *Trans[cmsMAXCHANNELS], *TransReverse[cmsMAXCHANNELS]; + cmsUInt32Number t, i; + cmsFloat32Number v, In[cmsMAXCHANNELS], Out[cmsMAXCHANNELS]; + cmsBool lIsSuitable, lIsLinear; + cmsPipeline* OptimizedLUT = NULL, *LutPlusCurves = NULL; + cmsStage* OptimizedCLUTmpe; + cmsColorSpaceSignature ColorSpace, OutputColorSpace; + cmsStage* OptimizedPrelinMpe; + cmsToneCurve** OptimizedPrelinCurves; + _cmsStageCLutData* OptimizedPrelinCLUT; + + + // This is a loosy optimization! does not apply in floating-point cases + if (_cmsFormatterIsFloat(*InputFormat) || _cmsFormatterIsFloat(*OutputFormat)) return FALSE; + + // Only on RGB + if (T_COLORSPACE(*InputFormat) != PT_RGB) return FALSE; + if (T_COLORSPACE(*OutputFormat) != PT_RGB) return FALSE; + + + // On 16 bits, user has to specify the feature + if (!_cmsFormatterIs8bit(*InputFormat)) { + if (!(*dwFlags & cmsFLAGS_CLUT_PRE_LINEARIZATION)) return FALSE; + } + + OriginalLut = *Lut; + ColorSpace = _cmsICCcolorSpace(T_COLORSPACE(*InputFormat)); + OutputColorSpace = _cmsICCcolorSpace(T_COLORSPACE(*OutputFormat)); + nGridPoints = _cmsReasonableGridpointsByColorspace(ColorSpace, *dwFlags); + + // Empty gamma containers + memset(Trans, 0, sizeof(Trans)); + memset(TransReverse, 0, sizeof(TransReverse)); + + for (t = 0; t < OriginalLut ->InputChannels; t++) { + Trans[t] = cmsBuildTabulatedToneCurve16(OriginalLut ->ContextID, PRELINEARIZATION_POINTS, NULL); + if (Trans[t] == NULL) goto Error; + } + + // Populate the curves + for (i=0; i < PRELINEARIZATION_POINTS; i++) { + + v = (cmsFloat32Number) ((cmsFloat64Number) i / (PRELINEARIZATION_POINTS - 1)); + + // Feed input with a gray ramp + for (t=0; t < OriginalLut ->InputChannels; t++) + In[t] = v; + + // Evaluate the gray value + cmsPipelineEvalFloat(In, Out, OriginalLut); + + // Store result in curve + for (t=0; t < OriginalLut ->InputChannels; t++) + Trans[t] ->Table16[i] = _cmsQuickSaturateWord(Out[t] * 65535.0); + } + + // Slope-limit the obtained curves + for (t = 0; t < OriginalLut ->InputChannels; t++) + SlopeLimiting(Trans[t]); + + // Check for validity + lIsSuitable = TRUE; + lIsLinear = TRUE; + for (t=0; (lIsSuitable && (t < OriginalLut ->InputChannels)); t++) { + + // Exclude if already linear + if (!cmsIsToneCurveLinear(Trans[t])) + lIsLinear = FALSE; + + // Exclude if non-monotonic + if (!cmsIsToneCurveMonotonic(Trans[t])) + lIsSuitable = FALSE; + + if (IsDegenerated(Trans[t])) + lIsSuitable = FALSE; + } + + // If it is not suitable, just quit + if (!lIsSuitable) goto Error; + + // Invert curves if possible + for (t = 0; t < OriginalLut ->InputChannels; t++) { + TransReverse[t] = cmsReverseToneCurveEx(PRELINEARIZATION_POINTS, Trans[t]); + if (TransReverse[t] == NULL) goto Error; + } + + // Now inset the reversed curves at the begin of transform + LutPlusCurves = cmsPipelineDup(OriginalLut); + if (LutPlusCurves == NULL) goto Error; + + cmsPipelineInsertStage(LutPlusCurves, cmsAT_BEGIN, cmsStageAllocToneCurves(OriginalLut ->ContextID, OriginalLut ->InputChannels, TransReverse)); + + // Create the result LUT + OptimizedLUT = cmsPipelineAlloc(OriginalLut ->ContextID, OriginalLut ->InputChannels, OriginalLut ->OutputChannels); + if (OptimizedLUT == NULL) goto Error; + + OptimizedPrelinMpe = cmsStageAllocToneCurves(OriginalLut ->ContextID, OriginalLut ->InputChannels, Trans); + + // Create and insert the curves at the beginning + cmsPipelineInsertStage(OptimizedLUT, cmsAT_BEGIN, OptimizedPrelinMpe); + + // Allocate the CLUT for result + OptimizedCLUTmpe = cmsStageAllocCLut16bit(OriginalLut ->ContextID, nGridPoints, OriginalLut ->InputChannels, OriginalLut ->OutputChannels, NULL); + + // Add the CLUT to the destination LUT + cmsPipelineInsertStage(OptimizedLUT, cmsAT_END, OptimizedCLUTmpe); + + // Resample the LUT + if (!cmsStageSampleCLut16bit(OptimizedCLUTmpe, XFormSampler16, (void*) LutPlusCurves, 0)) goto Error; + + // Free resources + for (t = 0; t < OriginalLut ->InputChannels; t++) { + + if (Trans[t]) cmsFreeToneCurve(Trans[t]); + if (TransReverse[t]) cmsFreeToneCurve(TransReverse[t]); + } + + cmsPipelineFree(LutPlusCurves); + + + OptimizedPrelinCurves = _cmsStageGetPtrToCurveSet(OptimizedPrelinMpe); + OptimizedPrelinCLUT = (_cmsStageCLutData*) OptimizedCLUTmpe ->Data; + + // Set the evaluator if 8-bit + if (_cmsFormatterIs8bit(*InputFormat)) { + + Prelin8Data* p8 = PrelinOpt8alloc(OptimizedLUT ->ContextID, + OptimizedPrelinCLUT ->Params, + OptimizedPrelinCurves); + if (p8 == NULL) return FALSE; + + _cmsPipelineSetOptimizationParameters(OptimizedLUT, PrelinEval8, (void*) p8, Prelin8free, Prelin8dup); + + } + else + { + Prelin16Data* p16 = PrelinOpt16alloc(OptimizedLUT ->ContextID, + OptimizedPrelinCLUT ->Params, + 3, OptimizedPrelinCurves, 3, NULL); + if (p16 == NULL) return FALSE; + + _cmsPipelineSetOptimizationParameters(OptimizedLUT, PrelinEval16, (void*) p16, PrelinOpt16free, Prelin16dup); + + } + + // Don't fix white on absolute colorimetric + if (Intent == INTENT_ABSOLUTE_COLORIMETRIC) + *dwFlags |= cmsFLAGS_NOWHITEONWHITEFIXUP; + + if (!(*dwFlags & cmsFLAGS_NOWHITEONWHITEFIXUP)) { + + if (!FixWhiteMisalignment(OptimizedLUT, ColorSpace, OutputColorSpace)) { + + return FALSE; + } + } + + // And return the obtained LUT + + cmsPipelineFree(OriginalLut); + *Lut = OptimizedLUT; + return TRUE; + +Error: + + for (t = 0; t < OriginalLut ->InputChannels; t++) { + + if (Trans[t]) cmsFreeToneCurve(Trans[t]); + if (TransReverse[t]) cmsFreeToneCurve(TransReverse[t]); + } + + if (LutPlusCurves != NULL) cmsPipelineFree(LutPlusCurves); + if (OptimizedLUT != NULL) cmsPipelineFree(OptimizedLUT); + + return FALSE; + + cmsUNUSED_PARAMETER(Intent); +} + + +// Curves optimizer ------------------------------------------------------------------------------------------------------------------ + +static +void CurvesFree(cmsContext ContextID, void* ptr) +{ + Curves16Data* Data = (Curves16Data*) ptr; + int i; + + for (i=0; i < Data -> nCurves; i++) { + + _cmsFree(ContextID, Data ->Curves[i]); + } + + _cmsFree(ContextID, Data ->Curves); + _cmsFree(ContextID, ptr); +} + +static +void* CurvesDup(cmsContext ContextID, const void* ptr) +{ + Curves16Data* Data = _cmsDupMem(ContextID, ptr, sizeof(Curves16Data)); + int i; + + if (Data == NULL) return NULL; + + Data ->Curves = _cmsDupMem(ContextID, Data ->Curves, Data ->nCurves * sizeof(cmsUInt16Number*)); + + for (i=0; i < Data -> nCurves; i++) { + Data ->Curves[i] = _cmsDupMem(ContextID, Data ->Curves[i], Data -> nElements * sizeof(cmsUInt16Number)); + } + + return (void*) Data; +} + +// Precomputes tables for 8-bit on input devicelink. +static +Curves16Data* CurvesAlloc(cmsContext ContextID, int nCurves, int nElements, cmsToneCurve** G) +{ + int i, j; + Curves16Data* c16; + + c16 = _cmsMallocZero(ContextID, sizeof(Curves16Data)); + if (c16 == NULL) return NULL; + + c16 ->nCurves = nCurves; + c16 ->nElements = nElements; + + c16 ->Curves = _cmsCalloc(ContextID, nCurves, sizeof(cmsUInt16Number*)); + if (c16 ->Curves == NULL) return NULL; + + for (i=0; i < nCurves; i++) { + + c16->Curves[i] = _cmsCalloc(ContextID, nElements, sizeof(cmsUInt16Number)); + + if (nElements == 256) { + + for (j=0; j < nElements; j++) { + + c16 ->Curves[i][j] = cmsEvalToneCurve16(G[i], FROM_8_TO_16(j)); + } + } + else { + + for (j=0; j < nElements; j++) { + c16 ->Curves[i][j] = cmsEvalToneCurve16(G[i], (cmsUInt16Number) j); + } + } + } + + return c16; +} + +static +void FastEvaluateCurves8(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register const void* D) +{ + Curves16Data* Data = (Curves16Data*) D; + cmsUInt8Number x; + int i; + + for (i=0; i < Data ->nCurves; i++) { + + x = (In[i] >> 8); + Out[i] = Data -> Curves[i][x]; + } +} + + +static +void FastEvaluateCurves16(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register const void* D) +{ + Curves16Data* Data = (Curves16Data*) D; + int i; + + for (i=0; i < Data ->nCurves; i++) { + Out[i] = Data -> Curves[i][In[i]]; + } +} + + +static +void FastIdentity16(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register const void* D) +{ + cmsPipeline* Lut = (cmsPipeline*) D; + cmsUInt32Number i; + + for (i=0; i < Lut ->InputChannels; i++) { + Out[i] = In[i]; + } +} + + +// If the target LUT holds only curves, the optimization procedure is to join all those +// curves together. That only works on curves and does not work on matrices. +static +cmsBool OptimizeByJoiningCurves(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) +{ + cmsToneCurve** GammaTables = NULL; + cmsFloat32Number InFloat[cmsMAXCHANNELS], OutFloat[cmsMAXCHANNELS]; + cmsUInt32Number i, j; + cmsPipeline* Src = *Lut; + cmsPipeline* Dest = NULL; + cmsStage* mpe; + cmsStage* ObtainedCurves = NULL; + + + // This is a loosy optimization! does not apply in floating-point cases + if (_cmsFormatterIsFloat(*InputFormat) || _cmsFormatterIsFloat(*OutputFormat)) return FALSE; + + // Only curves in this LUT? + for (mpe = cmsPipelineGetPtrToFirstStage(Src); + mpe != NULL; + mpe = cmsStageNext(mpe)) { + if (cmsStageType(mpe) != cmsSigCurveSetElemType) return FALSE; + } + + // Allocate an empty LUT + Dest = cmsPipelineAlloc(Src ->ContextID, Src ->InputChannels, Src ->OutputChannels); + if (Dest == NULL) return FALSE; + + // Create target curves + GammaTables = (cmsToneCurve**) _cmsCalloc(Src ->ContextID, Src ->InputChannels, sizeof(cmsToneCurve*)); + if (GammaTables == NULL) goto Error; + + for (i=0; i < Src ->InputChannels; i++) { + GammaTables[i] = cmsBuildTabulatedToneCurve16(Src ->ContextID, PRELINEARIZATION_POINTS, NULL); + if (GammaTables[i] == NULL) goto Error; + } + + // Compute 16 bit result by using floating point + for (i=0; i < PRELINEARIZATION_POINTS; i++) { + + for (j=0; j < Src ->InputChannels; j++) + InFloat[j] = (cmsFloat32Number) ((cmsFloat64Number) i / (PRELINEARIZATION_POINTS - 1)); + + cmsPipelineEvalFloat(InFloat, OutFloat, Src); + + for (j=0; j < Src ->InputChannels; j++) + GammaTables[j] -> Table16[i] = _cmsQuickSaturateWord(OutFloat[j] * 65535.0); + } + + ObtainedCurves = cmsStageAllocToneCurves(Src ->ContextID, Src ->InputChannels, GammaTables); + if (ObtainedCurves == NULL) goto Error; + + for (i=0; i < Src ->InputChannels; i++) { + cmsFreeToneCurve(GammaTables[i]); + GammaTables[i] = NULL; + } + + if (GammaTables != NULL) _cmsFree(Src ->ContextID, GammaTables); + + // Maybe the curves are linear at the end + if (!AllCurvesAreLinear(ObtainedCurves)) { + + cmsPipelineInsertStage(Dest, cmsAT_BEGIN, ObtainedCurves); + + // If the curves are to be applied in 8 bits, we can save memory + if (_cmsFormatterIs8bit(*InputFormat)) { + + _cmsStageToneCurvesData* Data = (_cmsStageToneCurvesData*) ObtainedCurves ->Data; + Curves16Data* c16 = CurvesAlloc(Dest ->ContextID, Data ->nCurves, 256, Data ->TheCurves); + + *dwFlags |= cmsFLAGS_NOCACHE; + _cmsPipelineSetOptimizationParameters(Dest, FastEvaluateCurves8, c16, CurvesFree, CurvesDup); + + } + else { + + _cmsStageToneCurvesData* Data = (_cmsStageToneCurvesData*) cmsStageData(ObtainedCurves); + Curves16Data* c16 = CurvesAlloc(Dest ->ContextID, Data ->nCurves, 65536, Data ->TheCurves); + + *dwFlags |= cmsFLAGS_NOCACHE; + _cmsPipelineSetOptimizationParameters(Dest, FastEvaluateCurves16, c16, CurvesFree, CurvesDup); + } + } + else { + + // LUT optimizes to nothing. Set the identity LUT + cmsStageFree(ObtainedCurves); + + cmsPipelineInsertStage(Dest, cmsAT_BEGIN, cmsStageAllocIdentity(Dest ->ContextID, Src ->InputChannels)); + + *dwFlags |= cmsFLAGS_NOCACHE; + _cmsPipelineSetOptimizationParameters(Dest, FastIdentity16, (void*) Dest, NULL, NULL); + } + + // We are done. + cmsPipelineFree(Src); + *Lut = Dest; + return TRUE; + +Error: + + if (ObtainedCurves != NULL) cmsStageFree(ObtainedCurves); + if (GammaTables != NULL) { + for (i=0; i < Src ->InputChannels; i++) { + if (GammaTables[i] != NULL) cmsFreeToneCurve(GammaTables[i]); + } + + _cmsFree(Src ->ContextID, GammaTables); + } + + if (Dest != NULL) cmsPipelineFree(Dest); + return FALSE; + + cmsUNUSED_PARAMETER(Intent); + cmsUNUSED_PARAMETER(InputFormat); + cmsUNUSED_PARAMETER(OutputFormat); + cmsUNUSED_PARAMETER(dwFlags); +} + +// ------------------------------------------------------------------------------------------------------------------------------------- +// LUT is Shaper - Matrix - Matrix - Shaper, which is very frequent when combining two matrix-shaper profiles + + +static +void FreeMatShaper(cmsContext ContextID, void* Data) +{ + if (Data != NULL) _cmsFree(ContextID, Data); +} + +static +void* DupMatShaper(cmsContext ContextID, const void* Data) +{ + return _cmsDupMem(ContextID, Data, sizeof(MatShaper8Data)); +} + + +// A fast matrix-shaper evaluator for 8 bits. This is a bit ticky since I'm using 1.14 signed fixed point +// to accomplish some performance. Actually it takes 256x3 16 bits tables and 16385 x 3 tables of 8 bits, +// in total about 50K, and the performance boost is huge! +static +void MatShaperEval16(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register const void* D) +{ + MatShaper8Data* p = (MatShaper8Data*) D; + cmsS1Fixed14Number l1, l2, l3, r, g, b; + cmsUInt32Number ri, gi, bi; + + // In this case (and only in this case!) we can use this simplification since + // In[] is assured to come from a 8 bit number. (a << 8 | a) + ri = In[0] & 0xFF; + gi = In[1] & 0xFF; + bi = In[2] & 0xFF; + + // Across first shaper, which also converts to 1.14 fixed point + r = p->Shaper1R[ri]; + g = p->Shaper1G[gi]; + b = p->Shaper1B[bi]; + + // Evaluate the matrix in 1.14 fixed point + l1 = (p->Mat[0][0] * r + p->Mat[0][1] * g + p->Mat[0][2] * b + p->Off[0] + 0x2000) >> 14; + l2 = (p->Mat[1][0] * r + p->Mat[1][1] * g + p->Mat[1][2] * b + p->Off[1] + 0x2000) >> 14; + l3 = (p->Mat[2][0] * r + p->Mat[2][1] * g + p->Mat[2][2] * b + p->Off[2] + 0x2000) >> 14; + + // Now we have to clip to 0..1.0 range + ri = (l1 < 0) ? 0 : ((l1 > 16384) ? 16384 : l1); + gi = (l2 < 0) ? 0 : ((l2 > 16384) ? 16384 : l2); + bi = (l3 < 0) ? 0 : ((l3 > 16384) ? 16384 : l3); + + // And across second shaper, + Out[0] = p->Shaper2R[ri]; + Out[1] = p->Shaper2G[gi]; + Out[2] = p->Shaper2B[bi]; + +} + +// This table converts from 8 bits to 1.14 after applying the curve +static +void FillFirstShaper(cmsS1Fixed14Number* Table, cmsToneCurve* Curve) +{ + int i; + cmsFloat32Number R, y; + + for (i=0; i < 256; i++) { + + R = (cmsFloat32Number) (i / 255.0); + y = cmsEvalToneCurveFloat(Curve, R); + + Table[i] = DOUBLE_TO_1FIXED14(y); + } +} + +// This table converts form 1.14 (being 0x4000 the last entry) to 8 bits after applying the curve +static +void FillSecondShaper(cmsUInt16Number* Table, cmsToneCurve* Curve, cmsBool Is8BitsOutput) +{ + int i; + cmsFloat32Number R, Val; + + for (i=0; i < 16385; i++) { + + R = (cmsFloat32Number) (i / 16384.0); + Val = cmsEvalToneCurveFloat(Curve, R); // Val comes 0..1.0 + + if (Is8BitsOutput) { + + // If 8 bits output, we can optimize further by computing the / 257 part. + // first we compute the resulting byte and then we store the byte times + // 257. This quantization allows to round very quick by doing a >> 8, but + // since the low byte is always equal to msb, we can do a & 0xff and this works! + cmsUInt16Number w = _cmsQuickSaturateWord(Val * 65535.0 + 0.5); + cmsUInt8Number b = FROM_16_TO_8(w); + + Table[i] = FROM_8_TO_16(b); + } + else Table[i] = _cmsQuickSaturateWord(Val * 65535.0 + 0.5); + } +} + +// Compute the matrix-shaper structure +static +cmsBool SetMatShaper(cmsPipeline* Dest, cmsToneCurve* Curve1[3], cmsMAT3* Mat, cmsVEC3* Off, cmsToneCurve* Curve2[3], cmsUInt32Number* OutputFormat) +{ + MatShaper8Data* p; + int i, j; + cmsBool Is8Bits = _cmsFormatterIs8bit(*OutputFormat); + + // Allocate a big chuck of memory to store precomputed tables + p = (MatShaper8Data*) _cmsMalloc(Dest ->ContextID, sizeof(MatShaper8Data)); + if (p == NULL) return FALSE; + + p -> ContextID = Dest -> ContextID; + + // Precompute tables + FillFirstShaper(p ->Shaper1R, Curve1[0]); + FillFirstShaper(p ->Shaper1G, Curve1[1]); + FillFirstShaper(p ->Shaper1B, Curve1[2]); + + FillSecondShaper(p ->Shaper2R, Curve2[0], Is8Bits); + FillSecondShaper(p ->Shaper2G, Curve2[1], Is8Bits); + FillSecondShaper(p ->Shaper2B, Curve2[2], Is8Bits); + + // Convert matrix to nFixed14. Note that those values may take more than 16 bits as + for (i=0; i < 3; i++) { + for (j=0; j < 3; j++) { + p ->Mat[i][j] = DOUBLE_TO_1FIXED14(Mat->v[i].n[j]); + } + } + + for (i=0; i < 3; i++) { + + if (Off == NULL) { + p ->Off[i] = 0; + } + else { + p ->Off[i] = DOUBLE_TO_1FIXED14(Off->n[i]); + } + } + + // Mark as optimized for faster formatter + if (Is8Bits) + *OutputFormat |= OPTIMIZED_SH(1); + + // Fill function pointers + _cmsPipelineSetOptimizationParameters(Dest, MatShaperEval16, (void*) p, FreeMatShaper, DupMatShaper); + return TRUE; +} + +// 8 bits on input allows matrix-shaper boot up to 25 Mpixels per second on RGB. That's fast! +// TODO: Allow a third matrix for abs. colorimetric +static +cmsBool OptimizeMatrixShaper(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) +{ + cmsStage* Curve1, *Curve2; + cmsStage* Matrix1, *Matrix2; + _cmsStageMatrixData* Data1; + _cmsStageMatrixData* Data2; + cmsMAT3 res; + cmsBool IdentityMat; + cmsPipeline* Dest, *Src; + + // Only works on RGB to RGB + if (T_CHANNELS(*InputFormat) != 3 || T_CHANNELS(*OutputFormat) != 3) return FALSE; + + // Only works on 8 bit input + if (!_cmsFormatterIs8bit(*InputFormat)) return FALSE; + + // Seems suitable, proceed + Src = *Lut; + + // Check for shaper-matrix-matrix-shaper structure, that is what this optimizer stands for + if (!cmsPipelineCheckAndRetreiveStages(Src, 4, + cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, + &Curve1, &Matrix1, &Matrix2, &Curve2)) return FALSE; + + // Get both matrices + Data1 = (_cmsStageMatrixData*) cmsStageData(Matrix1); + Data2 = (_cmsStageMatrixData*) cmsStageData(Matrix2); + + // Input offset should be zero + if (Data1 ->Offset != NULL) return FALSE; + + // Multiply both matrices to get the result + _cmsMAT3per(&res, (cmsMAT3*) Data2 ->Double, (cmsMAT3*) Data1 ->Double); + + // Now the result is in res + Data2 -> Offset. Maybe is a plain identity? + IdentityMat = FALSE; + if (_cmsMAT3isIdentity(&res) && Data2 ->Offset == NULL) { + + // We can get rid of full matrix + IdentityMat = TRUE; + } + + // Allocate an empty LUT + Dest = cmsPipelineAlloc(Src ->ContextID, Src ->InputChannels, Src ->OutputChannels); + if (!Dest) return FALSE; + + // Assamble the new LUT + cmsPipelineInsertStage(Dest, cmsAT_BEGIN, cmsStageDup(Curve1)); + if (!IdentityMat) + cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(Dest ->ContextID, 3, 3, (const cmsFloat64Number*) &res, Data2 ->Offset)); + cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageDup(Curve2)); + + // If identity on matrix, we can further optimize the curves, so call the join curves routine + if (IdentityMat) { + + OptimizeByJoiningCurves(&Dest, Intent, InputFormat, OutputFormat, dwFlags); + } + else { + _cmsStageToneCurvesData* mpeC1 = (_cmsStageToneCurvesData*) cmsStageData(Curve1); + _cmsStageToneCurvesData* mpeC2 = (_cmsStageToneCurvesData*) cmsStageData(Curve2); + + // In this particular optimization, caché does not help as it takes more time to deal with + // the caché that with the pixel handling + *dwFlags |= cmsFLAGS_NOCACHE; + + // Setup the optimizarion routines + SetMatShaper(Dest, mpeC1 ->TheCurves, &res, (cmsVEC3*) Data2 ->Offset, mpeC2->TheCurves, OutputFormat); + } + + cmsPipelineFree(Src); + *Lut = Dest; + return TRUE; +} + + +// ------------------------------------------------------------------------------------------------------------------------------------- +// Optimization plug-ins + +// List of optimizations +typedef struct _cmsOptimizationCollection_st { + + _cmsOPToptimizeFn OptimizePtr; + + struct _cmsOptimizationCollection_st *Next; + +} _cmsOptimizationCollection; + + +// The built-in list. We currently implement 4 types of optimizations. Joining of curves, matrix-shaper, linearization and resampling +static _cmsOptimizationCollection DefaultOptimization[] = { + + { OptimizeByJoiningCurves, &DefaultOptimization[1] }, + { OptimizeMatrixShaper, &DefaultOptimization[2] }, + { OptimizeByComputingLinearization, &DefaultOptimization[3] }, + { OptimizeByResampling, NULL } +}; + +// The linked list head +static _cmsOptimizationCollection* OptimizationCollection = DefaultOptimization; + +// Register new ways to optimize +cmsBool _cmsRegisterOptimizationPlugin(cmsPluginBase* Data) +{ + cmsPluginOptimization* Plugin = (cmsPluginOptimization*) Data; + _cmsOptimizationCollection* fl; + + if (Data == NULL) { + + OptimizationCollection = DefaultOptimization; + return TRUE; + } + + // Optimizer callback is required + if (Plugin ->OptimizePtr == NULL) return FALSE; + + fl = (_cmsOptimizationCollection*) _cmsPluginMalloc(sizeof(_cmsOptimizationCollection)); + if (fl == NULL) return FALSE; + + // Copy the parameters + fl ->OptimizePtr = Plugin ->OptimizePtr; + + // Keep linked list + fl ->Next = OptimizationCollection; + OptimizationCollection = fl; + + // All is ok + return TRUE; +} + +// The entry point for LUT optimization +cmsBool _cmsOptimizePipeline(cmsPipeline** PtrLut, + int Intent, + cmsUInt32Number* InputFormat, + cmsUInt32Number* OutputFormat, + cmsUInt32Number* dwFlags) +{ + _cmsOptimizationCollection* Opts; + cmsBool AnySuccess = FALSE; + + // A CLUT is being asked, so force this specific optimization + if (*dwFlags & cmsFLAGS_FORCE_CLUT) { + + PreOptimize(*PtrLut); + return OptimizeByResampling(PtrLut, Intent, InputFormat, OutputFormat, dwFlags); + } + + // Anything to optimize? + if ((*PtrLut) ->Elements == NULL) { + _cmsPipelineSetOptimizationParameters(*PtrLut, FastIdentity16, (void*) *PtrLut, NULL, NULL); + return TRUE; + } + + // Try to get rid of identities and trivial conversions. + AnySuccess = PreOptimize(*PtrLut); + + // After removal do we end with an identity? + if ((*PtrLut) ->Elements == NULL) { + _cmsPipelineSetOptimizationParameters(*PtrLut, FastIdentity16, (void*) *PtrLut, NULL, NULL); + return TRUE; + } + + // Do not optimize, keep all precision + if (*dwFlags & cmsFLAGS_NOOPTIMIZE) + return FALSE; + + // Try built-in optimizations and plug-in + for (Opts = OptimizationCollection; + Opts != NULL; + Opts = Opts ->Next) { + + // If one schema succeeded, we are done + if (Opts ->OptimizePtr(PtrLut, Intent, InputFormat, OutputFormat, dwFlags)) { + + return TRUE; // Optimized! + } + } + + // Only simple optimizations succeeded + return AnySuccess; +} + + + diff --git a/src/cmspack.c b/src/cmspack.c new file mode 100644 index 0000000..63a9bc0 --- /dev/null +++ b/src/cmspack.c @@ -0,0 +1,2813 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + +// This module handles all formats supported by lcms. There are two flavors, 16 bits and +// floating point. Floating point is supported only in a subset, those formats holding +// cmsFloat32Number (4 bytes per component) and double (marked as 0 bytes per component as special +// case) + +// --------------------------------------------------------------------------- + + +// This macro return words stored as big endian +#define CHANGE_ENDIAN(w) (cmsUInt16Number) ((cmsUInt16Number) ((w)<<8)|((w)>>8)) + +// These macros handles reversing (negative) +#define REVERSE_FLAVOR_8(x) ((cmsUInt8Number) (0xff-(x))) +#define REVERSE_FLAVOR_16(x) ((cmsUInt16Number)(0xffff-(x))) + +// * 0xffff / 0xff00 = (255 * 257) / (255 * 256) = 257 / 256 +cmsINLINE cmsUInt16Number FomLabV2ToLabV4(cmsUInt16Number x) +{ + int a; + + a = (x << 8 | x) >> 8; // * 257 / 256 + if ( a > 0xffff) return 0xffff; + return (cmsUInt16Number) a; +} + +// * 0xf00 / 0xffff = * 256 / 257 +cmsINLINE cmsUInt16Number FomLabV4ToLabV2(cmsUInt16Number x) +{ + return (cmsUInt16Number) (((x << 8) + 0x80) / 257); +} + + +typedef struct { + cmsUInt32Number Type; + cmsUInt32Number Mask; + cmsFormatter16 Frm; + +} cmsFormatters16; + +typedef struct { + cmsUInt32Number Type; + cmsUInt32Number Mask; + cmsFormatterFloat Frm; + +} cmsFormattersFloat; + +#define ANYSPACE COLORSPACE_SH(31) +#define ANYCHANNELS CHANNELS_SH(15) +#define ANYEXTRA EXTRA_SH(7) +#define ANYPLANAR PLANAR_SH(1) +#define ANYENDIAN ENDIAN16_SH(1) +#define ANYSWAP DOSWAP_SH(1) +#define ANYSWAPFIRST SWAPFIRST_SH(1) +#define ANYFLAVOR FLAVOR_SH(1) + + +// Supress waning about info never being used + +#ifdef _MSC_VER +#pragma warning(disable : 4100) +#endif + +// Unpacking routines (16 bits) ---------------------------------------------------------------------------------------- + +// Does almost everything but is slow +static +cmsUInt8Number* UnrollChunkyBytes(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> InputFormat); + int DoSwap = T_DOSWAP(info ->InputFormat); + int Reverse = T_FLAVOR(info ->InputFormat); + int SwapFirst = T_SWAPFIRST(info -> InputFormat); + int Extra = T_EXTRA(info -> InputFormat); + int ExtraFirst = DoSwap && !SwapFirst; + cmsUInt16Number v; + int i; + + if (ExtraFirst) { + accum += Extra; + } + + for (i=0; i < nChan; i++) { + int index = DoSwap ? (nChan - i - 1) : i; + + v = FROM_8_TO_16(*accum); + v = Reverse ? REVERSE_FLAVOR_16(v) : v; + wIn[index] = v; + accum++; + } + + if (!ExtraFirst) { + accum += Extra; + } + + if (Extra == 0 && SwapFirst) { + cmsUInt16Number tmp = wIn[0]; + + memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsUInt16Number)); + wIn[nChan-1] = tmp; + } + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); + +} + +// Extra channels are just ignored because come in the next planes +static +cmsUInt8Number* UnrollPlanarBytes(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> InputFormat); + int DoSwap= T_DOSWAP(info ->InputFormat); + int Reverse= T_FLAVOR(info ->InputFormat); + int i; + cmsUInt8Number* Init = accum; + + if (DoSwap) { + accum += T_EXTRA(info -> InputFormat) * Stride; + } + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; + cmsUInt16Number v = FROM_8_TO_16(*accum); + + wIn[index] = Reverse ? REVERSE_FLAVOR_16(v) : v; + accum += Stride; + } + + return (Init + 1); +} + +// Special cases, provided for performance +static +cmsUInt8Number* Unroll4Bytes(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = FROM_8_TO_16(*accum); accum++; // C + wIn[1] = FROM_8_TO_16(*accum); accum++; // M + wIn[2] = FROM_8_TO_16(*accum); accum++; // Y + wIn[3] = FROM_8_TO_16(*accum); accum++; // K + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll4BytesReverse(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // C + wIn[1] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // M + wIn[2] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // Y + wIn[3] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // K + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll4BytesSwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[3] = FROM_8_TO_16(*accum); accum++; // K + wIn[0] = FROM_8_TO_16(*accum); accum++; // C + wIn[1] = FROM_8_TO_16(*accum); accum++; // M + wIn[2] = FROM_8_TO_16(*accum); accum++; // Y + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +// KYMC +static +cmsUInt8Number* Unroll4BytesSwap(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[3] = FROM_8_TO_16(*accum); accum++; // K + wIn[2] = FROM_8_TO_16(*accum); accum++; // Y + wIn[1] = FROM_8_TO_16(*accum); accum++; // M + wIn[0] = FROM_8_TO_16(*accum); accum++; // C + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll4BytesSwapSwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[2] = FROM_8_TO_16(*accum); accum++; // K + wIn[1] = FROM_8_TO_16(*accum); accum++; // Y + wIn[0] = FROM_8_TO_16(*accum); accum++; // M + wIn[3] = FROM_8_TO_16(*accum); accum++; // C + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll3Bytes(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = FROM_8_TO_16(*accum); accum++; // R + wIn[1] = FROM_8_TO_16(*accum); accum++; // G + wIn[2] = FROM_8_TO_16(*accum); accum++; // B + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll3BytesSkip1Swap(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + accum++; // A + wIn[2] = FROM_8_TO_16(*accum); accum++; // B + wIn[1] = FROM_8_TO_16(*accum); accum++; // G + wIn[0] = FROM_8_TO_16(*accum); accum++; // R + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll3BytesSkip1SwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + accum++; // A + wIn[0] = FROM_8_TO_16(*accum); accum++; // R + wIn[1] = FROM_8_TO_16(*accum); accum++; // G + wIn[2] = FROM_8_TO_16(*accum); accum++; // B + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +// BRG +static +cmsUInt8Number* Unroll3BytesSwap(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[2] = FROM_8_TO_16(*accum); accum++; // B + wIn[1] = FROM_8_TO_16(*accum); accum++; // G + wIn[0] = FROM_8_TO_16(*accum); accum++; // R + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* UnrollLabV2_8(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // L + wIn[1] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // a + wIn[2] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // b + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* UnrollALabV2_8(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + accum++; // A + wIn[0] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // L + wIn[1] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // a + wIn[2] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // b + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* UnrollLabV2_16(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = FomLabV2ToLabV4(*(cmsUInt16Number*) accum); accum += 2; // L + wIn[1] = FomLabV2ToLabV4(*(cmsUInt16Number*) accum); accum += 2; // a + wIn[2] = FomLabV2ToLabV4(*(cmsUInt16Number*) accum); accum += 2; // b + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +// for duplex +static +cmsUInt8Number* Unroll2Bytes(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = FROM_8_TO_16(*accum); accum++; // ch1 + wIn[1] = FROM_8_TO_16(*accum); accum++; // ch2 + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + + + +// Monochrome duplicates L into RGB for null-transforms +static +cmsUInt8Number* Unroll1Byte(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Unroll1ByteSkip1(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L + accum += 1; + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll1ByteSkip2(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L + accum += 2; + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll1ByteReversed(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = wIn[1] = wIn[2] = REVERSE_FLAVOR_16(FROM_8_TO_16(*accum)); accum++; // L + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* UnrollAnyWords(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> InputFormat); + int SwapEndian = T_ENDIAN16(info -> InputFormat); + int DoSwap = T_DOSWAP(info ->InputFormat); + int Reverse = T_FLAVOR(info ->InputFormat); + int SwapFirst = T_SWAPFIRST(info -> InputFormat); + int Extra = T_EXTRA(info -> InputFormat); + int ExtraFirst = DoSwap && !SwapFirst; + int i; + + if (ExtraFirst) { + accum += Extra * sizeof(cmsUInt16Number); + } + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; + cmsUInt16Number v = *(cmsUInt16Number*) accum; + + if (SwapEndian) + v = CHANGE_ENDIAN(v); + + wIn[index] = Reverse ? REVERSE_FLAVOR_16(v) : v; + + accum += sizeof(cmsUInt16Number); + } + + if (!ExtraFirst) { + accum += Extra * sizeof(cmsUInt16Number); + } + + if (Extra == 0 && SwapFirst) { + + cmsUInt16Number tmp = wIn[0]; + + memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsUInt16Number)); + wIn[nChan-1] = tmp; + } + + return accum; + + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* UnrollPlanarWords(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> InputFormat); + int DoSwap= T_DOSWAP(info ->InputFormat); + int Reverse= T_FLAVOR(info ->InputFormat); + int SwapEndian = T_ENDIAN16(info -> InputFormat); + int i; + cmsUInt8Number* Init = accum; + + if (DoSwap) { + accum += T_EXTRA(info -> InputFormat) * Stride * sizeof(cmsUInt16Number); + } + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; + cmsUInt16Number v = *(cmsUInt16Number*) accum; + + if (SwapEndian) + v = CHANGE_ENDIAN(v); + + wIn[index] = Reverse ? REVERSE_FLAVOR_16(v) : v; + + accum += Stride * sizeof(cmsUInt16Number); + } + + return (Init + sizeof(cmsUInt16Number)); +} + + +static +cmsUInt8Number* Unroll4Words(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C + wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M + wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // Y + wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // K + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll4WordsReverse(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // C + wIn[1] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // M + wIn[2] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // Y + wIn[3] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // K + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll4WordsSwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // K + wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C + wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M + wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // Y + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +// KYMC +static +cmsUInt8Number* Unroll4WordsSwap(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // K + wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // Y + wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M + wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll4WordsSwapSwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // K + wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // Y + wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // M + wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // C + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll3Words(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C R + wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M G + wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // Y B + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll3WordsSwap(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // C R + wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M G + wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // Y B + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll3WordsSkip1Swap(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + accum += 2; // A + wIn[2] = *(cmsUInt16Number*) accum; accum += 2; // R + wIn[1] = *(cmsUInt16Number*) accum; accum += 2; // G + wIn[0] = *(cmsUInt16Number*) accum; accum += 2; // B + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll3WordsSkip1SwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + accum += 2; // A + wIn[0] = *(cmsUInt16Number*) accum; accum += 2; // R + wIn[1] = *(cmsUInt16Number*) accum; accum += 2; // G + wIn[2] = *(cmsUInt16Number*) accum; accum += 2; // B + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll1Word(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = wIn[1] = wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // L + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll1WordReversed(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = wIn[1] = wIn[2] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll1WordSkip3(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = wIn[1] = wIn[2] = *(cmsUInt16Number*) accum; + + accum += 8; + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Unroll2Words(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = *(cmsUInt16Number*) accum; accum += 2; // ch1 + wIn[1] = *(cmsUInt16Number*) accum; accum += 2; // ch2 + + return accum; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +// This is a conversion of Lab double to 16 bits +static +cmsUInt8Number* UnrollLabDoubleTo16(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + if (T_PLANAR(info -> InputFormat)) { + + cmsFloat64Number* Pt = (cmsFloat64Number*) accum; + + cmsCIELab Lab; + + Lab.L = Pt[0]; + Lab.a = Pt[Stride]; + Lab.b = Pt[Stride*2]; + + cmsFloat2LabEncoded(wIn, &Lab); + return accum + sizeof(cmsFloat64Number); + } + else { + + cmsFloat2LabEncoded(wIn, (cmsCIELab*) accum); + accum += sizeof(cmsCIELab) + T_EXTRA(info ->InputFormat) * sizeof(cmsFloat64Number); + return accum; + } +} + +// This is a conversion of XYZ double to 16 bits +static +cmsUInt8Number* UnrollXYZDoubleTo16(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + if (T_PLANAR(info -> InputFormat)) { + + cmsFloat64Number* Pt = (cmsFloat64Number*) accum; + cmsCIEXYZ XYZ; + + XYZ.X = Pt[0]; + XYZ.Y = Pt[Stride]; + XYZ.Z = Pt[Stride*2]; + cmsFloat2XYZEncoded(wIn, &XYZ); + + return accum + sizeof(cmsFloat64Number); + + } + + else { + cmsFloat2XYZEncoded(wIn, (cmsCIEXYZ*) accum); + accum += sizeof(cmsCIEXYZ) + T_EXTRA(info ->InputFormat) * sizeof(cmsFloat64Number); + + return accum; + } +} + +// Check if space is marked as ink +cmsINLINE cmsBool IsInkSpace(cmsUInt32Number Type) +{ + switch (T_COLORSPACE(Type)) { + + case PT_CMY: + case PT_CMYK: + case PT_MCH5: + case PT_MCH6: + case PT_MCH7: + case PT_MCH8: + case PT_MCH9: + case PT_MCH10: + case PT_MCH11: + case PT_MCH12: + case PT_MCH13: + case PT_MCH14: + case PT_MCH15: return TRUE; + + default: return FALSE; + } +} + +// Inks does come in percentage, remaining cases are between 0..1.0, again to 16 bits +static +cmsUInt8Number* UnrollDoubleTo16(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + cmsFloat64Number* Inks = (cmsFloat64Number*) accum; + int nChan = T_CHANNELS(info -> InputFormat); + int Planar = T_PLANAR(info -> InputFormat); + int i; + cmsFloat64Number v; + cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 655.35 : 65535.0; + + for (i=0; i < nChan; i++) { + + if (Planar) + + v = Inks[i * Stride]; + else + v = Inks[i]; + + wIn[i] = _cmsQuickSaturateWord(v * maximum); + } + + if (T_PLANAR(info -> InputFormat)) + return accum + sizeof(cmsFloat64Number); + else + return accum + (nChan + T_EXTRA(info ->InputFormat)) * sizeof(cmsFloat64Number); +} + +static +cmsUInt8Number* UnrollFloatTo16(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + cmsFloat32Number* Inks = (cmsFloat32Number*) accum; + int nChan = T_CHANNELS(info -> InputFormat); + int Planar = T_PLANAR(info -> InputFormat); + int i; + cmsFloat32Number v; + cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 655.35 : 65535.0; + + for (i=0; i < nChan; i++) { + + if (Planar) + + v = Inks[i * Stride]; + else + v = Inks[i]; + + wIn[i] = _cmsQuickSaturateWord(v * maximum); + } + + if (T_PLANAR(info -> InputFormat)) + return accum + sizeof(cmsFloat32Number); + else + return accum + (nChan + T_EXTRA(info ->InputFormat)) * sizeof(cmsFloat32Number); +} + + +// For 1 channel, we need to duplicate data (it comes in 0..1.0 range) +static +cmsUInt8Number* UnrollDouble1Chan(register _cmsTRANSFORM* info, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + cmsFloat64Number* Inks = (cmsFloat64Number*) accum; + + wIn[0] = wIn[1] = wIn[2] = _cmsQuickSaturateWord(Inks[0] * 65535.0); + + return accum + sizeof(cmsFloat64Number); + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +//------------------------------------------------------------------------------------------------------------------- + +// True float transformation. + +// For anything going from cmsFloat32Number +static +cmsUInt8Number* UnrollFloatsToFloat(_cmsTRANSFORM* info, + cmsFloat32Number wIn[], + cmsUInt8Number* accum, + cmsUInt32Number Stride) +{ + cmsFloat32Number* Inks = (cmsFloat32Number*) accum; + int nChan = T_CHANNELS(info -> InputFormat); + int Planar = T_PLANAR(info -> InputFormat); + int i; + cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 100.0 : 1.0; + + + for (i=0; i < nChan; i++) { + + if (Planar) + wIn[i] = (cmsFloat32Number) (Inks[i * Stride] / maximum); + else + wIn[i] = (cmsFloat32Number) (Inks[i] / maximum); + } + + if (T_PLANAR(info -> InputFormat)) + return accum + sizeof(cmsFloat32Number); + else + return accum + (nChan + T_EXTRA(info ->InputFormat)) * sizeof(cmsFloat32Number); +} + +// For anything going from double +static +cmsUInt8Number* UnrollDoublesToFloat(_cmsTRANSFORM* info, + cmsFloat32Number wIn[], + cmsUInt8Number* accum, + cmsUInt32Number Stride) +{ + cmsFloat64Number* Inks = (cmsFloat64Number*) accum; + int nChan = T_CHANNELS(info -> InputFormat); + int Planar = T_PLANAR(info -> InputFormat); + int i; + cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 100.0 : 1.0; + + for (i=0; i < nChan; i++) { + + if (Planar) + wIn[i] = (cmsFloat32Number) (Inks[i * Stride] / maximum); + else + wIn[i] = (cmsFloat32Number) (Inks[i] / maximum); + } + + if (T_PLANAR(info -> InputFormat)) + return accum + sizeof(cmsFloat64Number); + else + return accum + (nChan + T_EXTRA(info ->InputFormat)) * sizeof(cmsFloat64Number); +} + + +// From Lab double to cmsFloat32Number +static +cmsUInt8Number* UnrollLabDoubleToFloat(_cmsTRANSFORM* info, + cmsFloat32Number wIn[], + cmsUInt8Number* accum, + cmsUInt32Number Stride) +{ + cmsFloat64Number* Pt = (cmsFloat64Number*) accum; + + if (T_PLANAR(info -> InputFormat)) { + + wIn[0] = (cmsFloat32Number) (Pt[0] / 100.0); // from 0..100 to 0..1 + wIn[1] = (cmsFloat32Number) ((Pt[Stride] + 128) / 255.0); // form -128..+127 to 0..1 + wIn[2] = (cmsFloat32Number) ((Pt[Stride*2] + 128) / 255.0); + + return accum + sizeof(cmsFloat64Number); + } + else { + + wIn[0] = (cmsFloat32Number) (Pt[0] / 100.0); // from 0..100 to 0..1 + wIn[1] = (cmsFloat32Number) ((Pt[1] + 128) / 255.0); // form -128..+127 to 0..1 + wIn[2] = (cmsFloat32Number) ((Pt[2] + 128) / 255.0); + + accum += sizeof(cmsFloat64Number)*(3 + T_EXTRA(info ->InputFormat)); + return accum; + } +} + +// From Lab double to cmsFloat32Number +static +cmsUInt8Number* UnrollLabFloatToFloat(_cmsTRANSFORM* info, + cmsFloat32Number wIn[], + cmsUInt8Number* accum, + cmsUInt32Number Stride) +{ + cmsFloat32Number* Pt = (cmsFloat32Number*) accum; + + if (T_PLANAR(info -> InputFormat)) { + + wIn[0] = (cmsFloat32Number) (Pt[0] / 100.0); // from 0..100 to 0..1 + wIn[1] = (cmsFloat32Number) ((Pt[Stride] + 128) / 255.0); // form -128..+127 to 0..1 + wIn[2] = (cmsFloat32Number) ((Pt[Stride*2] + 128) / 255.0); + + return accum + sizeof(cmsFloat32Number); + } + else { + + wIn[0] = (cmsFloat32Number) (Pt[0] / 100.0); // from 0..100 to 0..1 + wIn[1] = (cmsFloat32Number) ((Pt[1] + 128) / 255.0); // form -128..+127 to 0..1 + wIn[2] = (cmsFloat32Number) ((Pt[2] + 128) / 255.0); + + accum += sizeof(cmsFloat32Number)*(3 + T_EXTRA(info ->InputFormat)); + return accum; + } +} + + +// 1.15 fixed point, that means maximum value is MAX_ENCODEABLE_XYZ (0xFFFF) +static +cmsUInt8Number* UnrollXYZDoubleToFloat(_cmsTRANSFORM* info, + cmsFloat32Number wIn[], + cmsUInt8Number* accum, + cmsUInt32Number Stride) +{ + cmsFloat64Number* Pt = (cmsFloat64Number*) accum; + + if (T_PLANAR(info -> InputFormat)) { + + wIn[0] = (cmsFloat32Number) (Pt[0] / MAX_ENCODEABLE_XYZ); + wIn[1] = (cmsFloat32Number) (Pt[Stride] / MAX_ENCODEABLE_XYZ); + wIn[2] = (cmsFloat32Number) (Pt[Stride*2] / MAX_ENCODEABLE_XYZ); + + return accum + sizeof(cmsFloat64Number); + } + else { + + wIn[0] = (cmsFloat32Number) (Pt[0] / MAX_ENCODEABLE_XYZ); + wIn[1] = (cmsFloat32Number) (Pt[1] / MAX_ENCODEABLE_XYZ); + wIn[2] = (cmsFloat32Number) (Pt[2] / MAX_ENCODEABLE_XYZ); + + accum += sizeof(cmsFloat64Number)*(3 + T_EXTRA(info ->InputFormat)); + return accum; + } +} + +static +cmsUInt8Number* UnrollXYZFloatToFloat(_cmsTRANSFORM* info, + cmsFloat32Number wIn[], + cmsUInt8Number* accum, + cmsUInt32Number Stride) +{ + cmsFloat32Number* Pt = (cmsFloat32Number*) accum; + + if (T_PLANAR(info -> InputFormat)) { + + wIn[0] = (cmsFloat32Number) (Pt[0] / MAX_ENCODEABLE_XYZ); + wIn[1] = (cmsFloat32Number) (Pt[Stride] / MAX_ENCODEABLE_XYZ); + wIn[2] = (cmsFloat32Number) (Pt[Stride*2] / MAX_ENCODEABLE_XYZ); + + return accum + sizeof(cmsFloat32Number); + } + else { + + wIn[0] = (cmsFloat32Number) (Pt[0] / MAX_ENCODEABLE_XYZ); + wIn[1] = (cmsFloat32Number) (Pt[1] / MAX_ENCODEABLE_XYZ); + wIn[2] = (cmsFloat32Number) (Pt[2] / MAX_ENCODEABLE_XYZ); + + accum += sizeof(cmsFloat32Number)*(3 + T_EXTRA(info ->InputFormat)); + return accum; + } +} + +// Packing routines ----------------------------------------------------------------------------------------------------------- + + +// Generic chunky for byte + +static +cmsUInt8Number* PackAnyBytes(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> OutputFormat); + int DoSwap = T_DOSWAP(info ->OutputFormat); + int Reverse = T_FLAVOR(info ->OutputFormat); + int Extra = T_EXTRA(info -> OutputFormat); + int SwapFirst = T_SWAPFIRST(info -> OutputFormat); + int ExtraFirst = DoSwap && !SwapFirst; + cmsUInt8Number* swap1; + cmsUInt8Number v = 0; + int i; + + swap1 = output; + + if (ExtraFirst) { + output += Extra; + } + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; + + v = FROM_16_TO_8(wOut[index]); + + if (Reverse) + v = REVERSE_FLAVOR_8(v); + + *output++ = v; + } + + if (!ExtraFirst) { + output += Extra; + } + + if (Extra == 0 && SwapFirst) { + + memmove(swap1 + 1, swap1, nChan-1); + *swap1 = v; + } + + + return output; + + cmsUNUSED_PARAMETER(Stride); +} + + + +static +cmsUInt8Number* PackAnyWords(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> OutputFormat); + int SwapEndian = T_ENDIAN16(info -> InputFormat); + int DoSwap = T_DOSWAP(info ->OutputFormat); + int Reverse = T_FLAVOR(info ->OutputFormat); + int Extra = T_EXTRA(info -> OutputFormat); + int SwapFirst = T_SWAPFIRST(info -> OutputFormat); + int ExtraFirst = DoSwap && !SwapFirst; + cmsUInt16Number* swap1; + cmsUInt16Number v = 0; + int i; + + swap1 = (cmsUInt16Number*) output; + + if (ExtraFirst) { + output += Extra * sizeof(cmsUInt16Number); + } + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; + + v = wOut[index]; + + if (SwapEndian) + v = CHANGE_ENDIAN(v); + + if (Reverse) + v = REVERSE_FLAVOR_16(v); + + *(cmsUInt16Number*) output = v; + + output += sizeof(cmsUInt16Number); + } + + if (!ExtraFirst) { + output += Extra * sizeof(cmsUInt16Number); + } + + if (Extra == 0 && SwapFirst) { + + memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsUInt16Number)); + *swap1 = v; + } + + + return output; + + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* PackPlanarBytes(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> OutputFormat); + int DoSwap = T_DOSWAP(info ->OutputFormat); + int Reverse= T_FLAVOR(info ->OutputFormat); + int i; + cmsUInt8Number* Init = output; + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; + cmsUInt8Number v = FROM_16_TO_8(wOut[index]); + + *(cmsUInt8Number*) output = (cmsUInt8Number) (Reverse ? REVERSE_FLAVOR_8(v) : v); + output += Stride; + } + + return (Init + 1); + + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* PackPlanarWords(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> OutputFormat); + int DoSwap = T_DOSWAP(info ->OutputFormat); + int Reverse= T_FLAVOR(info ->OutputFormat); + int SwapEndian = T_ENDIAN16(info -> OutputFormat); + int i; + cmsUInt8Number* Init = output; + cmsUInt16Number v; + + if (DoSwap) { + output += T_EXTRA(info -> OutputFormat) * Stride * sizeof(cmsUInt16Number); + } + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; + + v = wOut[index]; + + if (SwapEndian) + v = CHANGE_ENDIAN(v); + + if (Reverse) + v = REVERSE_FLAVOR_16(v); + + *(cmsUInt16Number*) output = v; + output += (Stride * sizeof(cmsUInt16Number)); + } + + return (Init + sizeof(cmsUInt16Number)); +} + +// CMYKcm (unrolled for speed) + +static +cmsUInt8Number* Pack6Bytes(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[0]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[2]); + *output++ = FROM_16_TO_8(wOut[3]); + *output++ = FROM_16_TO_8(wOut[4]); + *output++ = FROM_16_TO_8(wOut[5]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +// KCMYcm + +static +cmsUInt8Number* Pack6BytesSwap(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[5]); + *output++ = FROM_16_TO_8(wOut[4]); + *output++ = FROM_16_TO_8(wOut[3]); + *output++ = FROM_16_TO_8(wOut[2]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[0]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +// CMYKcm +static +cmsUInt8Number* Pack6Words(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + *(cmsUInt16Number*) output = wOut[1]; + output+= 2; + *(cmsUInt16Number*) output = wOut[2]; + output+= 2; + *(cmsUInt16Number*) output = wOut[3]; + output+= 2; + *(cmsUInt16Number*) output = wOut[4]; + output+= 2; + *(cmsUInt16Number*) output = wOut[5]; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +// KCMYcm +static +cmsUInt8Number* Pack6WordsSwap(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = wOut[5]; + output+= 2; + *(cmsUInt16Number*) output = wOut[4]; + output+= 2; + *(cmsUInt16Number*) output = wOut[3]; + output+= 2; + *(cmsUInt16Number*) output = wOut[2]; + output+= 2; + *(cmsUInt16Number*) output = wOut[1]; + output+= 2; + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack4Bytes(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[0]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[2]); + *output++ = FROM_16_TO_8(wOut[3]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack4BytesReverse(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[0])); + *output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[1])); + *output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[2])); + *output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[3])); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack4BytesSwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[3]); + *output++ = FROM_16_TO_8(wOut[0]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[2]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +// ABGR +static +cmsUInt8Number* Pack4BytesSwap(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[3]); + *output++ = FROM_16_TO_8(wOut[2]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[0]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack4BytesSwapSwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[2]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[0]); + *output++ = FROM_16_TO_8(wOut[3]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack4Words(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + *(cmsUInt16Number*) output = wOut[1]; + output+= 2; + *(cmsUInt16Number*) output = wOut[2]; + output+= 2; + *(cmsUInt16Number*) output = wOut[3]; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack4WordsReverse(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[0]); + output+= 2; + *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[1]); + output+= 2; + *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[2]); + output+= 2; + *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[3]); + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +// ABGR +static +cmsUInt8Number* Pack4WordsSwap(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = wOut[3]; + output+= 2; + *(cmsUInt16Number*) output = wOut[2]; + output+= 2; + *(cmsUInt16Number*) output = wOut[1]; + output+= 2; + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +// CMYK +static +cmsUInt8Number* Pack4WordsBigEndian(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]); + output+= 2; + *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[1]); + output+= 2; + *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[2]); + output+= 2; + *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[3]); + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* PackLabV2_8(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[0])); + *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[1])); + *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[2])); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* PackALabV2_8(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + output++; + *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[0])); + *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[1])); + *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[2])); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* PackLabV2_16(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = FomLabV4ToLabV2(wOut[0]); + output += 2; + *(cmsUInt16Number*) output = FomLabV4ToLabV2(wOut[1]); + output += 2; + *(cmsUInt16Number*) output = FomLabV4ToLabV2(wOut[2]); + output += 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3Bytes(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[0]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[2]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3BytesOptimized(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = (wOut[0] & 0xFF); + *output++ = (wOut[1] & 0xFF); + *output++ = (wOut[2] & 0xFF); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3BytesSwap(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[2]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[0]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3BytesSwapOptimized(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = (wOut[2] & 0xFF); + *output++ = (wOut[1] & 0xFF); + *output++ = (wOut[0] & 0xFF); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack3Words(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + *(cmsUInt16Number*) output = wOut[1]; + output+= 2; + *(cmsUInt16Number*) output = wOut[2]; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3WordsSwap(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = wOut[2]; + output+= 2; + *(cmsUInt16Number*) output = wOut[1]; + output+= 2; + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3WordsBigEndian(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]); + output+= 2; + *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[1]); + output+= 2; + *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[2]); + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3BytesAndSkip1(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[0]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[2]); + output++; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3BytesAndSkip1Optimized(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = (wOut[0] & 0xFF); + *output++ = (wOut[1] & 0xFF); + *output++ = (wOut[2] & 0xFF); + output++; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack3BytesAndSkip1SwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + output++; + *output++ = FROM_16_TO_8(wOut[0]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[2]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3BytesAndSkip1SwapFirstOptimized(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + output++; + *output++ = (wOut[0] & 0xFF); + *output++ = (wOut[1] & 0xFF); + *output++ = (wOut[2] & 0xFF); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3BytesAndSkip1Swap(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + output++; + *output++ = FROM_16_TO_8(wOut[2]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[0]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3BytesAndSkip1SwapOptimized(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + output++; + *output++ = (wOut[2] & 0xFF); + *output++ = (wOut[1] & 0xFF); + *output++ = (wOut[0] & 0xFF); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[2]); + *output++ = FROM_16_TO_8(wOut[1]); + *output++ = FROM_16_TO_8(wOut[0]); + output++; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirstOptimized(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = (wOut[2] & 0xFF); + *output++ = (wOut[1] & 0xFF); + *output++ = (wOut[0] & 0xFF); + output++; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3WordsAndSkip1(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + *(cmsUInt16Number*) output = wOut[1]; + output+= 2; + *(cmsUInt16Number*) output = wOut[2]; + output+= 2; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack3WordsAndSkip1Swap(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + output+= 2; + *(cmsUInt16Number*) output = wOut[2]; + output+= 2; + *(cmsUInt16Number*) output = wOut[1]; + output+= 2; + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack3WordsAndSkip1SwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + output+= 2; + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + *(cmsUInt16Number*) output = wOut[1]; + output+= 2; + *(cmsUInt16Number*) output = wOut[2]; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack3WordsAndSkip1SwapSwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = wOut[2]; + output+= 2; + *(cmsUInt16Number*) output = wOut[1]; + output+= 2; + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + + +static +cmsUInt8Number* Pack1Byte(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[0]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack1ByteReversed(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(REVERSE_FLAVOR_16(wOut[0])); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack1ByteSkip1(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *output++ = FROM_16_TO_8(wOut[0]); + output++; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack1ByteSkip1SwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + output++; + *output++ = FROM_16_TO_8(wOut[0]); + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack1Word(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack1WordReversed(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[0]); + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack1WordBigEndian(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]); + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +static +cmsUInt8Number* Pack1WordSkip1(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + *(cmsUInt16Number*) output = wOut[0]; + output+= 4; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* Pack1WordSkip1SwapFirst(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + output += 2; + *(cmsUInt16Number*) output = wOut[0]; + output+= 2; + + return output; + + cmsUNUSED_PARAMETER(info); + cmsUNUSED_PARAMETER(Stride); +} + + +// Unencoded Float values -- don't try optimize speed +static +cmsUInt8Number* PackLabDoubleFrom16(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + + if (T_PLANAR(info -> OutputFormat)) { + + cmsCIELab Lab; + cmsFloat64Number* Out = (cmsFloat64Number*) output; + cmsLabEncoded2Float(&Lab, wOut); + + Out[0] = Lab.L; + Out[Stride] = Lab.a; + Out[Stride*2] = Lab.b; + + return output + sizeof(cmsFloat64Number); + } + else { + + cmsLabEncoded2Float((cmsCIELab*) output, wOut); + return output + (sizeof(cmsCIELab) + T_EXTRA(info ->OutputFormat) * sizeof(cmsFloat64Number)); + } + +} + +static +cmsUInt8Number* PackXYZDoubleFrom16(register _cmsTRANSFORM* Info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + if (T_PLANAR(Info -> OutputFormat)) { + + cmsCIEXYZ XYZ; + cmsFloat64Number* Out = (cmsFloat64Number*) output; + cmsXYZEncoded2Float(&XYZ, wOut); + + Out[0] = XYZ.X; + Out[Stride] = XYZ.Y; + Out[Stride*2] = XYZ.Z; + + return output + sizeof(cmsFloat64Number); + + } + else { + + cmsXYZEncoded2Float((cmsCIEXYZ*) output, wOut); + + return output + (sizeof(cmsCIEXYZ) + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat64Number)); + } +} + +static +cmsUInt8Number* PackDoubleFrom16(register _cmsTRANSFORM* Info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + cmsFloat64Number* Inks = (cmsFloat64Number*) output; + int nChan = T_CHANNELS(Info -> OutputFormat); + int i; + cmsFloat64Number maximum = IsInkSpace(Info ->OutputFormat) ? 655.35 : 65535.0; + + if (T_PLANAR(Info -> OutputFormat)) { + + for (i=0; i < nChan; i++) { + + Inks[i*Stride] = wOut[i] / maximum; + } + + return output + sizeof(cmsFloat64Number); + } + else { + + for (i=0; i < nChan; i++) { + + Inks[i] = wOut[i] / maximum; + } + + + return output + (nChan + T_EXTRA(Info ->OutputFormat)) * sizeof(cmsFloat64Number); + } + +} + +static +cmsUInt8Number* PackFloatFrom16(register _cmsTRANSFORM* Info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + cmsFloat32Number* Inks = (cmsFloat32Number*) output; + int nChan = T_CHANNELS(Info -> OutputFormat); + int i; + cmsFloat64Number maximum = IsInkSpace(Info ->OutputFormat) ? 655.35 : 65535.0; + + if (T_PLANAR(Info -> OutputFormat)) { + + for (i=0; i < nChan; i++) { + + Inks[i*Stride] = (cmsFloat32Number) (wOut[i] / maximum); + } + + return output + sizeof(cmsFloat32Number); + } + else { + + for (i=0; i < nChan; i++) { + + Inks[i] = (cmsFloat32Number) (wOut[i] / maximum); + } + + + return output + (nChan + T_EXTRA(Info ->OutputFormat)) * sizeof(cmsFloat32Number); + } + +} + + +// -------------------------------------------------------------------------------------------------------- + +static +cmsUInt8Number* PackChunkyFloatsFromFloat(_cmsTRANSFORM* info, + cmsFloat32Number wOut[], + cmsUInt8Number* output, + cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> OutputFormat); + int DoSwap = T_DOSWAP(info ->OutputFormat); + int Reverse = T_FLAVOR(info ->OutputFormat); + int Extra = T_EXTRA(info -> OutputFormat); + int SwapFirst = T_SWAPFIRST(info -> OutputFormat); + int ExtraFirst = DoSwap && !SwapFirst; + cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0; + cmsFloat32Number* swap1; + cmsFloat64Number v = 0; + int i; + + swap1 = (cmsFloat32Number*) output; + + if (ExtraFirst) { + output += Extra * sizeof(cmsFloat32Number); + } + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; + + v = wOut[index] * maximum; + + if (Reverse) + v = maximum - v; + + *(cmsFloat32Number*) output = (cmsFloat32Number) v; + + output += sizeof(cmsFloat32Number); + } + + if (!ExtraFirst) { + output += Extra * sizeof(cmsFloat32Number); + } + + if (Extra == 0 && SwapFirst) { + + memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat32Number)); + *swap1 = (cmsFloat32Number) v; + } + + + return output; + + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* PackPlanarFloatsFromFloat(_cmsTRANSFORM* info, + cmsFloat32Number wOut[], + cmsUInt8Number* output, + cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> OutputFormat); + int DoSwap = T_DOSWAP(info ->OutputFormat); + int Reverse= T_FLAVOR(info ->OutputFormat); + int i; + cmsUInt8Number* Init = output; + cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0; + cmsFloat64Number v; + + if (DoSwap) { + output += T_EXTRA(info -> OutputFormat) * Stride * sizeof(cmsFloat32Number); + } + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; + + v = wOut[index] * maximum; + + if (Reverse) + v = maximum - v; + + *(cmsFloat32Number*) output = (cmsFloat32Number) v; + output += (Stride * sizeof(cmsFloat32Number)); + } + + return (Init + sizeof(cmsFloat32Number)); + +} + + +static +cmsUInt8Number* PackChunkyDoublesFromFloat(_cmsTRANSFORM* info, + cmsFloat32Number wOut[], + cmsUInt8Number* output, + cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> OutputFormat); + int DoSwap = T_DOSWAP(info ->OutputFormat); + int Reverse = T_FLAVOR(info ->OutputFormat); + int Extra = T_EXTRA(info -> OutputFormat); + int SwapFirst = T_SWAPFIRST(info -> OutputFormat); + int ExtraFirst = DoSwap && !SwapFirst; + cmsFloat64Number* swap1; + cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0; + cmsFloat64Number v = 0; + int i; + + swap1 = (cmsFloat64Number*) output; + + if (ExtraFirst) { + output += Extra * sizeof(cmsFloat64Number); + } + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; + + v = (cmsFloat64Number) wOut[index] * maximum; + + if (Reverse) + v = maximum - v; + + *(cmsFloat64Number*) output = v; + + output += sizeof(cmsFloat64Number); + } + + if (!ExtraFirst) { + output += Extra * sizeof(cmsFloat64Number); + } + + if (Extra == 0 && SwapFirst) { + + memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat64Number)); + *swap1 = v; + } + + + return output; + + cmsUNUSED_PARAMETER(Stride); +} + +static +cmsUInt8Number* PackPlanarDoublesFromFloat(_cmsTRANSFORM* info, + cmsFloat32Number wOut[], + cmsUInt8Number* output, + cmsUInt32Number Stride) +{ + int nChan = T_CHANNELS(info -> OutputFormat); + int DoSwap = T_DOSWAP(info ->OutputFormat); + int Reverse= T_FLAVOR(info ->OutputFormat); + int i; + cmsUInt8Number* Init = output; + cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0; + cmsFloat64Number v; + + if (DoSwap) { + output += T_EXTRA(info -> OutputFormat) * Stride * sizeof(cmsFloat64Number); + } + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; + + v = (cmsFloat64Number) wOut[index] * maximum; + + if (Reverse) + v = maximum - v; + + *(cmsFloat64Number*) output = v; + output += (Stride * sizeof(cmsFloat64Number)); + } + + return (Init + sizeof(cmsFloat64Number)); +} + + + + +static +cmsUInt8Number* PackLabFloatFromFloat(_cmsTRANSFORM* Info, + cmsFloat32Number wOut[], + cmsUInt8Number* output, + cmsUInt32Number Stride) +{ + cmsFloat32Number* Out = (cmsFloat32Number*) output; + + if (T_PLANAR(Info -> OutputFormat)) { + + Out[0] = (cmsFloat32Number) (wOut[0] * 100.0); + Out[Stride] = (cmsFloat32Number) (wOut[1] * 255.0 - 128.0); + Out[Stride*2] = (cmsFloat32Number) (wOut[2] * 255.0 - 128.0); + + return output + sizeof(cmsFloat32Number); + } + else { + + Out[0] = (cmsFloat32Number) (wOut[0] * 100.0); + Out[1] = (cmsFloat32Number) (wOut[1] * 255.0 - 128.0); + Out[2] = (cmsFloat32Number) (wOut[2] * 255.0 - 128.0); + + return output + (sizeof(cmsFloat32Number)*3 + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat32Number)); + } + +} + +static +cmsUInt8Number* PackLabDoubleFromFloat(_cmsTRANSFORM* Info, + cmsFloat32Number wOut[], + cmsUInt8Number* output, + cmsUInt32Number Stride) +{ + cmsFloat64Number* Out = (cmsFloat64Number*) output; + + if (T_PLANAR(Info -> OutputFormat)) { + + Out[0] = (cmsFloat64Number) (wOut[0] * 100.0); + Out[Stride] = (cmsFloat64Number) (wOut[1] * 255.0 - 128.0); + Out[Stride*2] = (cmsFloat64Number) (wOut[2] * 255.0 - 128.0); + + return output + sizeof(cmsFloat64Number); + } + else { + + Out[0] = (cmsFloat64Number) (wOut[0] * 100.0); + Out[1] = (cmsFloat64Number) (wOut[1] * 255.0 - 128.0); + Out[2] = (cmsFloat64Number) (wOut[2] * 255.0 - 128.0); + + return output + (sizeof(cmsFloat64Number)*3 + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat64Number)); + } + +} + + +// From 0..1 range to 0..MAX_ENCODEABLE_XYZ +static +cmsUInt8Number* PackXYZFloatFromFloat(_cmsTRANSFORM* Info, + cmsFloat32Number wOut[], + cmsUInt8Number* output, + cmsUInt32Number Stride) +{ + cmsFloat32Number* Out = (cmsFloat32Number*) output; + + if (T_PLANAR(Info -> OutputFormat)) { + + Out[0] = (cmsFloat32Number) (wOut[0] * MAX_ENCODEABLE_XYZ); + Out[Stride] = (cmsFloat32Number) (wOut[1] * MAX_ENCODEABLE_XYZ); + Out[Stride*2] = (cmsFloat32Number) (wOut[2] * MAX_ENCODEABLE_XYZ); + + return output + sizeof(cmsFloat32Number); + } + else { + + Out[0] = (cmsFloat32Number) (wOut[0] * MAX_ENCODEABLE_XYZ); + Out[1] = (cmsFloat32Number) (wOut[1] * MAX_ENCODEABLE_XYZ); + Out[2] = (cmsFloat32Number) (wOut[2] * MAX_ENCODEABLE_XYZ); + + return output + (sizeof(cmsFloat32Number)*3 + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat32Number)); + } + +} + + +// Same, but convert to double +static +cmsUInt8Number* PackXYZDoubleFromFloat(_cmsTRANSFORM* Info, + cmsFloat32Number wOut[], + cmsUInt8Number* output, + cmsUInt32Number Stride) +{ + cmsFloat64Number* Out = (cmsFloat64Number*) output; + + if (T_PLANAR(Info -> OutputFormat)) { + + Out[0] = (cmsFloat64Number) (wOut[0] * MAX_ENCODEABLE_XYZ); + Out[Stride] = (cmsFloat64Number) (wOut[1] * MAX_ENCODEABLE_XYZ); + Out[Stride*2] = (cmsFloat64Number) (wOut[2] * MAX_ENCODEABLE_XYZ); + + return output + sizeof(cmsFloat64Number); + } + else { + + Out[0] = (cmsFloat64Number) (wOut[0] * MAX_ENCODEABLE_XYZ); + Out[1] = (cmsFloat64Number) (wOut[1] * MAX_ENCODEABLE_XYZ); + Out[2] = (cmsFloat64Number) (wOut[2] * MAX_ENCODEABLE_XYZ); + + return output + (sizeof(cmsFloat64Number)*3 + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat64Number)); + } + +} + + +// ---------------------------------------------------------------------------------------------------------------- + + +static cmsFormatters16 InputFormatters16[] = { + + // Type Mask Function + // ---------------------------- ------------------------------------ ---------------------------- + { TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, UnrollLabDoubleTo16}, + { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, UnrollXYZDoubleTo16}, + { TYPE_GRAY_DBL, 0, UnrollDouble1Chan}, + { FLOAT_SH(1)|BYTES_SH(0), ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, UnrollDoubleTo16}, + { FLOAT_SH(1)|BYTES_SH(4), ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, UnrollFloatTo16}, + + + { CHANNELS_SH(1)|BYTES_SH(1), ANYSPACE, Unroll1Byte}, + { CHANNELS_SH(1)|BYTES_SH(1)|EXTRA_SH(1), ANYSPACE, Unroll1ByteSkip1}, + { CHANNELS_SH(1)|BYTES_SH(1)|EXTRA_SH(2), ANYSPACE, Unroll1ByteSkip2}, + { CHANNELS_SH(1)|BYTES_SH(1)|FLAVOR_SH(1), ANYSPACE, Unroll1ByteReversed}, + { COLORSPACE_SH(PT_MCH2)|CHANNELS_SH(2)|BYTES_SH(1), 0, Unroll2Bytes}, + + { TYPE_LabV2_8, 0, UnrollLabV2_8 }, + { TYPE_ALabV2_8, 0, UnrollALabV2_8 }, + { TYPE_LabV2_16, 0, UnrollLabV2_16 }, + + { CHANNELS_SH(3)|BYTES_SH(1), ANYSPACE, Unroll3Bytes}, + { CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Unroll3BytesSwap}, + { CHANNELS_SH(3)|EXTRA_SH(1)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Unroll3BytesSkip1Swap}, + { CHANNELS_SH(3)|EXTRA_SH(1)|BYTES_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll3BytesSkip1SwapFirst}, + + { CHANNELS_SH(4)|BYTES_SH(1), ANYSPACE, Unroll4Bytes}, + { CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1), ANYSPACE, Unroll4BytesReverse}, + { CHANNELS_SH(4)|BYTES_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll4BytesSwapFirst}, + { CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Unroll4BytesSwap}, + { CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll4BytesSwapSwapFirst}, + + { BYTES_SH(1)|PLANAR_SH(1), ANYFLAVOR|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollPlanarBytes}, + { BYTES_SH(1), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollChunkyBytes}, + + + { CHANNELS_SH(1)|BYTES_SH(2), ANYSPACE, Unroll1Word}, + { CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1), ANYSPACE, Unroll1WordReversed}, + { CHANNELS_SH(1)|BYTES_SH(2)|EXTRA_SH(3), ANYSPACE, Unroll1WordSkip3}, + + { CHANNELS_SH(2)|BYTES_SH(2), ANYSPACE, Unroll2Words}, + { CHANNELS_SH(3)|BYTES_SH(2), ANYSPACE, Unroll3Words}, + { CHANNELS_SH(4)|BYTES_SH(2), ANYSPACE, Unroll4Words}, + + { CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1), ANYSPACE, Unroll3WordsSwap}, + { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll3WordsSkip1SwapFirst}, + { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1)|DOSWAP_SH(1), ANYSPACE, Unroll3WordsSkip1Swap}, + { CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1), ANYSPACE, Unroll4WordsReverse}, + { CHANNELS_SH(4)|BYTES_SH(2)|SWAPFIRST_SH(1), ANYSPACE, Unroll4WordsSwapFirst}, + { CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1), ANYSPACE, Unroll4WordsSwap}, + { CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll4WordsSwapSwapFirst}, + + + { BYTES_SH(2)|PLANAR_SH(1), ANYFLAVOR|ANYSWAP|ANYENDIAN|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollPlanarWords }, + { BYTES_SH(2), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYENDIAN|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollAnyWords}, +}; + + + +static cmsFormattersFloat InputFormattersFloat[] = { + + // Type Mask Function + // ---------------------------- ------------------------------------ ---------------------------- + { TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, UnrollLabDoubleToFloat}, + { TYPE_Lab_FLT, ANYPLANAR|ANYEXTRA, UnrollLabFloatToFloat}, + { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, UnrollXYZDoubleToFloat}, + { TYPE_XYZ_FLT, ANYPLANAR|ANYEXTRA, UnrollXYZFloatToFloat}, + + { FLOAT_SH(1)|BYTES_SH(4), ANYPLANAR|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollFloatsToFloat}, + { FLOAT_SH(1)|BYTES_SH(0), ANYPLANAR|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollDoublesToFloat}, +}; + + +// Bit fields set to one in the mask are not compared +static +cmsFormatter _cmsGetStockInputFormatter(cmsUInt32Number dwInput, cmsUInt32Number dwFlags) +{ + cmsUInt32Number i; + cmsFormatter fr; + + + if (!(dwFlags & CMS_PACK_FLAGS_FLOAT)) { + + for (i=0; i < sizeof(InputFormatters16) / sizeof(cmsFormatters16); i++) { + cmsFormatters16* f = InputFormatters16 + i; + + if ((dwInput & ~f ->Mask) == f ->Type) { + fr.Fmt16 = f ->Frm; + return fr; + } + } + } + else { + for (i=0; i < sizeof(InputFormattersFloat) / sizeof(cmsFormattersFloat); i++) { + cmsFormattersFloat* f = InputFormattersFloat + i; + + if ((dwInput & ~f ->Mask) == f ->Type) { + fr.FmtFloat = f ->Frm; + return fr; + } + } + } + + fr.Fmt16 = NULL; + return fr; +} + +static cmsFormatters16 OutputFormatters16[] = { + // Type Mask Function + // ---------------------------- ------------------------------------ ---------------------------- + + { TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, PackLabDoubleFrom16}, + { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, PackXYZDoubleFrom16}, + { FLOAT_SH(1)|BYTES_SH(0), ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackDoubleFrom16}, + { FLOAT_SH(1)|BYTES_SH(4), ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackFloatFrom16}, + + { CHANNELS_SH(1)|BYTES_SH(1), ANYSPACE, Pack1Byte}, + { CHANNELS_SH(1)|BYTES_SH(1)|EXTRA_SH(1), ANYSPACE, Pack1ByteSkip1}, + { CHANNELS_SH(1)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack1ByteSkip1SwapFirst}, + + { CHANNELS_SH(1)|BYTES_SH(1)|FLAVOR_SH(1), ANYSPACE, Pack1ByteReversed}, + + { TYPE_LabV2_8, 0, PackLabV2_8 }, + { TYPE_ALabV2_8, 0, PackALabV2_8 }, + { TYPE_LabV2_16, 0, PackLabV2_16 }, + + { CHANNELS_SH(3)|BYTES_SH(1)|OPTIMIZED_SH(1), ANYSPACE, Pack3BytesOptimized}, + { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|OPTIMIZED_SH(1), ANYSPACE, Pack3BytesAndSkip1Optimized}, + { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1)|OPTIMIZED_SH(1), + ANYSPACE, Pack3BytesAndSkip1SwapFirstOptimized}, + { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)|OPTIMIZED_SH(1), + ANYSPACE, Pack3BytesAndSkip1SwapSwapFirstOptimized}, + { CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|EXTRA_SH(1)|OPTIMIZED_SH(1), + ANYSPACE, Pack3BytesAndSkip1SwapOptimized}, + { CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|OPTIMIZED_SH(1), ANYSPACE, Pack3BytesSwapOptimized}, + + + + { CHANNELS_SH(3)|BYTES_SH(1), ANYSPACE, Pack3Bytes}, + { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1), ANYSPACE, Pack3BytesAndSkip1}, + { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack3BytesAndSkip1SwapFirst}, + { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1), + ANYSPACE, Pack3BytesAndSkip1SwapSwapFirst}, + { CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|EXTRA_SH(1), ANYSPACE, Pack3BytesAndSkip1Swap}, + { CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Pack3BytesSwap}, + { CHANNELS_SH(6)|BYTES_SH(1), ANYSPACE, Pack6Bytes}, + { CHANNELS_SH(6)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Pack6BytesSwap}, + { CHANNELS_SH(4)|BYTES_SH(1), ANYSPACE, Pack4Bytes}, + { CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1), ANYSPACE, Pack4BytesReverse}, + { CHANNELS_SH(4)|BYTES_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack4BytesSwapFirst}, + { CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Pack4BytesSwap}, + { CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack4BytesSwapSwapFirst}, + + { BYTES_SH(1), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackAnyBytes}, + { BYTES_SH(1)|PLANAR_SH(1), ANYFLAVOR|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackPlanarBytes}, + + { CHANNELS_SH(1)|BYTES_SH(2), ANYSPACE, Pack1Word}, + { CHANNELS_SH(1)|BYTES_SH(2)|EXTRA_SH(1), ANYSPACE, Pack1WordSkip1}, + { CHANNELS_SH(1)|BYTES_SH(2)|EXTRA_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack1WordSkip1SwapFirst}, + { CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1), ANYSPACE, Pack1WordReversed}, + { CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1), ANYSPACE, Pack1WordBigEndian}, + { CHANNELS_SH(3)|BYTES_SH(2), ANYSPACE, Pack3Words}, + { CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1), ANYSPACE, Pack3WordsSwap}, + { CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1), ANYSPACE, Pack3WordsBigEndian}, + { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1), ANYSPACE, Pack3WordsAndSkip1}, + { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1)|DOSWAP_SH(1), ANYSPACE, Pack3WordsAndSkip1Swap}, + { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack3WordsAndSkip1SwapFirst}, + + { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1), + ANYSPACE, Pack3WordsAndSkip1SwapSwapFirst}, + + { CHANNELS_SH(4)|BYTES_SH(2), ANYSPACE, Pack4Words}, + { CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1), ANYSPACE, Pack4WordsReverse}, + { CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1), ANYSPACE, Pack4WordsSwap}, + { CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1), ANYSPACE, Pack4WordsBigEndian}, + + { CHANNELS_SH(6)|BYTES_SH(2), ANYSPACE, Pack6Words}, + { CHANNELS_SH(6)|BYTES_SH(2)|DOSWAP_SH(1), ANYSPACE, Pack6WordsSwap}, + + { BYTES_SH(2)|PLANAR_SH(1), ANYFLAVOR|ANYENDIAN|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackPlanarWords}, + { BYTES_SH(2), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYENDIAN|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackAnyWords} + +}; + + +static cmsFormattersFloat OutputFormattersFloat[] = { + // Type Mask Function + // ---------------------------- --------------------------------------------------- ---------------------------- + { TYPE_Lab_FLT, ANYPLANAR|ANYEXTRA, PackLabFloatFromFloat}, + { TYPE_XYZ_FLT, ANYPLANAR|ANYEXTRA, PackXYZFloatFromFloat}, + { TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, PackLabDoubleFromFloat}, + { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, PackXYZDoubleFromFloat}, + { FLOAT_SH(1)|BYTES_SH(4), + ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackChunkyFloatsFromFloat }, + { FLOAT_SH(1)|BYTES_SH(4)|PLANAR_SH(1), ANYEXTRA|ANYCHANNELS|ANYSPACE, PackPlanarFloatsFromFloat}, + { FLOAT_SH(1)|BYTES_SH(0), + ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackChunkyDoublesFromFloat }, + { FLOAT_SH(1)|BYTES_SH(0)|PLANAR_SH(1), ANYEXTRA|ANYCHANNELS|ANYSPACE, PackPlanarDoublesFromFloat}, + + +}; + + +// Bit fields set to one in the mask are not compared +cmsFormatter _cmsGetStockOutputFormatter(cmsUInt32Number dwInput, cmsUInt32Number dwFlags) +{ + cmsUInt32Number i; + cmsFormatter fr; + + + if (dwFlags & CMS_PACK_FLAGS_FLOAT) { + + for (i=0; i < sizeof(OutputFormattersFloat) / sizeof(cmsFormattersFloat); i++) { + cmsFormattersFloat* f = OutputFormattersFloat + i; + + if ((dwInput & ~f ->Mask) == f ->Type) { + fr.FmtFloat = f ->Frm; + return fr; + } + } + + } + else { + + for (i=0; i < sizeof(OutputFormatters16) / sizeof(cmsFormatters16); i++) { + cmsFormatters16* f = OutputFormatters16 + i; + + if ((dwInput & ~f ->Mask) == f ->Type) { + fr.Fmt16 = f ->Frm; + return fr; + } + } + } + + fr.Fmt16 = NULL; + return fr; +} + + +typedef struct _cms_formatters_factory_list { + + cmsFormatterFactory Factory; + struct _cms_formatters_factory_list *Next; + +} cmsFormattersFactoryList; + +static cmsFormattersFactoryList* FactoryList = NULL; + + +// Formatters management +cmsBool _cmsRegisterFormattersPlugin(cmsPluginBase* Data) +{ + cmsPluginFormatters* Plugin = (cmsPluginFormatters*) Data; + cmsFormattersFactoryList* fl ; + + // Reset + if (Data == NULL) { + + FactoryList = NULL; + return TRUE; + } + + fl = (cmsFormattersFactoryList*) _cmsPluginMalloc(sizeof(cmsFormattersFactoryList)); + if (fl == NULL) return FALSE; + + fl ->Factory = Plugin ->FormattersFactory; + + fl ->Next = FactoryList; + FactoryList = fl; + + return TRUE; +} + +cmsFormatter _cmsGetFormatter(cmsUInt32Number Type, // Specific type, i.e. TYPE_RGB_8 + cmsFormatterDirection Dir, + cmsUInt32Number dwFlags) // Float or 16 bits +{ + cmsFormattersFactoryList* f; + + for (f = FactoryList; f != NULL; f = f ->Next) { + + cmsFormatter fn = f ->Factory(Type, Dir, dwFlags); + if (fn.Fmt16 != NULL) return fn; + } + + // Revert to default + if (Dir == cmsFormatterInput) + return _cmsGetStockInputFormatter(Type, dwFlags); + else + return _cmsGetStockOutputFormatter(Type, dwFlags); +} + + +// Return whatever given formatter refers to float values +cmsBool _cmsFormatterIsFloat(cmsUInt32Number Type) +{ + return T_FLOAT(Type) ? TRUE : FALSE; +} + +// Return whatever given formatter refers to 8 bits +cmsBool _cmsFormatterIs8bit(cmsUInt32Number Type) +{ + int Bytes = T_BYTES(Type); + + return (Bytes == 1); +} + +// Build a suitable formatter for the colorspace of this profile +cmsUInt32Number CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat) +{ + + cmsColorSpaceSignature ColorSpace = cmsGetColorSpace(hProfile); + cmsUInt32Number ColorSpaceBits = _cmsLCMScolorSpace(ColorSpace); + cmsUInt32Number nOutputChans = cmsChannelsOf(ColorSpace); + cmsUInt32Number Float = lIsFloat ? 1 : 0; + + // Create a fake formatter for result + return FLOAT_SH(Float) | COLORSPACE_SH(ColorSpaceBits) | BYTES_SH(nBytes) | CHANNELS_SH(nOutputChans); +} + +// Build a suitable formatter for the colorspace of this profile +cmsUInt32Number CMSEXPORT cmsFormatterForPCSOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat) +{ + + cmsColorSpaceSignature ColorSpace = cmsGetPCS(hProfile); + int ColorSpaceBits = _cmsLCMScolorSpace(ColorSpace); + cmsUInt32Number nOutputChans = cmsChannelsOf(ColorSpace); + cmsUInt32Number Float = lIsFloat ? 1 : 0; + + // Create a fake formatter for result + return FLOAT_SH(Float) | COLORSPACE_SH(ColorSpaceBits) | BYTES_SH(nBytes) | CHANNELS_SH(nOutputChans); +} + diff --git a/src/cmspcs.c b/src/cmspcs.c new file mode 100644 index 0000000..8dd1c22 --- /dev/null +++ b/src/cmspcs.c @@ -0,0 +1,926 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + +// inter PCS conversions XYZ <-> CIE L* a* b* +/* + + + CIE 15:2004 CIELab is defined as: + + L* = 116*f(Y/Yn) - 16 0 <= L* <= 100 + a* = 500*[f(X/Xn) - f(Y/Yn)] + b* = 200*[f(Y/Yn) - f(Z/Zn)] + + and + + f(t) = t^(1/3) 1 >= t > (24/116)^3 + (841/108)*t + (16/116) 0 <= t <= (24/116)^3 + + + Reverse transform is: + + X = Xn*[a* / 500 + (L* + 16) / 116] ^ 3 if (X/Xn) > (24/116) + = Xn*(a* / 500 + L* / 116) / 7.787 if (X/Xn) <= (24/116) + + + + PCS in Lab2 is encoded as: + + 8 bit Lab PCS: + + L* 0..100 into a 0..ff byte. + a* t + 128 range is -128.0 +127.0 + b* + + 16 bit Lab PCS: + + L* 0..100 into a 0..ff00 word. + a* t + 128 range is -128.0 +127.9961 + b* + + + +Interchange Space Component Actual Range Encoded Range +CIE XYZ X 0 -> 1.99997 0x0000 -> 0xffff +CIE XYZ Y 0 -> 1.99997 0x0000 -> 0xffff +CIE XYZ Z 0 -> 1.99997 0x0000 -> 0xffff + +Version 2,3 +----------- + +CIELAB (16 bit) L* 0 -> 100.0 0x0000 -> 0xff00 +CIELAB (16 bit) a* -128.0 -> +127.996 0x0000 -> 0x8000 -> 0xffff +CIELAB (16 bit) b* -128.0 -> +127.996 0x0000 -> 0x8000 -> 0xffff + + +Version 4 +--------- + +CIELAB (16 bit) L* 0 -> 100.0 0x0000 -> 0xffff +CIELAB (16 bit) a* -128.0 -> +127 0x0000 -> 0x8080 -> 0xffff +CIELAB (16 bit) b* -128.0 -> +127 0x0000 -> 0x8080 -> 0xffff + +*/ + +// Conversions +void CMSEXPORT cmsXYZ2xyY(cmsCIExyY* Dest, const cmsCIEXYZ* Source) +{ + cmsFloat64Number ISum; + + ISum = 1./(Source -> X + Source -> Y + Source -> Z); + + Dest -> x = (Source -> X) * ISum; + Dest -> y = (Source -> Y) * ISum; + Dest -> Y = Source -> Y; +} + +void CMSEXPORT cmsxyY2XYZ(cmsCIEXYZ* Dest, const cmsCIExyY* Source) +{ + Dest -> X = (Source -> x / Source -> y) * Source -> Y; + Dest -> Y = Source -> Y; + Dest -> Z = ((1 - Source -> x - Source -> y) / Source -> y) * Source -> Y; +} + +static +cmsFloat64Number f(cmsFloat64Number t) +{ + const cmsFloat64Number Limit = (24.0/116.0) * (24.0/116.0) * (24.0/116.0); + + if (t <= Limit) + return (841.0/108.0) * t + (16.0/116.0); + else + return pow(t, 1.0/3.0); +} + +static +cmsFloat64Number f_1(cmsFloat64Number t) +{ + const cmsFloat64Number Limit = (24.0/116.0); + + if (t <= Limit) { + return (108.0/841.0) * (t - (16.0/116.0)); + } + + return t * t * t; +} + + +// Standard XYZ to Lab. it can handle negative XZY numbers in some cases +void CMSEXPORT cmsXYZ2Lab(const cmsCIEXYZ* WhitePoint, cmsCIELab* Lab, const cmsCIEXYZ* xyz) +{ + cmsFloat64Number fx, fy, fz; + + if (WhitePoint == NULL) + WhitePoint = cmsD50_XYZ(); + + fx = f(xyz->X / WhitePoint->X); + fy = f(xyz->Y / WhitePoint->Y); + fz = f(xyz->Z / WhitePoint->Z); + + Lab->L = 116.0*fy - 16.0; + Lab->a = 500.0*(fx - fy); + Lab->b = 200.0*(fy - fz); +} + + +// Standard XYZ to Lab. It can return negative XYZ in some cases +void CMSEXPORT cmsLab2XYZ(const cmsCIEXYZ* WhitePoint, cmsCIEXYZ* xyz, const cmsCIELab* Lab) +{ + cmsFloat64Number x, y, z; + + if (WhitePoint == NULL) + WhitePoint = cmsD50_XYZ(); + + y = (Lab-> L + 16.0) / 116.0; + x = y + 0.002 * Lab -> a; + z = y - 0.005 * Lab -> b; + + xyz -> X = f_1(x) * WhitePoint -> X; + xyz -> Y = f_1(y) * WhitePoint -> Y; + xyz -> Z = f_1(z) * WhitePoint -> Z; + +} + +static +cmsFloat64Number L2float2(cmsUInt16Number v) +{ + return (cmsFloat64Number) v / 652.800; +} + +// the a/b part +static +cmsFloat64Number ab2float2(cmsUInt16Number v) +{ + return ((cmsFloat64Number) v / 256.0) - 128.0; +} + +static +cmsUInt16Number L2Fix2(cmsFloat64Number L) +{ + return _cmsQuickSaturateWord(L * 652.8); +} + +static +cmsUInt16Number ab2Fix2(cmsFloat64Number ab) +{ + return _cmsQuickSaturateWord((ab + 128.0) * 256.0); +} + + +static +cmsFloat64Number L2float4(cmsUInt16Number v) +{ + return (cmsFloat64Number) v / 655.35; +} + +// the a/b part +static +cmsFloat64Number ab2float4(cmsUInt16Number v) +{ + return ((cmsFloat64Number) v / 257.0) - 128.0; +} + + +void CMSEXPORT cmsLabEncoded2FloatV2(cmsCIELab* Lab, const cmsUInt16Number wLab[3]) +{ + Lab->L = L2float2(wLab[0]); + Lab->a = ab2float2(wLab[1]); + Lab->b = ab2float2(wLab[2]); +} + + +void CMSEXPORT cmsLabEncoded2Float(cmsCIELab* Lab, const cmsUInt16Number wLab[3]) +{ + Lab->L = L2float4(wLab[0]); + Lab->a = ab2float4(wLab[1]); + Lab->b = ab2float4(wLab[2]); +} + +static +cmsFloat64Number Clamp_L_doubleV2(cmsFloat64Number L) +{ + const cmsFloat64Number L_max = (cmsFloat64Number) (0xFFFF * 100.0) / 0xFF00; + + if (L < 0) L = 0; + if (L > L_max) L = L_max; + + return L; +} + + +static +cmsFloat64Number Clamp_ab_doubleV2(cmsFloat64Number ab) +{ + if (ab < MIN_ENCODEABLE_ab2) ab = MIN_ENCODEABLE_ab2; + if (ab > MAX_ENCODEABLE_ab2) ab = MAX_ENCODEABLE_ab2; + + return ab; +} + +void CMSEXPORT cmsFloat2LabEncodedV2(cmsUInt16Number wLab[3], const cmsCIELab* fLab) +{ + cmsCIELab Lab; + + Lab.L = Clamp_L_doubleV2(fLab ->L); + Lab.a = Clamp_ab_doubleV2(fLab ->a); + Lab.b = Clamp_ab_doubleV2(fLab ->b); + + wLab[0] = L2Fix2(Lab.L); + wLab[1] = ab2Fix2(Lab.a); + wLab[2] = ab2Fix2(Lab.b); +} + + +static +cmsFloat64Number Clamp_L_doubleV4(cmsFloat64Number L) +{ + if (L < 0) L = 0; + if (L > 100.0) L = 100.0; + + return L; +} + +static +cmsFloat64Number Clamp_ab_doubleV4(cmsFloat64Number ab) +{ + if (ab < MIN_ENCODEABLE_ab4) ab = MIN_ENCODEABLE_ab4; + if (ab > MAX_ENCODEABLE_ab4) ab = MAX_ENCODEABLE_ab4; + + return ab; +} + +static +cmsUInt16Number L2Fix4(cmsFloat64Number L) +{ + return _cmsQuickSaturateWord(L * 655.35); +} + +static +cmsUInt16Number ab2Fix4(cmsFloat64Number ab) +{ + return _cmsQuickSaturateWord((ab + 128.0) * 257.0); +} + +void CMSEXPORT cmsFloat2LabEncoded(cmsUInt16Number wLab[3], const cmsCIELab* fLab) +{ + cmsCIELab Lab; + + Lab.L = Clamp_L_doubleV4(fLab ->L); + Lab.a = Clamp_ab_doubleV4(fLab ->a); + Lab.b = Clamp_ab_doubleV4(fLab ->b); + + wLab[0] = L2Fix4(Lab.L); + wLab[1] = ab2Fix4(Lab.a); + wLab[2] = ab2Fix4(Lab.b); +} + +// Auxiliar: convert to Radians +static +cmsFloat64Number RADIANS(cmsFloat64Number deg) +{ + return (deg * M_PI) / 180.; +} + + +// Auxiliar: atan2 but operating in degrees and returning 0 if a==b==0 +static +cmsFloat64Number atan2deg(cmsFloat64Number a, cmsFloat64Number b) +{ + cmsFloat64Number h; + + if (a == 0 && b == 0) + h = 0; + else + h = atan2(a, b); + + h *= (180. / M_PI); + + while (h > 360.) + h -= 360.; + + while ( h < 0) + h += 360.; + + return h; +} + + +// Auxiliar: Square +static +cmsFloat64Number Sqr(cmsFloat64Number v) +{ + return v * v; +} +// From cylindrical coordinates. No check is performed, then negative values are allowed +void CMSEXPORT cmsLab2LCh(cmsCIELCh* LCh, const cmsCIELab* Lab) +{ + LCh -> L = Lab -> L; + LCh -> C = pow(Sqr(Lab ->a) + Sqr(Lab ->b), 0.5); + LCh -> h = atan2deg(Lab ->b, Lab ->a); +} + + +// To cylindrical coordinates. No check is performed, then negative values are allowed +void CMSEXPORT cmsLCh2Lab(cmsCIELab* Lab, const cmsCIELCh* LCh) +{ + cmsFloat64Number h = (LCh -> h * M_PI) / 180.0; + + Lab -> L = LCh -> L; + Lab -> a = LCh -> C * cos(h); + Lab -> b = LCh -> C * sin(h); +} + +// In XYZ All 3 components are encoded using 1.15 fixed point +static +cmsUInt16Number XYZ2Fix(cmsFloat64Number d) +{ + return _cmsQuickSaturateWord(d * 32768.0); +} + +void CMSEXPORT cmsFloat2XYZEncoded(cmsUInt16Number XYZ[3], const cmsCIEXYZ* fXYZ) +{ + cmsCIEXYZ xyz; + + xyz.X = fXYZ -> X; + xyz.Y = fXYZ -> Y; + xyz.Z = fXYZ -> Z; + + // Clamp to encodeable values. + if (xyz.Y <= 0) { + + xyz.X = 0; + xyz.Y = 0; + xyz.Z = 0; + } + + if (xyz.X > MAX_ENCODEABLE_XYZ) + xyz.X = MAX_ENCODEABLE_XYZ; + + if (xyz.X < 0) + xyz.X = 0; + + if (xyz.Y > MAX_ENCODEABLE_XYZ) + xyz.Y = MAX_ENCODEABLE_XYZ; + + if (xyz.Y < 0) + xyz.Y = 0; + + if (xyz.Z > MAX_ENCODEABLE_XYZ) + xyz.Z = MAX_ENCODEABLE_XYZ; + + if (xyz.Z < 0) + xyz.Z = 0; + + + XYZ[0] = XYZ2Fix(xyz.X); + XYZ[1] = XYZ2Fix(xyz.Y); + XYZ[2] = XYZ2Fix(xyz.Z); +} + + +// To convert from Fixed 1.15 point to cmsFloat64Number +static +cmsFloat64Number XYZ2float(cmsUInt16Number v) +{ + cmsS15Fixed16Number fix32; + + // From 1.15 to 15.16 + fix32 = v << 1; + + // From fixed 15.16 to cmsFloat64Number + return _cms15Fixed16toDouble(fix32); +} + + +void CMSEXPORT cmsXYZEncoded2Float(cmsCIEXYZ* fXYZ, const cmsUInt16Number XYZ[3]) +{ + fXYZ -> X = XYZ2float(XYZ[0]); + fXYZ -> Y = XYZ2float(XYZ[1]); + fXYZ -> Z = XYZ2float(XYZ[2]); +} + + +// Returns dE on two Lab values +cmsFloat64Number CMSEXPORT cmsDeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2) +{ + cmsFloat64Number dL, da, db; + + dL = fabs(Lab1 -> L - Lab2 -> L); + da = fabs(Lab1 -> a - Lab2 -> a); + db = fabs(Lab1 -> b - Lab2 -> b); + + return pow(Sqr(dL) + Sqr(da) + Sqr(db), 0.5); +} + + +// Return the CIE94 Delta E +cmsFloat64Number CMSEXPORT cmsCIE94DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2) +{ + cmsCIELCh LCh1, LCh2; + cmsFloat64Number dE, dL, dC, dh, dhsq; + cmsFloat64Number c12, sc, sh; + + dL = fabs(Lab1 ->L - Lab2 ->L); + + cmsLab2LCh(&LCh1, Lab1); + cmsLab2LCh(&LCh2, Lab2); + + dC = fabs(LCh1.C - LCh2.C); + dE = cmsDeltaE(Lab1, Lab2); + + dhsq = Sqr(dE) - Sqr(dL) - Sqr(dC); + if (dhsq < 0) + dh = 0; + else + dh = pow(dhsq, 0.5); + + c12 = sqrt(LCh1.C * LCh2.C); + + sc = 1.0 + (0.048 * c12); + sh = 1.0 + (0.014 * c12); + + return sqrt(Sqr(dL) + Sqr(dC) / Sqr(sc) + Sqr(dh) / Sqr(sh)); +} + + +// Auxiliary +static +cmsFloat64Number ComputeLBFD(const cmsCIELab* Lab) +{ + cmsFloat64Number yt; + + if (Lab->L > 7.996969) + yt = (Sqr((Lab->L+16)/116)*((Lab->L+16)/116))*100; + else + yt = 100 * (Lab->L / 903.3); + + return (54.6 * (M_LOG10E * (log(yt + 1.5))) - 9.6); +} + + + +// bfd - gets BFD(1:1) difference between Lab1, Lab2 +cmsFloat64Number CMSEXPORT cmsBFDdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2) +{ + cmsFloat64Number lbfd1,lbfd2,AveC,Aveh,dE,deltaL, + deltaC,deltah,dc,t,g,dh,rh,rc,rt,bfd; + cmsCIELCh LCh1, LCh2; + + + lbfd1 = ComputeLBFD(Lab1); + lbfd2 = ComputeLBFD(Lab2); + deltaL = lbfd2 - lbfd1; + + cmsLab2LCh(&LCh1, Lab1); + cmsLab2LCh(&LCh2, Lab2); + + deltaC = LCh2.C - LCh1.C; + AveC = (LCh1.C+LCh2.C)/2; + Aveh = (LCh1.h+LCh2.h)/2; + + dE = cmsDeltaE(Lab1, Lab2); + + if (Sqr(dE)>(Sqr(Lab2->L-Lab1->L)+Sqr(deltaC))) + deltah = sqrt(Sqr(dE)-Sqr(Lab2->L-Lab1->L)-Sqr(deltaC)); + else + deltah =0; + + + dc = 0.035 * AveC / (1 + 0.00365 * AveC)+0.521; + g = sqrt(Sqr(Sqr(AveC))/(Sqr(Sqr(AveC))+14000)); + t = 0.627+(0.055*cos((Aveh-254)/(180/M_PI))- + 0.040*cos((2*Aveh-136)/(180/M_PI))+ + 0.070*cos((3*Aveh-31)/(180/M_PI))+ + 0.049*cos((4*Aveh+114)/(180/M_PI))- + 0.015*cos((5*Aveh-103)/(180/M_PI))); + + dh = dc*(g*t+1-g); + rh = -0.260*cos((Aveh-308)/(180/M_PI))- + 0.379*cos((2*Aveh-160)/(180/M_PI))- + 0.636*cos((3*Aveh+254)/(180/M_PI))+ + 0.226*cos((4*Aveh+140)/(180/M_PI))- + 0.194*cos((5*Aveh+280)/(180/M_PI)); + + rc = sqrt((AveC*AveC*AveC*AveC*AveC*AveC)/((AveC*AveC*AveC*AveC*AveC*AveC)+70000000)); + rt = rh*rc; + + bfd = sqrt(Sqr(deltaL)+Sqr(deltaC/dc)+Sqr(deltah/dh)+(rt*(deltaC/dc)*(deltah/dh))); + + return bfd; +} + + +// cmc - CMC(l:c) difference between Lab1, Lab2 +cmsFloat64Number CMSEXPORT cmsCMCdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number l, cmsFloat64Number c) +{ + cmsFloat64Number dE,dL,dC,dh,sl,sc,sh,t,f,cmc; + cmsCIELCh LCh1, LCh2; + + if (Lab1 ->L == 0 && Lab2 ->L == 0) return 0; + + cmsLab2LCh(&LCh1, Lab1); + cmsLab2LCh(&LCh2, Lab2); + + + dL = Lab2->L-Lab1->L; + dC = LCh2.C-LCh1.C; + + dE = cmsDeltaE(Lab1, Lab2); + + if (Sqr(dE)>(Sqr(dL)+Sqr(dC))) + dh = sqrt(Sqr(dE)-Sqr(dL)-Sqr(dC)); + else + dh =0; + + if ((LCh1.h > 164) && (LCh1.h < 345)) + t = 0.56 + fabs(0.2 * cos(((LCh1.h + 168)/(180/M_PI)))); + else + t = 0.36 + fabs(0.4 * cos(((LCh1.h + 35 )/(180/M_PI)))); + + sc = 0.0638 * LCh1.C / (1 + 0.0131 * LCh1.C) + 0.638; + sl = 0.040975 * Lab1->L /(1 + 0.01765 * Lab1->L); + + if (Lab1->L<16) + sl = 0.511; + + f = sqrt((LCh1.C * LCh1.C * LCh1.C * LCh1.C)/((LCh1.C * LCh1.C * LCh1.C * LCh1.C)+1900)); + sh = sc*(t*f+1-f); + cmc = sqrt(Sqr(dL/(l*sl))+Sqr(dC/(c*sc))+Sqr(dh/sh)); + + return cmc; +} + +// dE2000 The weightings KL, KC and KH can be modified to reflect the relative +// importance of lightness, chroma and hue in different industrial applications +cmsFloat64Number CMSEXPORT cmsCIE2000DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, + cmsFloat64Number Kl, cmsFloat64Number Kc, cmsFloat64Number Kh) +{ + cmsFloat64Number L1 = Lab1->L; + cmsFloat64Number a1 = Lab1->a; + cmsFloat64Number b1 = Lab1->b; + cmsFloat64Number C = sqrt( Sqr(a1) + Sqr(b1) ); + + cmsFloat64Number Ls = Lab2 ->L; + cmsFloat64Number as = Lab2 ->a; + cmsFloat64Number bs = Lab2 ->b; + cmsFloat64Number Cs = sqrt( Sqr(as) + Sqr(bs) ); + + cmsFloat64Number G = 0.5 * ( 1 - sqrt(pow((C + Cs) / 2 , 7.0) / (pow((C + Cs) / 2, 7.0) + pow(25.0, 7.0) ) )); + + cmsFloat64Number a_p = (1 + G ) * a1; + cmsFloat64Number b_p = b1; + cmsFloat64Number C_p = sqrt( Sqr(a_p) + Sqr(b_p)); + cmsFloat64Number h_p = atan2deg(b_p, a_p); + + + cmsFloat64Number a_ps = (1 + G) * as; + cmsFloat64Number b_ps = bs; + cmsFloat64Number C_ps = sqrt(Sqr(a_ps) + Sqr(b_ps)); + cmsFloat64Number h_ps = atan2deg(b_ps, a_ps); + + cmsFloat64Number meanC_p =(C_p + C_ps) / 2; + + cmsFloat64Number hps_plus_hp = h_ps + h_p; + cmsFloat64Number hps_minus_hp = h_ps - h_p; + + cmsFloat64Number meanh_p = fabs(hps_minus_hp) <= 180.000001 ? (hps_plus_hp)/2 : + (hps_plus_hp) < 360 ? (hps_plus_hp + 360)/2 : + (hps_plus_hp - 360)/2; + + cmsFloat64Number delta_h = (hps_minus_hp) <= -180.000001 ? (hps_minus_hp + 360) : + (hps_minus_hp) > 180 ? (hps_minus_hp - 360) : + (hps_minus_hp); + cmsFloat64Number delta_L = (Ls - L1); + cmsFloat64Number delta_C = (C_ps - C_p ); + + + cmsFloat64Number delta_H =2 * sqrt(C_ps*C_p) * sin(RADIANS(delta_h) / 2); + + cmsFloat64Number T = 1 - 0.17 * cos(RADIANS(meanh_p-30)) + + 0.24 * cos(RADIANS(2*meanh_p)) + + 0.32 * cos(RADIANS(3*meanh_p + 6)) + - 0.2 * cos(RADIANS(4*meanh_p - 63)); + + cmsFloat64Number Sl = 1 + (0.015 * Sqr((Ls + L1) /2- 50) )/ sqrt(20 + Sqr( (Ls+L1)/2 - 50) ); + + cmsFloat64Number Sc = 1 + 0.045 * (C_p + C_ps)/2; + cmsFloat64Number Sh = 1 + 0.015 * ((C_ps + C_p)/2) * T; + + cmsFloat64Number delta_ro = 30 * exp( -Sqr(((meanh_p - 275 ) / 25))); + + cmsFloat64Number Rc = 2 * sqrt(( pow(meanC_p, 7.0) )/( pow(meanC_p, 7.0) + pow(25.0, 7.0))); + + cmsFloat64Number Rt = -sin(2 * RADIANS(delta_ro)) * Rc; + + cmsFloat64Number deltaE00 = sqrt( Sqr(delta_L /(Sl * Kl)) + + Sqr(delta_C/(Sc * Kc)) + + Sqr(delta_H/(Sh * Kh)) + + Rt*(delta_C/(Sc * Kc)) * (delta_H / (Sh * Kh))); + + return deltaE00; +} + +// This function returns a number of gridpoints to be used as LUT table. It assumes same number +// of gripdpoints in all dimensions. Flags may override the choice. +int _cmsReasonableGridpointsByColorspace(cmsColorSpaceSignature Colorspace, cmsUInt32Number dwFlags) +{ + int nChannels; + + // Already specified? + if (dwFlags & 0x00FF0000) { + // Yes, grab'em + return (dwFlags >> 16) & 0xFF; + } + + nChannels = cmsChannelsOf(Colorspace); + + // HighResPrecalc is maximum resolution + if (dwFlags & cmsFLAGS_HIGHRESPRECALC) { + + if (nChannels > 4) + return 7; // 7 for Hifi + + if (nChannels == 4) // 23 for CMYK + return 23; + + return 49; // 49 for RGB and others + } + + + // LowResPrecal is lower resolution + if (dwFlags & cmsFLAGS_LOWRESPRECALC) { + + if (nChannels > 4) + return 6; // 6 for more than 4 channels + + if (nChannels == 1) + return 33; // For monochrome + + return 17; // 17 for remaining + } + + // Default values + if (nChannels > 4) + return 7; // 7 for Hifi + + if (nChannels == 4) + return 17; // 17 for CMYK + + return 33; // 33 for RGB +} + + +cmsBool _cmsEndPointsBySpace(cmsColorSpaceSignature Space, + cmsUInt16Number **White, + cmsUInt16Number **Black, + cmsUInt32Number *nOutputs) +{ + // Only most common spaces + + static cmsUInt16Number RGBblack[4] = { 0, 0, 0 }; + static cmsUInt16Number RGBwhite[4] = { 0xffff, 0xffff, 0xffff }; + static cmsUInt16Number CMYKblack[4] = { 0xffff, 0xffff, 0xffff, 0xffff }; // 400% of ink + static cmsUInt16Number CMYKwhite[4] = { 0, 0, 0, 0 }; + static cmsUInt16Number LABblack[4] = { 0, 0x8080, 0x8080 }; // V4 Lab encoding + static cmsUInt16Number LABwhite[4] = { 0xFFFF, 0x8080, 0x8080 }; + static cmsUInt16Number CMYblack[4] = { 0xffff, 0xffff, 0xffff }; + static cmsUInt16Number CMYwhite[4] = { 0, 0, 0 }; + static cmsUInt16Number Grayblack[4] = { 0 }; + static cmsUInt16Number GrayWhite[4] = { 0xffff }; + + switch (Space) { + + case cmsSigGrayData: if (White) *White = GrayWhite; + if (Black) *Black = Grayblack; + if (nOutputs) *nOutputs = 1; + return TRUE; + + case cmsSigRgbData: if (White) *White = RGBwhite; + if (Black) *Black = RGBblack; + if (nOutputs) *nOutputs = 3; + return TRUE; + + case cmsSigLabData: if (White) *White = LABwhite; + if (Black) *Black = LABblack; + if (nOutputs) *nOutputs = 3; + return TRUE; + + case cmsSigCmykData: if (White) *White = CMYKwhite; + if (Black) *Black = CMYKblack; + if (nOutputs) *nOutputs = 4; + return TRUE; + + case cmsSigCmyData: if (White) *White = CMYwhite; + if (Black) *Black = CMYblack; + if (nOutputs) *nOutputs = 3; + return TRUE; + + default:; + } + + return FALSE; +} + + + +// Several utilities ------------------------------------------------------- + +// Translate from our colorspace to ICC representation + +cmsColorSpaceSignature CMSEXPORT _cmsICCcolorSpace(int OurNotation) +{ + switch (OurNotation) { + + case 1: + case PT_GRAY: return cmsSigGrayData; + + case 2: + case PT_RGB: return cmsSigRgbData; + + case PT_CMY: return cmsSigCmyData; + case PT_CMYK: return cmsSigCmykData; + case PT_YCbCr:return cmsSigYCbCrData; + case PT_YUV: return cmsSigLuvData; + case PT_XYZ: return cmsSigXYZData; + + case PT_LabV2: + case PT_Lab: return cmsSigLabData; + + case PT_YUVK: return cmsSigLuvKData; + case PT_HSV: return cmsSigHsvData; + case PT_HLS: return cmsSigHlsData; + case PT_Yxy: return cmsSigYxyData; + + case PT_MCH1: return cmsSigMCH1Data; + case PT_MCH2: return cmsSigMCH2Data; + case PT_MCH3: return cmsSigMCH3Data; + case PT_MCH4: return cmsSigMCH4Data; + case PT_MCH5: return cmsSigMCH5Data; + case PT_MCH6: return cmsSigMCH6Data; + case PT_MCH7: return cmsSigMCH7Data; + case PT_MCH8: return cmsSigMCH8Data; + + case PT_MCH9: return cmsSigMCH9Data; + case PT_MCH10: return cmsSigMCHAData; + case PT_MCH11: return cmsSigMCHBData; + case PT_MCH12: return cmsSigMCHCData; + case PT_MCH13: return cmsSigMCHDData; + case PT_MCH14: return cmsSigMCHEData; + case PT_MCH15: return cmsSigMCHFData; + + default: return (cmsColorSpaceSignature) (-1); + } +} + + +int CMSEXPORT _cmsLCMScolorSpace(cmsColorSpaceSignature ProfileSpace) +{ + switch (ProfileSpace) { + + case cmsSigGrayData: return PT_GRAY; + case cmsSigRgbData: return PT_RGB; + case cmsSigCmyData: return PT_CMY; + case cmsSigCmykData: return PT_CMYK; + case cmsSigYCbCrData:return PT_YCbCr; + case cmsSigLuvData: return PT_YUV; + case cmsSigXYZData: return PT_XYZ; + case cmsSigLabData: return PT_Lab; + case cmsSigLuvKData: return PT_YUVK; + case cmsSigHsvData: return PT_HSV; + case cmsSigHlsData: return PT_HLS; + case cmsSigYxyData: return PT_Yxy; + + case cmsSig1colorData: + case cmsSigMCH1Data: return PT_MCH1; + + case cmsSig2colorData: + case cmsSigMCH2Data: return PT_MCH2; + + case cmsSig3colorData: + case cmsSigMCH3Data: return PT_MCH3; + + case cmsSig4colorData: + case cmsSigMCH4Data: return PT_MCH4; + + case cmsSig5colorData: + case cmsSigMCH5Data: return PT_MCH5; + + case cmsSig6colorData: + case cmsSigMCH6Data: return PT_MCH6; + + case cmsSigMCH7Data: + case cmsSig7colorData:return PT_MCH7; + + case cmsSigMCH8Data: + case cmsSig8colorData:return PT_MCH8; + + case cmsSigMCH9Data: + case cmsSig9colorData:return PT_MCH9; + + case cmsSigMCHAData: + case cmsSig10colorData:return PT_MCH10; + + case cmsSigMCHBData: + case cmsSig11colorData:return PT_MCH11; + + case cmsSigMCHCData: + case cmsSig12colorData:return PT_MCH12; + + case cmsSigMCHDData: + case cmsSig13colorData:return PT_MCH13; + + case cmsSigMCHEData: + case cmsSig14colorData:return PT_MCH14; + + case cmsSigMCHFData: + case cmsSig15colorData:return PT_MCH15; + + default: return (cmsColorSpaceSignature) (-1); + } +} + + +cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace) +{ + switch (ColorSpace) { + + case cmsSigGrayData: return 1; + + case cmsSig2colorData: return 2; + + case cmsSigXYZData: + case cmsSigLabData: + case cmsSigLuvData: + case cmsSigYCbCrData: + case cmsSigYxyData: + case cmsSigRgbData: + case cmsSigHsvData: + case cmsSigHlsData: + case cmsSigCmyData: + case cmsSig3colorData: return 3; + + case cmsSigLuvKData: + case cmsSigCmykData: + case cmsSig4colorData: return 4; + + case cmsSigMCH5Data: + case cmsSig5colorData: return 5; + + case cmsSigMCH6Data: + case cmsSig6colorData: return 6; + + case cmsSigMCH7Data: + case cmsSig7colorData: return 7; + + case cmsSigMCH8Data: + case cmsSig8colorData: return 8; + + case cmsSigMCH9Data: + case cmsSig9colorData: return 9; + + case cmsSigMCHAData: + case cmsSig10colorData: return 10; + + case cmsSigMCHBData: + case cmsSig11colorData: return 11; + + case cmsSigMCHCData: + case cmsSig12colorData: return 12; + + case cmsSigMCHDData: + case cmsSig13colorData: return 13; + + case cmsSigMCHEData: + case cmsSig14colorData: return 14; + + case cmsSigMCHFData: + case cmsSig15colorData: return 15; + + default: return 3; + } +} diff --git a/src/cmsplugin.c b/src/cmsplugin.c new file mode 100644 index 0000000..36925aa --- /dev/null +++ b/src/cmsplugin.c @@ -0,0 +1,612 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + + +// ---------------------------------------------------------------------------------- +// Encoding & Decoding support functions +// ---------------------------------------------------------------------------------- + +// Little-Endian to Big-Endian + +// Adjust a word value after being readed/ before being written from/to an ICC profile +cmsUInt16Number CMSEXPORT _cmsAdjustEndianess16(cmsUInt16Number Word) +{ +#ifndef CMS_USE_BIG_ENDIAN + + cmsUInt8Number* pByte = (cmsUInt8Number*) &Word; + cmsUInt8Number tmp; + + tmp = pByte[0]; + pByte[0] = pByte[1]; + pByte[1] = tmp; +#endif + + return Word; +} + + +// Transports to properly encoded values - note that icc profiles does use big endian notation. + +// 1 2 3 4 +// 4 3 2 1 + +cmsUInt32Number CMSEXPORT _cmsAdjustEndianess32(cmsUInt32Number DWord) +{ +#ifndef CMS_USE_BIG_ENDIAN + + cmsUInt8Number* pByte = (cmsUInt8Number*) &DWord; + cmsUInt8Number temp1; + cmsUInt8Number temp2; + + temp1 = *pByte++; + temp2 = *pByte++; + *(pByte-1) = *pByte; + *pByte++ = temp2; + *(pByte-3) = *pByte; + *pByte = temp1; +#endif + return DWord; +} + +// 1 2 3 4 5 6 7 8 +// 8 7 6 5 4 3 2 1 + +void CMSEXPORT _cmsAdjustEndianess64(cmsUInt64Number* Result, cmsUInt64Number QWord) +{ + +#ifndef CMS_USE_BIG_ENDIAN + + cmsUInt8Number* pIn = (cmsUInt8Number*) &QWord; + cmsUInt8Number* pOut = (cmsUInt8Number*) Result; + + _cmsAssert(Result != NULL); + + pOut[7] = pIn[0]; + pOut[6] = pIn[1]; + pOut[5] = pIn[2]; + pOut[4] = pIn[3]; + pOut[3] = pIn[4]; + pOut[2] = pIn[5]; + pOut[1] = pIn[6]; + pOut[0] = pIn[7]; + +#else + + _cmsAssert(Result != NULL); + + *Result = QWord; +#endif +} + +// Auxiliar -- read 8, 16 and 32-bit numbers +cmsBool CMSEXPORT _cmsReadUInt8Number(cmsIOHANDLER* io, cmsUInt8Number* n) +{ + cmsUInt8Number tmp; + + _cmsAssert(io != NULL); + + if (io -> Read(io, &tmp, sizeof(cmsUInt8Number), 1) != 1) + return FALSE; + + if (n != NULL) *n = tmp; + return TRUE; +} + +cmsBool CMSEXPORT _cmsReadUInt16Number(cmsIOHANDLER* io, cmsUInt16Number* n) +{ + cmsUInt16Number tmp; + + _cmsAssert(io != NULL); + + if (io -> Read(io, &tmp, sizeof(cmsUInt16Number), 1) != 1) + return FALSE; + + if (n != NULL) *n = _cmsAdjustEndianess16(tmp); + return TRUE; +} + +cmsBool CMSEXPORT _cmsReadUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, cmsUInt16Number* Array) +{ + cmsUInt32Number i; + + _cmsAssert(io != NULL); + + for (i=0; i < n; i++) { + + if (Array != NULL) { + if (!_cmsReadUInt16Number(io, Array + i)) return FALSE; + } + else { + if (!_cmsReadUInt16Number(io, NULL)) return FALSE; + } + + } + return TRUE; +} + +cmsBool CMSEXPORT _cmsReadUInt32Number(cmsIOHANDLER* io, cmsUInt32Number* n) +{ + cmsUInt32Number tmp; + + _cmsAssert(io != NULL); + + if (io -> Read(io, &tmp, sizeof(cmsUInt32Number), 1) != 1) + return FALSE; + + if (n != NULL) *n = _cmsAdjustEndianess32(tmp); + return TRUE; +} + +cmsBool CMSEXPORT _cmsReadFloat32Number(cmsIOHANDLER* io, cmsFloat32Number* n) +{ + cmsUInt32Number tmp; + + _cmsAssert(io != NULL); + + if (io -> Read(io, &tmp, sizeof(cmsFloat32Number), 1) != 1) + return FALSE; + + if (n != NULL) { + + tmp = _cmsAdjustEndianess32(tmp); + *n = *(cmsFloat32Number*) &tmp; + } + return TRUE; +} + + +cmsBool CMSEXPORT _cmsReadUInt64Number(cmsIOHANDLER* io, cmsUInt64Number* n) +{ + cmsUInt64Number tmp; + + _cmsAssert(io != NULL); + + if (io -> Read(io, &tmp, sizeof(cmsUInt64Number), 1) != 1) + return FALSE; + + if (n != NULL) _cmsAdjustEndianess64(n, tmp); + return TRUE; +} + + +cmsBool CMSEXPORT _cmsRead15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number* n) +{ + cmsUInt32Number tmp; + + _cmsAssert(io != NULL); + + if (io -> Read(io, &tmp, sizeof(cmsUInt32Number), 1) != 1) + return FALSE; + + if (n != NULL) { + *n = _cms15Fixed16toDouble(_cmsAdjustEndianess32(tmp)); + } + + return TRUE; +} + + +// Jun-21-2000: Some profiles (those that comes with W2K) comes +// with the media white (media black?) x 100. Add a sanity check + +static +void NormalizeXYZ(cmsCIEXYZ* Dest) +{ + while (Dest -> X > 2. && + Dest -> Y > 2. && + Dest -> Z > 2.) { + + Dest -> X /= 10.; + Dest -> Y /= 10.; + Dest -> Z /= 10.; + } +} + +cmsBool CMSEXPORT _cmsReadXYZNumber(cmsIOHANDLER* io, cmsCIEXYZ* XYZ) +{ + cmsEncodedXYZNumber xyz; + + _cmsAssert(io != NULL); + + if (io ->Read(io, &xyz, sizeof(cmsEncodedXYZNumber), 1) != 1) return FALSE; + + if (XYZ != NULL) { + + XYZ->X = _cms15Fixed16toDouble(_cmsAdjustEndianess32(xyz.X)); + XYZ->Y = _cms15Fixed16toDouble(_cmsAdjustEndianess32(xyz.Y)); + XYZ->Z = _cms15Fixed16toDouble(_cmsAdjustEndianess32(xyz.Z)); + + NormalizeXYZ(XYZ); + } + return TRUE; +} + +cmsBool CMSEXPORT _cmsWriteUInt8Number(cmsIOHANDLER* io, cmsUInt8Number n) +{ + _cmsAssert(io != NULL); + + if (io -> Write(io, sizeof(cmsUInt8Number), &n) != 1) + return FALSE; + + return TRUE; +} + +cmsBool CMSEXPORT _cmsWriteUInt16Number(cmsIOHANDLER* io, cmsUInt16Number n) +{ + cmsUInt16Number tmp; + + _cmsAssert(io != NULL); + + tmp = _cmsAdjustEndianess16(n); + if (io -> Write(io, sizeof(cmsUInt16Number), &tmp) != 1) + return FALSE; + + return TRUE; +} + +cmsBool CMSEXPORT _cmsWriteUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, const cmsUInt16Number* Array) +{ + cmsUInt32Number i; + + _cmsAssert(io != NULL); + _cmsAssert(Array != NULL); + + for (i=0; i < n; i++) { + if (!_cmsWriteUInt16Number(io, Array[i])) return FALSE; + } + + return TRUE; +} + +cmsBool CMSEXPORT _cmsWriteUInt32Number(cmsIOHANDLER* io, cmsUInt32Number n) +{ + cmsUInt32Number tmp; + + _cmsAssert(io != NULL); + + tmp = _cmsAdjustEndianess32(n); + if (io -> Write(io, sizeof(cmsUInt32Number), &tmp) != 1) + return FALSE; + + return TRUE; +} + + +cmsBool CMSEXPORT _cmsWriteFloat32Number(cmsIOHANDLER* io, cmsFloat32Number n) +{ + cmsUInt32Number tmp; + + _cmsAssert(io != NULL); + + tmp = *(cmsUInt32Number*) &n; + tmp = _cmsAdjustEndianess32(tmp); + if (io -> Write(io, sizeof(cmsUInt32Number), &tmp) != 1) + return FALSE; + + return TRUE; +} + +cmsBool CMSEXPORT _cmsWriteUInt64Number(cmsIOHANDLER* io, cmsUInt64Number n) +{ + cmsUInt64Number tmp; + + _cmsAssert(io != NULL); + + _cmsAdjustEndianess64(&tmp, n); + if (io -> Write(io, sizeof(cmsUInt64Number), &tmp) != 1) + return FALSE; + + return TRUE; +} + +cmsBool CMSEXPORT _cmsWrite15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number n) +{ + cmsUInt32Number tmp; + + _cmsAssert(io != NULL); + + tmp = _cmsAdjustEndianess32(_cmsDoubleTo15Fixed16(n)); + if (io -> Write(io, sizeof(cmsUInt32Number), &tmp) != 1) + return FALSE; + + return TRUE; +} + +cmsBool CMSEXPORT _cmsWriteXYZNumber(cmsIOHANDLER* io, const cmsCIEXYZ* XYZ) +{ + cmsEncodedXYZNumber xyz; + + _cmsAssert(io != NULL); + _cmsAssert(XYZ != NULL); + + xyz.X = _cmsAdjustEndianess32(_cmsDoubleTo15Fixed16(XYZ->X)); + xyz.Y = _cmsAdjustEndianess32(_cmsDoubleTo15Fixed16(XYZ->Y)); + xyz.Z = _cmsAdjustEndianess32(_cmsDoubleTo15Fixed16(XYZ->Z)); + + return io -> Write(io, sizeof(cmsEncodedXYZNumber), &xyz); +} + +// from Fixed point 8.8 to double +cmsFloat64Number CMSEXPORT _cms8Fixed8toDouble(cmsUInt16Number fixed8) +{ + cmsUInt8Number msb, lsb; + + lsb = (cmsUInt8Number) (fixed8 & 0xff); + msb = (cmsUInt8Number) (((cmsUInt16Number) fixed8 >> 8) & 0xff); + + return (cmsFloat64Number) ((cmsFloat64Number) msb + ((cmsFloat64Number) lsb / 256.0)); +} + +cmsUInt16Number CMSEXPORT _cmsDoubleTo8Fixed8(cmsFloat64Number val) +{ + cmsS15Fixed16Number GammaFixed32 = _cmsDoubleTo15Fixed16(val); + return (cmsUInt16Number) ((GammaFixed32 >> 8) & 0xFFFF); +} + +// from Fixed point 15.16 to double +cmsFloat64Number CMSEXPORT _cms15Fixed16toDouble(cmsS15Fixed16Number fix32) +{ + cmsFloat64Number floater, sign, mid; + int Whole, FracPart; + + sign = (fix32 < 0 ? -1 : 1); + fix32 = abs(fix32); + + Whole = (cmsUInt16Number)(fix32 >> 16) & 0xffff; + FracPart = (cmsUInt16Number)(fix32 & 0xffff); + + mid = (cmsFloat64Number) FracPart / 65536.0; + floater = (cmsFloat64Number) Whole + mid; + + return sign * floater; +} + +// from double to Fixed point 15.16 +cmsS15Fixed16Number CMSEXPORT _cmsDoubleTo15Fixed16(cmsFloat64Number v) +{ + return ((cmsS15Fixed16Number) floor((v)*65536.0 + 0.5)); +} + +// Date/Time functions + +void CMSEXPORT _cmsDecodeDateTimeNumber(const cmsDateTimeNumber *Source, struct tm *Dest) +{ + + _cmsAssert(Dest != NULL); + _cmsAssert(Source != NULL); + + Dest->tm_sec = _cmsAdjustEndianess16(Source->seconds); + Dest->tm_min = _cmsAdjustEndianess16(Source->minutes); + Dest->tm_hour = _cmsAdjustEndianess16(Source->hours); + Dest->tm_mday = _cmsAdjustEndianess16(Source->day); + Dest->tm_mon = _cmsAdjustEndianess16(Source->month) - 1; + Dest->tm_year = _cmsAdjustEndianess16(Source->year) - 1900; + Dest->tm_wday = -1; + Dest->tm_yday = -1; + Dest->tm_isdst = 0; +} + +void CMSEXPORT _cmsEncodeDateTimeNumber(cmsDateTimeNumber *Dest, const struct tm *Source) +{ + _cmsAssert(Dest != NULL); + _cmsAssert(Source != NULL); + + Dest->seconds = _cmsAdjustEndianess16((cmsUInt16Number) Source->tm_sec); + Dest->minutes = _cmsAdjustEndianess16((cmsUInt16Number) Source->tm_min); + Dest->hours = _cmsAdjustEndianess16((cmsUInt16Number) Source->tm_hour); + Dest->day = _cmsAdjustEndianess16((cmsUInt16Number) Source->tm_mday); + Dest->month = _cmsAdjustEndianess16((cmsUInt16Number) (Source->tm_mon + 1)); + Dest->year = _cmsAdjustEndianess16((cmsUInt16Number) (Source->tm_year + 1900)); +} + +// Read base and return type base +cmsTagTypeSignature CMSEXPORT _cmsReadTypeBase(cmsIOHANDLER* io) +{ + _cmsTagBase Base; + + _cmsAssert(io != NULL); + + if (io -> Read(io, &Base, sizeof(_cmsTagBase), 1) != 1) + return (cmsTagTypeSignature) 0; + + return (cmsTagTypeSignature) _cmsAdjustEndianess32(Base.sig); +} + +// Setup base marker +cmsBool CMSEXPORT _cmsWriteTypeBase(cmsIOHANDLER* io, cmsTagTypeSignature sig) +{ + _cmsTagBase Base; + + _cmsAssert(io != NULL); + + Base.sig = (cmsTagTypeSignature) _cmsAdjustEndianess32(sig); + memset(&Base.reserved, 0, sizeof(Base.reserved)); + return io -> Write(io, sizeof(_cmsTagBase), &Base); +} + +cmsBool CMSEXPORT _cmsReadAlignment(cmsIOHANDLER* io) +{ + cmsUInt8Number Buffer[4]; + cmsUInt32Number NextAligned, At; + cmsUInt32Number BytesToNextAlignedPos; + + _cmsAssert(io != NULL); + + At = io -> Tell(io); + NextAligned = _cmsALIGNLONG(At); + BytesToNextAlignedPos = NextAligned - At; + if (BytesToNextAlignedPos == 0) return TRUE; + if (BytesToNextAlignedPos > 4) return FALSE; + + return (io ->Read(io, Buffer, BytesToNextAlignedPos, 1) == 1); +} + +cmsBool CMSEXPORT _cmsWriteAlignment(cmsIOHANDLER* io) +{ + cmsUInt8Number Buffer[4]; + cmsUInt32Number NextAligned, At; + cmsUInt32Number BytesToNextAlignedPos; + + _cmsAssert(io != NULL); + + At = io -> Tell(io); + NextAligned = _cmsALIGNLONG(At); + BytesToNextAlignedPos = NextAligned - At; + if (BytesToNextAlignedPos == 0) return TRUE; + if (BytesToNextAlignedPos > 4) return FALSE; + + memset(Buffer, 0, BytesToNextAlignedPos); + return io -> Write(io, BytesToNextAlignedPos, Buffer); +} + + +// To deal with text streams. 2K at most +cmsBool CMSEXPORT _cmsIOPrintf(cmsIOHANDLER* io, const char* frm, ...) +{ + va_list args; + int len; + cmsUInt8Number Buffer[2048]; + cmsBool rc; + + _cmsAssert(io != NULL); + _cmsAssert(frm != NULL); + + va_start(args, frm); + + len = vsnprintf((char*) Buffer, 2047, frm, args); + if (len < 0) return FALSE; // Truncated, which is a fatal error for us + + rc = io ->Write(io, len, Buffer); + + va_end(args); + + return rc; +} + + +// Plugin memory management ------------------------------------------------------------------------------------------------- + +static _cmsSubAllocator* PluginPool = NULL; + +// Specialized malloc for plug-ins, that is freed upon exit. +void* _cmsPluginMalloc(cmsUInt32Number size) +{ + if (PluginPool == NULL) + PluginPool = _cmsCreateSubAlloc(0, 4*1024); + + return _cmsSubAlloc(PluginPool, size); +} + + +// Main plug-in dispatcher +cmsBool CMSEXPORT cmsPlugin(void* Plug_in) +{ + cmsPluginBase* Plugin; + + for (Plugin = (cmsPluginBase*) Plug_in; + Plugin != NULL; + Plugin = Plugin -> Next) { + + if (Plugin -> Magic != cmsPluginMagicNumber) { + cmsSignalError(0, cmsERROR_UNKNOWN_EXTENSION, "Unrecognized plugin"); + return FALSE; + } + + if (Plugin ->ExpectedVersion > LCMS_VERSION) { + cmsSignalError(0, cmsERROR_UNKNOWN_EXTENSION, "plugin needs Little CMS %d, current version is %d", + Plugin ->ExpectedVersion, LCMS_VERSION); + return FALSE; + } + + switch (Plugin -> Type) { + + case cmsPluginMemHandlerSig: + if (!_cmsRegisterMemHandlerPlugin(Plugin)) return FALSE; + break; + + case cmsPluginInterpolationSig: + if (!_cmsRegisterInterpPlugin(Plugin)) return FALSE; + break; + + case cmsPluginTagTypeSig: + if (!_cmsRegisterTagTypePlugin(Plugin)) return FALSE; + break; + + case cmsPluginTagSig: + if (!_cmsRegisterTagPlugin(Plugin)) return FALSE; + break; + + case cmsPluginFormattersSig: + if (!_cmsRegisterFormattersPlugin(Plugin)) return FALSE; + break; + + case cmsPluginRenderingIntentSig: + if (!_cmsRegisterRenderingIntentPlugin(Plugin)) return FALSE; + break; + + case cmsPluginParametricCurveSig: + if (!_cmsRegisterParametricCurvesPlugin(Plugin)) return FALSE; + break; + + case cmsPluginMultiProcessElementSig: + if (!_cmsRegisterMultiProcessElementPlugin(Plugin)) return FALSE; + break; + + case cmsPluginOptimizationSig: + if (!_cmsRegisterOptimizationPlugin(Plugin)) return FALSE; + break; + + default: + cmsSignalError(0, cmsERROR_UNKNOWN_EXTENSION, "Unrecognized plugin type '%X'", Plugin -> Type); + return FALSE; + } + } + + // Keep a reference to the plug-in + return TRUE; +} + + +// Revert all plug-ins to default +void CMSEXPORT cmsUnregisterPlugins(void) +{ + _cmsRegisterMemHandlerPlugin(NULL); + _cmsRegisterInterpPlugin(NULL); + _cmsRegisterTagTypePlugin(NULL); + _cmsRegisterTagPlugin(NULL); + _cmsRegisterFormattersPlugin(NULL); + _cmsRegisterRenderingIntentPlugin(NULL); + _cmsRegisterParametricCurvesPlugin(NULL); + _cmsRegisterMultiProcessElementPlugin(NULL); + _cmsRegisterOptimizationPlugin(NULL); + + if (PluginPool != NULL) + _cmsSubAllocDestroy(PluginPool); + + PluginPool = NULL; +} diff --git a/src/cmsps2.c b/src/cmsps2.c new file mode 100644 index 0000000..6b0a73c --- /dev/null +++ b/src/cmsps2.c @@ -0,0 +1,1600 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + +// PostScript ColorRenderingDictionary and ColorSpaceArray + + +#define MAXPSCOLS 60 // Columns on tables + +/* + Implementation + -------------- + + PostScript does use XYZ as its internal PCS. But since PostScript + interpolation tables are limited to 8 bits, I use Lab as a way to + improve the accuracy, favoring perceptual results. So, for the creation + of each CRD, CSA the profiles are converted to Lab via a device + link between profile -> Lab or Lab -> profile. The PS code necessary to + convert Lab <-> XYZ is also included. + + + + Color Space Arrays (CSA) + ================================================================================== + + In order to obtain precision, code chooses between three ways to implement + the device -> XYZ transform. These cases identifies monochrome profiles (often + implemented as a set of curves), matrix-shaper and Pipeline-based. + + Monochrome + ----------- + + This is implemented as /CIEBasedA CSA. The prelinearization curve is + placed into /DecodeA section, and matrix equals to D50. Since here is + no interpolation tables, I do the conversion directly to XYZ + + NOTE: CLUT-based monochrome profiles are NOT supported. So, cmsFLAGS_MATRIXINPUT + flag is forced on such profiles. + + [ /CIEBasedA + << + /DecodeA { transfer function } bind + /MatrixA [D50] + /RangeLMN [ 0.0 cmsD50X 0.0 cmsD50Y 0.0 cmsD50Z ] + /WhitePoint [D50] + /BlackPoint [BP] + /RenderingIntent (intent) + >> + ] + + On simpler profiles, the PCS is already XYZ, so no conversion is required. + + + Matrix-shaper based + ------------------- + + This is implemented both with /CIEBasedABC or /CIEBasedDEF on dependig + of profile implementation. Since here there are no interpolation tables, I do + the conversion directly to XYZ + + + + [ /CIEBasedABC + << + /DecodeABC [ {transfer1} {transfer2} {transfer3} ] + /MatrixABC [Matrix] + /RangeLMN [ 0.0 cmsD50X 0.0 cmsD50Y 0.0 cmsD50Z ] + /DecodeLMN [ { / 2} dup dup ] + /WhitePoint [D50] + /BlackPoint [BP] + /RenderingIntent (intent) + >> + ] + + + CLUT based + ---------- + + Lab is used in such cases. + + [ /CIEBasedDEF + << + /DecodeDEF [ ] + /Table [ p p p [<...>]] + /RangeABC [ 0 1 0 1 0 1] + /DecodeABC[ ] + /RangeLMN [ -0.236 1.254 0 1 -0.635 1.640 ] + % -128/500 1+127/500 0 1 -127/200 1+128/200 + /MatrixABC [ 1 1 1 1 0 0 0 0 -1] + /WhitePoint [D50] + /BlackPoint [BP] + /RenderingIntent (intent) + ] + + + Color Rendering Dictionaries (CRD) + ================================== + These are always implemented as CLUT, and always are using Lab. Since CRD are expected to + be used as resources, the code adds the definition as well. + + << + /ColorRenderingType 1 + /WhitePoint [ D50 ] + /BlackPoint [BP] + /MatrixPQR [ Bradford ] + /RangePQR [-0.125 1.375 -0.125 1.375 -0.125 1.375 ] + /TransformPQR [ + {4 index 3 get div 2 index 3 get mul exch pop exch pop exch pop exch pop } bind + {4 index 4 get div 2 index 4 get mul exch pop exch pop exch pop exch pop } bind + {4 index 5 get div 2 index 5 get mul exch pop exch pop exch pop exch pop } bind + ] + /MatrixABC <...> + /EncodeABC <...> + /RangeABC <.. used for XYZ -> Lab> + /EncodeLMN + /RenderTable [ p p p [<...>]] + + /RenderingIntent (Perceptual) + >> + /Current exch /ColorRendering defineresource pop + + + The following stages are used to convert from XYZ to Lab + -------------------------------------------------------- + + Input is given at LMN stage on X, Y, Z + + Encode LMN gives us f(X/Xn), f(Y/Yn), f(Z/Zn) + + /EncodeLMN [ + + { 0.964200 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind + { 1.000000 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind + { 0.824900 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind + + ] + + + MatrixABC is used to compute f(Y/Yn), f(X/Xn) - f(Y/Yn), f(Y/Yn) - f(Z/Zn) + + | 0 1 0| + | 1 -1 0| + | 0 1 -1| + + /MatrixABC [ 0 1 0 1 -1 1 0 0 -1 ] + + EncodeABC finally gives Lab values. + + /EncodeABC [ + { 116 mul 16 sub 100 div } bind + { 500 mul 128 add 255 div } bind + { 200 mul 128 add 255 div } bind + ] + + The following stages are used to convert Lab to XYZ + ---------------------------------------------------- + + /RangeABC [ 0 1 0 1 0 1] + /DecodeABC [ { 100 mul 16 add 116 div } bind + { 255 mul 128 sub 500 div } bind + { 255 mul 128 sub 200 div } bind + ] + + /MatrixABC [ 1 1 1 1 0 0 0 0 -1] + /DecodeLMN [ + {dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse 0.964200 mul} bind + {dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse } bind + {dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse 0.824900 mul} bind + ] + + +*/ + +/* + + PostScript algorithms discussion. + ========================================================================================================= + + 1D interpolation algorithm + + + 1D interpolation (float) + ------------------------ + + val2 = Domain * Value; + + cell0 = (int) floor(val2); + cell1 = (int) ceil(val2); + + rest = val2 - cell0; + + y0 = LutTable[cell0] ; + y1 = LutTable[cell1] ; + + y = y0 + (y1 - y0) * rest; + + + + PostScript code Stack + ================================================ + + { % v + + [array] % v tab + dup % v tab tab + length 1 sub % v tab dom + + 3 -1 roll % tab dom v + + mul % tab val2 + dup % tab val2 val2 + dup % tab val2 val2 val2 + floor cvi % tab val2 val2 cell0 + exch % tab val2 cell0 val2 + ceiling cvi % tab val2 cell0 cell1 + + 3 index % tab val2 cell0 cell1 tab + exch % tab val2 cell0 tab cell1 + get % tab val2 cell0 y1 + + 4 -1 roll % val2 cell0 y1 tab + 3 -1 roll % val2 y1 tab cell0 + get % val2 y1 y0 + + dup % val2 y1 y0 y0 + 3 1 roll % val2 y0 y1 y0 + + sub % val2 y0 (y1-y0) + 3 -1 roll % y0 (y1-y0) val2 + dup % y0 (y1-y0) val2 val2 + floor cvi % y0 (y1-y0) val2 floor(val2) + sub % y0 (y1-y0) rest + mul % y0 t1 + add % y + 65535 div % result + + } bind + + +*/ + + +// This struct holds the memory block currently being write +typedef struct { + _cmsStageCLutData* Pipeline; + cmsIOHANDLER* m; + + int FirstComponent; + int SecondComponent; + + const char* PreMaj; + const char* PostMaj; + const char* PreMin; + const char* PostMin; + + int FixWhite; // Force mapping of pure white + + cmsColorSpaceSignature ColorSpace; // ColorSpace of profile + + +} cmsPsSamplerCargo; + +static int _cmsPSActualColumn = 0; + + +// Convert to byte +static +cmsUInt8Number Word2Byte(cmsUInt16Number w) +{ + return (cmsUInt8Number) floor((cmsFloat64Number) w / 257.0 + 0.5); +} + + +// Convert to byte (using ICC2 notation) +/* +static +cmsUInt8Number L2Byte(cmsUInt16Number w) +{ + int ww = w + 0x0080; + + if (ww > 0xFFFF) return 0xFF; + + return (cmsUInt8Number) ((cmsUInt16Number) (ww >> 8) & 0xFF); +} +*/ + +// Write a cooked byte + +static +void WriteByte(cmsIOHANDLER* m, cmsUInt8Number b) +{ + _cmsIOPrintf(m, "%02x", b); + _cmsPSActualColumn += 2; + + if (_cmsPSActualColumn > MAXPSCOLS) { + + _cmsIOPrintf(m, "\n"); + _cmsPSActualColumn = 0; + } +} + +// ----------------------------------------------------------------- PostScript generation + + +// Removes offending Carriage returns +static +char* RemoveCR(const char* txt) +{ + static char Buffer[2048]; + char* pt; + + strncpy(Buffer, txt, 2047); + Buffer[2047] = 0; + for (pt = Buffer; *pt; pt++) + if (*pt == '\n' || *pt == '\r') *pt = ' '; + + return Buffer; + +} + +static +void EmitHeader(cmsIOHANDLER* m, const char* Title, cmsHPROFILE hProfile) +{ + time_t timer; + cmsMLU *Description, *Copyright; + char DescASCII[256], CopyrightASCII[256]; + + time(&timer); + + Description = (cmsMLU*) cmsReadTag(hProfile, cmsSigProfileDescriptionTag); + Copyright = (cmsMLU*) cmsReadTag(hProfile, cmsSigCopyrightTag); + + DescASCII[0] = DescASCII[255] = 0; + CopyrightASCII[0] = CopyrightASCII[255] = 0; + + if (Description != NULL) cmsMLUgetASCII(Description, cmsNoLanguage, cmsNoCountry, DescASCII, 255); + if (Copyright != NULL) cmsMLUgetASCII(Copyright, cmsNoLanguage, cmsNoCountry, CopyrightASCII, 255); + + _cmsIOPrintf(m, "%%!PS-Adobe-3.0\n"); + _cmsIOPrintf(m, "%%\n"); + _cmsIOPrintf(m, "%% %s\n", Title); + _cmsIOPrintf(m, "%% Source: %s\n", RemoveCR(DescASCII)); + _cmsIOPrintf(m, "%% %s\n", RemoveCR(CopyrightASCII)); + _cmsIOPrintf(m, "%% Created: %s", ctime(&timer)); // ctime appends a \n!!! + _cmsIOPrintf(m, "%%\n"); + _cmsIOPrintf(m, "%%%%BeginResource\n"); + +} + + +// Emits White & Black point. White point is always D50, Black point is the device +// Black point adapted to D50. + +static +void EmitWhiteBlackD50(cmsIOHANDLER* m, cmsCIEXYZ* BlackPoint) +{ + + _cmsIOPrintf(m, "/BlackPoint [%f %f %f]\n", BlackPoint -> X, + BlackPoint -> Y, + BlackPoint -> Z); + + _cmsIOPrintf(m, "/WhitePoint [%f %f %f]\n", cmsD50_XYZ()->X, + cmsD50_XYZ()->Y, + cmsD50_XYZ()->Z); +} + + +static +void EmitRangeCheck(cmsIOHANDLER* m) +{ + _cmsIOPrintf(m, "dup 0.0 lt { pop 0.0 } if " + "dup 1.0 gt { pop 1.0 } if "); + +} + +// Does write the intent + +static +void EmitIntent(cmsIOHANDLER* m, int RenderingIntent) +{ + const char *intent; + + switch (RenderingIntent) { + + case INTENT_PERCEPTUAL: intent = "Perceptual"; break; + case INTENT_RELATIVE_COLORIMETRIC: intent = "RelativeColorimetric"; break; + case INTENT_ABSOLUTE_COLORIMETRIC: intent = "AbsoluteColorimetric"; break; + case INTENT_SATURATION: intent = "Saturation"; break; + + default: intent = "Undefined"; break; + } + + _cmsIOPrintf(m, "/RenderingIntent (%s)\n", intent ); +} + +// +// Convert L* to Y +// +// Y = Yn*[ (L* + 16) / 116] ^ 3 if (L*) >= 6 / 29 +// = Yn*( L* / 116) / 7.787 if (L*) < 6 / 29 +// + +/* +static +void EmitL2Y(cmsIOHANDLER* m) +{ + _cmsIOPrintf(m, + "{ " + "100 mul 16 add 116 div " // (L * 100 + 16) / 116 + "dup 6 29 div ge " // >= 6 / 29 ? + "{ dup dup mul mul } " // yes, ^3 and done + "{ 4 29 div sub 108 841 div mul } " // no, slope limiting + "ifelse } bind "); +} +*/ + + +// Lab -> XYZ, see the discussion above + +static +void EmitLab2XYZ(cmsIOHANDLER* m) +{ + _cmsIOPrintf(m, "/RangeABC [ 0 1 0 1 0 1]\n"); + _cmsIOPrintf(m, "/DecodeABC [\n"); + _cmsIOPrintf(m, "{100 mul 16 add 116 div } bind\n"); + _cmsIOPrintf(m, "{255 mul 128 sub 500 div } bind\n"); + _cmsIOPrintf(m, "{255 mul 128 sub 200 div } bind\n"); + _cmsIOPrintf(m, "]\n"); + _cmsIOPrintf(m, "/MatrixABC [ 1 1 1 1 0 0 0 0 -1]\n"); + _cmsIOPrintf(m, "/RangeLMN [ -0.236 1.254 0 1 -0.635 1.640 ]\n"); + _cmsIOPrintf(m, "/DecodeLMN [\n"); + _cmsIOPrintf(m, "{dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse 0.964200 mul} bind\n"); + _cmsIOPrintf(m, "{dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse } bind\n"); + _cmsIOPrintf(m, "{dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse 0.824900 mul} bind\n"); + _cmsIOPrintf(m, "]\n"); +} + + + +// Outputs a table of words. It does use 16 bits + +static +void Emit1Gamma(cmsIOHANDLER* m, cmsToneCurve* Table) +{ + cmsUInt32Number i; + cmsFloat64Number gamma; + + if (Table == NULL) return; // Error + + if (Table ->nEntries <= 0) return; // Empty table + + // Suppress whole if identity + if (cmsIsToneCurveLinear(Table)) return; + + // Check if is really an exponential. If so, emit "exp" + gamma = cmsEstimateGamma(Table, 0.001); + if (gamma > 0) { + _cmsIOPrintf(m, "{ %g exp } bind ", gamma); + return; + } + + _cmsIOPrintf(m, "{ "); + + // Bounds check + EmitRangeCheck(m); + + // Emit intepolation code + + // PostScript code Stack + // =============== ======================== + // v + _cmsIOPrintf(m, " ["); + + for (i=0; i < Table->nEntries; i++) { + _cmsIOPrintf(m, "%d ", Table->Table16[i]); + } + + _cmsIOPrintf(m, "] "); // v tab + + _cmsIOPrintf(m, "dup "); // v tab tab + _cmsIOPrintf(m, "length 1 sub "); // v tab dom + _cmsIOPrintf(m, "3 -1 roll "); // tab dom v + _cmsIOPrintf(m, "mul "); // tab val2 + _cmsIOPrintf(m, "dup "); // tab val2 val2 + _cmsIOPrintf(m, "dup "); // tab val2 val2 val2 + _cmsIOPrintf(m, "floor cvi "); // tab val2 val2 cell0 + _cmsIOPrintf(m, "exch "); // tab val2 cell0 val2 + _cmsIOPrintf(m, "ceiling cvi "); // tab val2 cell0 cell1 + _cmsIOPrintf(m, "3 index "); // tab val2 cell0 cell1 tab + _cmsIOPrintf(m, "exch "); // tab val2 cell0 tab cell1 + _cmsIOPrintf(m, "get "); // tab val2 cell0 y1 + _cmsIOPrintf(m, "4 -1 roll "); // val2 cell0 y1 tab + _cmsIOPrintf(m, "3 -1 roll "); // val2 y1 tab cell0 + _cmsIOPrintf(m, "get "); // val2 y1 y0 + _cmsIOPrintf(m, "dup "); // val2 y1 y0 y0 + _cmsIOPrintf(m, "3 1 roll "); // val2 y0 y1 y0 + _cmsIOPrintf(m, "sub "); // val2 y0 (y1-y0) + _cmsIOPrintf(m, "3 -1 roll "); // y0 (y1-y0) val2 + _cmsIOPrintf(m, "dup "); // y0 (y1-y0) val2 val2 + _cmsIOPrintf(m, "floor cvi "); // y0 (y1-y0) val2 floor(val2) + _cmsIOPrintf(m, "sub "); // y0 (y1-y0) rest + _cmsIOPrintf(m, "mul "); // y0 t1 + _cmsIOPrintf(m, "add "); // y + _cmsIOPrintf(m, "65535 div "); // result + + _cmsIOPrintf(m, " } bind "); +} + + +// Compare gamma table + +static +cmsBool GammaTableEquals(cmsUInt16Number* g1, cmsUInt16Number* g2, int nEntries) +{ + return memcmp(g1, g2, nEntries* sizeof(cmsUInt16Number)) == 0; +} + + +// Does write a set of gamma curves + +static +void EmitNGamma(cmsIOHANDLER* m, int n, cmsToneCurve* g[]) +{ + int i; + + for( i=0; i < n; i++ ) + { + if (g[i] == NULL) return; // Error + + if (i > 0 && GammaTableEquals(g[i-1]->Table16, g[i]->Table16, g[i]->nEntries)) { + + _cmsIOPrintf(m, "dup "); + } + else { + Emit1Gamma(m, g[i]); + } + } + +} + + + + + +// Following code dumps a LUT onto memory stream + + +// This is the sampler. Intended to work in SAMPLER_INSPECT mode, +// that is, the callback will be called for each knot with +// +// In[] The grid location coordinates, normalized to 0..ffff +// Out[] The Pipeline values, normalized to 0..ffff +// +// Returning a value other than 0 does terminate the sampling process +// +// Each row contains Pipeline values for all but first component. So, I +// detect row changing by keeping a copy of last value of first +// component. -1 is used to mark begining of whole block. + +static +int OutputValueSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +{ + cmsPsSamplerCargo* sc = (cmsPsSamplerCargo*) Cargo; + cmsUInt32Number i; + + + if (sc -> FixWhite) { + + if (In[0] == 0xFFFF) { // Only in L* = 100, ab = [-8..8] + + if ((In[1] >= 0x7800 && In[1] <= 0x8800) && + (In[2] >= 0x7800 && In[2] <= 0x8800)) { + + cmsUInt16Number* Black; + cmsUInt16Number* White; + cmsUInt32Number nOutputs; + + if (!_cmsEndPointsBySpace(sc ->ColorSpace, &White, &Black, &nOutputs)) + return 0; + + for (i=0; i < nOutputs; i++) + Out[i] = White[i]; + } + + + } + } + + + // Hadle the parenthesis on rows + + if (In[0] != sc ->FirstComponent) { + + if (sc ->FirstComponent != -1) { + + _cmsIOPrintf(sc ->m, sc ->PostMin); + sc ->SecondComponent = -1; + _cmsIOPrintf(sc ->m, sc ->PostMaj); + } + + // Begin block + _cmsPSActualColumn = 0; + + _cmsIOPrintf(sc ->m, sc ->PreMaj); + sc ->FirstComponent = In[0]; + } + + + if (In[1] != sc ->SecondComponent) { + + if (sc ->SecondComponent != -1) { + + _cmsIOPrintf(sc ->m, sc ->PostMin); + } + + _cmsIOPrintf(sc ->m, sc ->PreMin); + sc ->SecondComponent = In[1]; + } + + // Dump table. + + for (i=0; i < sc -> Pipeline ->Params->nOutputs; i++) { + + cmsUInt16Number wWordOut = Out[i]; + cmsUInt8Number wByteOut; // Value as byte + + + // We always deal with Lab4 + + wByteOut = Word2Byte(wWordOut); + WriteByte(sc -> m, wByteOut); + } + + return 1; +} + +// Writes a Pipeline on memstream. Could be 8 or 16 bits based + +static +void WriteCLUT(cmsIOHANDLER* m, cmsStage* mpe, const char* PreMaj, + const char* PostMaj, + const char* PreMin, + const char* PostMin, + int FixWhite, + cmsColorSpaceSignature ColorSpace) +{ + cmsUInt32Number i; + cmsPsSamplerCargo sc; + + sc.FirstComponent = -1; + sc.SecondComponent = -1; + sc.Pipeline = (_cmsStageCLutData *) mpe ->Data; + sc.m = m; + sc.PreMaj = PreMaj; + sc.PostMaj= PostMaj; + + sc.PreMin = PreMin; + sc.PostMin = PostMin; + sc.FixWhite = FixWhite; + sc.ColorSpace = ColorSpace; + + _cmsIOPrintf(m, "["); + + for (i=0; i < sc.Pipeline->Params->nInputs; i++) + _cmsIOPrintf(m, " %d ", sc.Pipeline->Params->nSamples[i]); + + _cmsIOPrintf(m, " [\n"); + + cmsStageSampleCLut16bit(mpe, OutputValueSampler, (void*) &sc, SAMPLER_INSPECT); + + _cmsIOPrintf(m, PostMin); + _cmsIOPrintf(m, PostMaj); + _cmsIOPrintf(m, "] "); + +} + + +// Dumps CIEBasedA Color Space Array + +static +int EmitCIEBasedA(cmsIOHANDLER* m, cmsToneCurve* Curve, cmsCIEXYZ* BlackPoint) +{ + + _cmsIOPrintf(m, "[ /CIEBasedA\n"); + _cmsIOPrintf(m, " <<\n"); + + _cmsIOPrintf(m, "/DecodeA "); + + Emit1Gamma(m, Curve); + + _cmsIOPrintf(m, " \n"); + + _cmsIOPrintf(m, "/MatrixA [ 0.9642 1.0000 0.8249 ]\n"); + _cmsIOPrintf(m, "/RangeLMN [ 0.0 0.9642 0.0 1.0000 0.0 0.8249 ]\n"); + + EmitWhiteBlackD50(m, BlackPoint); + EmitIntent(m, INTENT_PERCEPTUAL); + + _cmsIOPrintf(m, ">>\n"); + _cmsIOPrintf(m, "]\n"); + + return 1; +} + + +// Dumps CIEBasedABC Color Space Array + +static +int EmitCIEBasedABC(cmsIOHANDLER* m, cmsFloat64Number* Matrix, cmsToneCurve** CurveSet, cmsCIEXYZ* BlackPoint) +{ + int i; + + _cmsIOPrintf(m, "[ /CIEBasedABC\n"); + _cmsIOPrintf(m, "<<\n"); + _cmsIOPrintf(m, "/DecodeABC [ "); + + EmitNGamma(m, 3, CurveSet); + + _cmsIOPrintf(m, "]\n"); + + _cmsIOPrintf(m, "/MatrixABC [ " ); + + for( i=0; i < 3; i++ ) { + + _cmsIOPrintf(m, "%.6f %.6f %.6f ", Matrix[i + 3*0], + Matrix[i + 3*1], + Matrix[i + 3*2]); + } + + + _cmsIOPrintf(m, "]\n"); + + _cmsIOPrintf(m, "/RangeLMN [ 0.0 0.9642 0.0 1.0000 0.0 0.8249 ]\n"); + + EmitWhiteBlackD50(m, BlackPoint); + EmitIntent(m, INTENT_PERCEPTUAL); + + _cmsIOPrintf(m, ">>\n"); + _cmsIOPrintf(m, "]\n"); + + + return 1; +} + + +static +int EmitCIEBasedDEF(cmsIOHANDLER* m, cmsPipeline* Pipeline, int Intent, cmsCIEXYZ* BlackPoint) +{ + const char* PreMaj; + const char* PostMaj; + const char* PreMin, *PostMin; + cmsStage* mpe; + + mpe = Pipeline ->Elements; + + + switch (cmsStageInputChannels(mpe)) { + case 3: + + _cmsIOPrintf(m, "[ /CIEBasedDEF\n"); + PreMaj ="<"; + PostMaj= ">\n"; + PreMin = PostMin = ""; + break; + case 4: + _cmsIOPrintf(m, "[ /CIEBasedDEFG\n"); + PreMaj = "["; + PostMaj = "]\n"; + PreMin = "<"; + PostMin = ">\n"; + break; + default: + return 0; + + } + + _cmsIOPrintf(m, "<<\n"); + + if (cmsStageType(mpe) == cmsSigCurveSetElemType) { + + _cmsIOPrintf(m, "/DecodeDEF [ "); + EmitNGamma(m, cmsStageOutputChannels(mpe), _cmsStageGetPtrToCurveSet(mpe)); + _cmsIOPrintf(m, "]\n"); + + mpe = mpe ->Next; + } + + + + if (cmsStageType(mpe) == cmsSigCLutElemType) { + + _cmsIOPrintf(m, "/Table "); + WriteCLUT(m, mpe, PreMaj, PostMaj, PreMin, PostMin, FALSE, (cmsColorSpaceSignature) 0); + _cmsIOPrintf(m, "]\n"); + } + + EmitLab2XYZ(m); + EmitWhiteBlackD50(m, BlackPoint); + EmitIntent(m, Intent); + + _cmsIOPrintf(m, " >>\n"); + _cmsIOPrintf(m, "]\n"); + + + return 1; +} + +// Generates a curve from a gray profile + +static + cmsToneCurve* ExtractGray2Y(cmsContext ContextID, cmsHPROFILE hProfile, int Intent) +{ + cmsToneCurve* Out = cmsBuildTabulatedToneCurve16(ContextID, 256, NULL); + cmsHPROFILE hXYZ = cmsCreateXYZProfile(); + cmsHTRANSFORM xform = cmsCreateTransformTHR(ContextID, hProfile, TYPE_GRAY_8, hXYZ, TYPE_XYZ_DBL, Intent, cmsFLAGS_NOOPTIMIZE); + int i; + + if (Out != NULL) { + for (i=0; i < 256; i++) { + + cmsUInt8Number Gray = (cmsUInt8Number) i; + cmsCIEXYZ XYZ; + + cmsDoTransform(xform, &Gray, &XYZ, 1); + + Out ->Table16[i] =_cmsQuickSaturateWord(XYZ.Y * 65535.0); + } + } + + cmsDeleteTransform(xform); + cmsCloseProfile(hXYZ); + return Out; +} + + + +// Because PostScript has only 8 bits in /Table, we should use +// a more perceptually uniform space... I do choose Lab. + +static +int WriteInputLUT(cmsIOHANDLER* m, cmsHPROFILE hProfile, int Intent, cmsUInt32Number dwFlags) +{ + cmsHPROFILE hLab; + cmsHTRANSFORM xform; + cmsUInt32Number nChannels; + cmsUInt32Number InputFormat; + int rc; + cmsHPROFILE Profiles[2]; + cmsCIEXYZ BlackPointAdaptedToD50; + + // Does create a device-link based transform. + // The DeviceLink is next dumped as working CSA. + + InputFormat = cmsFormatterForColorspaceOfProfile(hProfile, 2, FALSE); + nChannels = T_CHANNELS(InputFormat); + + + cmsDetectBlackPoint(&BlackPointAdaptedToD50, hProfile, Intent, 0); + + // Adjust output to Lab4 + hLab = cmsCreateLab4ProfileTHR(m ->ContextID, NULL); + + Profiles[0] = hProfile; + Profiles[1] = hLab; + + xform = cmsCreateMultiprofileTransform(Profiles, 2, InputFormat, TYPE_Lab_DBL, Intent, 0); + cmsCloseProfile(hLab); + + if (xform == NULL) { + + cmsSignalError(m ->ContextID, cmsERROR_COLORSPACE_CHECK, "Cannot create transform Profile -> Lab"); + return 0; + } + + // Only 1, 3 and 4 channels are allowed + + switch (nChannels) { + + case 1: { + cmsToneCurve* Gray2Y = ExtractGray2Y(m ->ContextID, hProfile, Intent); + EmitCIEBasedA(m, Gray2Y, &BlackPointAdaptedToD50); + cmsFreeToneCurve(Gray2Y); + } + break; + + case 3: + case 4: { + cmsUInt32Number OutFrm = TYPE_Lab_16; + cmsPipeline* DeviceLink; + _cmsTRANSFORM* v = (_cmsTRANSFORM*) xform; + + DeviceLink = cmsPipelineDup(v ->Lut); + if (DeviceLink == NULL) return 0; + + dwFlags |= cmsFLAGS_FORCE_CLUT; + _cmsOptimizePipeline(&DeviceLink, Intent, &InputFormat, &OutFrm, &dwFlags); + + rc = EmitCIEBasedDEF(m, DeviceLink, Intent, &BlackPointAdaptedToD50); + cmsPipelineFree(DeviceLink); + } + break; + + default: + + cmsSignalError(m ->ContextID, cmsERROR_COLORSPACE_CHECK, "Only 3, 4 channels supported for CSA. This profile has %d channels.", nChannels); + return 0; + } + + + cmsDeleteTransform(xform); + + return 1; +} + +static +cmsFloat64Number* GetPtrToMatrix(const cmsStage* mpe) +{ + _cmsStageMatrixData* Data = (_cmsStageMatrixData*) mpe ->Data; + + return Data -> Double; +} + + +// Does create CSA based on matrix-shaper. Allowed types are gray and RGB based + +static + int WriteInputMatrixShaper(cmsIOHANDLER* m, cmsHPROFILE hProfile, cmsStage* Matrix, cmsStage* Shaper) +{ + cmsColorSpaceSignature ColorSpace; + int rc; + cmsCIEXYZ BlackPointAdaptedToD50; + + ColorSpace = cmsGetColorSpace(hProfile); + + cmsDetectBlackPoint(&BlackPointAdaptedToD50, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); + + if (ColorSpace == cmsSigGrayData) { + + cmsToneCurve** ShaperCurve = _cmsStageGetPtrToCurveSet(Shaper); + rc = EmitCIEBasedA(m, ShaperCurve[0], &BlackPointAdaptedToD50); + + } + else + if (ColorSpace == cmsSigRgbData) { + + cmsMAT3 Mat; + int i, j; + + memmove(&Mat, GetPtrToMatrix(Matrix), sizeof(Mat)); + + for (i=0; i < 3; i++) + for (j=0; j < 3; j++) + Mat.v[i].n[j] *= MAX_ENCODEABLE_XYZ; + + rc = EmitCIEBasedABC(m, (cmsFloat64Number *) &Mat, + _cmsStageGetPtrToCurveSet(Shaper), + &BlackPointAdaptedToD50); + } + else { + + cmsSignalError(m ->ContextID, cmsERROR_COLORSPACE_CHECK, "Profile is not suitable for CSA. Unsupported colorspace."); + return 0; + } + + return rc; +} + + + +// Creates a PostScript color list from a named profile data. +// This is a HP extension, and it works in Lab instead of XYZ + +static +int WriteNamedColorCSA(cmsIOHANDLER* m, cmsHPROFILE hNamedColor, int Intent) +{ + cmsHTRANSFORM xform; + cmsHPROFILE hLab; + int i, nColors; + char ColorName[32]; + cmsNAMEDCOLORLIST* NamedColorList; + + hLab = cmsCreateLab4ProfileTHR(m ->ContextID, NULL); + xform = cmsCreateTransform(hNamedColor, TYPE_NAMED_COLOR_INDEX, hLab, TYPE_Lab_DBL, Intent, 0); + if (xform == NULL) return 0; + + NamedColorList = cmsGetNamedColorList(xform); + if (NamedColorList == NULL) return 0; + + _cmsIOPrintf(m, "<<\n"); + _cmsIOPrintf(m, "(colorlistcomment) (%s)\n", "Named color CSA"); + _cmsIOPrintf(m, "(Prefix) [ (Pantone ) (PANTONE ) ]\n"); + _cmsIOPrintf(m, "(Suffix) [ ( CV) ( CVC) ( C) ]\n"); + + nColors = cmsNamedColorCount(NamedColorList); + + + for (i=0; i < nColors; i++) { + + cmsUInt16Number In[1]; + cmsCIELab Lab; + + In[0] = (cmsUInt16Number) i; + + if (!cmsNamedColorInfo(NamedColorList, i, ColorName, NULL, NULL, NULL, NULL)) + continue; + + cmsDoTransform(xform, In, &Lab, 1); + _cmsIOPrintf(m, " (%s) [ %.3f %.3f %.3f ]\n", ColorName, Lab.L, Lab.a, Lab.b); + } + + + + _cmsIOPrintf(m, ">>\n"); + + cmsDeleteTransform(xform); + cmsCloseProfile(hLab); + return 1; +} + + +// Does create a Color Space Array on XYZ colorspace for PostScript usage +static +cmsUInt32Number GenerateCSA(cmsContext ContextID, + cmsHPROFILE hProfile, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags, + cmsIOHANDLER* mem) +{ + cmsUInt32Number dwBytesUsed; + cmsPipeline* lut = NULL; + cmsStage* Matrix, *Shaper; + + + // Is a named color profile? + if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) { + + if (!WriteNamedColorCSA(mem, hProfile, Intent)) goto Error; + } + else { + + + // Any profile class are allowed (including devicelink), but + // output (PCS) colorspace must be XYZ or Lab + cmsColorSpaceSignature ColorSpace = cmsGetPCS(hProfile); + + if (ColorSpace != cmsSigXYZData && + ColorSpace != cmsSigLabData) { + + cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "Invalid output color space"); + goto Error; + } + + + // Read the lut with all necessary conversion stages + lut = _cmsReadInputLUT(hProfile, Intent); + if (lut == NULL) goto Error; + + + // Tone curves + matrix can be implemented without any LUT + if (cmsPipelineCheckAndRetreiveStages(lut, 2, cmsSigCurveSetElemType, cmsSigMatrixElemType, &Shaper, &Matrix)) { + + if (!WriteInputMatrixShaper(mem, hProfile, Matrix, Shaper)) goto Error; + + } + else { + // We need a LUT for the rest + if (!WriteInputLUT(mem, hProfile, Intent, dwFlags)) goto Error; + } + } + + + // Done, keep memory usage + dwBytesUsed = mem ->UsedSpace; + + // Get rid of LUT + if (lut != NULL) cmsPipelineFree(lut); + + // Finally, return used byte count + return dwBytesUsed; + +Error: + if (lut != NULL) cmsPipelineFree(lut); + return 0; +} + +// ------------------------------------------------------ Color Rendering Dictionary (CRD) + + + +/* + + Black point compensation plus chromatic adaptation: + + Step 1 - Chromatic adaptation + ============================= + + WPout + X = ------- PQR + Wpin + + Step 2 - Black point compensation + ================================= + + (WPout - BPout)*X - WPout*(BPin - BPout) + out = --------------------------------------- + WPout - BPin + + + Algorithm discussion + ==================== + + TransformPQR(WPin, BPin, WPout, BPout, PQR) + + Wpin,etc= { Xws Yws Zws Pws Qws Rws } + + + Algorithm Stack 0...n + =========================================================== + PQR BPout WPout BPin WPin + 4 index 3 get WPin PQR BPout WPout BPin WPin + div (PQR/WPin) BPout WPout BPin WPin + 2 index 3 get WPout (PQR/WPin) BPout WPout BPin WPin + mult WPout*(PQR/WPin) BPout WPout BPin WPin + + 2 index 3 get WPout WPout*(PQR/WPin) BPout WPout BPin WPin + 2 index 3 get BPout WPout WPout*(PQR/WPin) BPout WPout BPin WPin + sub (WPout-BPout) WPout*(PQR/WPin) BPout WPout BPin WPin + mult (WPout-BPout)* WPout*(PQR/WPin) BPout WPout BPin WPin + + 2 index 3 get WPout (BPout-WPout)* WPout*(PQR/WPin) BPout WPout BPin WPin + 4 index 3 get BPin WPout (BPout-WPout)* WPout*(PQR/WPin) BPout WPout BPin WPin + 3 index 3 get BPout BPin WPout (BPout-WPout)* WPout*(PQR/WPin) BPout WPout BPin WPin + + sub (BPin-BPout) WPout (BPout-WPout)* WPout*(PQR/WPin) BPout WPout BPin WPin + mult (BPin-BPout)*WPout (BPout-WPout)* WPout*(PQR/WPin) BPout WPout BPin WPin + sub (BPout-WPout)* WPout*(PQR/WPin)-(BPin-BPout)*WPout BPout WPout BPin WPin + + 3 index 3 get BPin (BPout-WPout)* WPout*(PQR/WPin)-(BPin-BPout)*WPout BPout WPout BPin WPin + 3 index 3 get WPout BPin (BPout-WPout)* WPout*(PQR/WPin)-(BPin-BPout)*WPout BPout WPout BPin WPin + exch + sub (WPout-BPin) (BPout-WPout)* WPout*(PQR/WPin)-(BPin-BPout)*WPout BPout WPout BPin WPin + div + + exch pop + exch pop + exch pop + exch pop + +*/ + + +static +void EmitPQRStage(cmsIOHANDLER* m, cmsHPROFILE hProfile, int DoBPC, int lIsAbsolute) +{ + + + if (lIsAbsolute) { + + // For absolute colorimetric intent, encode back to relative + // and generate a relative Pipeline + + // Relative encoding is obtained across XYZpcs*(D50/WhitePoint) + + cmsCIEXYZ White; + + _cmsReadMediaWhitePoint(&White, hProfile); + + _cmsIOPrintf(m,"/MatrixPQR [1 0 0 0 1 0 0 0 1 ]\n"); + _cmsIOPrintf(m,"/RangePQR [ -0.5 2 -0.5 2 -0.5 2 ]\n"); + + _cmsIOPrintf(m, "%% Absolute colorimetric -- encode to relative to maximize LUT usage\n" + "/TransformPQR [\n" + "{0.9642 mul %g div exch pop exch pop exch pop exch pop} bind\n" + "{1.0000 mul %g div exch pop exch pop exch pop exch pop} bind\n" + "{0.8249 mul %g div exch pop exch pop exch pop exch pop} bind\n]\n", + White.X, White.Y, White.Z); + return; + } + + + _cmsIOPrintf(m,"%% Bradford Cone Space\n" + "/MatrixPQR [0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296 ] \n"); + + _cmsIOPrintf(m, "/RangePQR [ -0.5 2 -0.5 2 -0.5 2 ]\n"); + + + // No BPC + + if (!DoBPC) { + + _cmsIOPrintf(m, "%% VonKries-like transform in Bradford Cone Space\n" + "/TransformPQR [\n" + "{exch pop exch 3 get mul exch pop exch 3 get div} bind\n" + "{exch pop exch 4 get mul exch pop exch 4 get div} bind\n" + "{exch pop exch 5 get mul exch pop exch 5 get div} bind\n]\n"); + } else { + + // BPC + + _cmsIOPrintf(m, "%% VonKries-like transform in Bradford Cone Space plus BPC\n" + "/TransformPQR [\n"); + + _cmsIOPrintf(m, "{4 index 3 get div 2 index 3 get mul " + "2 index 3 get 2 index 3 get sub mul " + "2 index 3 get 4 index 3 get 3 index 3 get sub mul sub " + "3 index 3 get 3 index 3 get exch sub div " + "exch pop exch pop exch pop exch pop } bind\n"); + + _cmsIOPrintf(m, "{4 index 4 get div 2 index 4 get mul " + "2 index 4 get 2 index 4 get sub mul " + "2 index 4 get 4 index 4 get 3 index 4 get sub mul sub " + "3 index 4 get 3 index 4 get exch sub div " + "exch pop exch pop exch pop exch pop } bind\n"); + + _cmsIOPrintf(m, "{4 index 5 get div 2 index 5 get mul " + "2 index 5 get 2 index 5 get sub mul " + "2 index 5 get 4 index 5 get 3 index 5 get sub mul sub " + "3 index 5 get 3 index 5 get exch sub div " + "exch pop exch pop exch pop exch pop } bind\n]\n"); + + } + + +} + + +static +void EmitXYZ2Lab(cmsIOHANDLER* m) +{ + _cmsIOPrintf(m, "/RangeLMN [ -0.635 2.0 0 2 -0.635 2.0 ]\n"); + _cmsIOPrintf(m, "/EncodeLMN [\n"); + _cmsIOPrintf(m, "{ 0.964200 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind\n"); + _cmsIOPrintf(m, "{ 1.000000 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind\n"); + _cmsIOPrintf(m, "{ 0.824900 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind\n"); + _cmsIOPrintf(m, "]\n"); + _cmsIOPrintf(m, "/MatrixABC [ 0 1 0 1 -1 1 0 0 -1 ]\n"); + _cmsIOPrintf(m, "/EncodeABC [\n"); + + + _cmsIOPrintf(m, "{ 116 mul 16 sub 100 div } bind\n"); + _cmsIOPrintf(m, "{ 500 mul 128 add 256 div } bind\n"); + _cmsIOPrintf(m, "{ 200 mul 128 add 256 div } bind\n"); + + + _cmsIOPrintf(m, "]\n"); + + +} + +// Due to impedance mismatch between XYZ and almost all RGB and CMYK spaces +// I choose to dump LUTS in Lab instead of XYZ. There is still a lot of wasted +// space on 3D CLUT, but since space seems not to be a problem here, 33 points +// would give a reasonable accurancy. Note also that CRD tables must operate in +// 8 bits. + +static +int WriteOutputLUT(cmsIOHANDLER* m, cmsHPROFILE hProfile, int Intent, cmsUInt32Number dwFlags) +{ + cmsHPROFILE hLab; + cmsHTRANSFORM xform; + int i, nChannels; + cmsUInt32Number OutputFormat; + _cmsTRANSFORM* v; + cmsPipeline* DeviceLink; + cmsHPROFILE Profiles[3]; + cmsCIEXYZ BlackPointAdaptedToD50; + cmsBool lDoBPC = (dwFlags & cmsFLAGS_BLACKPOINTCOMPENSATION); + cmsBool lFixWhite = !(dwFlags & cmsFLAGS_NOWHITEONWHITEFIXUP); + cmsUInt32Number InFrm = TYPE_Lab_16; + int RelativeEncodingIntent; + cmsColorSpaceSignature ColorSpace; + + + hLab = cmsCreateLab4ProfileTHR(m ->ContextID, NULL); + if (hLab == NULL) return 0; + + OutputFormat = cmsFormatterForColorspaceOfProfile(hProfile, 2, FALSE); + nChannels = T_CHANNELS(OutputFormat); + + ColorSpace = cmsGetColorSpace(hProfile); + + // For absolute colorimetric, the LUT is encoded as relative in order to preserve precision. + + RelativeEncodingIntent = Intent; + if (RelativeEncodingIntent == INTENT_ABSOLUTE_COLORIMETRIC) + RelativeEncodingIntent = INTENT_RELATIVE_COLORIMETRIC; + + + // Use V4 Lab always + Profiles[0] = hLab; + Profiles[1] = hProfile; + + xform = cmsCreateMultiprofileTransformTHR(m ->ContextID, + Profiles, 2, TYPE_Lab_DBL, + OutputFormat, RelativeEncodingIntent, 0); + cmsCloseProfile(hLab); + + if (xform == NULL) { + + cmsSignalError(m ->ContextID, cmsERROR_COLORSPACE_CHECK, "Cannot create transform Lab -> Profile in CRD creation"); + return 0; + } + + // Get a copy of the internal devicelink + v = (_cmsTRANSFORM*) xform; + DeviceLink = cmsPipelineDup(v ->Lut); + if (DeviceLink == NULL) return 0; + + + // We need a CLUT + dwFlags |= cmsFLAGS_FORCE_CLUT; + _cmsOptimizePipeline(&DeviceLink, RelativeEncodingIntent, &InFrm, &OutputFormat, &dwFlags); + + _cmsIOPrintf(m, "<<\n"); + _cmsIOPrintf(m, "/ColorRenderingType 1\n"); + + + cmsDetectBlackPoint(&BlackPointAdaptedToD50, hProfile, Intent, 0); + + // Emit headers, etc. + EmitWhiteBlackD50(m, &BlackPointAdaptedToD50); + EmitPQRStage(m, hProfile, lDoBPC, Intent == INTENT_ABSOLUTE_COLORIMETRIC); + EmitXYZ2Lab(m); + + + // FIXUP: map Lab (100, 0, 0) to perfect white, because the particular encoding for Lab + // does map a=b=0 not falling into any specific node. Since range a,b goes -128..127, + // zero is slightly moved towards right, so assure next node (in L=100 slice) is mapped to + // zero. This would sacrifice a bit of highlights, but failure to do so would cause + // scum dot. Ouch. + + if (Intent == INTENT_ABSOLUTE_COLORIMETRIC) + lFixWhite = FALSE; + + _cmsIOPrintf(m, "/RenderTable "); + + + WriteCLUT(m, cmsPipelineGetPtrToFirstStage(DeviceLink), "<", ">\n", "", "", lFixWhite, ColorSpace); + + _cmsIOPrintf(m, " %d {} bind ", nChannels); + + for (i=1; i < nChannels; i++) + _cmsIOPrintf(m, "dup "); + + _cmsIOPrintf(m, "]\n"); + + + EmitIntent(m, Intent); + + _cmsIOPrintf(m, ">>\n"); + + if (!(dwFlags & cmsFLAGS_NODEFAULTRESOURCEDEF)) { + + _cmsIOPrintf(m, "/Current exch /ColorRendering defineresource pop\n"); + } + + cmsPipelineFree(DeviceLink); + cmsDeleteTransform(xform); + + return 1; +} + + +// Builds a ASCII string containing colorant list in 0..1.0 range +static +void BuildColorantList(char *Colorant, int nColorant, cmsUInt16Number Out[]) +{ + char Buff[32]; + int j; + + Colorant[0] = 0; + if (nColorant > cmsMAXCHANNELS) + nColorant = cmsMAXCHANNELS; + + for (j=0; j < nColorant; j++) { + + sprintf(Buff, "%.3f", Out[j] / 65535.0); + strcat(Colorant, Buff); + if (j < nColorant -1) + strcat(Colorant, " "); + + } +} + + +// Creates a PostScript color list from a named profile data. +// This is a HP extension. + +static +int WriteNamedColorCRD(cmsIOHANDLER* m, cmsHPROFILE hNamedColor, int Intent, cmsUInt32Number dwFlags) +{ + cmsHTRANSFORM xform; + int i, nColors, nColorant; + cmsUInt32Number OutputFormat; + char ColorName[32]; + char Colorant[128]; + cmsNAMEDCOLORLIST* NamedColorList; + + + OutputFormat = cmsFormatterForColorspaceOfProfile(hNamedColor, 2, FALSE); + nColorant = T_CHANNELS(OutputFormat); + + + xform = cmsCreateTransform(hNamedColor, TYPE_NAMED_COLOR_INDEX, NULL, OutputFormat, Intent, dwFlags); + if (xform == NULL) return 0; + + + NamedColorList = cmsGetNamedColorList(xform); + if (NamedColorList == NULL) return 0; + + _cmsIOPrintf(m, "<<\n"); + _cmsIOPrintf(m, "(colorlistcomment) (%s) \n", "Named profile"); + _cmsIOPrintf(m, "(Prefix) [ (Pantone ) (PANTONE ) ]\n"); + _cmsIOPrintf(m, "(Suffix) [ ( CV) ( CVC) ( C) ]\n"); + + nColors = cmsNamedColorCount(NamedColorList); + + for (i=0; i < nColors; i++) { + + cmsUInt16Number In[1]; + cmsUInt16Number Out[cmsMAXCHANNELS]; + + In[0] = (cmsUInt16Number) i; + + if (!cmsNamedColorInfo(NamedColorList, i, ColorName, NULL, NULL, NULL, NULL)) + continue; + + cmsDoTransform(xform, In, Out, 1); + BuildColorantList(Colorant, nColorant, Out); + _cmsIOPrintf(m, " (%s) [ %s ]\n", ColorName, Colorant); + } + + _cmsIOPrintf(m, " >>"); + + if (!(dwFlags & cmsFLAGS_NODEFAULTRESOURCEDEF)) { + + _cmsIOPrintf(m, " /Current exch /HPSpotTable defineresource pop\n"); + } + + cmsDeleteTransform(xform); + return 1; +} + + + +// This one does create a Color Rendering Dictionary. +// CRD are always LUT-Based, no matter if profile is +// implemented as matrix-shaper. + +static +cmsUInt32Number GenerateCRD(cmsContext ContextID, + cmsHPROFILE hProfile, + cmsUInt32Number Intent, cmsUInt32Number dwFlags, + cmsIOHANDLER* mem) +{ + cmsUInt32Number dwBytesUsed; + + if (!(dwFlags & cmsFLAGS_NODEFAULTRESOURCEDEF)) { + + EmitHeader(mem, "Color Rendering Dictionary (CRD)", hProfile); + } + + + // Is a named color profile? + if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) { + + if (!WriteNamedColorCRD(mem, hProfile, Intent, dwFlags)) { + return 0; + } + } + else { + + // CRD are always implemented as LUT + + if (!WriteOutputLUT(mem, hProfile, Intent, dwFlags)) { + return 0; + } + } + + if (!(dwFlags & cmsFLAGS_NODEFAULTRESOURCEDEF)) { + + _cmsIOPrintf(mem, "%%%%EndResource\n"); + _cmsIOPrintf(mem, "\n%% CRD End\n"); + } + + // Done, keep memory usage + dwBytesUsed = mem ->UsedSpace; + + // Finally, return used byte count + return dwBytesUsed; + + cmsUNUSED_PARAMETER(ContextID); +} + + + + +cmsUInt32Number CMSEXPORT cmsGetPostScriptColorResource(cmsContext ContextID, + cmsPSResourceType Type, + cmsHPROFILE hProfile, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags, + cmsIOHANDLER* io) +{ + cmsUInt32Number rc; + + + switch (Type) { + + case cmsPS_RESOURCE_CSA: + rc = GenerateCSA(ContextID, hProfile, Intent, dwFlags, io); + break; + + default: + case cmsPS_RESOURCE_CRD: + rc = GenerateCRD(ContextID, hProfile, Intent, dwFlags, io); + break; + } + + return rc; +} + + + +cmsUInt32Number CMSEXPORT cmsGetPostScriptCRD(cmsContext ContextID, + cmsHPROFILE hProfile, + cmsUInt32Number Intent, cmsUInt32Number dwFlags, + void* Buffer, cmsUInt32Number dwBufferLen) +{ + cmsIOHANDLER* mem; + cmsUInt32Number dwBytesUsed; + + // Set up the serialization engine + if (Buffer == NULL) + mem = cmsOpenIOhandlerFromNULL(ContextID); + else + mem = cmsOpenIOhandlerFromMem(ContextID, Buffer, dwBufferLen, "w"); + + if (!mem) return 0; + + dwBytesUsed = cmsGetPostScriptColorResource(ContextID, cmsPS_RESOURCE_CRD, hProfile, Intent, dwFlags, mem); + + // Get rid of memory stream + cmsCloseIOhandler(mem); + + return dwBytesUsed; +} + + + +// Does create a Color Space Array on XYZ colorspace for PostScript usage +cmsUInt32Number CMSEXPORT cmsGetPostScriptCSA(cmsContext ContextID, + cmsHPROFILE hProfile, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags, + void* Buffer, + cmsUInt32Number dwBufferLen) +{ + cmsIOHANDLER* mem; + cmsUInt32Number dwBytesUsed; + + if (Buffer == NULL) + mem = cmsOpenIOhandlerFromNULL(ContextID); + else + mem = cmsOpenIOhandlerFromMem(ContextID, Buffer, dwBufferLen, "w"); + + if (!mem) return 0; + + dwBytesUsed = cmsGetPostScriptColorResource(ContextID, cmsPS_RESOURCE_CSA, hProfile, Intent, dwFlags, mem); + + // Get rid of memory stream + cmsCloseIOhandler(mem); + + return dwBytesUsed; + +} diff --git a/src/cmssamp.c b/src/cmssamp.c new file mode 100644 index 0000000..090d96d --- /dev/null +++ b/src/cmssamp.c @@ -0,0 +1,266 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + + + +// This file contains routines for resampling and LUT optimization, black point detection +// and black preservation. + +// Black point detection ------------------------------------------------------------------------- + + +// PCS -> PCS round trip transform, always uses relative intent on the device -> pcs +static +cmsHTRANSFORM CreateRoundtripXForm(cmsHPROFILE hProfile, cmsUInt32Number nIntent) +{ + cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); + cmsHTRANSFORM xform; + cmsBool BPC[4] = { FALSE, FALSE, FALSE, FALSE }; + cmsFloat64Number States[4] = { 1.0, 1.0, 1.0, 1.0 }; + cmsHPROFILE hProfiles[4]; + cmsUInt32Number Intents[4]; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + + hProfiles[0] = hLab; hProfiles[1] = hProfile; hProfiles[2] = hProfile; hProfiles[3] = hLab; + Intents[0] = INTENT_RELATIVE_COLORIMETRIC; Intents[1] = nIntent; Intents[2] = INTENT_RELATIVE_COLORIMETRIC; Intents[3] = INTENT_RELATIVE_COLORIMETRIC; + + xform = cmsCreateExtendedTransform(ContextID, 4, hProfiles, BPC, Intents, + States, NULL, 0, TYPE_Lab_DBL, TYPE_Lab_DBL, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); + + cmsCloseProfile(hLab); + return xform; +} + +// Use darker colorants to obtain black point. This works in the relative colorimetric intent and +// assumes more ink results in darker colors. No ink limit is assumed. +static +cmsBool BlackPointAsDarkerColorant(cmsHPROFILE hInput, + cmsUInt32Number Intent, + cmsCIEXYZ* BlackPoint, + cmsUInt32Number dwFlags) +{ + cmsUInt16Number *Black; + cmsHTRANSFORM xform; + cmsColorSpaceSignature Space; + cmsUInt32Number nChannels; + cmsUInt32Number dwFormat; + cmsHPROFILE hLab; + cmsCIELab Lab; + cmsCIEXYZ BlackXYZ; + cmsContext ContextID = cmsGetProfileContextID(hInput); + + // If the profile does not support input direction, assume Black point 0 + if (!cmsIsIntentSupported(hInput, Intent, LCMS_USED_AS_INPUT)) { + + BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; + return FALSE; + } + + // Create a formatter which has n channels and floating point + dwFormat = cmsFormatterForColorspaceOfProfile(hInput, 2, FALSE); + + // Try to get black by using black colorant + Space = cmsGetColorSpace(hInput); + + // This function returns darker colorant in 16 bits for several spaces + if (!_cmsEndPointsBySpace(Space, NULL, &Black, &nChannels)) { + + BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; + return FALSE; + } + + if (nChannels != T_CHANNELS(dwFormat)) { + BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; + return FALSE; + } + + // Lab will be used as the output space, but lab2 will avoid recursion + hLab = cmsCreateLab2ProfileTHR(ContextID, NULL); + if (hLab == NULL) { + BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; + return FALSE; + } + + // Create the transform + xform = cmsCreateTransformTHR(ContextID, hInput, dwFormat, + hLab, TYPE_Lab_DBL, Intent, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE); + cmsCloseProfile(hLab); + + if (xform == NULL) { + // Something went wrong. Get rid of open resources and return zero as black + + BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; + return FALSE; + } + + // Convert black to Lab + cmsDoTransform(xform, Black, &Lab, 1); + + // Force it to be neutral, clip to max. L* of 50 + Lab.a = Lab.b = 0; + if (Lab.L > 50) Lab.L = 50; + + // Free the resources + cmsDeleteTransform(xform); + + // Convert from Lab (which is now clipped) to XYZ. + cmsLab2XYZ(NULL, &BlackXYZ, &Lab); + + if (BlackPoint != NULL) + *BlackPoint = BlackXYZ; + + return TRUE; + + cmsUNUSED_PARAMETER(dwFlags); +} + +// Get a black point of output CMYK profile, discounting any ink-limiting embedded +// in the profile. For doing that, we use perceptual intent in input direction: +// Lab (0, 0, 0) -> [Perceptual] Profile -> CMYK -> [Rel. colorimetric] Profile -> Lab +static +cmsBool BlackPointUsingPerceptualBlack(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile) + +{ + cmsHTRANSFORM hRoundTrip; + cmsCIELab LabIn, LabOut; + cmsCIEXYZ BlackXYZ; + + // Is the intent supported by the profile? + if (!cmsIsIntentSupported(hProfile, INTENT_PERCEPTUAL, LCMS_USED_AS_INPUT)) { + + BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; + return TRUE; + } + + hRoundTrip = CreateRoundtripXForm(hProfile, INTENT_PERCEPTUAL); + if (hRoundTrip == NULL) { + BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; + return FALSE; + } + + LabIn.L = LabIn.a = LabIn.b = 0; + cmsDoTransform(hRoundTrip, &LabIn, &LabOut, 1); + + // Clip Lab to reasonable limits + if (LabOut.L > 50) LabOut.L = 50; + LabOut.a = LabOut.b = 0; + + cmsDeleteTransform(hRoundTrip); + + // Convert it to XYZ + cmsLab2XYZ(NULL, &BlackXYZ, &LabOut); + + if (BlackPoint != NULL) + *BlackPoint = BlackXYZ; + + return TRUE; +} + +// This function shouldn't exist at all -- there is such quantity of broken +// profiles on black point tag, that we must somehow fix chromaticity to +// avoid huge tint when doing Black point compensation. This function does +// just that. There is a special flag for using black point tag, but turned +// off by default because it is bogus on most profiles. The detection algorithm +// involves to turn BP to neutral and to use only L component. + +cmsBool CMSEXPORT cmsDetectBlackPoint(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags) +{ + + // Zero for black point + if (cmsGetDeviceClass(hProfile) == cmsSigLinkClass) { + + BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; + return FALSE; + } + + // v4 + perceptual & saturation intents does have its own black point, and it is + // well specified enough to use it. Black point tag is deprecated in V4. + + if ((cmsGetEncodedICCversion(hProfile) >= 0x4000000) && + (Intent == INTENT_PERCEPTUAL || Intent == INTENT_SATURATION)) { + + // Matrix shaper share MRC & perceptual intents + if (cmsIsMatrixShaper(hProfile)) + return BlackPointAsDarkerColorant(hProfile, INTENT_RELATIVE_COLORIMETRIC, BlackPoint, 0); + + // Get Perceptual black out of v4 profiles. That is fixed for perceptual & saturation intents + BlackPoint -> X = cmsPERCEPTUAL_BLACK_X; + BlackPoint -> Y = cmsPERCEPTUAL_BLACK_Y; + BlackPoint -> Z = cmsPERCEPTUAL_BLACK_Z; + + return TRUE; + } + + +#ifdef CMS_USE_PROFILE_BLACK_POINT_TAG + + // v2, v4 rel/abs colorimetric + if (cmsIsTag(hProfile, cmsSigMediaBlackPointTag) && + Intent == INTENT_RELATIVE_COLORIMETRIC) { + + cmsCIEXYZ *BlackPtr, BlackXYZ, UntrustedBlackPoint, TrustedBlackPoint, MediaWhite; + cmsCIELab Lab; + + // If black point is specified, then use it, + + BlackPtr = cmsReadTag(hProfile, cmsSigMediaBlackPointTag); + if (BlackPtr != NULL) { + + BlackXYZ = *BlackPtr; + _cmsReadMediaWhitePoint(&MediaWhite, hProfile); + + // Black point is absolute XYZ, so adapt to D50 to get PCS value + cmsAdaptToIlluminant(&UntrustedBlackPoint, &MediaWhite, cmsD50_XYZ(), &BlackXYZ); + + // Force a=b=0 to get rid of any chroma + cmsXYZ2Lab(NULL, &Lab, &UntrustedBlackPoint); + Lab.a = Lab.b = 0; + if (Lab.L > 50) Lab.L = 50; // Clip to L* <= 50 + cmsLab2XYZ(NULL, &TrustedBlackPoint, &Lab); + + if (BlackPoint != NULL) + *BlackPoint = TrustedBlackPoint; + + return TRUE; + } + } +#endif + + // That is about v2 profiles. + + // If output profile, discount ink-limiting and that's all + if (Intent == INTENT_RELATIVE_COLORIMETRIC && + (cmsGetDeviceClass(hProfile) == cmsSigOutputClass) && + (cmsGetColorSpace(hProfile) == cmsSigCmykData)) + return BlackPointUsingPerceptualBlack(BlackPoint, hProfile); + + // Nope, compute BP using current intent. + return BlackPointAsDarkerColorant(hProfile, Intent, BlackPoint, dwFlags); +} + + diff --git a/src/cmssm.c b/src/cmssm.c new file mode 100644 index 0000000..5fdc62e --- /dev/null +++ b/src/cmssm.c @@ -0,0 +1,735 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + + +// ------------------------------------------------------------------------ + +// Gamut boundary description by using Jan Morovic's Segment maxima method +// Many thanks to Jan for allowing me to use his algorithm. + +// r = C* +// alpha = Hab +// theta = L* + +#define SECTORS 16 // number of divisions in alpha and theta + +// Spherical coordinates +typedef struct { + + cmsFloat64Number r; + cmsFloat64Number alpha; + cmsFloat64Number theta; + +} cmsSpherical; + +typedef enum { + GP_EMPTY, + GP_SPECIFIED, + GP_MODELED + + } GDBPointType; + + +typedef struct { + + GDBPointType Type; + cmsSpherical p; // Keep also alpha & theta of maximum + +} cmsGDBPoint; + + +typedef struct { + + cmsContext ContextID; + cmsGDBPoint Gamut[SECTORS][SECTORS]; + +} cmsGDB; + + +// A line using the parametric form +// P = a + t*u +typedef struct { + + cmsVEC3 a; + cmsVEC3 u; + +} cmsLine; + + +// A plane using the parametric form +// Q = b + r*v + s*w +typedef struct { + + cmsVEC3 b; + cmsVEC3 v; + cmsVEC3 w; + +} cmsPlane; + + + +// -------------------------------------------------------------------------------------------- + +// ATAN2() which always returns degree positive numbers + +static +cmsFloat64Number _cmsAtan2(cmsFloat64Number y, cmsFloat64Number x) +{ + cmsFloat64Number a; + + // Deal with undefined case + if (x == 0.0 && y == 0.0) return 0; + + a = (atan2(y, x) * 180.0) / M_PI; + + while (a < 0) { + a += 360; + } + + return a; +} + +// Convert to spherical coordinates +static +void ToSpherical(cmsSpherical* sp, const cmsVEC3* v) +{ + + cmsFloat64Number L, a, b; + + L = v ->n[VX]; + a = v ->n[VY]; + b = v ->n[VZ]; + + sp ->r = sqrt( L*L + a*a + b*b ); + + if (sp ->r == 0) { + sp ->alpha = sp ->theta = 0; + return; + } + + sp ->alpha = _cmsAtan2(a, b); + sp ->theta = _cmsAtan2(sqrt(a*a + b*b), L); +} + + +// Convert to cartesian from spherical +static +void ToCartesian(cmsVEC3* v, const cmsSpherical* sp) +{ + cmsFloat64Number sin_alpha; + cmsFloat64Number cos_alpha; + cmsFloat64Number sin_theta; + cmsFloat64Number cos_theta; + cmsFloat64Number L, a, b; + + sin_alpha = sin((M_PI * sp ->alpha) / 180.0); + cos_alpha = cos((M_PI * sp ->alpha) / 180.0); + sin_theta = sin((M_PI * sp ->theta) / 180.0); + cos_theta = cos((M_PI * sp ->theta) / 180.0); + + a = sp ->r * sin_theta * sin_alpha; + b = sp ->r * sin_theta * cos_alpha; + L = sp ->r * cos_theta; + + v ->n[VX] = L; + v ->n[VY] = a; + v ->n[VZ] = b; +} + + +// Quantize sector of a spherical coordinate. Saturate 360, 180 to last sector +// The limits are the centers of each sector, so +static +void QuantizeToSector(const cmsSpherical* sp, int* alpha, int* theta) +{ + *alpha = (int) floor(((sp->alpha * (SECTORS)) / 360.0) ); + *theta = (int) floor(((sp->theta * (SECTORS)) / 180.0) ); + + if (*alpha >= SECTORS) + *alpha = SECTORS-1; + if (*theta >= SECTORS) + *theta = SECTORS-1; +} + + +// Line determined by 2 points +static +void LineOf2Points(cmsLine* line, cmsVEC3* a, cmsVEC3* b) +{ + + _cmsVEC3init(&line ->a, a ->n[VX], a ->n[VY], a ->n[VZ]); + _cmsVEC3init(&line ->u, b ->n[VX] - a ->n[VX], + b ->n[VY] - a ->n[VY], + b ->n[VZ] - a ->n[VZ]); +} + + +// Evaluate parametric line +static +void GetPointOfLine(cmsVEC3* p, const cmsLine* line, cmsFloat64Number t) +{ + p ->n[VX] = line ->a.n[VX] + t * line->u.n[VX]; + p ->n[VY] = line ->a.n[VY] + t * line->u.n[VY]; + p ->n[VZ] = line ->a.n[VZ] + t * line->u.n[VZ]; +} + + + +/* + Closest point in sector line1 to sector line2 (both are defined as 0 <=t <= 1) + http://softsurfer.com/Archive/algorithm_0106/algorithm_0106.htm + + Copyright 2001, softSurfer (www.softsurfer.com) + This code may be freely used and modified for any purpose + providing that this copyright notice is included with it. + SoftSurfer makes no warranty for this code, and cannot be held + liable for any real or imagined damage resulting from its use. + Users of this code must verify correctness for their application. + +*/ + +static +cmsBool ClosestLineToLine(cmsVEC3* r, const cmsLine* line1, const cmsLine* line2) +{ + cmsFloat64Number a, b, c, d, e, D; + cmsFloat64Number sc, sN, sD; + cmsFloat64Number tc, tN, tD; + cmsVEC3 w0; + + _cmsVEC3minus(&w0, &line1 ->a, &line2 ->a); + + a = _cmsVEC3dot(&line1 ->u, &line1 ->u); + b = _cmsVEC3dot(&line1 ->u, &line2 ->u); + c = _cmsVEC3dot(&line2 ->u, &line2 ->u); + d = _cmsVEC3dot(&line1 ->u, &w0); + e = _cmsVEC3dot(&line2 ->u, &w0); + + D = a*c - b * b; // Denominator + sD = tD = D; // default sD = D >= 0 + + if (D < MATRIX_DET_TOLERANCE) { // the lines are almost parallel + + sN = 0.0; // force using point P0 on segment S1 + sD = 1.0; // to prevent possible division by 0.0 later + tN = e; + tD = c; + } + else { // get the closest points on the infinite lines + + sN = (b*e - c*d); + tN = (a*e - b*d); + + if (sN < 0.0) { // sc < 0 => the s=0 edge is visible + + sN = 0.0; + tN = e; + tD = c; + } + else if (sN > sD) { // sc > 1 => the s=1 edge is visible + sN = sD; + tN = e + b; + tD = c; + } + } + + if (tN < 0.0) { // tc < 0 => the t=0 edge is visible + + tN = 0.0; + // recompute sc for this edge + if (-d < 0.0) + sN = 0.0; + else if (-d > a) + sN = sD; + else { + sN = -d; + sD = a; + } + } + else if (tN > tD) { // tc > 1 => the t=1 edge is visible + + tN = tD; + + // recompute sc for this edge + if ((-d + b) < 0.0) + sN = 0; + else if ((-d + b) > a) + sN = sD; + else { + sN = (-d + b); + sD = a; + } + } + // finally do the division to get sc and tc + sc = (fabs(sN) < MATRIX_DET_TOLERANCE ? 0.0 : sN / sD); + tc = (fabs(tN) < MATRIX_DET_TOLERANCE ? 0.0 : tN / tD); + + GetPointOfLine(r, line1, sc); + return TRUE; +} + + + +// ------------------------------------------------------------------ Wrapper + + +// Allocate & free structure +cmsHANDLE CMSEXPORT cmsGBDAlloc(cmsContext ContextID) +{ + cmsGDB* gbd = (cmsGDB*) _cmsMallocZero(ContextID, sizeof(cmsGDB)); + if (gbd == NULL) return NULL; + + gbd -> ContextID = ContextID; + + return (cmsHANDLE) gbd; +} + + +void CMSEXPORT cmsGBDFree(cmsHANDLE hGBD) +{ + cmsGDB* gbd = (cmsGDB*) hGBD; + if (hGBD != NULL) + _cmsFree(gbd->ContextID, (void*) gbd); +} + + +// Auxiliar to retrieve a pointer to the segmentr containing the Lab value +static +cmsGDBPoint* GetPoint(cmsGDB* gbd, const cmsCIELab* Lab, cmsSpherical* sp) +{ + cmsVEC3 v; + int alpha, theta; + + // Housekeeping + _cmsAssert(gbd != NULL); + _cmsAssert(Lab != NULL); + _cmsAssert(sp != NULL); + + // Center L* by substracting half of its domain, that's 50 + _cmsVEC3init(&v, Lab ->L - 50.0, Lab ->a, Lab ->b); + + // Convert to spherical coordinates + ToSpherical(sp, &v); + + if (sp ->r < 0 || sp ->alpha < 0 || sp->theta < 0) { + cmsSignalError(gbd ->ContextID, cmsERROR_RANGE, "spherical value out of range"); + return NULL; + } + + // On which sector it falls? + QuantizeToSector(sp, &alpha, &theta); + + if (alpha < 0 || theta < 0 || alpha >= SECTORS || theta >= SECTORS) { + cmsSignalError(gbd ->ContextID, cmsERROR_RANGE, " quadrant out of range"); + return NULL; + } + + // Get pointer to the sector + return &gbd ->Gamut[theta][alpha]; +} + +// Add a point to gamut descriptor. Point to add is in Lab color space. +// GBD is centered on a=b=0 and L*=50 +cmsBool CMSEXPORT cmsGDBAddPoint(cmsHANDLE hGBD, const cmsCIELab* Lab) +{ + cmsGDB* gbd = (cmsGDB*) hGBD; + cmsGDBPoint* ptr; + cmsSpherical sp; + + + // Get pointer to the sector + ptr = GetPoint(gbd, Lab, &sp); + if (ptr == NULL) return FALSE; + + // If no samples at this sector, add it + if (ptr ->Type == GP_EMPTY) { + + ptr -> Type = GP_SPECIFIED; + ptr -> p = sp; + } + else { + + + // Substitute only if radius is greater + if (sp.r > ptr -> p.r) { + + ptr -> Type = GP_SPECIFIED; + ptr -> p = sp; + } + } + + return TRUE; +} + +// Check if a given point falls inside gamut +cmsBool CMSEXPORT cmsGDBCheckPoint(cmsHANDLE hGBD, const cmsCIELab* Lab) +{ + cmsGDB* gbd = (cmsGDB*) hGBD; + cmsGDBPoint* ptr; + cmsSpherical sp; + + // Get pointer to the sector + ptr = GetPoint(gbd, Lab, &sp); + if (ptr == NULL) return FALSE; + + // If no samples at this sector, return no data + if (ptr ->Type == GP_EMPTY) return FALSE; + + // In gamut only if radius is greater + + return (sp.r <= ptr -> p.r); +} + +// ----------------------------------------------------------------------------------------------------------------------- + +// Find near sectors. The list of sectors found is returned on Close[]. +// The function returns the number of sectors as well. + +// 24 9 10 11 12 +// 23 8 1 2 13 +// 22 7 * 3 14 +// 21 6 5 4 15 +// 20 19 18 17 16 +// +// Those are the relative movements +// {-2,-2}, {-1, -2}, {0, -2}, {+1, -2}, {+2, -2}, +// {-2,-1}, {-1, -1}, {0, -1}, {+1, -1}, {+2, -1}, +// {-2, 0}, {-1, 0}, {0, 0}, {+1, 0}, {+2, 0}, +// {-2,+1}, {-1, +1}, {0, +1}, {+1, +1}, {+2, +1}, +// {-2,+2}, {-1, +2}, {0, +2}, {+1, +2}, {+2, +2}}; + + +static +const struct _spiral { + + int AdvX, AdvY; + + } Spiral[] = { {0, -1}, {+1, -1}, {+1, 0}, {+1, +1}, {0, +1}, {-1, +1}, + {-1, 0}, {-1, -1}, {-1, -2}, {0, -2}, {+1, -2}, {+2, -2}, + {+2, -1}, {+2, 0}, {+2, +1}, {+2, +2}, {+1, +2}, {0, +2}, + {-1, +2}, {-2, +2}, {-2, +1}, {-2, 0}, {-2, -1}, {-2, -2} }; + +#define NSTEPS (sizeof(Spiral) / sizeof(struct _spiral)) + +static +int FindNearSectors(cmsGDB* gbd, int alpha, int theta, cmsGDBPoint* Close[]) +{ + int nSectors = 0; + int a, t; + cmsUInt32Number i; + cmsGDBPoint* pt; + + for (i=0; i < NSTEPS; i++) { + + a = alpha + Spiral[i].AdvX; + t = theta + Spiral[i].AdvY; + + // Cycle at the end + a %= SECTORS; + t %= SECTORS; + + // Cycle at the begin + if (a < 0) a = SECTORS + a; + if (t < 0) t = SECTORS + t; + + pt = &gbd ->Gamut[t][a]; + + if (pt -> Type != GP_EMPTY) { + + Close[nSectors++] = pt; + } + } + + return nSectors; +} + + +// Interpolate a missing sector. Method identifies whatever this is top, bottom or mid +static +cmsBool InterpolateMissingSector(cmsGDB* gbd, int alpha, int theta) +{ + cmsSpherical sp; + cmsVEC3 Lab; + cmsVEC3 Centre; + cmsLine ray; + int nCloseSectors; + cmsGDBPoint* Close[NSTEPS + 1]; + cmsSpherical closel, templ; + cmsLine edge; + int k, m; + + // Is that point already specified? + if (gbd ->Gamut[theta][alpha].Type != GP_EMPTY) return TRUE; + + // Fill close points + nCloseSectors = FindNearSectors(gbd, alpha, theta, Close); + + + // Find a central point on the sector + sp.alpha = (cmsFloat64Number) ((alpha + 0.5) * 360.0) / (SECTORS); + sp.theta = (cmsFloat64Number) ((theta + 0.5) * 180.0) / (SECTORS); + sp.r = 50.0; + + // Convert to Cartesian + ToCartesian(&Lab, &sp); + + // Create a ray line from centre to this point + _cmsVEC3init(&Centre, 50.0, 0, 0); + LineOf2Points(&ray, &Lab, &Centre); + + // For all close sectors + closel.r = 0.0; + closel.alpha = 0; + closel.theta = 0; + + for (k=0; k < nCloseSectors; k++) { + + for(m = k+1; m < nCloseSectors; m++) { + + cmsVEC3 temp, a1, a2; + + // A line from sector to sector + ToCartesian(&a1, &Close[k]->p); + ToCartesian(&a2, &Close[m]->p); + + LineOf2Points(&edge, &a1, &a2); + + // Find a line + ClosestLineToLine(&temp, &ray, &edge); + + // Convert to spherical + ToSpherical(&templ, &temp); + + + if ( templ.r > closel.r && + templ.theta >= (theta*180.0/SECTORS) && + templ.theta <= ((theta+1)*180.0/SECTORS) && + templ.alpha >= (alpha*360.0/SECTORS) && + templ.alpha <= ((alpha+1)*360.0/SECTORS)) { + + closel = templ; + } + } + } + + gbd ->Gamut[theta][alpha].p = closel; + gbd ->Gamut[theta][alpha].Type = GP_MODELED; + + return TRUE; + +} + + +// Interpolate missing parts. The algorithm fist computes slices at +// theta=0 and theta=Max. +cmsBool CMSEXPORT cmsGDBCompute(cmsHANDLE hGBD, cmsUInt32Number dwFlags) +{ + int alpha, theta; + cmsGDB* gbd = (cmsGDB*) hGBD; + + _cmsAssert(hGBD != NULL); + + // Interpolate black + for (alpha = 0; alpha < SECTORS; alpha++) { + + if (!InterpolateMissingSector(gbd, alpha, 0)) return FALSE; + } + + // Interpolate white + for (alpha = 0; alpha < SECTORS; alpha++) { + + if (!InterpolateMissingSector(gbd, alpha, SECTORS-1)) return FALSE; + } + + + // Interpolate Mid + for (theta = 1; theta < SECTORS; theta++) { + for (alpha = 0; alpha < SECTORS; alpha++) { + + if (!InterpolateMissingSector(gbd, alpha, theta)) return FALSE; + } + } + + // Done + return TRUE; + + cmsUNUSED_PARAMETER(dwFlags); +} + + + + +// -------------------------------------------------------------------------------------------------------- + +// Great for debug, but not suitable for real use + +#if 0 +cmsBool cmsGBDdumpVRML(cmsHANDLE hGBD, const char* fname) +{ + FILE* fp; + int i, j; + cmsGDB* gbd = (cmsGDB*) hGBD; + cmsGDBPoint* pt; + + fp = fopen (fname, "wt"); + if (fp == NULL) + return FALSE; + + fprintf (fp, "#VRML V2.0 utf8\n"); + + // set the viewing orientation and distance + fprintf (fp, "DEF CamTest Group {\n"); + fprintf (fp, "\tchildren [\n"); + fprintf (fp, "\t\tDEF Cameras Group {\n"); + fprintf (fp, "\t\t\tchildren [\n"); + fprintf (fp, "\t\t\t\tDEF DefaultView Viewpoint {\n"); + fprintf (fp, "\t\t\t\t\tposition 0 0 340\n"); + fprintf (fp, "\t\t\t\t\torientation 0 0 1 0\n"); + fprintf (fp, "\t\t\t\t\tdescription \"default view\"\n"); + fprintf (fp, "\t\t\t\t}\n"); + fprintf (fp, "\t\t\t]\n"); + fprintf (fp, "\t\t},\n"); + fprintf (fp, "\t]\n"); + fprintf (fp, "}\n"); + + // Output the background stuff + fprintf (fp, "Background {\n"); + fprintf (fp, "\tskyColor [\n"); + fprintf (fp, "\t\t.5 .5 .5\n"); + fprintf (fp, "\t]\n"); + fprintf (fp, "}\n"); + + // Output the shape stuff + fprintf (fp, "Transform {\n"); + fprintf (fp, "\tscale .3 .3 .3\n"); + fprintf (fp, "\tchildren [\n"); + + // Draw the axes as a shape: + fprintf (fp, "\t\tShape {\n"); + fprintf (fp, "\t\t\tappearance Appearance {\n"); + fprintf (fp, "\t\t\t\tmaterial Material {\n"); + fprintf (fp, "\t\t\t\t\tdiffuseColor 0 0.8 0\n"); + fprintf (fp, "\t\t\t\t\temissiveColor 1.0 1.0 1.0\n"); + fprintf (fp, "\t\t\t\t\tshininess 0.8\n"); + fprintf (fp, "\t\t\t\t}\n"); + fprintf (fp, "\t\t\t}\n"); + fprintf (fp, "\t\t\tgeometry IndexedLineSet {\n"); + fprintf (fp, "\t\t\t\tcoord Coordinate {\n"); + fprintf (fp, "\t\t\t\t\tpoint [\n"); + fprintf (fp, "\t\t\t\t\t0.0 0.0 0.0,\n"); + fprintf (fp, "\t\t\t\t\t%f 0.0 0.0,\n", 255.0); + fprintf (fp, "\t\t\t\t\t0.0 %f 0.0,\n", 255.0); + fprintf (fp, "\t\t\t\t\t0.0 0.0 %f]\n", 255.0); + fprintf (fp, "\t\t\t\t}\n"); + fprintf (fp, "\t\t\t\tcoordIndex [\n"); + fprintf (fp, "\t\t\t\t\t0, 1, -1\n"); + fprintf (fp, "\t\t\t\t\t0, 2, -1\n"); + fprintf (fp, "\t\t\t\t\t0, 3, -1]\n"); + fprintf (fp, "\t\t\t}\n"); + fprintf (fp, "\t\t}\n"); + + + fprintf (fp, "\t\tShape {\n"); + fprintf (fp, "\t\t\tappearance Appearance {\n"); + fprintf (fp, "\t\t\t\tmaterial Material {\n"); + fprintf (fp, "\t\t\t\t\tdiffuseColor 0 0.8 0\n"); + fprintf (fp, "\t\t\t\t\temissiveColor 1 1 1\n"); + fprintf (fp, "\t\t\t\t\tshininess 0.8\n"); + fprintf (fp, "\t\t\t\t}\n"); + fprintf (fp, "\t\t\t}\n"); + fprintf (fp, "\t\t\tgeometry PointSet {\n"); + + // fill in the points here + fprintf (fp, "\t\t\t\tcoord Coordinate {\n"); + fprintf (fp, "\t\t\t\t\tpoint [\n"); + + // We need to transverse all gamut hull. + for (i=0; i < SECTORS; i++) + for (j=0; j < SECTORS; j++) { + + cmsVEC3 v; + + pt = &gbd ->Gamut[i][j]; + ToCartesian(&v, &pt ->p); + + fprintf (fp, "\t\t\t\t\t%g %g %g", v.n[0]+50, v.n[1], v.n[2]); + + if ((j == SECTORS - 1) && (i == SECTORS - 1)) + fprintf (fp, "]\n"); + else + fprintf (fp, ",\n"); + + } + + fprintf (fp, "\t\t\t\t}\n"); + + + + // fill in the face colors + fprintf (fp, "\t\t\t\tcolor Color {\n"); + fprintf (fp, "\t\t\t\t\tcolor [\n"); + + for (i=0; i < SECTORS; i++) + for (j=0; j < SECTORS; j++) { + + cmsVEC3 v; + + pt = &gbd ->Gamut[i][j]; + + + ToCartesian(&v, &pt ->p); + + + if (pt ->Type == GP_EMPTY) + fprintf (fp, "\t\t\t\t\t%g %g %g", 0.0, 0.0, 0.0); + else + if (pt ->Type == GP_MODELED) + fprintf (fp, "\t\t\t\t\t%g %g %g", 1.0, .5, .5); + else { + fprintf (fp, "\t\t\t\t\t%g %g %g", 1.0, 1.0, 1.0); + + } + + if ((j == SECTORS - 1) && (i == SECTORS - 1)) + fprintf (fp, "]\n"); + else + fprintf (fp, ",\n"); + } + fprintf (fp, "\t\t\t}\n"); + + + fprintf (fp, "\t\t\t}\n"); + fprintf (fp, "\t\t}\n"); + fprintf (fp, "\t]\n"); + fprintf (fp, "}\n"); + + fclose (fp); + + return TRUE; +} +#endif + diff --git a/src/cmstypes.c b/src/cmstypes.c new file mode 100644 index 0000000..4548c32 --- /dev/null +++ b/src/cmstypes.c @@ -0,0 +1,5394 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + +// Tag Serialization ----------------------------------------------------------------------------- +// This file implements every single tag and tag type as described in the ICC spec. Some types +// have been deprecated, like ncl and Data. There is no implementation for those types as there +// are no profiles holding them. The programmer can also extend this list by defining his own types +// by using the appropiate plug-in. There are three types of plug ins regarding that. First type +// allows to define new tags using any existing type. Next plug-in type allows to define new types +// and the third one is very specific: allows to extend the number of elements in the multiprofile +// elements special type. +//-------------------------------------------------------------------------------------------------- + +// Some broken types +#define cmsCorbisBrokenXYZtype ((cmsTagTypeSignature) 0x17A505B8) +#define cmsMonacoBrokenCurveType ((cmsTagTypeSignature) 0x9478ee00) + +// This is the linked list that keeps track of the defined types +typedef struct _cmsTagTypeLinkedList_st { + + cmsTagTypeHandler Handler; + struct _cmsTagTypeLinkedList_st* Next; + +} _cmsTagTypeLinkedList; + +// Some macros to define callbacks. +#define READ_FN(x) Type_##x##_Read +#define WRITE_FN(x) Type_##x##_Write +#define FREE_FN(x) Type_##x##_Free +#define DUP_FN(x) Type_##x##_Dup + +// Helper macro to define a handler. Callbacks do have a fixed naming convention. +#define TYPE_HANDLER(t, x) { (t), READ_FN(x), WRITE_FN(x), DUP_FN(x), FREE_FN(x), NULL, 0 } + +// Helper macro to define a MPE handler. Callbacks do have a fixed naming convention +#define TYPE_MPE_HANDLER(t, x) { (t), READ_FN(x), WRITE_FN(x), GenericMPEdup, GenericMPEfree, NULL, 0 } + +// Register a new type handler. This routine is shared between normal types and MPE +static +cmsBool RegisterTypesPlugin(cmsPluginBase* Data, _cmsTagTypeLinkedList* LinkedList, cmsUInt32Number DefaultListCount) +{ + cmsPluginTagType* Plugin = (cmsPluginTagType*) Data; + _cmsTagTypeLinkedList *pt, *Anterior = NULL; + + // Calling the function with NULL as plug-in would unregister the plug in. + if (Data == NULL) { + + LinkedList[DefaultListCount-1].Next = NULL; + return TRUE; + } + + pt = Anterior = LinkedList; + while (pt != NULL) { + + if (Plugin->Handler.Signature == pt -> Handler.Signature) { + pt ->Handler = Plugin ->Handler; // Replace old behaviour. + // Note that since no memory is allocated, unregister does not + // reset this action. + return TRUE; + } + + Anterior = pt; + pt = pt ->Next; + } + + // Registering happens in plug-in memory pool + pt = (_cmsTagTypeLinkedList*) _cmsPluginMalloc(sizeof(_cmsTagTypeLinkedList)); + if (pt == NULL) return FALSE; + + pt ->Handler = Plugin ->Handler; + pt ->Next = NULL; + + if (Anterior) + Anterior -> Next = pt; + + return TRUE; +} + +// Return handler for a given type or NULL if not found. Shared between normal types and MPE +static +cmsTagTypeHandler* GetHandler(cmsTagTypeSignature sig, _cmsTagTypeLinkedList* LinkedList) +{ + _cmsTagTypeLinkedList* pt; + + for (pt = LinkedList; + pt != NULL; + pt = pt ->Next) { + + if (sig == pt -> Handler.Signature) return &pt ->Handler; + } + + return NULL; +} + + +// Auxiliar to convert UTF-32 to UTF-16 in some cases +static +cmsBool _cmsWriteWCharArray(cmsIOHANDLER* io, cmsUInt32Number n, const wchar_t* Array) +{ + cmsUInt32Number i; + + _cmsAssert(io != NULL); + _cmsAssert(Array != NULL); + + for (i=0; i < n; i++) { + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) Array[i])) return FALSE; + } + + return TRUE; +} + +static +cmsBool _cmsReadWCharArray(cmsIOHANDLER* io, cmsUInt32Number n, wchar_t* Array) +{ + cmsUInt32Number i; + cmsUInt16Number tmp; + + _cmsAssert(io != NULL); + + for (i=0; i < n; i++) { + + if (Array != NULL) { + + if (!_cmsReadUInt16Number(io, &tmp)) return FALSE; + Array[i] = (wchar_t) tmp; + } + else { + if (!_cmsReadUInt16Number(io, NULL)) return FALSE; + } + + } + return TRUE; +} + +// To deal with position tables +typedef cmsBool (* PositionTableEntryFn)(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + void* Cargo, + cmsUInt32Number n, + cmsUInt32Number SizeOfTag); + +// Helper function to deal with position tables as decribed in ICC spec 4.3 +// A table of n elements is readed, where first comes n records containing offsets and sizes and +// then a block containing the data itself. This allows to reuse same data in more than one entry +static +cmsBool ReadPositionTable(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + cmsUInt32Number Count, + cmsUInt32Number BaseOffset, + void *Cargo, + PositionTableEntryFn ElementFn) +{ + cmsUInt32Number i; + cmsUInt32Number *ElementOffsets = NULL, *ElementSizes = NULL; + + // Let's take the offsets to each element + ElementOffsets = (cmsUInt32Number *) _cmsCalloc(io ->ContextID, Count, sizeof(cmsUInt32Number *)); + if (ElementOffsets == NULL) goto Error; + + ElementSizes = (cmsUInt32Number *) _cmsCalloc(io ->ContextID, Count, sizeof(cmsUInt32Number *)); + if (ElementSizes == NULL) goto Error; + + for (i=0; i < Count; i++) { + + if (!_cmsReadUInt32Number(io, &ElementOffsets[i])) goto Error; + if (!_cmsReadUInt32Number(io, &ElementSizes[i])) goto Error; + + ElementOffsets[i] += BaseOffset; + } + + // Seek to each element and read it + for (i=0; i < Count; i++) { + + if (!io -> Seek(io, ElementOffsets[i])) goto Error; + + // This is the reader callback + if (!ElementFn(self, io, Cargo, i, ElementSizes[i])) goto Error; + } + + // Success + if (ElementOffsets != NULL) _cmsFree(io ->ContextID, ElementOffsets); + if (ElementSizes != NULL) _cmsFree(io ->ContextID, ElementSizes); + return TRUE; + +Error: + if (ElementOffsets != NULL) _cmsFree(io ->ContextID, ElementOffsets); + if (ElementSizes != NULL) _cmsFree(io ->ContextID, ElementSizes); + return FALSE; +} + +// Same as anterior, but for write position tables +static +cmsBool WritePositionTable(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + cmsUInt32Number SizeOfTag, + cmsUInt32Number Count, + cmsUInt32Number BaseOffset, + void *Cargo, + PositionTableEntryFn ElementFn) +{ + cmsUInt32Number i; + cmsUInt32Number DirectoryPos, CurrentPos, Before; + cmsUInt32Number *ElementOffsets = NULL, *ElementSizes = NULL; + + // Create table + ElementOffsets = (cmsUInt32Number *) _cmsCalloc(io ->ContextID, Count, sizeof(cmsUInt32Number *)); + if (ElementOffsets == NULL) goto Error; + + ElementSizes = (cmsUInt32Number *) _cmsCalloc(io ->ContextID, Count, sizeof(cmsUInt32Number *)); + if (ElementSizes == NULL) goto Error; + + // Keep starting position of curve offsets + DirectoryPos = io ->Tell(io); + + // Write a fake directory to be filled latter on + for (i=0; i < Count; i++) { + + if (!_cmsWriteUInt32Number(io, 0)) goto Error; // Offset + if (!_cmsWriteUInt32Number(io, 0)) goto Error; // size + } + + // Write each element. Keep track of the size as well. + for (i=0; i < Count; i++) { + + Before = io ->Tell(io); + ElementOffsets[i] = Before - BaseOffset; + + // Callback to write... + if (!ElementFn(self, io, Cargo, i, SizeOfTag)) goto Error; + + // Now the size + ElementSizes[i] = io ->Tell(io) - Before; + } + + // Write the directory + CurrentPos = io ->Tell(io); + if (!io ->Seek(io, DirectoryPos)) goto Error; + + for (i=0; i < Count; i++) { + if (!_cmsWriteUInt32Number(io, ElementOffsets[i])) goto Error; + if (!_cmsWriteUInt32Number(io, ElementSizes[i])) goto Error; + } + + if (!io ->Seek(io, CurrentPos)) goto Error; + + if (ElementOffsets != NULL) _cmsFree(io ->ContextID, ElementOffsets); + if (ElementSizes != NULL) _cmsFree(io ->ContextID, ElementSizes); + return TRUE; + +Error: + if (ElementOffsets != NULL) _cmsFree(io ->ContextID, ElementOffsets); + if (ElementSizes != NULL) _cmsFree(io ->ContextID, ElementSizes); + return FALSE; +} + + +// ******************************************************************************** +// Type XYZ. Only one value is allowed +// ******************************************************************************** + +//The XYZType contains an array of three encoded values for the XYZ tristimulus +//values. Tristimulus values must be non-negative. The signed encoding allows for +//implementation optimizations by minimizing the number of fixed formats. + + +static +void *Type_XYZ_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsCIEXYZ* xyz; + + *nItems = 0; + xyz = (cmsCIEXYZ*) _cmsMallocZero(self ->ContextID, sizeof(cmsCIEXYZ)); + if (xyz == NULL) return NULL; + + if (!_cmsReadXYZNumber(io, xyz)) { + _cmsFree(self ->ContextID, xyz); + return NULL; + } + + *nItems = 1; + return (void*) xyz; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + +static +cmsBool Type_XYZ_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + return _cmsWriteXYZNumber(io, (cmsCIEXYZ*) Ptr); + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + +static +void* Type_XYZ_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return _cmsDupMem(self ->ContextID, Ptr, sizeof(cmsCIEXYZ)); + + cmsUNUSED_PARAMETER(n); +} + +static +void Type_XYZ_Free(struct _cms_typehandler_struct* self, void *Ptr) +{ + _cmsFree(self ->ContextID, Ptr); +} + + +static +cmsTagTypeSignature DecideXYZtype(cmsFloat64Number ICCVersion, const void *Data) +{ + return cmsSigXYZType; + + cmsUNUSED_PARAMETER(ICCVersion); + cmsUNUSED_PARAMETER(Data); +} + + +// ******************************************************************************** +// Type chromaticity. Only one value is allowed +// ******************************************************************************** +// The chromaticity tag type provides basic chromaticity data and type of +// phosphors or colorants of a monitor to applications and utilities. + +static +void *Type_Chromaticity_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsCIExyYTRIPLE* chrm; + cmsUInt16Number nChans, Table; + + *nItems = 0; + chrm = (cmsCIExyYTRIPLE*) _cmsMallocZero(self ->ContextID, sizeof(cmsCIExyYTRIPLE)); + if (chrm == NULL) return NULL; + + if (!_cmsReadUInt16Number(io, &nChans)) goto Error; + + // Let's recover from a bug introduced in early versions of lcms1 + if (nChans == 0 && SizeOfTag == 32) { + + if (!_cmsReadUInt16Number(io, NULL)) goto Error; + if (!_cmsReadUInt16Number(io, &nChans)) goto Error; + } + + if (nChans != 3) goto Error; + + if (!_cmsReadUInt16Number(io, &Table)) goto Error; + + if (!_cmsRead15Fixed16Number(io, &chrm ->Red.x)) goto Error; + if (!_cmsRead15Fixed16Number(io, &chrm ->Red.y)) goto Error; + + chrm ->Red.Y = 1.0; + + if (!_cmsRead15Fixed16Number(io, &chrm ->Green.x)) goto Error; + if (!_cmsRead15Fixed16Number(io, &chrm ->Green.y)) goto Error; + + chrm ->Green.Y = 1.0; + + if (!_cmsRead15Fixed16Number(io, &chrm ->Blue.x)) goto Error; + if (!_cmsRead15Fixed16Number(io, &chrm ->Blue.y)) goto Error; + + chrm ->Blue.Y = 1.0; + + *nItems = 1; + return (void*) chrm; + +Error: + _cmsFree(self ->ContextID, (void*) chrm); + return NULL; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + +static +cmsBool SaveOneChromaticity(cmsFloat64Number x, cmsFloat64Number y, cmsIOHANDLER* io) +{ + if (!_cmsWriteUInt32Number(io, _cmsDoubleTo15Fixed16(x))) return FALSE; + if (!_cmsWriteUInt32Number(io, _cmsDoubleTo15Fixed16(y))) return FALSE; + + return TRUE; +} + +static +cmsBool Type_Chromaticity_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsCIExyYTRIPLE* chrm = (cmsCIExyYTRIPLE*) Ptr; + + if (!_cmsWriteUInt16Number(io, 3)) return FALSE; // nChannels + if (!_cmsWriteUInt16Number(io, 0)) return FALSE; // Table + + if (!SaveOneChromaticity(chrm -> Red.x, chrm -> Red.y, io)) return FALSE; + if (!SaveOneChromaticity(chrm -> Green.x, chrm -> Green.y, io)) return FALSE; + if (!SaveOneChromaticity(chrm -> Blue.x, chrm -> Blue.y, io)) return FALSE; + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + +static +void* Type_Chromaticity_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return _cmsDupMem(self ->ContextID, Ptr, sizeof(cmsCIExyYTRIPLE)); + cmsUNUSED_PARAMETER(n); +} + +static +void Type_Chromaticity_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + _cmsFree(self ->ContextID, Ptr); +} + + +// ******************************************************************************** +// Type cmsSigColorantOrderType +// ******************************************************************************** + +// This is an optional tag which specifies the laydown order in which colorants will +// be printed on an n-colorant device. The laydown order may be the same as the +// channel generation order listed in the colorantTableTag or the channel order of a +// colour space such as CMYK, in which case this tag is not needed. When this is not +// the case (for example, ink-towers sometimes use the order KCMY), this tag may be +// used to specify the laydown order of the colorants. + + +static +void *Type_ColorantOrderType_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsUInt8Number* ColorantOrder; + cmsUInt32Number Count; + + *nItems = 0; + if (!_cmsReadUInt32Number(io, &Count)) return NULL; + if (Count > cmsMAXCHANNELS) return NULL; + + ColorantOrder = (cmsUInt8Number*) _cmsCalloc(self ->ContextID, cmsMAXCHANNELS, sizeof(cmsUInt8Number)); + if (ColorantOrder == NULL) return NULL; + + // We use FF as end marker + memset(ColorantOrder, 0xFF, cmsMAXCHANNELS * sizeof(cmsUInt8Number)); + + if (io ->Read(io, ColorantOrder, sizeof(cmsUInt8Number), Count) != Count) { + + _cmsFree(self ->ContextID, (void*) ColorantOrder); + return NULL; + } + + *nItems = 1; + return (void*) ColorantOrder; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + +static +cmsBool Type_ColorantOrderType_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsUInt8Number* ColorantOrder = (cmsUInt8Number*) Ptr; + cmsUInt32Number i, sz, Count; + + // Get the length + for (Count=i=0; i < cmsMAXCHANNELS; i++) { + if (ColorantOrder[i] != 0xFF) Count++; + } + + if (!_cmsWriteUInt32Number(io, Count)) return FALSE; + + sz = Count * sizeof(cmsUInt8Number); + if (!io -> Write(io, sz, ColorantOrder)) return FALSE; + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + +static +void* Type_ColorantOrderType_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return _cmsDupMem(self ->ContextID, Ptr, cmsMAXCHANNELS * sizeof(cmsUInt8Number)); + + cmsUNUSED_PARAMETER(n); +} + + +static +void Type_ColorantOrderType_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + _cmsFree(self ->ContextID, Ptr); +} + +// ******************************************************************************** +// Type cmsSigS15Fixed16ArrayType +// ******************************************************************************** +// This type represents an array of generic 4-byte/32-bit fixed point quantity. +// The number of values is determined from the size of the tag. + +static +void *Type_S15Fixed16_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsFloat64Number* array_double; + cmsUInt32Number i, n; + + *nItems = 0; + n = SizeOfTag / sizeof(cmsUInt32Number); + array_double = (cmsFloat64Number*) _cmsCalloc(self ->ContextID, n, sizeof(cmsFloat64Number)); + if (array_double == NULL) return NULL; + + for (i=0; i < n; i++) { + + if (!_cmsRead15Fixed16Number(io, &array_double[i])) { + + _cmsFree(self ->ContextID, array_double); + return NULL; + } + } + + *nItems = n; + return (void*) array_double; +} + +static +cmsBool Type_S15Fixed16_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsFloat64Number* Value = (cmsFloat64Number*) Ptr; + cmsUInt32Number i; + + for (i=0; i < nItems; i++) { + + if (!_cmsWrite15Fixed16Number(io, Value[i])) return FALSE; + } + + return TRUE; + + cmsUNUSED_PARAMETER(self); +} + +static +void* Type_S15Fixed16_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return _cmsDupMem(self ->ContextID, Ptr, n * sizeof(cmsFloat64Number)); +} + + +static +void Type_S15Fixed16_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + _cmsFree(self ->ContextID, Ptr); +} + +// ******************************************************************************** +// Type cmsSigU16Fixed16ArrayType +// ******************************************************************************** +// This type represents an array of generic 4-byte/32-bit quantity. +// The number of values is determined from the size of the tag. + + +static +void *Type_U16Fixed16_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsFloat64Number* array_double; + cmsUInt32Number v; + cmsUInt32Number i, n; + + *nItems = 0; + n = SizeOfTag / sizeof(cmsUInt32Number); + array_double = (cmsFloat64Number*) _cmsCalloc(self ->ContextID, n, sizeof(cmsFloat64Number)); + if (array_double == NULL) return NULL; + + for (i=0; i < n; i++) { + + if (!_cmsReadUInt32Number(io, &v)) { + _cmsFree(self ->ContextID, (void*) array_double); + return NULL; + } + + // Convert to cmsFloat64Number + array_double[i] = (cmsFloat64Number) (v / 65536.0); + } + + *nItems = n; + return (void*) array_double; +} + +static +cmsBool Type_U16Fixed16_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsFloat64Number* Value = (cmsFloat64Number*) Ptr; + cmsUInt32Number i; + + for (i=0; i < nItems; i++) { + + cmsUInt32Number v = (cmsUInt32Number) floor(Value[i]*65536.0 + 0.5); + + if (!_cmsWriteUInt32Number(io, v)) return FALSE; + } + + return TRUE; + + cmsUNUSED_PARAMETER(self); +} + + +static +void* Type_U16Fixed16_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return _cmsDupMem(self ->ContextID, Ptr, n * sizeof(cmsFloat64Number)); +} + +static +void Type_U16Fixed16_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + _cmsFree(self ->ContextID, Ptr); +} + +// ******************************************************************************** +// Type cmsSigSignatureType +// ******************************************************************************** +// +// The signatureType contains a four-byte sequence, Sequences of less than four +// characters are padded at the end with spaces, 20h. +// Typically this type is used for registered tags that can be displayed on many +// development systems as a sequence of four characters. + +static +void *Type_Signature_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsSignature* SigPtr = (cmsSignature*) _cmsMalloc(self ->ContextID, sizeof(cmsSignature)); + if (SigPtr == NULL) return NULL; + + if (!_cmsReadUInt32Number(io, SigPtr)) return NULL; + *nItems = 1; + + return SigPtr; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + +static +cmsBool Type_Signature_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsSignature* SigPtr = (cmsSignature*) Ptr; + + return _cmsWriteUInt32Number(io, *SigPtr); + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + +static +void* Type_Signature_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return _cmsDupMem(self ->ContextID, Ptr, n * sizeof(cmsSignature)); +} + +static +void Type_Signature_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + _cmsFree(self ->ContextID, Ptr); +} + + +// ******************************************************************************** +// Type cmsSigTextType +// ******************************************************************************** +// +// The textType is a simple text structure that contains a 7-bit ASCII text string. +// The length of the string is obtained by subtracting 8 from the element size portion +// of the tag itself. This string must be terminated with a 00h byte. + +static +void *Type_Text_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + char* Text = NULL; + cmsMLU* mlu = NULL; + + // Create a container + mlu = cmsMLUalloc(self ->ContextID, 1); + if (mlu == NULL) return NULL; + + *nItems = 0; + + // We need to store the "\0" at the end, so +1 + if (SizeOfTag == UINT_MAX) goto Error; + + Text = (char*) _cmsMalloc(self ->ContextID, SizeOfTag + 1); + if (Text == NULL) goto Error; + + if (io -> Read(io, Text, sizeof(char), SizeOfTag) != SizeOfTag) goto Error; + + // Make sure text is properly ended + Text[SizeOfTag] = 0; + *nItems = 1; + + // Keep the result + if (!cmsMLUsetASCII(mlu, cmsNoLanguage, cmsNoCountry, Text)) goto Error; + + _cmsFree(self ->ContextID, Text); + return (void*) mlu; + +Error: + if (mlu != NULL) + cmsMLUfree(mlu); + if (Text != NULL) + _cmsFree(self ->ContextID, Text); + + return NULL; +} + +// The conversion implies to choose a language. So, we choose the actual language. +static +cmsBool Type_Text_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsMLU* mlu = (cmsMLU*) Ptr; + cmsUInt32Number size; + cmsBool rc; + char* Text; + + // Get the size of the string. Note there is an extra "\0" at the end + size = cmsMLUgetASCII(mlu, cmsNoLanguage, cmsNoCountry, NULL, 0); + if (size == 0) return FALSE; // Cannot be zero! + + // Create memory + Text = (char*) _cmsMalloc(self ->ContextID, size); + cmsMLUgetASCII(mlu, cmsNoLanguage, cmsNoCountry, Text, size); + + // Write it, including separator + rc = io ->Write(io, size, Text); + + _cmsFree(self ->ContextID, Text); + return rc; + + cmsUNUSED_PARAMETER(nItems); +} + +static +void* Type_Text_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsMLUdup((cmsMLU*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + + +static +void Type_Text_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsMLU* mlu = (cmsMLU*) Ptr; + cmsMLUfree(mlu); + return; + + cmsUNUSED_PARAMETER(self); +} + +static +cmsTagTypeSignature DecideTextType(cmsFloat64Number ICCVersion, const void *Data) +{ + if (ICCVersion >= 4.0) + return cmsSigMultiLocalizedUnicodeType; + + return cmsSigTextType; + + cmsUNUSED_PARAMETER(Data); +} + + +// ******************************************************************************** +// Type cmsSigDataType +// ******************************************************************************** + +// General purpose data type +static +void *Type_Data_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsICCData* BinData; + cmsUInt32Number LenOfData; + + *nItems = 0; + + if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; + + LenOfData = SizeOfTag - sizeof(cmsUInt32Number); + if (LenOfData > INT_MAX) return NULL; + + BinData = (cmsICCData*) _cmsMalloc(self ->ContextID, sizeof(cmsICCData) + LenOfData - 1); + if (BinData == NULL) return NULL; + + BinData ->len = LenOfData; + if (!_cmsReadUInt32Number(io, &BinData->flag)) { + _cmsFree(self ->ContextID, BinData); + return NULL; + } + + if (io -> Read(io, BinData ->data, sizeof(cmsUInt8Number), LenOfData) != LenOfData) { + + _cmsFree(self ->ContextID, BinData); + return NULL; + } + + *nItems = 1; + + return (void*) BinData; +} + + +static +cmsBool Type_Data_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsICCData* BinData = (cmsICCData*) Ptr; + + if (!_cmsWriteUInt32Number(io, BinData ->flag)) return FALSE; + + return io ->Write(io, BinData ->len, BinData ->data); + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + + +static +void* Type_Data_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + cmsICCData* BinData = (cmsICCData*) Ptr; + + return _cmsDupMem(self ->ContextID, Ptr, sizeof(cmsICCData) + BinData ->len - 1); + + cmsUNUSED_PARAMETER(n); +} + +static +void Type_Data_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + _cmsFree(self ->ContextID, Ptr); +} + +// ******************************************************************************** +// Type cmsSigTextDescriptionType +// ******************************************************************************** + +static +void *Type_Text_Description_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + char* Text = NULL; + cmsMLU* mlu = NULL; + cmsUInt32Number AsciiCount; + cmsUInt32Number i, UnicodeCode, UnicodeCount; + cmsUInt16Number ScriptCodeCode, Dummy; + cmsUInt8Number ScriptCodeCount; + + *nItems = 0; + + // One dword should be there + if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; + + // Read len of ASCII + if (!_cmsReadUInt32Number(io, &AsciiCount)) return NULL; + SizeOfTag -= sizeof(cmsUInt32Number); + + // Check for size + if (SizeOfTag < AsciiCount) return NULL; + + // All seems Ok, allocate the container + mlu = cmsMLUalloc(self ->ContextID, 1); + if (mlu == NULL) return NULL; + + // As many memory as size of tag + Text = (char*) _cmsMalloc(self ->ContextID, AsciiCount + 1); + if (Text == NULL) goto Error; + + // Read it + if (io ->Read(io, Text, sizeof(char), AsciiCount) != AsciiCount) goto Error; + SizeOfTag -= AsciiCount; + + // Make sure there is a terminator + Text[AsciiCount] = 0; + + // Set the MLU entry. From here we can be tolerant to wrong types + if (!cmsMLUsetASCII(mlu, cmsNoLanguage, cmsNoCountry, Text)) goto Error; + _cmsFree(self ->ContextID, (void*) Text); + Text = NULL; + + // Skip Unicode code + if (SizeOfTag < 2* sizeof(cmsUInt32Number)) goto Done; + if (!_cmsReadUInt32Number(io, &UnicodeCode)) goto Done; + if (!_cmsReadUInt32Number(io, &UnicodeCount)) goto Done; + SizeOfTag -= 2* sizeof(cmsUInt32Number); + + if (SizeOfTag < UnicodeCount*sizeof(cmsUInt16Number)) goto Done; + + for (i=0; i < UnicodeCount; i++) { + if (!io ->Read(io, &Dummy, sizeof(cmsUInt16Number), 1)) goto Done; + } + SizeOfTag -= UnicodeCount*sizeof(cmsUInt16Number); + + // Skip ScriptCode code if present. Some buggy profiles does have less + // data that stricttly required. We need to skip it as this type may come + // embedded in other types. + + if (SizeOfTag >= sizeof(cmsUInt16Number) + sizeof(cmsUInt8Number) + 67) { + + if (!_cmsReadUInt16Number(io, &ScriptCodeCode)) goto Done; + if (!_cmsReadUInt8Number(io, &ScriptCodeCount)) goto Done; + + // Skip rest of tag + for (i=0; i < 67; i++) { + if (!io ->Read(io, &Dummy, sizeof(cmsUInt8Number), 1)) goto Error; + } + } + +Done: + + *nItems = 1; + return mlu; + +Error: + if (Text) _cmsFree(self ->ContextID, (void*) Text); + if (mlu) cmsMLUfree(mlu); + return NULL; +} + + +// This tag can come IN UNALIGNED SIZE. In order to prevent issues, we force zeros on description to align it +static +cmsBool Type_Text_Description_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsMLU* mlu = (cmsMLU*) Ptr; + char *Text = NULL; + wchar_t *Wide = NULL; + cmsUInt32Number len, len_aligned, len_filler_alignment; + cmsBool rc = FALSE; + char Filler[68]; + + // Used below for writting zeroes + memset(Filler, 0, sizeof(Filler)); + + // Get the len of string + len = cmsMLUgetASCII(mlu, cmsNoLanguage, cmsNoCountry, NULL, 0); + + // From ICC3.4: It has been found that textDescriptionType can contain misaligned data + //(see clause 4.1 for the definition of “aligned”). Because the Unicode language + // code and Unicode count immediately follow the ASCII description, their + // alignment is not correct if the ASCII count is not a multiple of four. The + // ScriptCode code is misaligned when the ASCII count is odd. Profile reading and + // writing software must be written carefully in order to handle these alignment + // problems. + + // Compute an aligned size + len_aligned = _cmsALIGNLONG(len); + len_filler_alignment = len_aligned - len; + + // Null strings + if (len <= 0) { + + Text = (char*) _cmsDupMem(self ->ContextID, "", sizeof(char)); + Wide = (wchar_t*) _cmsDupMem(self ->ContextID, L"", sizeof(wchar_t)); + } + else { + // Create independent buffers + Text = (char*) _cmsCalloc(self ->ContextID, len, sizeof(char)); + if (Text == NULL) goto Error; + + Wide = (wchar_t*) _cmsCalloc(self ->ContextID, len, sizeof(wchar_t)); + if (Wide == NULL) goto Error; + + // Get both representations. + cmsMLUgetASCII(mlu, cmsNoLanguage, cmsNoCountry, Text, len * sizeof(char)); + cmsMLUgetWide(mlu, cmsNoLanguage, cmsNoCountry, Wide, len * sizeof(wchar_t)); + } + + // * cmsUInt32Number count; * Description length + // * cmsInt8Number desc[count] * NULL terminated ascii string + // * cmsUInt32Number ucLangCode; * UniCode language code + // * cmsUInt32Number ucCount; * UniCode description length + // * cmsInt16Number ucDesc[ucCount];* The UniCode description + // * cmsUInt16Number scCode; * ScriptCode code + // * cmsUInt8Number scCount; * ScriptCode count + // * cmsInt8Number scDesc[67]; * ScriptCode Description + + if (!_cmsWriteUInt32Number(io, len_aligned)) goto Error; + if (!io ->Write(io, len, Text)) goto Error; + if (!io ->Write(io, len_filler_alignment, Filler)) goto Error; + + if (!_cmsWriteUInt32Number(io, 0)) goto Error; // ucLanguageCode + + // This part is tricky: we need an aligned tag size, and the ScriptCode part + // takes 70 bytes, so we need 2 extra bytes to do the alignment + + if (!_cmsWriteUInt32Number(io, len_aligned+1)) goto Error; + + // Note that in some compilers sizeof(cmsUInt16Number) != sizeof(wchar_t) + if (!_cmsWriteWCharArray(io, len, Wide)) goto Error; + if (!_cmsWriteUInt16Array(io, len_filler_alignment+1, (cmsUInt16Number*) Filler)) goto Error; + + // ScriptCode Code & count (unused) + if (!_cmsWriteUInt16Number(io, 0)) goto Error; + if (!_cmsWriteUInt8Number(io, 0)) goto Error; + + if (!io ->Write(io, 67, Filler)) goto Error; + + rc = TRUE; + +Error: + if (Text) _cmsFree(self ->ContextID, Text); + if (Wide) _cmsFree(self ->ContextID, Wide); + + return rc; + + cmsUNUSED_PARAMETER(nItems); +} + + +static +void* Type_Text_Description_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsMLUdup((cmsMLU*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_Text_Description_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsMLU* mlu = (cmsMLU*) Ptr; + + cmsMLUfree(mlu); + return; + + cmsUNUSED_PARAMETER(self); +} + + +static +cmsTagTypeSignature DecideTextDescType(cmsFloat64Number ICCVersion, const void *Data) +{ + if (ICCVersion >= 4.0) + return cmsSigMultiLocalizedUnicodeType; + + return cmsSigTextDescriptionType; + + cmsUNUSED_PARAMETER(Data); +} + + +// ******************************************************************************** +// Type cmsSigCurveType +// ******************************************************************************** + +static +void *Type_Curve_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsUInt32Number Count; + cmsToneCurve* NewGamma; + cmsUInt16Number Linear[2] = { 0, 0xffff }; + + + *nItems = 0; + if (!_cmsReadUInt32Number(io, &Count)) return NULL; + + switch (Count) { + + case 0: // Linear. + + NewGamma = cmsBuildTabulatedToneCurve16(self ->ContextID, 2, Linear); + if (!NewGamma) return NULL; + *nItems = 1; + return NewGamma; + + case 1: // Specified as the exponent of gamma function + { + cmsUInt16Number SingleGammaFixed; + cmsFloat64Number SingleGamma; + + if (!_cmsReadUInt16Number(io, &SingleGammaFixed)) return NULL; + SingleGamma = _cms8Fixed8toDouble(SingleGammaFixed); + + *nItems = 1; + return cmsBuildParametricToneCurve(self ->ContextID, 1, &SingleGamma); + } + + default: // Curve + + NewGamma = cmsBuildTabulatedToneCurve16(self ->ContextID, Count, NULL); + if (!NewGamma) return NULL; + + if (!_cmsReadUInt16Array(io, Count, NewGamma -> Table16)) return NULL; + + *nItems = 1; + return NewGamma; + } + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + +static +cmsBool Type_Curve_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsToneCurve* Curve = (cmsToneCurve*) Ptr; + + if (Curve ->nSegments == 1 && Curve ->Segments[0].Type == 1) { + + // Single gamma, preserve number + cmsUInt16Number SingleGammaFixed = _cmsDoubleTo8Fixed8(Curve ->Segments[0].Params[0]); + + if (!_cmsWriteUInt32Number(io, 1)) return FALSE; + if (!_cmsWriteUInt16Number(io, SingleGammaFixed)) return FALSE; + return TRUE; + + } + + if (!_cmsWriteUInt32Number(io, Curve ->nEntries)) return FALSE; + return _cmsWriteUInt16Array(io, Curve ->nEntries, Curve ->Table16); + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + + +static +void* Type_Curve_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsDupToneCurve((cmsToneCurve*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_Curve_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsToneCurve* gamma = (cmsToneCurve*) Ptr; + + cmsFreeToneCurve(gamma); + return; + + cmsUNUSED_PARAMETER(self); +} + + +// ******************************************************************************** +// Type cmsSigParametricCurveType +// ******************************************************************************** + + +// Decide which curve type to use on writting +static +cmsTagTypeSignature DecideCurveType(cmsFloat64Number ICCVersion, const void *Data) +{ + cmsToneCurve* Curve = (cmsToneCurve*) Data; + + if (ICCVersion < 4.0) return cmsSigCurveType; + if (Curve ->nSegments != 1) return cmsSigCurveType; // Only 1-segment curves can be saved as parametric + if (Curve ->Segments[0].Type < 0) return cmsSigCurveType; // Only non-inverted curves + + return cmsSigParametricCurveType; +} + +static +void *Type_ParametricCurve_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + static const int ParamsByType[] = { 1, 3, 4, 5, 7 }; + cmsFloat64Number Params[10]; + cmsUInt16Number Type; + int i, n; + cmsToneCurve* NewGamma; + + if (!_cmsReadUInt16Number(io, &Type)) return NULL; + if (!_cmsReadUInt16Number(io, NULL)) return NULL; // Reserved + + if (Type > 4) { + + cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown parametric curve type '%d'", Type); + return NULL; + } + + memset(Params, 0, sizeof(Params)); + n = ParamsByType[Type]; + + for (i=0; i < n; i++) { + + if (!_cmsRead15Fixed16Number(io, &Params[i])) return NULL; + } + + NewGamma = cmsBuildParametricToneCurve(self ->ContextID, Type+1, Params); + + *nItems = 1; + return NewGamma; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + +static +cmsBool Type_ParametricCurve_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsToneCurve* Curve = (cmsToneCurve*) Ptr; + int i, nParams, typen; + static const int ParamsByType[] = { 0, 1, 3, 4, 5, 7 }; + + typen = Curve -> Segments[0].Type; + + if (Curve ->nSegments > 1 || typen < 1) { + + cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Multisegment or Inverted parametric curves cannot be written"); + return FALSE; + } + + if (typen > 5) { + cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported parametric curve"); + return FALSE; + } + + nParams = ParamsByType[typen]; + + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) (Curve ->Segments[0].Type - 1))) return FALSE; + if (!_cmsWriteUInt16Number(io, 0)) return FALSE; // Reserved + + for (i=0; i < nParams; i++) { + + if (!_cmsWrite15Fixed16Number(io, Curve -> Segments[0].Params[i])) return FALSE; + } + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); +} + +static +void* Type_ParametricCurve_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsDupToneCurve((cmsToneCurve*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_ParametricCurve_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsToneCurve* gamma = (cmsToneCurve*) Ptr; + + cmsFreeToneCurve(gamma); + return; + + cmsUNUSED_PARAMETER(self); +} + + +// ******************************************************************************** +// Type cmsSigDateTimeType +// ******************************************************************************** + +// A 12-byte value representation of the time and date, where the byte usage is assigned +// as specified in table 1. The actual values are encoded as 16-bit unsigned integers +// (uInt16Number - see 5.1.6). +// +// All the dateTimeNumber values in a profile shall be in Coordinated Universal Time +// (UTC, also known as GMT or ZULU Time). Profile writers are required to convert local +// time to UTC when setting these values. Programmes that display these values may show +// the dateTimeNumber as UTC, show the equivalent local time (at current locale), or +// display both UTC and local versions of the dateTimeNumber. + +static +void *Type_DateTime_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsDateTimeNumber timestamp; + struct tm * NewDateTime; + + *nItems = 0; + NewDateTime = (struct tm*) _cmsMalloc(self ->ContextID, sizeof(struct tm)); + if (NewDateTime == NULL) return NULL; + + if (io->Read(io, ×tamp, sizeof(cmsDateTimeNumber), 1) != 1) return NULL; + + _cmsDecodeDateTimeNumber(×tamp, NewDateTime); + + *nItems = 1; + return NewDateTime; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + +static +cmsBool Type_DateTime_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + struct tm * DateTime = (struct tm*) Ptr; + cmsDateTimeNumber timestamp; + + _cmsEncodeDateTimeNumber(×tamp, DateTime); + if (!io ->Write(io, sizeof(cmsDateTimeNumber), ×tamp)) return FALSE; + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + +static +void* Type_DateTime_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return _cmsDupMem(self ->ContextID, Ptr, sizeof(struct tm)); + + cmsUNUSED_PARAMETER(n); +} + +static +void Type_DateTime_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + _cmsFree(self ->ContextID, Ptr); +} + + + +// ******************************************************************************** +// Type icMeasurementType +// ******************************************************************************** + +/* +The measurementType information refers only to the internal profile data and is +meant to provide profile makers an alternative to the default measurement +specifications. +*/ + +static +void *Type_Measurement_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsICCMeasurementConditions mc; + + if (!_cmsReadUInt32Number(io, &mc.Observer)) return NULL; + if (!_cmsReadXYZNumber(io, &mc.Backing)) return NULL; + if (!_cmsReadUInt32Number(io, &mc.Geometry)) return NULL; + if (!_cmsRead15Fixed16Number(io, &mc.Flare)) return NULL; + if (!_cmsReadUInt32Number(io, &mc.IlluminantType)) return NULL; + + *nItems = 1; + return _cmsDupMem(self ->ContextID, &mc, sizeof(cmsICCMeasurementConditions)); + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + +static +cmsBool Type_Measurement_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsICCMeasurementConditions* mc =(cmsICCMeasurementConditions*) Ptr; + + if (!_cmsWriteUInt32Number(io, mc->Observer)) return FALSE; + if (!_cmsWriteXYZNumber(io, &mc->Backing)) return FALSE; + if (!_cmsWriteUInt32Number(io, mc->Geometry)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, mc->Flare)) return FALSE; + if (!_cmsWriteUInt32Number(io, mc->IlluminantType)) return FALSE; + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + +static +void* Type_Measurement_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return _cmsDupMem(self ->ContextID, Ptr, sizeof(cmsICCMeasurementConditions)); + + cmsUNUSED_PARAMETER(n); +} + +static +void Type_Measurement_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + _cmsFree(self ->ContextID, Ptr); +} + + +// ******************************************************************************** +// Type cmsSigMultiLocalizedUnicodeType +// ******************************************************************************** +// +// Do NOT trust SizeOfTag as there is an issue on the definition of profileSequenceDescTag. See the TechNote from +// Max Derhak and Rohit Patil about this: basically the size of the string table should be guessed and cannot be +// taken from the size of tag if this tag is embedded as part of bigger structures (profileSequenceDescTag, for instance) +// + +static +void *Type_MLU_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsMLU* mlu; + cmsUInt32Number Count, RecLen, NumOfWchar; + cmsUInt32Number SizeOfHeader; + cmsUInt32Number Len, Offset; + cmsUInt32Number i; + wchar_t* Block; + cmsUInt32Number BeginOfThisString, EndOfThisString, LargestPosition; + + *nItems = 0; + if (!_cmsReadUInt32Number(io, &Count)) return NULL; + if (!_cmsReadUInt32Number(io, &RecLen)) return NULL; + + if (RecLen != 12) { + + cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "multiLocalizedUnicodeType of len != 12 is not supported."); + return NULL; + } + + mlu = cmsMLUalloc(self ->ContextID, Count); + if (mlu == NULL) return NULL; + + mlu ->UsedEntries = Count; + + SizeOfHeader = 12 * Count + sizeof(_cmsTagBase); + LargestPosition = 0; + + for (i=0; i < Count; i++) { + + if (!_cmsReadUInt16Number(io, &mlu ->Entries[i].Language)) goto Error; + if (!_cmsReadUInt16Number(io, &mlu ->Entries[i].Country)) goto Error; + + // Now deal with Len and offset. + if (!_cmsReadUInt32Number(io, &Len)) goto Error; + if (!_cmsReadUInt32Number(io, &Offset)) goto Error; + + // Check for overflow + if (Offset < (SizeOfHeader + 8)) goto Error; + + // True begin of the string + BeginOfThisString = Offset - SizeOfHeader - 8; + + // Ajust to wchar_t elements + mlu ->Entries[i].Len = (Len * sizeof(wchar_t)) / sizeof(cmsUInt16Number); + mlu ->Entries[i].StrW = (BeginOfThisString * sizeof(wchar_t)) / sizeof(cmsUInt16Number); + + // To guess maximum size, add offset + len + EndOfThisString = BeginOfThisString + Len; + if (EndOfThisString > LargestPosition) + LargestPosition = EndOfThisString; + } + + // Now read the remaining of tag and fill all strings. Substract the directory + SizeOfTag = (LargestPosition * sizeof(wchar_t)) / sizeof(cmsUInt16Number); + + Block = (wchar_t*) _cmsMalloc(self ->ContextID, SizeOfTag); + if (Block == NULL) goto Error; + + NumOfWchar = SizeOfTag / sizeof(wchar_t); + + if (!_cmsReadWCharArray(io, NumOfWchar, Block)) goto Error; + + mlu ->MemPool = Block; + mlu ->PoolSize = SizeOfTag; + mlu ->PoolUsed = SizeOfTag; + + *nItems = 1; + return (void*) mlu; + +Error: + if (mlu) cmsMLUfree(mlu); + return NULL; +} + +static +cmsBool Type_MLU_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsMLU* mlu =(cmsMLU*) Ptr; + cmsUInt32Number HeaderSize; + cmsUInt32Number Len, Offset; + int i; + + if (Ptr == NULL) { + + // Empty placeholder + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + if (!_cmsWriteUInt32Number(io, 12)) return FALSE; + return TRUE; + } + + if (!_cmsWriteUInt32Number(io, mlu ->UsedEntries)) return FALSE; + if (!_cmsWriteUInt32Number(io, 12)) return FALSE; + + HeaderSize = 12 * mlu ->UsedEntries + sizeof(_cmsTagBase); + + for (i=0; i < mlu ->UsedEntries; i++) { + + Len = mlu ->Entries[i].Len; + Offset = mlu ->Entries[i].StrW; + + Len = (Len * sizeof(cmsUInt16Number)) / sizeof(wchar_t); + Offset = (Offset * sizeof(cmsUInt16Number)) / sizeof(wchar_t) + HeaderSize + 8; + + if (!_cmsWriteUInt16Number(io, mlu ->Entries[i].Language)) return FALSE; + if (!_cmsWriteUInt16Number(io, mlu ->Entries[i].Country)) return FALSE; + if (!_cmsWriteUInt32Number(io, Len)) return FALSE; + if (!_cmsWriteUInt32Number(io, Offset)) return FALSE; + } + + if (!_cmsWriteWCharArray(io, mlu ->PoolUsed / sizeof(wchar_t), (wchar_t*) mlu ->MemPool)) return FALSE; + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + + +static +void* Type_MLU_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsMLUdup((cmsMLU*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_MLU_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsMLUfree((cmsMLU*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + + +// ******************************************************************************** +// Type cmsSigLut8Type +// ******************************************************************************** + +// Decide which LUT type to use on writting +static +cmsTagTypeSignature DecideLUTtypeA2B(cmsFloat64Number ICCVersion, const void *Data) +{ + cmsPipeline* Lut = (cmsPipeline*) Data; + + if (ICCVersion < 4.0) { + if (Lut ->SaveAs8Bits) return cmsSigLut8Type; + return cmsSigLut16Type; + } + else { + return cmsSigLutAtoBType; + } +} + +static +cmsTagTypeSignature DecideLUTtypeB2A(cmsFloat64Number ICCVersion, const void *Data) +{ + cmsPipeline* Lut = (cmsPipeline*) Data; + + if (ICCVersion < 4.0) { + if (Lut ->SaveAs8Bits) return cmsSigLut8Type; + return cmsSigLut16Type; + } + else { + return cmsSigLutBtoAType; + } +} + +/* +This structure represents a colour transform using tables of 8-bit precision. +This type contains four processing elements: a 3 by 3 matrix (which shall be +the identity matrix unless the input colour space is XYZ), a set of one dimensional +input tables, a multidimensional lookup table, and a set of one dimensional output +tables. Data is processed using these elements via the following sequence: +(matrix) -> (1d input tables) -> (multidimensional lookup table - CLUT) -> (1d output tables) + +Byte Position Field Length (bytes) Content Encoded as... +8 1 Number of Input Channels (i) uInt8Number +9 1 Number of Output Channels (o) uInt8Number +10 1 Number of CLUT grid points (identical for each side) (g) uInt8Number +11 1 Reserved for padding (fill with 00h) + +12..15 4 Encoded e00 parameter s15Fixed16Number +*/ + + +// Read 8 bit tables as gamma functions +static +cmsBool Read8bitTables(cmsContext ContextID, cmsIOHANDLER* io, cmsPipeline* lut, int nChannels) +{ + cmsStage* mpe; + cmsUInt8Number* Temp = NULL; + int i, j; + cmsToneCurve* Tables[cmsMAXCHANNELS]; + + if (nChannels > cmsMAXCHANNELS) return FALSE; + if (nChannels <= 0) return FALSE; + + memset(Tables, 0, sizeof(Tables)); + + Temp = (cmsUInt8Number*) _cmsMalloc(ContextID, 256); + if (Temp == NULL) return FALSE; + + for (i=0; i < nChannels; i++) { + Tables[i] = cmsBuildTabulatedToneCurve16(ContextID, 256, NULL); + if (Tables[i] == NULL) goto Error; + } + + for (i=0; i < nChannels; i++) { + + if (io ->Read(io, Temp, 256, 1) != 1) goto Error; + + for (j=0; j < 256; j++) + Tables[i]->Table16[j] = (cmsUInt16Number) FROM_8_TO_16(Temp[j]); + } + + _cmsFree(ContextID, Temp); + Temp = NULL; + + + mpe = cmsStageAllocToneCurves(ContextID, nChannels, Tables); + if (mpe == NULL) goto Error; + + cmsPipelineInsertStage(lut, cmsAT_END, mpe); + + for (i=0; i < nChannels; i++) + cmsFreeToneCurve(Tables[i]); + + return TRUE; + +Error: + for (i=0; i < nChannels; i++) { + if (Tables[i]) cmsFreeToneCurve(Tables[i]); + } + + if (Temp) _cmsFree(ContextID, Temp); + return FALSE; +} + + +static +cmsBool Write8bitTables(cmsContext ContextID, cmsIOHANDLER* io, cmsUInt32Number n, _cmsStageToneCurvesData* Tables) +{ + int j; + cmsUInt32Number i; + cmsUInt8Number val; + + for (i=0; i < n; i++) { + + if (Tables) { + + if (Tables ->TheCurves[i]->nEntries != 256) { + cmsSignalError(ContextID, cmsERROR_RANGE, "LUT8 needs 256 entries on prelinearization"); + return FALSE; + } + + } + + for (j=0; j < 256; j++) { + + if (Tables != NULL) + val = (cmsUInt8Number) FROM_16_TO_8(Tables->TheCurves[i]->Table16[j]); + else + val = (cmsUInt8Number) j; + + if (!_cmsWriteUInt8Number(io, val)) return FALSE; + } + } + return TRUE; +} + + +// Check overflow +static +unsigned int uipow(cmsUInt32Number n, cmsUInt32Number a, cmsUInt32Number b) +{ + cmsUInt32Number rv = 1, rc; + + if (a == 0) return 0; + if (n == 0) return 0; + + for (; b > 0; b--) { + + rv *= a; + + // Check for overflow + if (rv > UINT_MAX / a) return 0; + + } + + rc = rv * n; + + if (rv != rc / n) return 0; + return rc; +} + + +// That will create a MPE LUT with Matrix, pre tables, CLUT and post tables. +// 8 bit lut may be scaled easely to v4 PCS, but we need also to properly adjust +// PCS on BToAxx tags and AtoB if abstract. We need to fix input direction. + +static +void *Type_LUT8_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsUInt8Number InputChannels, OutputChannels, CLUTpoints; + cmsUInt8Number* Temp = NULL; + cmsPipeline* NewLUT = NULL; + cmsStage *mpemat, *mpeclut; + cmsUInt32Number nTabSize, i; + cmsFloat64Number Matrix[3*3]; + + *nItems = 0; + + if (!_cmsReadUInt8Number(io, &InputChannels)) goto Error; + if (!_cmsReadUInt8Number(io, &OutputChannels)) goto Error; + if (!_cmsReadUInt8Number(io, &CLUTpoints)) goto Error; + + // Padding + if (!_cmsReadUInt8Number(io, NULL)) goto Error; + + // Do some checking + + if (InputChannels > cmsMAXCHANNELS) goto Error; + if (OutputChannels > cmsMAXCHANNELS) goto Error; + + // Allocates an empty Pipeline + NewLUT = cmsPipelineAlloc(self ->ContextID, InputChannels, OutputChannels); + if (NewLUT == NULL) goto Error; + + // Read the Matrix + if (!_cmsRead15Fixed16Number(io, &Matrix[0])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[1])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[2])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[3])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[4])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[5])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[6])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[7])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[8])) goto Error; + + + // Only operates if not identity... + if ((InputChannels == 3) && !_cmsMAT3isIdentity((cmsMAT3*) Matrix)) { + + mpemat = cmsStageAllocMatrix(self ->ContextID, 3, 3, Matrix, NULL); + if (mpemat == NULL) goto Error; + cmsPipelineInsertStage(NewLUT, cmsAT_BEGIN, mpemat); + } + + // Get input tables + if (!Read8bitTables(self ->ContextID, io, NewLUT, InputChannels)) goto Error; + + // Get 3D CLUT. Check the overflow.... + nTabSize = uipow(OutputChannels, CLUTpoints, InputChannels); + if (nTabSize > 0) { + + cmsUInt16Number *PtrW, *T; + cmsUInt32Number Tsize; + + Tsize = (cmsUInt32Number) nTabSize * sizeof(cmsUInt16Number); + + PtrW = T = (cmsUInt16Number*) _cmsCalloc(self ->ContextID, nTabSize, sizeof(cmsUInt16Number)); + if (T == NULL) goto Error; + + Temp = (cmsUInt8Number*) _cmsMalloc(self ->ContextID, nTabSize); + if (Temp == NULL) goto Error; + + if (io ->Read(io, Temp, nTabSize, 1) != 1) goto Error; + + for (i = 0; i < nTabSize; i++) { + + *PtrW++ = FROM_8_TO_16(Temp[i]); + } + _cmsFree(self ->ContextID, Temp); + Temp = NULL; + + + mpeclut = cmsStageAllocCLut16bit(self ->ContextID, CLUTpoints, InputChannels, OutputChannels, T); + if (mpeclut == NULL) goto Error; + cmsPipelineInsertStage(NewLUT, cmsAT_END, mpeclut); + _cmsFree(self ->ContextID, T); + } + + + // Get output tables + if (!Read8bitTables(self ->ContextID, io, NewLUT, OutputChannels)) goto Error; + + *nItems = 1; + return NewLUT; + +Error: + if (NewLUT != NULL) cmsPipelineFree(NewLUT); + return NULL; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + +// We only allow a specific MPE structure: Matrix plus prelin, plus clut, plus post-lin. +static +cmsBool Type_LUT8_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsUInt32Number j, nTabSize; + cmsUInt8Number val; + cmsPipeline* NewLUT = (cmsPipeline*) Ptr; + cmsStage* mpe; + _cmsStageToneCurvesData* PreMPE = NULL, *PostMPE = NULL; + _cmsStageMatrixData* MatMPE = NULL; + _cmsStageCLutData* clut = NULL; + int clutPoints; + + // Disassemble the LUT into components. + mpe = NewLUT -> Elements; + if (mpe ->Type == cmsSigMatrixElemType) { + + MatMPE = (_cmsStageMatrixData*) mpe ->Data; + mpe = mpe -> Next; + } + + if (mpe != NULL && mpe ->Type == cmsSigCurveSetElemType) { + PreMPE = (_cmsStageToneCurvesData*) mpe ->Data; + mpe = mpe -> Next; + } + + if (mpe != NULL && mpe ->Type == cmsSigCLutElemType) { + clut = (_cmsStageCLutData*) mpe -> Data; + mpe = mpe ->Next; + } + + if (mpe != NULL && mpe ->Type == cmsSigCurveSetElemType) { + PostMPE = (_cmsStageToneCurvesData*) mpe ->Data; + mpe = mpe -> Next; + } + + // That should be all + if (mpe != NULL) { + cmsSignalError(mpe->ContextID, cmsERROR_UNKNOWN_EXTENSION, "LUT is not suitable to be saved as LUT8"); + return FALSE; + } + + + if (clut == NULL) + clutPoints = 0; + else + clutPoints = clut->Params->nSamples[0]; + + if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) NewLUT ->InputChannels)) return FALSE; + if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) NewLUT ->OutputChannels)) return FALSE; + if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) clutPoints)) return FALSE; + if (!_cmsWriteUInt8Number(io, 0)) return FALSE; // Padding + + + if (MatMPE != NULL) { + + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[0])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[1])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[2])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[3])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[4])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[5])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[6])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[7])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[8])) return FALSE; + + } + else { + + if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; + } + + // The prelinearization table + if (!Write8bitTables(self ->ContextID, io, NewLUT ->InputChannels, PreMPE)) return FALSE; + + nTabSize = uipow(NewLUT->OutputChannels, clutPoints, NewLUT ->InputChannels); + if (nTabSize > 0) { + + // The 3D CLUT. + if (clut != NULL) { + + for (j=0; j < nTabSize; j++) { + + val = (cmsUInt8Number) FROM_16_TO_8(clut ->Tab.T[j]); + if (!_cmsWriteUInt8Number(io, val)) return FALSE; + } + } + } + + // The postlinearization table + if (!Write8bitTables(self ->ContextID, io, NewLUT ->OutputChannels, PostMPE)) return FALSE; + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); +} + + +static +void* Type_LUT8_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsPipelineDup((cmsPipeline*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_LUT8_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsPipelineFree((cmsPipeline*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + +// ******************************************************************************** +// Type cmsSigLut16Type +// ******************************************************************************** + +// Read 16 bit tables as gamma functions +static +cmsBool Read16bitTables(cmsContext ContextID, cmsIOHANDLER* io, cmsPipeline* lut, int nChannels, int nEntries) +{ + cmsStage* mpe; + int i; + cmsToneCurve* Tables[cmsMAXCHANNELS]; + + // Maybe an empty table? (this is a lcms extension) + if (nEntries <= 0) return TRUE; + + // Check for malicious profiles + if (nChannels > cmsMAXCHANNELS) return FALSE; + + // Init table to zero + memset(Tables, 0, sizeof(Tables)); + + for (i=0; i < nChannels; i++) { + + Tables[i] = cmsBuildTabulatedToneCurve16(ContextID, nEntries, NULL); + if (Tables[i] == NULL) goto Error; + + if (!_cmsReadUInt16Array(io, nEntries, Tables[i]->Table16)) goto Error; + } + + + // Add the table (which may certainly be an identity, but this is up to the optimizer, not the reading code) + mpe = cmsStageAllocToneCurves(ContextID, nChannels, Tables); + if (mpe == NULL) goto Error; + + cmsPipelineInsertStage(lut, cmsAT_END, mpe); + + for (i=0; i < nChannels; i++) + cmsFreeToneCurve(Tables[i]); + + return TRUE; + +Error: + for (i=0; i < nChannels; i++) { + if (Tables[i]) cmsFreeToneCurve(Tables[i]); + } + + return FALSE; +} + +static +cmsBool Write16bitTables(cmsContext ContextID, cmsIOHANDLER* io, _cmsStageToneCurvesData* Tables) +{ + int j; + cmsUInt32Number i; + cmsUInt16Number val; + int nEntries = 256; + + nEntries = Tables->TheCurves[0]->nEntries; + + for (i=0; i < Tables ->nCurves; i++) { + + for (j=0; j < nEntries; j++) { + + if (Tables != NULL) + val = Tables->TheCurves[i]->Table16[j]; + else + val = _cmsQuantizeVal(j, nEntries); + + if (!_cmsWriteUInt16Number(io, val)) return FALSE; + } + } + return TRUE; + + cmsUNUSED_PARAMETER(ContextID); +} + +static +void *Type_LUT16_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsUInt8Number InputChannels, OutputChannels, CLUTpoints; + cmsPipeline* NewLUT = NULL; + cmsStage *mpemat, *mpeclut; + cmsUInt32Number nTabSize; + cmsFloat64Number Matrix[3*3]; + cmsUInt16Number InputEntries, OutputEntries; + + *nItems = 0; + + if (!_cmsReadUInt8Number(io, &InputChannels)) return NULL; + if (!_cmsReadUInt8Number(io, &OutputChannels)) return NULL; + if (!_cmsReadUInt8Number(io, &CLUTpoints)) return NULL; // 255 maximum + + // Padding + if (!_cmsReadUInt8Number(io, NULL)) return NULL; + + // Do some checking + if (InputChannels > cmsMAXCHANNELS) goto Error; + if (OutputChannels > cmsMAXCHANNELS) goto Error; + + // Allocates an empty LUT + NewLUT = cmsPipelineAlloc(self ->ContextID, InputChannels, OutputChannels); + if (NewLUT == NULL) goto Error; + + // Read the Matrix + if (!_cmsRead15Fixed16Number(io, &Matrix[0])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[1])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[2])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[3])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[4])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[5])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[6])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[7])) goto Error; + if (!_cmsRead15Fixed16Number(io, &Matrix[8])) goto Error; + + + // Only operates on 3 channels + + if ((InputChannels == 3) && !_cmsMAT3isIdentity((cmsMAT3*) Matrix)) { + + mpemat = cmsStageAllocMatrix(self ->ContextID, 3, 3, Matrix, NULL); + if (mpemat == NULL) goto Error; + cmsPipelineInsertStage(NewLUT, cmsAT_END, mpemat); + } + + if (!_cmsReadUInt16Number(io, &InputEntries)) return NULL; + if (!_cmsReadUInt16Number(io, &OutputEntries)) return NULL; + + + // Get input tables + if (!Read16bitTables(self ->ContextID, io, NewLUT, InputChannels, InputEntries)) goto Error; + + // Get 3D CLUT + nTabSize = uipow(OutputChannels, CLUTpoints, InputChannels); + if (nTabSize > 0) { + + cmsUInt16Number *T; + + T = (cmsUInt16Number*) _cmsCalloc(self ->ContextID, nTabSize, sizeof(cmsUInt16Number)); + if (T == NULL) goto Error; + + if (!_cmsReadUInt16Array(io, nTabSize, T)) { + _cmsFree(self ->ContextID, T); + goto Error; + } + + mpeclut = cmsStageAllocCLut16bit(self ->ContextID, CLUTpoints, InputChannels, OutputChannels, T); + if (mpeclut == NULL) { + _cmsFree(self ->ContextID, T); + goto Error; + } + + cmsPipelineInsertStage(NewLUT, cmsAT_END, mpeclut); + _cmsFree(self ->ContextID, T); + } + + + // Get output tables + if (!Read16bitTables(self ->ContextID, io, NewLUT, OutputChannels, OutputEntries)) goto Error; + + *nItems = 1; + return NewLUT; + +Error: + if (NewLUT != NULL) cmsPipelineFree(NewLUT); + return NULL; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + +// We only allow some specific MPE structures: Matrix plus prelin, plus clut, plus post-lin. +// Some empty defaults are created for missing parts + +static +cmsBool Type_LUT16_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsUInt32Number nTabSize; + cmsPipeline* NewLUT = (cmsPipeline*) Ptr; + cmsStage* mpe; + _cmsStageToneCurvesData* PreMPE = NULL, *PostMPE = NULL; + _cmsStageMatrixData* MatMPE = NULL; + _cmsStageCLutData* clut = NULL; + int InputChannels, OutputChannels, clutPoints; + + // Disassemble the LUT into components. + mpe = NewLUT -> Elements; + if (mpe != NULL && mpe ->Type == cmsSigMatrixElemType) { + + MatMPE = (_cmsStageMatrixData*) mpe ->Data; + mpe = mpe -> Next; + } + + + if (mpe != NULL && mpe ->Type == cmsSigCurveSetElemType) { + PreMPE = (_cmsStageToneCurvesData*) mpe ->Data; + mpe = mpe -> Next; + } + + if (mpe != NULL && mpe ->Type == cmsSigCLutElemType) { + clut = (_cmsStageCLutData*) mpe -> Data; + mpe = mpe ->Next; + } + + if (mpe != NULL && mpe ->Type == cmsSigCurveSetElemType) { + PostMPE = (_cmsStageToneCurvesData*) mpe ->Data; + mpe = mpe -> Next; + } + + // That should be all + if (mpe != NULL) { + cmsSignalError(mpe->ContextID, cmsERROR_UNKNOWN_EXTENSION, "LUT is not suitable to be saved as LUT16"); + return FALSE; + } + + InputChannels = cmsPipelineInputChannels(NewLUT); + OutputChannels = cmsPipelineOutputChannels(NewLUT); + + if (clut == NULL) + clutPoints = 0; + else + clutPoints = clut->Params->nSamples[0]; + + if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) InputChannels)) return FALSE; + if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) OutputChannels)) return FALSE; + if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) clutPoints)) return FALSE; + if (!_cmsWriteUInt8Number(io, 0)) return FALSE; // Padding + + + if (MatMPE != NULL) { + + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[0])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[1])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[2])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[3])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[4])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[5])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[6])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[7])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, MatMPE -> Double[8])) return FALSE; + } + else { + + if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; + } + + + if (PreMPE != NULL) { + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) PreMPE ->TheCurves[0]->nEntries)) return FALSE; + } else { + if (!_cmsWriteUInt16Number(io, 0)) return FALSE; + } + + if (PostMPE != NULL) { + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) PostMPE ->TheCurves[0]->nEntries)) return FALSE; + } else { + if (!_cmsWriteUInt16Number(io, 0)) return FALSE; + + } + + // The prelinearization table + + if (PreMPE != NULL) { + if (!Write16bitTables(self ->ContextID, io, PreMPE)) return FALSE; + } + + nTabSize = uipow(OutputChannels, clutPoints, InputChannels); + + if (nTabSize > 0) { + // The 3D CLUT. + if (clut != NULL) { + if (!_cmsWriteUInt16Array(io, nTabSize, clut->Tab.T)) return FALSE; + } + } + + // The postlinearization table + if (PostMPE != NULL) { + if (!Write16bitTables(self ->ContextID, io, PostMPE)) return FALSE; + } + + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); +} + +static +void* Type_LUT16_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsPipelineDup((cmsPipeline*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_LUT16_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsPipelineFree((cmsPipeline*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + + +// ******************************************************************************** +// Type cmsSigLutAToBType +// ******************************************************************************** + + +// V4 stuff. Read matrix for LutAtoB and LutBtoA + +static +cmsStage* ReadMatrix(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number Offset) +{ + cmsFloat64Number dMat[3*3]; + cmsFloat64Number dOff[3]; + cmsStage* Mat; + + // Go to address + if (!io -> Seek(io, Offset)) return NULL; + + // Read the Matrix + if (!_cmsRead15Fixed16Number(io, &dMat[0])) return NULL; + if (!_cmsRead15Fixed16Number(io, &dMat[1])) return NULL; + if (!_cmsRead15Fixed16Number(io, &dMat[2])) return NULL; + if (!_cmsRead15Fixed16Number(io, &dMat[3])) return NULL; + if (!_cmsRead15Fixed16Number(io, &dMat[4])) return NULL; + if (!_cmsRead15Fixed16Number(io, &dMat[5])) return NULL; + if (!_cmsRead15Fixed16Number(io, &dMat[6])) return NULL; + if (!_cmsRead15Fixed16Number(io, &dMat[7])) return NULL; + if (!_cmsRead15Fixed16Number(io, &dMat[8])) return NULL; + + if (!_cmsRead15Fixed16Number(io, &dOff[0])) return NULL; + if (!_cmsRead15Fixed16Number(io, &dOff[1])) return NULL; + if (!_cmsRead15Fixed16Number(io, &dOff[2])) return NULL; + + Mat = cmsStageAllocMatrix(self ->ContextID, 3, 3, dMat, dOff); + + return Mat; +} + + + + +// V4 stuff. Read CLUT part for LutAtoB and LutBtoA + +static +cmsStage* ReadCLUT(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number Offset, int InputChannels, int OutputChannels) +{ + cmsUInt8Number gridPoints8[cmsMAXCHANNELS]; // Number of grid points in each dimension. + cmsUInt32Number GridPoints[cmsMAXCHANNELS], i; + cmsUInt8Number Precision; + cmsStage* CLUT; + _cmsStageCLutData* Data; + + if (!io -> Seek(io, Offset)) return NULL; + if (io -> Read(io, gridPoints8, cmsMAXCHANNELS, 1) != 1) return NULL; + + for (i=0; i < cmsMAXCHANNELS; i++) + GridPoints[i] = gridPoints8[i]; + + if (!_cmsReadUInt8Number(io, &Precision)) return NULL; + + if (!_cmsReadUInt8Number(io, NULL)) return NULL; + if (!_cmsReadUInt8Number(io, NULL)) return NULL; + if (!_cmsReadUInt8Number(io, NULL)) return NULL; + + CLUT = cmsStageAllocCLut16bitGranular(self ->ContextID, GridPoints, InputChannels, OutputChannels, NULL); + if (CLUT == NULL) return NULL; + + Data = (_cmsStageCLutData*) CLUT ->Data; + + // Precision can be 1 or 2 bytes + if (Precision == 1) { + + cmsUInt8Number v; + + for (i=0; i < Data ->nEntries; i++) { + + if (io ->Read(io, &v, sizeof(cmsUInt8Number), 1) != 1) return NULL; + Data ->Tab.T[i] = FROM_8_TO_16(v); + } + + } + else + if (Precision == 2) { + + if (!_cmsReadUInt16Array(io, Data->nEntries, Data ->Tab.T)) return NULL; + } + else { + cmsSignalError(self ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown precision of '%d'", Precision); + return NULL; + } + + + return CLUT; +} + +static +cmsToneCurve* ReadEmbeddedCurve(struct _cms_typehandler_struct* self, cmsIOHANDLER* io) +{ + cmsTagTypeSignature BaseType; + cmsUInt32Number nItems; + + BaseType = _cmsReadTypeBase(io); + switch (BaseType) { + + case cmsSigCurveType: + return (cmsToneCurve*) Type_Curve_Read(self, io, &nItems, 0); + + case cmsSigParametricCurveType: + return (cmsToneCurve*) Type_ParametricCurve_Read(self, io, &nItems, 0); + + default: + { + char String[5]; + + _cmsTagSignature2String(String, (cmsTagSignature) BaseType); + cmsSignalError(self ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown curve type '%s'", String); + } + return NULL; + } +} + + +// Read a set of curves from specific offset +static +cmsStage* ReadSetOfCurves(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number Offset, cmsUInt32Number nCurves) +{ + cmsToneCurve* Curves[cmsMAXCHANNELS]; + cmsUInt32Number i; + cmsStage* Lin = NULL; + + if (nCurves > cmsMAXCHANNELS) return FALSE; + + if (!io -> Seek(io, Offset)) return FALSE; + + for (i=0; i < nCurves; i++) + Curves[i] = NULL; + + for (i=0; i < nCurves; i++) { + + Curves[i] = ReadEmbeddedCurve(self, io); + if (Curves[i] == NULL) goto Error; + if (!_cmsReadAlignment(io)) goto Error; + } + + Lin = cmsStageAllocToneCurves(self ->ContextID, nCurves, Curves); + +Error: + for (i=0; i < nCurves; i++) + cmsFreeToneCurve(Curves[i]); + + return Lin; +} + + +// LutAtoB type + +// This structure represents a colour transform. The type contains up to five processing +// elements which are stored in the AtoBTag tag in the following order: a set of one +// dimensional curves, a 3 by 3 matrix with offset terms, a set of one dimensional curves, +// a multidimensional lookup table, and a set of one dimensional output curves. +// Data are processed using these elements via the following sequence: +// +//("A" curves) -> (multidimensional lookup table - CLUT) -> ("M" curves) -> (matrix) -> ("B" curves). +// +/* +It is possible to use any or all of these processing elements. At least one processing element +must be included.Only the following combinations are allowed: + +B +M - Matrix - B +A - CLUT - B +A - CLUT - M - Matrix - B + +*/ + +static +void* Type_LUTA2B_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsUInt32Number BaseOffset; + cmsUInt8Number inputChan; // Number of input channels + cmsUInt8Number outputChan; // Number of output channels + cmsUInt32Number offsetB; // Offset to first "B" curve + cmsUInt32Number offsetMat; // Offset to matrix + cmsUInt32Number offsetM; // Offset to first "M" curve + cmsUInt32Number offsetC; // Offset to CLUT + cmsUInt32Number offsetA; // Offset to first "A" curve + cmsStage* mpe; + cmsPipeline* NewLUT = NULL; + + + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + if (!_cmsReadUInt8Number(io, &inputChan)) return NULL; + if (!_cmsReadUInt8Number(io, &outputChan)) return NULL; + + if (!_cmsReadUInt16Number(io, NULL)) return NULL; + + if (!_cmsReadUInt32Number(io, &offsetB)) return NULL; + if (!_cmsReadUInt32Number(io, &offsetMat)) return NULL; + if (!_cmsReadUInt32Number(io, &offsetM)) return NULL; + if (!_cmsReadUInt32Number(io, &offsetC)) return NULL; + if (!_cmsReadUInt32Number(io, &offsetA)) return NULL; + + // Allocates an empty LUT + NewLUT = cmsPipelineAlloc(self ->ContextID, inputChan, outputChan); + if (NewLUT == NULL) return NULL; + + if (offsetA!= 0) { + mpe = ReadSetOfCurves(self, io, BaseOffset + offsetA, inputChan); + cmsPipelineInsertStage(NewLUT, cmsAT_END, mpe); + } + + if (offsetC != 0) { + mpe = ReadCLUT(self, io, BaseOffset + offsetC, inputChan, outputChan); + if (mpe != NULL) cmsPipelineInsertStage(NewLUT, cmsAT_END, mpe); + } + + if (offsetM != 0) { + mpe = ReadSetOfCurves(self, io, BaseOffset + offsetM, outputChan); + if (mpe != NULL) cmsPipelineInsertStage(NewLUT, cmsAT_END, mpe); + } + + if (offsetMat != 0) { + mpe = ReadMatrix(self, io, BaseOffset + offsetMat); + if (mpe != NULL) cmsPipelineInsertStage(NewLUT, cmsAT_END, mpe); + } + + if (offsetB != 0) { + mpe = ReadSetOfCurves(self, io, BaseOffset + offsetB, outputChan); + if (mpe != NULL) cmsPipelineInsertStage(NewLUT, cmsAT_END, mpe); + } + + *nItems = 1; + return NewLUT; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + +// Write a set of curves +static +cmsBool WriteMatrix(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsStage* mpe) +{ + _cmsStageMatrixData* m = (_cmsStageMatrixData*) mpe -> Data; + + // Write the Matrix + if (!_cmsWrite15Fixed16Number(io, m -> Double[0])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, m -> Double[1])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, m -> Double[2])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, m -> Double[3])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, m -> Double[4])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, m -> Double[5])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, m -> Double[6])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, m -> Double[7])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, m -> Double[8])) return FALSE; + + if (m ->Offset != NULL) { + + if (!_cmsWrite15Fixed16Number(io, m -> Offset[0])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, m -> Offset[1])) return FALSE; + if (!_cmsWrite15Fixed16Number(io, m -> Offset[2])) return FALSE; + } + else { + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; + + } + + + return TRUE; + + cmsUNUSED_PARAMETER(self); +} + + +// Write a set of curves +static +cmsBool WriteSetOfCurves(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsTagTypeSignature Type, cmsStage* mpe) +{ + cmsUInt32Number i, n; + cmsTagTypeSignature CurrentType; + cmsToneCurve** Curves; + + + n = cmsStageOutputChannels(mpe); + Curves = _cmsStageGetPtrToCurveSet(mpe); + + for (i=0; i < n; i++) { + + // If this is a table-based curve, use curve type even on V4 + CurrentType = Type; + + if ((Curves[i] ->nSegments == 0)||(Curves[i]->nSegments == 2) && (Curves[i] ->Segments[1].Type == 0)) + CurrentType = cmsSigCurveType; + else + if (Curves[i] ->Segments[0].Type < 0) + CurrentType = cmsSigCurveType; + + if (!_cmsWriteTypeBase(io, CurrentType)) return FALSE; + + switch (CurrentType) { + + case cmsSigCurveType: + if (!Type_Curve_Write(self, io, Curves[i], 1)) return FALSE; + break; + + case cmsSigParametricCurveType: + if (!Type_ParametricCurve_Write(self, io, Curves[i], 1)) return FALSE; + break; + + default: + { + char String[5]; + + _cmsTagSignature2String(String, (cmsTagSignature) Type); + cmsSignalError(self ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown curve type '%s'", String); + } + return FALSE; + } + + if (!_cmsWriteAlignment(io)) return FALSE; + } + + + return TRUE; +} + + +static +cmsBool WriteCLUT(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt8Number Precision, cmsStage* mpe) +{ + cmsUInt8Number gridPoints[cmsMAXCHANNELS]; // Number of grid points in each dimension. + cmsUInt32Number i; + _cmsStageCLutData* CLUT = ( _cmsStageCLutData*) mpe -> Data; + + if (CLUT ->HasFloatValues) { + cmsSignalError(self ->ContextID, cmsERROR_NOT_SUITABLE, "Cannot save floating point data, CLUT are 8 or 16 bit only"); + return FALSE; + } + + memset(gridPoints, 0, sizeof(gridPoints)); + for (i=0; i < (cmsUInt32Number) CLUT ->Params ->nInputs; i++) + gridPoints[i] = (cmsUInt8Number) CLUT ->Params ->nSamples[i]; + + if (!io -> Write(io, cmsMAXCHANNELS*sizeof(cmsUInt8Number), gridPoints)) return FALSE; + + if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) Precision)) return FALSE; + if (!_cmsWriteUInt8Number(io, 0)) return FALSE; + if (!_cmsWriteUInt8Number(io, 0)) return FALSE; + if (!_cmsWriteUInt8Number(io, 0)) return FALSE; + + // Precision can be 1 or 2 bytes + if (Precision == 1) { + + for (i=0; i < CLUT->nEntries; i++) { + + if (!_cmsWriteUInt8Number(io, FROM_16_TO_8(CLUT->Tab.T[i]))) return FALSE; + } + } + else + if (Precision == 2) { + + if (!_cmsWriteUInt16Array(io, CLUT->nEntries, CLUT ->Tab.T)) return FALSE; + } + else { + cmsSignalError(self ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown precision of '%d'", Precision); + return FALSE; + } + + if (!_cmsWriteAlignment(io)) return FALSE; + + return TRUE; +} + + + + +static +cmsBool Type_LUTA2B_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsPipeline* Lut = (cmsPipeline*) Ptr; + int inputChan, outputChan; + cmsStage *A = NULL, *B = NULL, *M = NULL; + cmsStage * Matrix = NULL; + cmsStage * CLUT = NULL; + cmsUInt32Number offsetB = 0, offsetMat = 0, offsetM = 0, offsetC = 0, offsetA = 0; + cmsUInt32Number BaseOffset, DirectoryPos, CurrentPos; + + // Get the base for all offsets + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + if (Lut ->Elements != NULL) + if (!cmsPipelineCheckAndRetreiveStages(Lut, 1, cmsSigCurveSetElemType, &B)) + if (!cmsPipelineCheckAndRetreiveStages(Lut, 3, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, &M, &Matrix, &B)) + if (!cmsPipelineCheckAndRetreiveStages(Lut, 3, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, &A, &CLUT, &B)) + if (!cmsPipelineCheckAndRetreiveStages(Lut, 5, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, + cmsSigMatrixElemType, cmsSigCurveSetElemType, &A, &CLUT, &M, &Matrix, &B)) { + + cmsSignalError(self->ContextID, cmsERROR_NOT_SUITABLE, "LUT is not suitable to be saved as LutAToB"); + return FALSE; + } + + // Get input, output channels + inputChan = cmsPipelineInputChannels(Lut); + outputChan = cmsPipelineOutputChannels(Lut); + + // Write channel count + if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) inputChan)) return FALSE; + if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) outputChan)) return FALSE; + if (!_cmsWriteUInt16Number(io, 0)) return FALSE; + + // Keep directory to be filled latter + DirectoryPos = io ->Tell(io); + + // Write the directory + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + + if (A != NULL) { + + offsetA = io ->Tell(io) - BaseOffset; + if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, A)) return FALSE; + } + + if (CLUT != NULL) { + offsetC = io ->Tell(io) - BaseOffset; + if (!WriteCLUT(self, io, Lut ->SaveAs8Bits ? 1 : 2, CLUT)) return FALSE; + + } + if (M != NULL) { + + offsetM = io ->Tell(io) - BaseOffset; + if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, M)) return FALSE; + } + + if (Matrix != NULL) { + offsetMat = io ->Tell(io) - BaseOffset; + if (!WriteMatrix(self, io, Matrix)) return FALSE; + } + + if (B != NULL) { + + offsetB = io ->Tell(io) - BaseOffset; + if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, B)) return FALSE; + } + + CurrentPos = io ->Tell(io); + + if (!io ->Seek(io, DirectoryPos)) return FALSE; + + if (!_cmsWriteUInt32Number(io, offsetB)) return FALSE; + if (!_cmsWriteUInt32Number(io, offsetMat)) return FALSE; + if (!_cmsWriteUInt32Number(io, offsetM)) return FALSE; + if (!_cmsWriteUInt32Number(io, offsetC)) return FALSE; + if (!_cmsWriteUInt32Number(io, offsetA)) return FALSE; + + if (!io ->Seek(io, CurrentPos)) return FALSE; + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); +} + + +static +void* Type_LUTA2B_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsPipelineDup((cmsPipeline*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_LUTA2B_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsPipelineFree((cmsPipeline*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + + +// LutBToA type + +static +void* Type_LUTB2A_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsUInt8Number inputChan; // Number of input channels + cmsUInt8Number outputChan; // Number of output channels + cmsUInt32Number BaseOffset; // Actual position in file + cmsUInt32Number offsetB; // Offset to first "B" curve + cmsUInt32Number offsetMat; // Offset to matrix + cmsUInt32Number offsetM; // Offset to first "M" curve + cmsUInt32Number offsetC; // Offset to CLUT + cmsUInt32Number offsetA; // Offset to first "A" curve + cmsStage* mpe; + cmsPipeline* NewLUT = NULL; + + + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + if (!_cmsReadUInt8Number(io, &inputChan)) return NULL; + if (!_cmsReadUInt8Number(io, &outputChan)) return NULL; + + // Padding + if (!_cmsReadUInt16Number(io, NULL)) return NULL; + + if (!_cmsReadUInt32Number(io, &offsetB)) return NULL; + if (!_cmsReadUInt32Number(io, &offsetMat)) return NULL; + if (!_cmsReadUInt32Number(io, &offsetM)) return NULL; + if (!_cmsReadUInt32Number(io, &offsetC)) return NULL; + if (!_cmsReadUInt32Number(io, &offsetA)) return NULL; + + // Allocates an empty LUT + NewLUT = cmsPipelineAlloc(self ->ContextID, inputChan, outputChan); + if (NewLUT == NULL) return NULL; + + if (offsetB != 0) { + mpe = ReadSetOfCurves(self, io, BaseOffset + offsetB, inputChan); + if (mpe != NULL) cmsPipelineInsertStage(NewLUT, cmsAT_END, mpe); + } + + if (offsetMat != 0) { + mpe = ReadMatrix(self, io, BaseOffset + offsetMat); + if (mpe != NULL) cmsPipelineInsertStage(NewLUT, cmsAT_END, mpe); + } + + if (offsetM != 0) { + mpe = ReadSetOfCurves(self, io, BaseOffset + offsetM, inputChan); + if (mpe != NULL) cmsPipelineInsertStage(NewLUT, cmsAT_END, mpe); + } + + if (offsetC != 0) { + mpe = ReadCLUT(self, io, BaseOffset + offsetC, inputChan, outputChan); + if (mpe != NULL) cmsPipelineInsertStage(NewLUT, cmsAT_END, mpe); + } + + if (offsetA!= 0) { + mpe = ReadSetOfCurves(self, io, BaseOffset + offsetA, outputChan); + if (mpe != NULL) cmsPipelineInsertStage(NewLUT, cmsAT_END, mpe); + } + + *nItems = 1; + return NewLUT; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + +/* +B +B - Matrix - M +B - CLUT - A +B - Matrix - M - CLUT - A +*/ + +static +cmsBool Type_LUTB2A_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsPipeline* Lut = (cmsPipeline*) Ptr; + int inputChan, outputChan; + cmsStage *A = NULL, *B = NULL, *M = NULL; + cmsStage *Matrix = NULL; + cmsStage *CLUT = NULL; + cmsUInt32Number offsetB = 0, offsetMat = 0, offsetM = 0, offsetC = 0, offsetA = 0; + cmsUInt32Number BaseOffset, DirectoryPos, CurrentPos; + + + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + if (!cmsPipelineCheckAndRetreiveStages(Lut, 1, cmsSigCurveSetElemType, &B)) + if (!cmsPipelineCheckAndRetreiveStages(Lut, 3, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, &B, &Matrix, &M)) + if (!cmsPipelineCheckAndRetreiveStages(Lut, 3, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, &B, &CLUT, &A)) + if (!cmsPipelineCheckAndRetreiveStages(Lut, 5, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, + cmsSigCLutElemType, cmsSigCurveSetElemType, &B, &Matrix, &M, &CLUT, &A)) { + cmsSignalError(self->ContextID, cmsERROR_NOT_SUITABLE, "LUT is not suitable to be saved as LutBToA"); + return FALSE; + } + + inputChan = cmsPipelineInputChannels(Lut); + outputChan = cmsPipelineOutputChannels(Lut); + + if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) inputChan)) return FALSE; + if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) outputChan)) return FALSE; + if (!_cmsWriteUInt16Number(io, 0)) return FALSE; + + DirectoryPos = io ->Tell(io); + + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + + if (A != NULL) { + + offsetA = io ->Tell(io) - BaseOffset; + if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, A)) return FALSE; + } + + if (CLUT != NULL) { + offsetC = io ->Tell(io) - BaseOffset; + if (!WriteCLUT(self, io, Lut ->SaveAs8Bits ? 1 : 2, CLUT)) return FALSE; + + } + if (M != NULL) { + + offsetM = io ->Tell(io) - BaseOffset; + if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, M)) return FALSE; + } + + if (Matrix != NULL) { + offsetMat = io ->Tell(io) - BaseOffset; + if (!WriteMatrix(self, io, Matrix)) return FALSE; + } + + if (B != NULL) { + + offsetB = io ->Tell(io) - BaseOffset; + if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, B)) return FALSE; + } + + CurrentPos = io ->Tell(io); + + if (!io ->Seek(io, DirectoryPos)) return FALSE; + + if (!_cmsWriteUInt32Number(io, offsetB)) return FALSE; + if (!_cmsWriteUInt32Number(io, offsetMat)) return FALSE; + if (!_cmsWriteUInt32Number(io, offsetM)) return FALSE; + if (!_cmsWriteUInt32Number(io, offsetC)) return FALSE; + if (!_cmsWriteUInt32Number(io, offsetA)) return FALSE; + + if (!io ->Seek(io, CurrentPos)) return FALSE; + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); +} + + + +static +void* Type_LUTB2A_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsPipelineDup((cmsPipeline*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_LUTB2A_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsPipelineFree((cmsPipeline*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + + + +// ******************************************************************************** +// Type cmsSigColorantTableType +// ******************************************************************************** +/* +The purpose of this tag is to identify the colorants used in the profile by a +unique name and set of XYZ or L*a*b* values to give the colorant an unambiguous +value. The first colorant listed is the colorant of the first device channel of +a lut tag. The second colorant listed is the colorant of the second device channel +of a lut tag, and so on. +*/ + +static +void *Type_ColorantTable_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsUInt32Number i, Count; + cmsNAMEDCOLORLIST* List; + char Name[34]; + cmsUInt16Number PCS[3]; + + + if (!_cmsReadUInt32Number(io, &Count)) return NULL; + + if (Count > cmsMAXCHANNELS) { + cmsSignalError(self->ContextID, cmsERROR_RANGE, "Too many colorants '%d'", Count); + return NULL; + } + + List = cmsAllocNamedColorList(self ->ContextID, Count, 0, "", ""); + for (i=0; i < Count; i++) { + + if (io ->Read(io, Name, 32, 1) != 1) goto Error; + Name[33] = 0; + + if (!_cmsReadUInt16Array(io, 3, PCS)) goto Error; + + if (!cmsAppendNamedColor(List, Name, PCS, NULL)) goto Error; + + } + + *nItems = 1; + return List; + +Error: + *nItems = 0; + cmsFreeNamedColorList(List); + return NULL; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + + +// Saves a colorant table. It is using the named color structure for simplicity sake +static +cmsBool Type_ColorantTable_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsNAMEDCOLORLIST* NamedColorList = (cmsNAMEDCOLORLIST*) Ptr; + int i, nColors; + + nColors = cmsNamedColorCount(NamedColorList); + + if (!_cmsWriteUInt32Number(io, nColors)) return FALSE; + + for (i=0; i < nColors; i++) { + + char root[33]; + cmsUInt16Number PCS[3]; + + if (!cmsNamedColorInfo(NamedColorList, i, root, NULL, NULL, PCS, NULL)) return 0; + root[32] = 0; + + if (!io ->Write(io, 32, root)) return FALSE; + if (!_cmsWriteUInt16Array(io, 3, PCS)) return FALSE; + } + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + + +static +void* Type_ColorantTable_Dup(struct _cms_typehandler_struct* self, const void* Ptr, cmsUInt32Number n) +{ + cmsNAMEDCOLORLIST* nc = (cmsNAMEDCOLORLIST*) Ptr; + return (void*) cmsDupNamedColorList(nc); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + + +static +void Type_ColorantTable_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsFreeNamedColorList((cmsNAMEDCOLORLIST*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + + +// ******************************************************************************** +// Type cmsSigNamedColor2Type +// ******************************************************************************** +// +//The namedColor2Type is a count value and array of structures that provide color +//coordinates for 7-bit ASCII color names. For each named color, a PCS and optional +//device representation of the color are given. Both representations are 16-bit values. +//The device representation corresponds to the header’s “color space of data” field. +//This representation should be consistent with the “number of device components” +//field in the namedColor2Type. If this field is 0, device coordinates are not provided. +//The PCS representation corresponds to the header’s PCS field. The PCS representation +//is always provided. Color names are fixed-length, 32-byte fields including null +//termination. In order to maintain maximum portability, it is strongly recommended +//that special characters of the 7-bit ASCII set not be used. + +static +void *Type_NamedColor_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + + cmsUInt32Number vendorFlag; // Bottom 16 bits for ICC use + cmsUInt32Number count; // Count of named colors + cmsUInt32Number nDeviceCoords; // Num of device coordinates + char prefix[32]; // Prefix for each color name + char suffix[32]; // Suffix for each color name + cmsNAMEDCOLORLIST* v; + cmsUInt32Number i; + + + *nItems = 0; + if (!_cmsReadUInt32Number(io, &vendorFlag)) return NULL; + if (!_cmsReadUInt32Number(io, &count)) return NULL; + if (!_cmsReadUInt32Number(io, &nDeviceCoords)) return NULL; + + if (io -> Read(io, prefix, 32, 1) != 1) return NULL; + if (io -> Read(io, suffix, 32, 1) != 1) return NULL; + + prefix[31] = suffix[31] = 0; + + v = cmsAllocNamedColorList(self ->ContextID, count, nDeviceCoords, prefix, suffix); + if (v == NULL) { + cmsSignalError(self->ContextID, cmsERROR_RANGE, "Too many named colors '%d'", count); + return NULL; + } + + if (nDeviceCoords > cmsMAXCHANNELS) { + cmsSignalError(self->ContextID, cmsERROR_RANGE, "Too many device coordinates '%d'", nDeviceCoords); + return 0; + } + for (i=0; i < count; i++) { + + cmsUInt16Number PCS[3]; + cmsUInt16Number Colorant[cmsMAXCHANNELS]; + char Root[33]; + + memset(Colorant, 0, sizeof(Colorant)); + if (io -> Read(io, Root, 32, 1) != 1) return NULL; + if (!_cmsReadUInt16Array(io, 3, PCS)) goto Error; + if (!_cmsReadUInt16Array(io, nDeviceCoords, Colorant)) goto Error; + + if (!cmsAppendNamedColor(v, Root, PCS, Colorant)) goto Error; + } + + *nItems = 1; + return (void*) v ; + +Error: + cmsFreeNamedColorList(v); + return NULL; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + +// Saves a named color list into a named color profile +static +cmsBool Type_NamedColor_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsNAMEDCOLORLIST* NamedColorList = (cmsNAMEDCOLORLIST*) Ptr; + char prefix[32]; // Prefix for each color name + char suffix[32]; // Suffix for each color name + int i, nColors; + + nColors = cmsNamedColorCount(NamedColorList); + + if (!_cmsWriteUInt32Number(io, 0)) return FALSE; + if (!_cmsWriteUInt32Number(io, nColors)) return FALSE; + if (!_cmsWriteUInt32Number(io, NamedColorList ->ColorantCount)) return FALSE; + + strncpy(prefix, (const char*) NamedColorList->Prefix, 32); + strncpy(suffix, (const char*) NamedColorList->Suffix, 32); + + suffix[31] = prefix[31] = 0; + + if (!io ->Write(io, 32, prefix)) return FALSE; + if (!io ->Write(io, 32, suffix)) return FALSE; + + for (i=0; i < nColors; i++) { + + cmsUInt16Number PCS[3]; + cmsUInt16Number Colorant[cmsMAXCHANNELS]; + char Root[33]; + + if (!cmsNamedColorInfo(NamedColorList, i, Root, NULL, NULL, PCS, Colorant)) return 0; + if (!io ->Write(io, 32 , Root)) return FALSE; + if (!_cmsWriteUInt16Array(io, 3, PCS)) return FALSE; + if (!_cmsWriteUInt16Array(io, NamedColorList ->ColorantCount, Colorant)) return FALSE; + } + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + +static +void* Type_NamedColor_Dup(struct _cms_typehandler_struct* self, const void* Ptr, cmsUInt32Number n) +{ + cmsNAMEDCOLORLIST* nc = (cmsNAMEDCOLORLIST*) Ptr; + + return (void*) cmsDupNamedColorList(nc); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + + +static +void Type_NamedColor_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsFreeNamedColorList((cmsNAMEDCOLORLIST*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + + +// ******************************************************************************** +// Type cmsSigProfileSequenceDescType +// ******************************************************************************** + +// This type is an array of structures, each of which contains information from the +// header fields and tags from the original profiles which were combined to create +// the final profile. The order of the structures is the order in which the profiles +// were combined and includes a structure for the final profile. This provides a +// description of the profile sequence from source to destination, +// typically used with the DeviceLink profile. + +static +cmsBool ReadEmbeddedText(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsMLU** mlu, cmsUInt32Number SizeOfTag) +{ + cmsTagTypeSignature BaseType; + cmsUInt32Number nItems; + + BaseType = _cmsReadTypeBase(io); + + switch (BaseType) { + + case cmsSigTextType: + if (*mlu) cmsMLUfree(*mlu); + *mlu = (cmsMLU*)Type_Text_Read(self, io, &nItems, SizeOfTag); + return (*mlu != NULL); + + case cmsSigTextDescriptionType: + if (*mlu) cmsMLUfree(*mlu); + *mlu = (cmsMLU*) Type_Text_Description_Read(self, io, &nItems, SizeOfTag); + return (*mlu != NULL); + + /* + TBD: Size is needed for MLU, and we have no idea on which is the available size + */ + + case cmsSigMultiLocalizedUnicodeType: + if (*mlu) cmsMLUfree(*mlu); + *mlu = (cmsMLU*) Type_MLU_Read(self, io, &nItems, SizeOfTag); + return (*mlu != NULL); + + default: return FALSE; + } +} + + +static +void *Type_ProfileSequenceDesc_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsSEQ* OutSeq; + cmsUInt32Number i, Count; + + *nItems = 0; + + if (!_cmsReadUInt32Number(io, &Count)) return NULL; + + if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; + SizeOfTag -= sizeof(cmsUInt32Number); + + + OutSeq = cmsAllocProfileSequenceDescription(self ->ContextID, Count); + if (OutSeq == NULL) return NULL; + + OutSeq ->n = Count; + + // Get structures as well + + for (i=0; i < Count; i++) { + + cmsPSEQDESC* sec = &OutSeq -> seq[i]; + + if (!_cmsReadUInt32Number(io, &sec ->deviceMfg)) return NULL; + if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; + SizeOfTag -= sizeof(cmsUInt32Number); + + if (!_cmsReadUInt32Number(io, &sec ->deviceModel)) return NULL; + if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; + SizeOfTag -= sizeof(cmsUInt32Number); + + if (!_cmsReadUInt64Number(io, &sec ->attributes)) return NULL; + if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; + SizeOfTag -= sizeof(cmsUInt64Number); + + if (!_cmsReadUInt32Number(io, (cmsUInt32Number *)&sec ->technology)) return NULL; + if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; + SizeOfTag -= sizeof(cmsUInt32Number); + + if (!ReadEmbeddedText(self, io, &sec ->Manufacturer, SizeOfTag)) return NULL; + if (!ReadEmbeddedText(self, io, &sec ->Model, SizeOfTag)) return NULL; + } + + *nItems = 1; + return OutSeq; +} + + +// Aux--Embed a text description type. It can be of type text description or multilocalized unicode +// and it depends of the version number passed on cmsTagDescriptor structure instead of stack +static +cmsBool SaveDescription(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsMLU* Text) +{ + if (self ->ICCVersion < 0x4000000) { + + if (!_cmsWriteTypeBase(io, cmsSigTextDescriptionType)) return FALSE; + return Type_Text_Description_Write(self, io, Text, 1); + } + else { + if (!_cmsWriteTypeBase(io, cmsSigMultiLocalizedUnicodeType)) return FALSE; + return Type_MLU_Write(self, io, Text, 1); + } +} + + +static +cmsBool Type_ProfileSequenceDesc_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsSEQ* Seq = (cmsSEQ*) Ptr; + cmsUInt32Number i; + + if (!_cmsWriteUInt32Number(io, Seq->n)) return FALSE; + + for (i=0; i < Seq ->n; i++) { + + cmsPSEQDESC* sec = &Seq -> seq[i]; + + if (!_cmsWriteUInt32Number(io, sec ->deviceMfg)) return FALSE; + if (!_cmsWriteUInt32Number(io, sec ->deviceModel)) return FALSE; + if (!_cmsWriteUInt64Number(io, sec ->attributes)) return FALSE; + if (!_cmsWriteUInt32Number(io, sec ->technology)) return FALSE; + + if (!SaveDescription(self, io, sec ->Manufacturer)) return FALSE; + if (!SaveDescription(self, io, sec ->Model)) return FALSE; + } + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); +} + + +static +void* Type_ProfileSequenceDesc_Dup(struct _cms_typehandler_struct* self, const void* Ptr, cmsUInt32Number n) +{ + return (void*) cmsDupProfileSequenceDescription((cmsSEQ*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_ProfileSequenceDesc_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsFreeProfileSequenceDescription((cmsSEQ*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + + +// ******************************************************************************** +// Type cmsSigProfileSequenceIdType +// ******************************************************************************** +/* +In certain workflows using ICC Device Link Profiles, it is necessary to identify the +original profiles that were combined to create the Device Link Profile. +This type is an array of structures, each of which contains information for +identification of a profile used in a sequence +*/ + + +static +cmsBool ReadSeqID(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + void* Cargo, + cmsUInt32Number n, + cmsUInt32Number SizeOfTag) +{ + cmsSEQ* OutSeq = (cmsSEQ*) Cargo; + cmsPSEQDESC* seq = &OutSeq ->seq[n]; + + if (io -> Read(io, seq ->ProfileID.ID8, 16, 1) != 1) return FALSE; + if (!ReadEmbeddedText(self, io, &seq ->Description, SizeOfTag)) return FALSE; + + return TRUE; +} + + + +static +void *Type_ProfileSequenceId_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsSEQ* OutSeq; + cmsUInt32Number Count; + cmsUInt32Number BaseOffset; + + *nItems = 0; + + // Get actual position as a basis for element offsets + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + // Get table count + if (!_cmsReadUInt32Number(io, &Count)) return NULL; + SizeOfTag -= sizeof(cmsUInt32Number); + + // Allocate an empty structure + OutSeq = cmsAllocProfileSequenceDescription(self ->ContextID, Count); + if (OutSeq == NULL) return NULL; + + + // Read the position table + if (!ReadPositionTable(self, io, Count, BaseOffset, OutSeq, ReadSeqID)) { + + cmsFreeProfileSequenceDescription(OutSeq); + return NULL; + } + + // Success + *nItems = 1; + return OutSeq; + +} + + +static +cmsBool WriteSeqID(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + void* Cargo, + cmsUInt32Number n, + cmsUInt32Number SizeOfTag) +{ + cmsSEQ* Seq = (cmsSEQ*) Cargo; + + if (!io ->Write(io, 16, Seq ->seq[n].ProfileID.ID8)) return FALSE; + + // Store here the MLU + if (!SaveDescription(self, io, Seq ->seq[n].Description)) return FALSE; + + return TRUE; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + +static +cmsBool Type_ProfileSequenceId_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsSEQ* Seq = (cmsSEQ*) Ptr; + cmsUInt32Number BaseOffset; + + // Keep the base offset + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + // This is the table count + if (!_cmsWriteUInt32Number(io, Seq ->n)) return FALSE; + + // This is the position table and content + if (!WritePositionTable(self, io, 0, Seq ->n, BaseOffset, Seq, WriteSeqID)) return FALSE; + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); +} + +static +void* Type_ProfileSequenceId_Dup(struct _cms_typehandler_struct* self, const void* Ptr, cmsUInt32Number n) +{ + return (void*) cmsDupProfileSequenceDescription((cmsSEQ*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_ProfileSequenceId_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsFreeProfileSequenceDescription((cmsSEQ*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + + +// ******************************************************************************** +// Type cmsSigUcrBgType +// ******************************************************************************** +/* +This type contains curves representing the under color removal and black +generation and a text string which is a general description of the method used +for the ucr/bg. +*/ + +static +void *Type_UcrBg_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsUcrBg* n = (cmsUcrBg*) _cmsMallocZero(self ->ContextID, sizeof(cmsUcrBg)); + cmsUInt32Number CountUcr, CountBg; + char* ASCIIString; + + *nItems = 0; + if (n == NULL) return NULL; + + // First curve is Under color removal + if (!_cmsReadUInt32Number(io, &CountUcr)) return NULL; + if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; + SizeOfTag -= sizeof(cmsUInt32Number); + + n ->Ucr = cmsBuildTabulatedToneCurve16(self ->ContextID, CountUcr, NULL); + if (n ->Ucr == NULL) return NULL; + + if (!_cmsReadUInt16Array(io, CountUcr, n ->Ucr->Table16)) return NULL; + if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; + SizeOfTag -= CountUcr * sizeof(cmsUInt16Number); + + // Second curve is Black generation + if (!_cmsReadUInt32Number(io, &CountBg)) return NULL; + if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; + SizeOfTag -= sizeof(cmsUInt32Number); + + n ->Bg = cmsBuildTabulatedToneCurve16(self ->ContextID, CountBg, NULL); + if (n ->Bg == NULL) return NULL; + if (!_cmsReadUInt16Array(io, CountBg, n ->Bg->Table16)) return NULL; + if (SizeOfTag < CountBg * sizeof(cmsUInt16Number)) return NULL; + SizeOfTag -= CountBg * sizeof(cmsUInt16Number); + if (SizeOfTag == UINT_MAX) return NULL; + + // Now comes the text. The length is specified by the tag size + n ->Desc = cmsMLUalloc(self ->ContextID, 1); + if (n ->Desc == NULL) return NULL; + + ASCIIString = (char*) _cmsMalloc(self ->ContextID, SizeOfTag + 1); + if (io ->Read(io, ASCIIString, sizeof(char), SizeOfTag) != SizeOfTag) return NULL; + ASCIIString[SizeOfTag] = 0; + cmsMLUsetASCII(n ->Desc, cmsNoLanguage, cmsNoCountry, ASCIIString); + _cmsFree(self ->ContextID, ASCIIString); + + *nItems = 1; + return (void*) n; +} + +static +cmsBool Type_UcrBg_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsUcrBg* Value = (cmsUcrBg*) Ptr; + cmsUInt32Number TextSize; + char* Text; + + // First curve is Under color removal + if (!_cmsWriteUInt32Number(io, Value ->Ucr ->nEntries)) return FALSE; + if (!_cmsWriteUInt16Array(io, Value ->Ucr ->nEntries, Value ->Ucr ->Table16)) return FALSE; + + // Then black generation + if (!_cmsWriteUInt32Number(io, Value ->Bg ->nEntries)) return FALSE; + if (!_cmsWriteUInt16Array(io, Value ->Bg ->nEntries, Value ->Bg ->Table16)) return FALSE; + + // Now comes the text. The length is specified by the tag size + TextSize = cmsMLUgetASCII(Value ->Desc, cmsNoLanguage, cmsNoCountry, NULL, 0); + Text = (char*) _cmsMalloc(self ->ContextID, TextSize); + if (cmsMLUgetASCII(Value ->Desc, cmsNoLanguage, cmsNoCountry, Text, TextSize) != TextSize) return FALSE; + + if (!io ->Write(io, TextSize, Text)) return FALSE; + _cmsFree(self ->ContextID, Text); + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); +} + +static +void* Type_UcrBg_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + cmsUcrBg* Src = (cmsUcrBg*) Ptr; + cmsUcrBg* NewUcrBg = (cmsUcrBg*) _cmsMallocZero(self ->ContextID, sizeof(cmsUcrBg)); + + if (NewUcrBg == NULL) return NULL; + + NewUcrBg ->Bg = cmsDupToneCurve(Src ->Bg); + NewUcrBg ->Ucr = cmsDupToneCurve(Src ->Ucr); + NewUcrBg ->Desc = cmsMLUdup(Src ->Desc); + + return (void*) NewUcrBg; + + cmsUNUSED_PARAMETER(n); +} + +static +void Type_UcrBg_Free(struct _cms_typehandler_struct* self, void *Ptr) +{ + cmsUcrBg* Src = (cmsUcrBg*) Ptr; + + if (Src ->Ucr) cmsFreeToneCurve(Src ->Ucr); + if (Src ->Bg) cmsFreeToneCurve(Src ->Bg); + if (Src ->Desc) cmsMLUfree(Src ->Desc); + + _cmsFree(self ->ContextID, Ptr); +} + +// ******************************************************************************** +// Type cmsSigCrdInfoType +// ******************************************************************************** + +/* +This type contains the PostScript product name to which this profile corresponds +and the names of the companion CRDs. Recall that a single profile can generate +multiple CRDs. It is implemented as a MLU being the language code "PS" and then +country varies for each element: + + nm: PostScript product name + #0: Rendering intent 0 CRD name + #1: Rendering intent 1 CRD name + #2: Rendering intent 2 CRD name + #3: Rendering intent 3 CRD name +*/ + + + +// Auxiliar, read an string specified as count + string +static +cmsBool ReadCountAndSting(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsMLU* mlu, cmsUInt32Number* SizeOfTag, const char* Section) +{ + cmsUInt32Number Count; + char* Text; + + if (*SizeOfTag < sizeof(cmsUInt32Number)) return FALSE; + + if (!_cmsReadUInt32Number(io, &Count)) return FALSE; + + if (Count > UINT_MAX - sizeof(cmsUInt32Number)) return FALSE; + if (*SizeOfTag < Count + sizeof(cmsUInt32Number)) return FALSE; + + Text = (char*) _cmsMalloc(self ->ContextID, Count+1); + if (Text == NULL) return FALSE; + + if (io ->Read(io, Text, sizeof(cmsUInt8Number), Count) != Count) { + _cmsFree(self ->ContextID, Text); + return FALSE; + } + + Text[Count] = 0; + + cmsMLUsetASCII(mlu, "PS", Section, Text); + _cmsFree(self ->ContextID, Text); + + *SizeOfTag -= (Count + sizeof(cmsUInt32Number)); + return TRUE; +} + +static +cmsBool WriteCountAndSting(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsMLU* mlu, const char* Section) +{ + cmsUInt32Number TextSize; + char* Text; + + TextSize = cmsMLUgetASCII(mlu, "PS", Section, NULL, 0); + Text = (char*) _cmsMalloc(self ->ContextID, TextSize); + + if (!_cmsWriteUInt32Number(io, TextSize)) return FALSE; + + if (cmsMLUgetASCII(mlu, "PS", Section, Text, TextSize) == 0) return FALSE; + + if (!io ->Write(io, TextSize, Text)) return FALSE; + _cmsFree(self ->ContextID, Text); + + return TRUE; +} + +static +void *Type_CrdInfo_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsMLU* mlu = cmsMLUalloc(self ->ContextID, 5); + + *nItems = 0; + if (!ReadCountAndSting(self, io, mlu, &SizeOfTag, "nm")) goto Error; + if (!ReadCountAndSting(self, io, mlu, &SizeOfTag, "#0")) goto Error; + if (!ReadCountAndSting(self, io, mlu, &SizeOfTag, "#1")) goto Error; + if (!ReadCountAndSting(self, io, mlu, &SizeOfTag, "#2")) goto Error; + if (!ReadCountAndSting(self, io, mlu, &SizeOfTag, "#3")) goto Error; + + *nItems = 1; + return (void*) mlu; + +Error: + cmsMLUfree(mlu); + return NULL; + +} + +static +cmsBool Type_CrdInfo_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + + cmsMLU* mlu = (cmsMLU*) Ptr; + + if (!WriteCountAndSting(self, io, mlu, "nm")) goto Error; + if (!WriteCountAndSting(self, io, mlu, "#0")) goto Error; + if (!WriteCountAndSting(self, io, mlu, "#1")) goto Error; + if (!WriteCountAndSting(self, io, mlu, "#2")) goto Error; + if (!WriteCountAndSting(self, io, mlu, "#3")) goto Error; + + return TRUE; + +Error: + return FALSE; + + cmsUNUSED_PARAMETER(nItems); +} + + +static +void* Type_CrdInfo_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsMLUdup((cmsMLU*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_CrdInfo_Free(struct _cms_typehandler_struct* self, void *Ptr) +{ + cmsMLUfree((cmsMLU*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + +// ******************************************************************************** +// Type cmsSigScreeningType +// ******************************************************************************** +// +//The screeningType describes various screening parameters including screen +//frequency, screening angle, and spot shape. + +static +void *Type_Screening_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsScreening* sc = NULL; + cmsUInt32Number i; + + sc = (cmsScreening*) _cmsMallocZero(self ->ContextID, sizeof(cmsScreening)); + if (sc == NULL) return NULL; + + *nItems = 0; + + if (!_cmsReadUInt32Number(io, &sc ->Flag)) goto Error; + if (!_cmsReadUInt32Number(io, &sc ->nChannels)) goto Error; + + if (sc ->nChannels > cmsMAXCHANNELS - 1) + sc ->nChannels = cmsMAXCHANNELS - 1; + + for (i=0; i < sc ->nChannels; i++) { + + if (!_cmsRead15Fixed16Number(io, &sc ->Channels[i].Frequency)) goto Error; + if (!_cmsRead15Fixed16Number(io, &sc ->Channels[i].ScreenAngle)) goto Error; + if (!_cmsReadUInt32Number(io, &sc ->Channels[i].SpotShape)) goto Error; + } + + + *nItems = 1; + + return (void*) sc; + +Error: + if (sc != NULL) + _cmsFree(self ->ContextID, sc); + + return NULL; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + +static +cmsBool Type_Screening_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsScreening* sc = (cmsScreening* ) Ptr; + cmsUInt32Number i; + + if (!_cmsWriteUInt32Number(io, sc ->Flag)) return FALSE; + if (!_cmsWriteUInt32Number(io, sc ->nChannels)) return FALSE; + + for (i=0; i < sc ->nChannels; i++) { + + if (!_cmsWrite15Fixed16Number(io, sc ->Channels[i].Frequency)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, sc ->Channels[i].ScreenAngle)) return FALSE; + if (!_cmsWriteUInt32Number(io, sc ->Channels[i].SpotShape)) return FALSE; + } + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + + +static +void* Type_Screening_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return _cmsDupMem(self ->ContextID, Ptr, sizeof(cmsScreening)); + + cmsUNUSED_PARAMETER(n); +} + + +static +void Type_Screening_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + _cmsFree(self ->ContextID, Ptr); +} + +// ******************************************************************************** +// Type cmsSigViewingConditionsType +// ******************************************************************************** +// +//This type represents a set of viewing condition parameters including: +//CIE ’absolute’ illuminant white point tristimulus values and CIE ’absolute’ +//surround tristimulus values. + +static +void *Type_ViewingConditions_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsICCViewingConditions* vc = NULL; + + vc = (cmsICCViewingConditions*) _cmsMallocZero(self ->ContextID, sizeof(cmsICCViewingConditions)); + if (vc == NULL) return NULL; + + *nItems = 0; + + if (!_cmsReadXYZNumber(io, &vc ->IlluminantXYZ)) goto Error; + if (!_cmsReadXYZNumber(io, &vc ->SurroundXYZ)) goto Error; + if (!_cmsReadUInt32Number(io, &vc ->IlluminantType)) goto Error; + + *nItems = 1; + + return (void*) vc; + +Error: + if (vc != NULL) + _cmsFree(self ->ContextID, vc); + + return NULL; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + +static +cmsBool Type_ViewingConditions_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsICCViewingConditions* sc = (cmsICCViewingConditions* ) Ptr; + + if (!_cmsWriteXYZNumber(io, &sc ->IlluminantXYZ)) return FALSE; + if (!_cmsWriteXYZNumber(io, &sc ->SurroundXYZ)) return FALSE; + if (!_cmsWriteUInt32Number(io, sc ->IlluminantType)) return FALSE; + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + + +static +void* Type_ViewingConditions_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return _cmsDupMem(self ->ContextID, Ptr, sizeof(cmsScreening)); + + cmsUNUSED_PARAMETER(n); +} + + +static +void Type_ViewingConditions_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + _cmsFree(self ->ContextID, Ptr); +} + + +// ******************************************************************************** +// Type cmsSigMultiProcessElementType +// ******************************************************************************** + + +static +void* GenericMPEdup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsStageDup((cmsStage*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void GenericMPEfree(struct _cms_typehandler_struct* self, void *Ptr) +{ + cmsStageFree((cmsStage*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + +// Each curve is stored in one or more curve segments, with break-points specified between curve segments. +// The first curve segment always starts at –Infinity, and the last curve segment always ends at +Infinity. The +// first and last curve segments shall be specified in terms of a formula, whereas the other segments shall be +// specified either in terms of a formula, or by a sampled curve. + + +// Read an embedded segmented curve +static +cmsToneCurve* ReadSegmentedCurve(struct _cms_typehandler_struct* self, cmsIOHANDLER* io) +{ + cmsCurveSegSignature ElementSig; + cmsUInt32Number i, j; + cmsUInt16Number nSegments; + cmsCurveSegment* Segments; + cmsToneCurve* Curve; + cmsFloat32Number PrevBreak = -1E22F; // - infinite + + // Take signature and channels for each element. + if (!_cmsReadUInt32Number(io, (cmsUInt32Number*) &ElementSig)) return NULL; + + // That should be a segmented curve + if (ElementSig != cmsSigSegmentedCurve) return NULL; + + if (!_cmsReadUInt32Number(io, NULL)) return NULL; + if (!_cmsReadUInt16Number(io, &nSegments)) return NULL; + if (!_cmsReadUInt16Number(io, NULL)) return NULL; + + if (nSegments < 1) return NULL; + Segments = (cmsCurveSegment*) _cmsCalloc(self ->ContextID, nSegments, sizeof(cmsCurveSegment)); + if (Segments == NULL) return NULL; + + // Read breakpoints + for (i=0; i < (cmsUInt32Number) nSegments - 1; i++) { + + Segments[i].x0 = PrevBreak; + if (!_cmsReadFloat32Number(io, &Segments[i].x1)) goto Error; + PrevBreak = Segments[i].x1; + } + + Segments[nSegments-1].x0 = PrevBreak; + Segments[nSegments-1].x1 = 1E22F; // A big cmsFloat32Number number + + // Read segments + for (i=0; i < nSegments; i++) { + + if (!_cmsReadUInt32Number(io, (cmsUInt32Number*) &ElementSig)) goto Error; + if (!_cmsReadUInt32Number(io, NULL)) goto Error; + + switch (ElementSig) { + + case cmsSigFormulaCurveSeg: { + + cmsUInt16Number Type; + cmsUInt32Number ParamsByType[] = {4, 5, 5 }; + + if (!_cmsReadUInt16Number(io, &Type)) goto Error; + if (!_cmsReadUInt16Number(io, NULL)) goto Error; + + Segments[i].Type = Type + 6; + if (Type > 2) goto Error; + + for (j=0; j < ParamsByType[Type]; j++) { + + cmsFloat32Number f; + if (!_cmsReadFloat32Number(io, &f)) goto Error; + Segments[i].Params[j] = f; + } + } + break; + + + case cmsSigSampledCurveSeg: { + cmsUInt32Number Count; + + if (!_cmsReadUInt32Number(io, &Count)) return NULL; + + Segments[i].nGridPoints = Count; + Segments[i].SampledPoints = (cmsFloat32Number*) _cmsCalloc(self ->ContextID, Count, sizeof(cmsFloat32Number)); + if (Segments[i].SampledPoints == NULL) goto Error; + + for (j=0; j < Count; j++) { + if (!_cmsReadFloat32Number(io, &Segments[i].SampledPoints[j])) goto Error; + } + } + break; + + default: + { + char String[5]; + + _cmsTagSignature2String(String, (cmsTagSignature) ElementSig); + cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown curve element type '%s' found.", String); + } + return NULL; + + } + } + + Curve = cmsBuildSegmentedToneCurve(self ->ContextID, nSegments, Segments); + + for (i=0; i < nSegments; i++) { + if (Segments[i].SampledPoints) _cmsFree(self ->ContextID, Segments[i].SampledPoints); + } + _cmsFree(self ->ContextID, Segments); + return Curve; + +Error: + if (Segments) _cmsFree(self ->ContextID, Segments); + return NULL; +} + + +static +cmsBool ReadMPECurve(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + void* Cargo, + cmsUInt32Number n, + cmsUInt32Number SizeOfTag) +{ + cmsToneCurve** GammaTables = ( cmsToneCurve**) Cargo; + + GammaTables[n] = ReadSegmentedCurve(self, io); + return (GammaTables[n] != NULL); + + cmsUNUSED_PARAMETER(SizeOfTag); +} + +static +void *Type_MPEcurve_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsStage* mpe = NULL; + cmsUInt16Number InputChans, OutputChans; + cmsUInt32Number i, BaseOffset; + cmsToneCurve** GammaTables; + + *nItems = 0; + + // Get actual position as a basis for element offsets + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + if (!_cmsReadUInt16Number(io, &InputChans)) return NULL; + if (!_cmsReadUInt16Number(io, &OutputChans)) return NULL; + + if (InputChans != OutputChans) return NULL; + + GammaTables = (cmsToneCurve**) _cmsCalloc(self ->ContextID, InputChans, sizeof(cmsToneCurve*)); + if (GammaTables == NULL) return NULL; + + if (ReadPositionTable(self, io, InputChans, BaseOffset, GammaTables, ReadMPECurve)) { + + mpe = cmsStageAllocToneCurves(self ->ContextID, InputChans, GammaTables); + } + else { + mpe = NULL; + } + + for (i=0; i < InputChans; i++) { + if (GammaTables[i]) cmsFreeToneCurve(GammaTables[i]); + } + + _cmsFree(self ->ContextID, GammaTables); + *nItems = (mpe != NULL) ? 1 : 0; + return mpe; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + +// Write a single segmented curve. NO CHECK IS PERFORMED ON VALIDITY +static +cmsBool WriteSegmentedCurve(cmsIOHANDLER* io, cmsToneCurve* g) +{ + cmsUInt32Number i, j; + cmsCurveSegment* Segments = g ->Segments; + cmsUInt32Number nSegments = g ->nSegments; + + if (!_cmsWriteUInt32Number(io, cmsSigSegmentedCurve)) goto Error; + if (!_cmsWriteUInt32Number(io, 0)) goto Error; + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) nSegments)) goto Error; + if (!_cmsWriteUInt16Number(io, 0)) goto Error; + + // Write the break-points + for (i=0; i < nSegments - 1; i++) { + if (!_cmsWriteFloat32Number(io, Segments[i].x1)) goto Error; + } + + // Write the segments + for (i=0; i < g ->nSegments; i++) { + + cmsCurveSegment* ActualSeg = Segments + i; + + if (ActualSeg -> Type == 0) { + + // This is a sampled curve + if (!_cmsWriteUInt32Number(io, (cmsUInt32Number) cmsSigSampledCurveSeg)) goto Error; + if (!_cmsWriteUInt32Number(io, 0)) goto Error; + if (!_cmsWriteUInt32Number(io, ActualSeg -> nGridPoints)) goto Error; + + for (j=0; j < g ->Segments[i].nGridPoints; j++) { + if (!_cmsWriteFloat32Number(io, ActualSeg -> SampledPoints[j])) goto Error; + } + + } + else { + int Type; + cmsUInt32Number ParamsByType[] = { 4, 5, 5 }; + + // This is a formula-based + if (!_cmsWriteUInt32Number(io, (cmsUInt32Number) cmsSigFormulaCurveSeg)) goto Error; + if (!_cmsWriteUInt32Number(io, 0)) goto Error; + + // We only allow 1, 2 and 3 as types + Type = ActualSeg ->Type - 6; + if (Type > 2 || Type < 0) goto Error; + + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) Type)) goto Error; + if (!_cmsWriteUInt16Number(io, 0)) goto Error; + + for (j=0; j < ParamsByType[Type]; j++) { + if (!_cmsWriteFloat32Number(io, (cmsFloat32Number) ActualSeg ->Params[j])) goto Error; + } + } + + // It seems there is no need to align. Code is here, and for safety commented out + // if (!_cmsWriteAlignment(io)) goto Error; + } + + return TRUE; + +Error: + return FALSE; +} + + +static +cmsBool WriteMPECurve(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + void* Cargo, + cmsUInt32Number n, + cmsUInt32Number SizeOfTag) +{ + _cmsStageToneCurvesData* Curves = (_cmsStageToneCurvesData*) Cargo; + + return WriteSegmentedCurve(io, Curves ->TheCurves[n]); + + cmsUNUSED_PARAMETER(SizeOfTag); + cmsUNUSED_PARAMETER(self); +} + +// Write a curve, checking first for validity +static +cmsBool Type_MPEcurve_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsUInt32Number BaseOffset; + cmsStage* mpe = (cmsStage*) Ptr; + _cmsStageToneCurvesData* Curves = (_cmsStageToneCurvesData*) mpe ->Data; + + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + // Write the header. Since those are curves, input and output channels are same + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->InputChannels)) return FALSE; + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->InputChannels)) return FALSE; + + if (!WritePositionTable(self, io, 0, + mpe ->InputChannels, BaseOffset, Curves, WriteMPECurve)) return FALSE; + + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); +} + + + +// The matrix is organized as an array of PxQ+Q elements, where P is the number of input channels to the +// matrix, and Q is the number of output channels. The matrix elements are each float32Numbers. The array +// is organized as follows: +// array = [e11, e12, …, e1P, e21, e22, …, e2P, …, eQ1, eQ2, …, eQP, e1, e2, …, eQ] + +static +void *Type_MPEmatrix_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsStage* mpe; + cmsUInt16Number InputChans, OutputChans; + cmsUInt32Number nElems, i; + cmsFloat64Number* Matrix; + cmsFloat64Number* Offsets; + + if (!_cmsReadUInt16Number(io, &InputChans)) return NULL; + if (!_cmsReadUInt16Number(io, &OutputChans)) return NULL; + + + nElems = InputChans * OutputChans; + + // Input and output chans may be ANY (up to 0xffff) + Matrix = (cmsFloat64Number*) _cmsCalloc(self ->ContextID, nElems, sizeof(cmsFloat64Number)); + if (Matrix == NULL) return NULL; + + Offsets = (cmsFloat64Number*) _cmsCalloc(self ->ContextID, OutputChans, sizeof(cmsFloat64Number)); + if (Offsets == NULL) { + + _cmsFree(self ->ContextID, Matrix); + return NULL; + } + + for (i=0; i < nElems; i++) { + + cmsFloat32Number v; + + if (!_cmsReadFloat32Number(io, &v)) return NULL; + Matrix[i] = v; + } + + + for (i=0; i < OutputChans; i++) { + + cmsFloat32Number v; + + if (!_cmsReadFloat32Number(io, &v)) return NULL; + Offsets[i] = v; + } + + + mpe = cmsStageAllocMatrix(self ->ContextID, OutputChans, InputChans, Matrix, Offsets); + _cmsFree(self ->ContextID, Matrix); + _cmsFree(self ->ContextID, Offsets); + + *nItems = 1; + + return mpe; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + +static +cmsBool Type_MPEmatrix_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsUInt32Number i, nElems; + cmsStage* mpe = (cmsStage*) Ptr; + _cmsStageMatrixData* Matrix = (_cmsStageMatrixData*) mpe ->Data; + + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->InputChannels)) return FALSE; + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->OutputChannels)) return FALSE; + + nElems = mpe ->InputChannels * mpe ->OutputChannels; + + for (i=0; i < nElems; i++) { + if (!_cmsWriteFloat32Number(io, (cmsFloat32Number) Matrix->Double[i])) return FALSE; + } + + + for (i=0; i < mpe ->OutputChannels; i++) { + + if (Matrix ->Offset == NULL) { + + if (!_cmsWriteFloat32Number(io, 0)) return FALSE; + } + else { + if (!_cmsWriteFloat32Number(io, (cmsFloat32Number) Matrix->Offset[i])) return FALSE; + } + } + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + + + +static +void *Type_MPEclut_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsStage* mpe = NULL; + cmsUInt16Number InputChans, OutputChans; + cmsUInt8Number Dimensions8[16]; + cmsUInt32Number i, nMaxGrids, GridPoints[MAX_INPUT_DIMENSIONS]; + _cmsStageCLutData* clut; + + if (!_cmsReadUInt16Number(io, &InputChans)) return NULL; + if (!_cmsReadUInt16Number(io, &OutputChans)) return NULL; + + if (io ->Read(io, Dimensions8, sizeof(cmsUInt8Number), 16) != 16) + goto Error; + + // Copy MAX_INPUT_DIMENSIONS at most. Expand to cmsUInt32Number + nMaxGrids = InputChans > MAX_INPUT_DIMENSIONS ? MAX_INPUT_DIMENSIONS : InputChans; + for (i=0; i < nMaxGrids; i++) GridPoints[i] = (cmsUInt32Number) Dimensions8[i]; + + // Allocate the true CLUT + mpe = cmsStageAllocCLutFloatGranular(self ->ContextID, GridPoints, InputChans, OutputChans, NULL); + if (mpe == NULL) goto Error; + + // Read the data + clut = (_cmsStageCLutData*) mpe ->Data; + for (i=0; i < clut ->nEntries; i++) { + + if (!_cmsReadFloat32Number(io, &clut ->Tab.TFloat[i])) goto Error; + } + + *nItems = 1; + return mpe; + +Error: + *nItems = 0; + if (mpe != NULL) cmsStageFree(mpe); + return NULL; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + +// Write a CLUT in floating point +static +cmsBool Type_MPEclut_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsUInt8Number Dimensions8[16]; + cmsUInt32Number i; + cmsStage* mpe = (cmsStage*) Ptr; + _cmsStageCLutData* clut = (_cmsStageCLutData*) mpe ->Data; + + // Check for maximum number of channels + if (mpe -> InputChannels > 15) return FALSE; + + // Only floats are supported in MPE + if (clut ->HasFloatValues == FALSE) return FALSE; + + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->InputChannels)) return FALSE; + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->OutputChannels)) return FALSE; + + memset(Dimensions8, 0, sizeof(Dimensions8)); + + for (i=0; i < mpe ->InputChannels; i++) + Dimensions8[i] = (cmsUInt8Number) clut ->Params ->nSamples[i]; + + if (!io ->Write(io, 16, Dimensions8)) return FALSE; + + for (i=0; i < clut ->nEntries; i++) { + + if (!_cmsWriteFloat32Number(io, clut ->Tab.TFloat[i])) return FALSE; + } + + return TRUE; + + cmsUNUSED_PARAMETER(nItems); + cmsUNUSED_PARAMETER(self); +} + + + +// This is the list of built-in MPE types +static _cmsTagTypeLinkedList SupportedMPEtypes[] = { + +{{ (cmsTagTypeSignature) cmsSigBAcsElemType, NULL, NULL, NULL, NULL, NULL, 0 }, &SupportedMPEtypes[1] }, // Ignore those elements for now +{{ (cmsTagTypeSignature) cmsSigEAcsElemType, NULL, NULL, NULL, NULL, NULL, 0 }, &SupportedMPEtypes[2] }, // (That's what the spec says) + +{TYPE_MPE_HANDLER((cmsTagTypeSignature) cmsSigCurveSetElemType, MPEcurve), &SupportedMPEtypes[3] }, +{TYPE_MPE_HANDLER((cmsTagTypeSignature) cmsSigMatrixElemType, MPEmatrix), &SupportedMPEtypes[4] }, +{TYPE_MPE_HANDLER((cmsTagTypeSignature) cmsSigCLutElemType, MPEclut), NULL }, +}; + +#define DEFAULT_MPE_TYPE_COUNT (sizeof(SupportedMPEtypes) / sizeof(_cmsTagTypeLinkedList)) + +static +cmsBool ReadMPEElem(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + void* Cargo, + cmsUInt32Number n, + cmsUInt32Number SizeOfTag) +{ + cmsStageSignature ElementSig; + cmsTagTypeHandler* TypeHandler; + cmsStage *mpe = NULL; + cmsUInt32Number nItems; + cmsPipeline *NewLUT = (cmsPipeline *) Cargo; + + // Take signature and channels for each element. + if (!_cmsReadUInt32Number(io, (cmsUInt32Number*) &ElementSig)) return FALSE; + + // The reserved placeholder + if (!_cmsReadUInt32Number(io, NULL)) return FALSE; + + // Read diverse MPE types + TypeHandler = GetHandler((cmsTagTypeSignature) ElementSig, SupportedMPEtypes); + if (TypeHandler == NULL) { + + char String[5]; + + _cmsTagSignature2String(String, (cmsTagSignature) ElementSig); + + // An unknown element was found. + cmsSignalError(self ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown MPE type '%s' found.", String); + return FALSE; + } + + // If no read method, just ignore the element (valid for cmsSigBAcsElemType and cmsSigEAcsElemType) + // Read the MPE. No size is given + if (TypeHandler ->ReadPtr != NULL) { + + // This is a real element which should be read and processed + mpe = (cmsStage*) TypeHandler ->ReadPtr(self, io, &nItems, SizeOfTag); + if (mpe == NULL) return FALSE; + + // All seems ok, insert element + cmsPipelineInsertStage(NewLUT, cmsAT_END, mpe); + } + + return TRUE; + + cmsUNUSED_PARAMETER(SizeOfTag); + cmsUNUSED_PARAMETER(n); +} + + +// This is the main dispatcher for MPE +static +void *Type_MPE_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsUInt16Number InputChans, OutputChans; + cmsUInt32Number ElementCount; + cmsPipeline *NewLUT = NULL; + cmsUInt32Number BaseOffset; + + // Get actual position as a basis for element offsets + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + // Read channels and element count + if (!_cmsReadUInt16Number(io, &InputChans)) return NULL; + if (!_cmsReadUInt16Number(io, &OutputChans)) return NULL; + + // Allocates an empty LUT + NewLUT = cmsPipelineAlloc(self ->ContextID, InputChans, OutputChans); + if (NewLUT == NULL) return NULL; + + if (!_cmsReadUInt32Number(io, &ElementCount)) return NULL; + + if (!ReadPositionTable(self, io, ElementCount, BaseOffset, NewLUT, ReadMPEElem)) { + if (NewLUT != NULL) cmsPipelineFree(NewLUT); + *nItems = 0; + return NULL; + } + + // Success + *nItems = 1; + return NewLUT; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + + +// This one is a liitle bit more complex, so we don't use position tables this time. +static +cmsBool Type_MPE_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsUInt32Number i, BaseOffset, DirectoryPos, CurrentPos; + int inputChan, outputChan; + cmsUInt32Number ElemCount; + cmsUInt32Number *ElementOffsets = NULL, *ElementSizes = NULL, Before; + cmsStageSignature ElementSig; + cmsPipeline* Lut = (cmsPipeline*) Ptr; + cmsStage* Elem = Lut ->Elements; + cmsTagTypeHandler* TypeHandler; + + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + inputChan = cmsPipelineInputChannels(Lut); + outputChan = cmsPipelineOutputChannels(Lut); + ElemCount = cmsPipelineStageCount(Lut); + + ElementOffsets = (cmsUInt32Number *) _cmsCalloc(self ->ContextID, ElemCount, sizeof(cmsUInt32Number *)); + if (ElementOffsets == NULL) goto Error; + + ElementSizes = (cmsUInt32Number *) _cmsCalloc(self ->ContextID, ElemCount, sizeof(cmsUInt32Number *)); + if (ElementSizes == NULL) goto Error; + + // Write the head + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) inputChan)) goto Error; + if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) outputChan)) goto Error; + if (!_cmsWriteUInt32Number(io, (cmsUInt16Number) ElemCount)) goto Error; + + DirectoryPos = io ->Tell(io); + + // Write a fake directory to be filled latter on + for (i=0; i < ElemCount; i++) { + if (!_cmsWriteUInt32Number(io, 0)) goto Error; // Offset + if (!_cmsWriteUInt32Number(io, 0)) goto Error; // size + } + + // Write each single tag. Keep track of the size as well. + for (i=0; i < ElemCount; i++) { + + ElementOffsets[i] = io ->Tell(io) - BaseOffset; + + ElementSig = Elem ->Type; + + TypeHandler = GetHandler((cmsTagTypeSignature) ElementSig, SupportedMPEtypes); + if (TypeHandler == NULL) { + + char String[5]; + + _cmsTagSignature2String(String, (cmsTagSignature) ElementSig); + + // An unknow element was found. + cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Found unknown MPE type '%s'", String); + goto Error; + } + + if (!_cmsWriteUInt32Number(io, ElementSig)) goto Error; + if (!_cmsWriteUInt32Number(io, 0)) goto Error; + Before = io ->Tell(io); + if (!TypeHandler ->WritePtr(self, io, Elem, 1)) goto Error; + if (!_cmsWriteAlignment(io)) goto Error; + + ElementSizes[i] = io ->Tell(io) - Before; + + Elem = Elem ->Next; + } + + // Write the directory + CurrentPos = io ->Tell(io); + + if (!io ->Seek(io, DirectoryPos)) goto Error; + + for (i=0; i < ElemCount; i++) { + if (!_cmsWriteUInt32Number(io, ElementOffsets[i])) goto Error; + if (!_cmsWriteUInt32Number(io, ElementSizes[i])) goto Error; + } + + if (!io ->Seek(io, CurrentPos)) goto Error; + + if (ElementOffsets != NULL) _cmsFree(self ->ContextID, ElementOffsets); + if (ElementSizes != NULL) _cmsFree(self ->ContextID, ElementSizes); + return TRUE; + +Error: + if (ElementOffsets != NULL) _cmsFree(self ->ContextID, ElementOffsets); + if (ElementSizes != NULL) _cmsFree(self ->ContextID, ElementSizes); + return FALSE; + + cmsUNUSED_PARAMETER(nItems); +} + + +static +void* Type_MPE_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsPipelineDup((cmsPipeline*) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + +static +void Type_MPE_Free(struct _cms_typehandler_struct* self, void *Ptr) +{ + cmsPipelineFree((cmsPipeline*) Ptr); + return; + + cmsUNUSED_PARAMETER(self); +} + + +// ******************************************************************************** +// Type cmsSigVcgtType +// ******************************************************************************** + + +#define cmsVideoCardGammaTableType 0 +#define cmsVideoCardGammaFormulaType 1 + +// Used internally +typedef struct { + double Gamma; + double Min; + double Max; +} _cmsVCGTGAMMA; + + +static +void *Type_vcgt_Read(struct _cms_typehandler_struct* self, + cmsIOHANDLER* io, + cmsUInt32Number* nItems, + cmsUInt32Number SizeOfTag) +{ + cmsUInt32Number TagType, n, i; + cmsToneCurve** Curves; + + *nItems = 0; + + // Read tag type + if (!_cmsReadUInt32Number(io, &TagType)) return NULL; + + // Allocate space for the array + Curves = ( cmsToneCurve**) _cmsCalloc(self ->ContextID, 3, sizeof(cmsToneCurve*)); + if (Curves == NULL) return NULL; + + // There are two possible flavors + switch (TagType) { + + // Gamma is stored as a table + case cmsVideoCardGammaTableType: + { + cmsUInt16Number nChannels, nElems, nBytes; + + // Check channel count, which should be 3 (we don't support monochrome this time) + if (!_cmsReadUInt16Number(io, &nChannels)) goto Error; + + if (nChannels != 3) { + cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported number of channels for VCGT '%d'", nChannels); + goto Error; + } + + // Get Table element count and bytes per element + if (!_cmsReadUInt16Number(io, &nElems)) goto Error; + if (!_cmsReadUInt16Number(io, &nBytes)) goto Error; + + // Adobe's quirk fixup. Fixing broken profiles... + if (nElems == 256 && nBytes == 1 && SizeOfTag == 1576) + nBytes = 2; + + + // Populate tone curves + for (n=0; n < 3; n++) { + + Curves[n] = cmsBuildTabulatedToneCurve16(self ->ContextID, nElems, NULL); + if (Curves[n] == NULL) goto Error; + + // On depending on byte depth + switch (nBytes) { + + // One byte, 0..255 + case 1: + for (i=0; i < nElems; i++) { + + cmsUInt8Number v; + + if (!_cmsReadUInt8Number(io, &v)) goto Error; + Curves[n] ->Table16[i] = FROM_8_TO_16(v); + } + break; + + // One word 0..65535 + case 2: + if (!_cmsReadUInt16Array(io, nElems, Curves[n]->Table16)) goto Error; + break; + + // Unsupported + default: + cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported bit depth for VCGT '%d'", nBytes * 8); + goto Error; + } + } // For all 3 channels + } + break; + + // In this case, gamma is stored as a formula + case cmsVideoCardGammaFormulaType: + { + _cmsVCGTGAMMA Colorant[3]; + + // Populate tone curves + for (n=0; n < 3; n++) { + + double Params[10]; + + if (!_cmsRead15Fixed16Number(io, &Colorant[n].Gamma)) goto Error; + if (!_cmsRead15Fixed16Number(io, &Colorant[n].Min)) goto Error; + if (!_cmsRead15Fixed16Number(io, &Colorant[n].Max)) goto Error; + + // Parametric curve type 5 is: + // Y = (aX + b)^Gamma + e | X >= d + // Y = cX + f | X < d + + // vcgt formula is: + // Y = (Max – Min) * (X ^ Gamma) + Min + + // So, the translation is + // a = (Max – Min) ^ ( 1 / Gamma) + // e = Min + // b=c=d=f=0 + + Params[0] = Colorant[n].Gamma; + Params[1] = pow((Colorant[n].Max - Colorant[n].Min), (1.0 / Colorant[n].Gamma)); + Params[2] = 0; + Params[3] = 0; + Params[4] = 0; + Params[5] = Colorant[n].Min; + Params[6] = 0; + + Curves[n] = cmsBuildParametricToneCurve(self ->ContextID, 5, Params); + if (Curves[n] == NULL) goto Error; + } + } + break; + + // Unsupported + default: + cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported tag type for VCGT '%d'", TagType); + goto Error; + } + + *nItems = 1; + return (void*) Curves; + +// Regret, free all resources +Error: + + cmsFreeToneCurveTriple(Curves); + _cmsFree(self ->ContextID, Curves); + return NULL; + + cmsUNUSED_PARAMETER(SizeOfTag); +} + + +// We don't support all flavors, only 16bits tables and formula +static +cmsBool Type_vcgt_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsToneCurve** Curves = (cmsToneCurve**) Ptr; + cmsUInt32Number i, j; + + if (cmsGetToneCurveParametricType(Curves[0]) == 5 && + cmsGetToneCurveParametricType(Curves[1]) == 5 && + cmsGetToneCurveParametricType(Curves[2]) == 5) { + + if (!_cmsWriteUInt32Number(io, cmsVideoCardGammaFormulaType)) return FALSE; + + // Save parameters + for (i=0; i < 3; i++) { + + _cmsVCGTGAMMA v; + + v.Gamma = Curves[i] ->Segments[0].Params[0]; + v.Min = Curves[i] ->Segments[0].Params[5]; + v.Max = pow(Curves[i] ->Segments[0].Params[1], v.Gamma) + v.Min; + + if (!_cmsWrite15Fixed16Number(io, v.Gamma)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, v.Min)) return FALSE; + if (!_cmsWrite15Fixed16Number(io, v.Max)) return FALSE; + } + } + + else { + + // Always store as a table of 256 words + if (!_cmsWriteUInt32Number(io, cmsVideoCardGammaTableType)) return FALSE; + if (!_cmsWriteUInt16Number(io, 3)) return FALSE; + if (!_cmsWriteUInt16Number(io, 256)) return FALSE; + if (!_cmsWriteUInt16Number(io, 2)) return FALSE; + + for (i=0; i < 3; i++) { + for (j=0; j < 256; j++) { + + cmsFloat32Number v = cmsEvalToneCurveFloat(Curves[i], (cmsFloat32Number) (j / 255.0)); + cmsUInt16Number n = _cmsQuickSaturateWord(v * 65535.0); + + if (!_cmsWriteUInt16Number(io, n)) return FALSE; + } + } + } + + return TRUE; + + cmsUNUSED_PARAMETER(self); + cmsUNUSED_PARAMETER(nItems); +} + +static +void* Type_vcgt_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + cmsToneCurve** OldCurves = (cmsToneCurve**) Ptr; + cmsToneCurve** NewCurves; + + NewCurves = ( cmsToneCurve**) _cmsCalloc(self ->ContextID, 3, sizeof(cmsToneCurve*)); + if (NewCurves == NULL) return NULL; + + NewCurves[0] = cmsDupToneCurve(OldCurves[0]); + NewCurves[1] = cmsDupToneCurve(OldCurves[1]); + NewCurves[2] = cmsDupToneCurve(OldCurves[2]); + + return (void*) NewCurves; + + cmsUNUSED_PARAMETER(n); +} + + +static +void Type_vcgt_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsFreeToneCurveTriple((cmsToneCurve**) Ptr); + _cmsFree(self ->ContextID, Ptr); +} + + +// ******************************************************************************** +// Type cmsSigDictType +// ******************************************************************************** + +// Single column of the table can point to wchar or MLUC elements. Holds arrays of data +typedef struct { + cmsContext ContextID; + cmsUInt32Number *Offsets; + cmsUInt32Number *Sizes; +} _cmsDICelem; + +typedef struct { + _cmsDICelem Name, Value, DisplayName, DisplayValue; + +} _cmsDICarray; + +// Allocate an empty array element +static +cmsBool AllocElem(cmsContext ContextID, _cmsDICelem* e, cmsUInt32Number Count) +{ + e->Offsets = (cmsUInt32Number *) _cmsCalloc(ContextID, Count, sizeof(cmsUInt32Number *)); + if (e->Offsets == NULL) return FALSE; + + e->Sizes = (cmsUInt32Number *) _cmsCalloc(ContextID, Count, sizeof(cmsUInt32Number *)); + if (e->Sizes == NULL) { + + _cmsFree(ContextID, e -> Offsets); + return FALSE; + } + + e ->ContextID = ContextID; + return TRUE; +} + +// Free an array element +static +void FreeElem(_cmsDICelem* e) +{ + if (e ->Offsets != NULL) _cmsFree(e -> ContextID, e -> Offsets); + if (e ->Sizes != NULL) _cmsFree(e -> ContextID, e ->Sizes); + e->Offsets = e ->Sizes = NULL; +} + +// Get rid of whole array +static +void FreeArray( _cmsDICarray* a) +{ + if (a ->Name.Offsets != NULL) FreeElem(&a->Name); + if (a ->Value.Offsets != NULL) FreeElem(&a ->Value); + if (a ->DisplayName.Offsets != NULL) FreeElem(&a->DisplayName); + if (a ->DisplayValue.Offsets != NULL) FreeElem(&a ->DisplayValue); +} + + +// Allocate whole array +static +cmsBool AllocArray(cmsContext ContextID, _cmsDICarray* a, cmsUInt32Number Count, cmsUInt32Number Length) +{ + // Empty values + memset(a, 0, sizeof(_cmsDICarray)); + + // On depending on record size, create column arrays + if (!AllocElem(ContextID, &a ->Name, Count)) goto Error; + if (!AllocElem(ContextID, &a ->Value, Count)) goto Error; + + if (Length > 16) { + if (!AllocElem(ContextID, &a -> DisplayName, Count)) goto Error; + + } + if (Length > 24) { + if (!AllocElem(ContextID, &a ->DisplayValue, Count)) goto Error; + } + return TRUE; + +Error: + FreeArray(a); + return FALSE; +} + +// Read one element +static +cmsBool ReadOneElem(cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i, cmsUInt32Number BaseOffset) +{ + if (!_cmsReadUInt32Number(io, &e->Offsets[i])) return FALSE; + if (!_cmsReadUInt32Number(io, &e ->Sizes[i])) return FALSE; + + // An offset of zero has special meaning and shal be preserved + if (e ->Offsets[i] > 0) + e ->Offsets[i] += BaseOffset; + return TRUE; +} + + +static +cmsBool ReadOffsetArray(cmsIOHANDLER* io, _cmsDICarray* a, cmsUInt32Number Count, cmsUInt32Number Length, cmsUInt32Number BaseOffset) +{ + cmsUInt32Number i; + + // Read column arrays + for (i=0; i < Count; i++) { + + if (!ReadOneElem(io, &a -> Name, i, BaseOffset)) return FALSE; + if (!ReadOneElem(io, &a -> Value, i, BaseOffset)) return FALSE; + + if (Length > 16) { + + if (!ReadOneElem(io, &a ->DisplayName, i, BaseOffset)) return FALSE; + + } + + if (Length > 24) { + + if (!ReadOneElem(io, & a -> DisplayValue, i, BaseOffset)) return FALSE; + } + } + return TRUE; +} + + +// Write one element +static +cmsBool WriteOneElem(cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i) +{ + if (!_cmsWriteUInt32Number(io, e->Offsets[i])) return FALSE; + if (!_cmsWriteUInt32Number(io, e ->Sizes[i])) return FALSE; + + return TRUE; +} + +static +cmsBool WriteOffsetArray(cmsIOHANDLER* io, _cmsDICarray* a, cmsUInt32Number Count, cmsUInt32Number Length) +{ + cmsUInt32Number i; + + for (i=0; i < Count; i++) { + + if (!WriteOneElem(io, &a -> Name, i)) return FALSE; + if (!WriteOneElem(io, &a -> Value, i)) return FALSE; + + if (Length > 16) { + + if (!WriteOneElem(io, &a -> DisplayName, i)) return FALSE; + } + + if (Length > 24) { + + if (!WriteOneElem(io, &a -> DisplayValue, i)) return FALSE; + } + } + + return TRUE; +} + +static +cmsBool ReadOneWChar(cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i, wchar_t ** wcstr) +{ + + cmsUInt32Number nChars; + + // Special case for undefined strings (see ICC Votable + // Proposal Submission, Dictionary Type and Metadata TAG Definition) + if (e -> Offsets[i] == 0) { + + *wcstr = NULL; + return TRUE; + } + + if (!io -> Seek(io, e -> Offsets[i])) return FALSE; + + nChars = e ->Sizes[i] / sizeof(cmsUInt16Number); + + + *wcstr = (wchar_t*) _cmsMallocZero(e ->ContextID, (nChars + 1) * sizeof(wchar_t)); + if (*wcstr == NULL) return FALSE; + + if (!_cmsReadWCharArray(io, nChars, *wcstr)) { + _cmsFree(e ->ContextID, *wcstr); + return FALSE; + } + + // End of string marker + (*wcstr)[nChars] = 0; + return TRUE; +} + +static +cmsUInt32Number mywcslen(const wchar_t *s) +{ + const wchar_t *p; + + p = s; + while (*p) + p++; + + return (cmsUInt32Number)(p - s); +} + +static +cmsBool WriteOneWChar(cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i, const wchar_t * wcstr, cmsUInt32Number BaseOffset) +{ + cmsUInt32Number Before = io ->Tell(io); + cmsUInt32Number n; + + e ->Offsets[i] = Before - BaseOffset; + + if (wcstr == NULL) { + e ->Sizes[i] = 0; + e ->Offsets[i] = 0; + return TRUE; + } + + n = mywcslen(wcstr); + if (!_cmsWriteWCharArray(io, n, wcstr)) return FALSE; + + e ->Sizes[i] = io ->Tell(io) - Before; + return TRUE; +} + +static +cmsBool ReadOneMLUC(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i, cmsMLU** mlu) +{ + cmsUInt32Number nItems = 0; + + // A way to get null MLUCs + if (e -> Offsets[i] == 0 || e ->Sizes[i] == 0) { + + *mlu = NULL; + return TRUE; + } + + if (!io -> Seek(io, e -> Offsets[i])) return FALSE; + + *mlu = (cmsMLU*) Type_MLU_Read(self, io, &nItems, e ->Sizes[i]); + return *mlu != NULL; +} + +static +cmsBool WriteOneMLUC(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i, const cmsMLU* mlu, cmsUInt32Number BaseOffset) +{ + cmsUInt32Number Before; + + // Special case for undefined strings (see ICC Votable + // Proposal Submission, Dictionary Type and Metadata TAG Definition) + if (mlu == NULL) { + e ->Sizes[i] = 0; + e ->Offsets[i] = 0; + return TRUE; + } + + Before = io ->Tell(io); + e ->Offsets[i] = Before - BaseOffset; + + if (!Type_MLU_Write(self, io, (void*) mlu, 1)) return FALSE; + + e ->Sizes[i] = io ->Tell(io) - Before; + return TRUE; +} + + +static +void *Type_Dictionary_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) +{ + cmsHANDLE hDict; + cmsUInt32Number i, Count, Length; + cmsUInt32Number BaseOffset; + _cmsDICarray a; + wchar_t *NameWCS = NULL, *ValueWCS = NULL; + cmsMLU *DisplayNameMLU = NULL, *DisplayValueMLU=NULL; + cmsBool rc; + + *nItems = 0; + + // Get actual position as a basis for element offsets + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + // Get name-value record count + if (!_cmsReadUInt32Number(io, &Count)) return NULL; + SizeOfTag -= sizeof(cmsUInt32Number); + + // Get rec lenghth + if (!_cmsReadUInt32Number(io, &Length)) return NULL; + SizeOfTag -= sizeof(cmsUInt32Number); + + // Check for valid lengths + if (Length != 16 && Length != 24 && Length != 32) { + cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown record length in dictionary '%d'", Length); + return NULL; + } + + // Creates an empty dictionary + hDict = cmsDictAlloc(self -> ContextID); + if (hDict == NULL) return NULL; + + // On depending on record size, create column arrays + if (!AllocArray(self -> ContextID, &a, Count, Length)) goto Error; + + // Read column arrays + if (!ReadOffsetArray(io, &a, Count, Length, BaseOffset)) goto Error; + + // Seek to each element and read it + for (i=0; i < Count; i++) { + + if (!ReadOneWChar(io, &a.Name, i, &NameWCS)) goto Error; + if (!ReadOneWChar(io, &a.Value, i, &ValueWCS)) goto Error; + + if (Length > 16) { + if (!ReadOneMLUC(self, io, &a.DisplayName, i, &DisplayNameMLU)) goto Error; + } + + if (Length > 24) { + if (!ReadOneMLUC(self, io, &a.DisplayValue, i, &DisplayValueMLU)) goto Error; + } + + rc = cmsDictAddEntry(hDict, NameWCS, ValueWCS, DisplayNameMLU, DisplayValueMLU); + + if (NameWCS != NULL) _cmsFree(self ->ContextID, NameWCS); + if (ValueWCS != NULL) _cmsFree(self ->ContextID, ValueWCS); + if (DisplayNameMLU != NULL) cmsMLUfree(DisplayNameMLU); + if (DisplayValueMLU != NULL) cmsMLUfree(DisplayValueMLU); + + if (!rc) return FALSE; + } + + FreeArray(&a); + *nItems = 1; + return (void*) hDict; + +Error: + FreeArray(&a); + cmsDictFree(hDict); + return NULL; +} + + +static +cmsBool Type_Dictionary_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) +{ + cmsHANDLE hDict = (cmsHANDLE) Ptr; + const cmsDICTentry* p; + cmsBool AnyName, AnyValue; + cmsUInt32Number i, Count, Length; + cmsUInt32Number DirectoryPos, CurrentPos, BaseOffset; + _cmsDICarray a; + + if (hDict == NULL) return FALSE; + + BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); + + // Let's inspect the dictionary + Count = 0; AnyName = FALSE; AnyValue = FALSE; + for (p = cmsDictGetEntryList(hDict); p != NULL; p = cmsDictNextEntry(p)) { + + if (p ->DisplayName != NULL) AnyName = TRUE; + if (p ->DisplayValue != NULL) AnyValue = TRUE; + Count++; + } + + Length = 16; + if (AnyName) Length += 8; + if (AnyValue) Length += 8; + + if (!_cmsWriteUInt32Number(io, Count)) return FALSE; + if (!_cmsWriteUInt32Number(io, Length)) return FALSE; + + // Keep starting position of offsets table + DirectoryPos = io ->Tell(io); + + // Allocate offsets array + if (!AllocArray(self ->ContextID, &a, Count, Length)) goto Error; + + // Write a fake directory to be filled latter on + if (!WriteOffsetArray(io, &a, Count, Length)) goto Error; + + // Write each element. Keep track of the size as well. + p = cmsDictGetEntryList(hDict); + for (i=0; i < Count; i++) { + + if (!WriteOneWChar(io, &a.Name, i, p ->Name, BaseOffset)) goto Error; + if (!WriteOneWChar(io, &a.Value, i, p ->Value, BaseOffset)) goto Error; + + if (p ->DisplayName != NULL) { + if (!WriteOneMLUC(self, io, &a.DisplayName, i, p ->DisplayName, BaseOffset)) goto Error; + } + + if (p ->DisplayValue != NULL) { + if (!WriteOneMLUC(self, io, &a.DisplayValue, i, p ->DisplayValue, BaseOffset)) goto Error; + } + + p = cmsDictNextEntry(p); + } + + // Write the directory + CurrentPos = io ->Tell(io); + if (!io ->Seek(io, DirectoryPos)) goto Error; + + if (!WriteOffsetArray(io, &a, Count, Length)) goto Error; + + if (!io ->Seek(io, CurrentPos)) goto Error; + + FreeArray(&a); + return TRUE; + +Error: + FreeArray(&a); + return FALSE; + + cmsUNUSED_PARAMETER(nItems); +} + + +static +void* Type_Dictionary_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) +{ + return (void*) cmsDictDup((cmsHANDLE) Ptr); + + cmsUNUSED_PARAMETER(n); + cmsUNUSED_PARAMETER(self); +} + + +static +void Type_Dictionary_Free(struct _cms_typehandler_struct* self, void* Ptr) +{ + cmsDictFree((cmsHANDLE) Ptr); + cmsUNUSED_PARAMETER(self); +} + + +// ******************************************************************************** +// Type support main routines +// ******************************************************************************** + + +// This is the list of built-in types +static _cmsTagTypeLinkedList SupportedTagTypes[] = { + +{TYPE_HANDLER(cmsSigChromaticityType, Chromaticity), &SupportedTagTypes[1] }, +{TYPE_HANDLER(cmsSigColorantOrderType, ColorantOrderType), &SupportedTagTypes[2] }, +{TYPE_HANDLER(cmsSigS15Fixed16ArrayType, S15Fixed16), &SupportedTagTypes[3] }, +{TYPE_HANDLER(cmsSigU16Fixed16ArrayType, U16Fixed16), &SupportedTagTypes[4] }, +{TYPE_HANDLER(cmsSigTextType, Text), &SupportedTagTypes[5] }, +{TYPE_HANDLER(cmsSigTextDescriptionType, Text_Description), &SupportedTagTypes[6] }, +{TYPE_HANDLER(cmsSigCurveType, Curve), &SupportedTagTypes[7] }, +{TYPE_HANDLER(cmsSigParametricCurveType, ParametricCurve), &SupportedTagTypes[8] }, +{TYPE_HANDLER(cmsSigDateTimeType, DateTime), &SupportedTagTypes[9] }, +{TYPE_HANDLER(cmsSigLut8Type, LUT8), &SupportedTagTypes[10] }, +{TYPE_HANDLER(cmsSigLut16Type, LUT16), &SupportedTagTypes[11] }, +{TYPE_HANDLER(cmsSigColorantTableType, ColorantTable), &SupportedTagTypes[12] }, +{TYPE_HANDLER(cmsSigNamedColor2Type, NamedColor), &SupportedTagTypes[13] }, +{TYPE_HANDLER(cmsSigMultiLocalizedUnicodeType, MLU), &SupportedTagTypes[14] }, +{TYPE_HANDLER(cmsSigProfileSequenceDescType, ProfileSequenceDesc), &SupportedTagTypes[15] }, +{TYPE_HANDLER(cmsSigSignatureType, Signature), &SupportedTagTypes[16] }, +{TYPE_HANDLER(cmsSigMeasurementType, Measurement), &SupportedTagTypes[17] }, +{TYPE_HANDLER(cmsSigDataType, Data), &SupportedTagTypes[18] }, +{TYPE_HANDLER(cmsSigLutAtoBType, LUTA2B), &SupportedTagTypes[19] }, +{TYPE_HANDLER(cmsSigLutBtoAType, LUTB2A), &SupportedTagTypes[20] }, +{TYPE_HANDLER(cmsSigUcrBgType, UcrBg), &SupportedTagTypes[21] }, +{TYPE_HANDLER(cmsSigCrdInfoType, CrdInfo), &SupportedTagTypes[22] }, +{TYPE_HANDLER(cmsSigMultiProcessElementType, MPE), &SupportedTagTypes[23] }, +{TYPE_HANDLER(cmsSigScreeningType, Screening), &SupportedTagTypes[24] }, +{TYPE_HANDLER(cmsSigViewingConditionsType, ViewingConditions), &SupportedTagTypes[25] }, +{TYPE_HANDLER(cmsSigXYZType, XYZ), &SupportedTagTypes[26] }, +{TYPE_HANDLER(cmsCorbisBrokenXYZtype, XYZ), &SupportedTagTypes[27] }, +{TYPE_HANDLER(cmsMonacoBrokenCurveType, Curve), &SupportedTagTypes[28] }, +{TYPE_HANDLER(cmsSigProfileSequenceIdType, ProfileSequenceId), &SupportedTagTypes[29] }, +{TYPE_HANDLER(cmsSigDictType, Dictionary), &SupportedTagTypes[30] }, +{TYPE_HANDLER(cmsSigVcgtType, vcgt), NULL } +}; + +#define DEFAULT_TAG_TYPE_COUNT (sizeof(SupportedTagTypes) / sizeof(_cmsTagTypeLinkedList)) + +// Both kind of plug-ins share same structure +cmsBool _cmsRegisterTagTypePlugin(cmsPluginBase* Data) +{ + return RegisterTypesPlugin(Data, SupportedTagTypes, DEFAULT_TAG_TYPE_COUNT); +} + +cmsBool _cmsRegisterMultiProcessElementPlugin(cmsPluginBase* Data) +{ + return RegisterTypesPlugin(Data, SupportedMPEtypes, DEFAULT_MPE_TYPE_COUNT); +} + + +// Wrapper for tag types +cmsTagTypeHandler* _cmsGetTagTypeHandler(cmsTagTypeSignature sig) +{ + return GetHandler(sig, SupportedTagTypes); +} + +// ******************************************************************************** +// Tag support main routines +// ******************************************************************************** + +typedef struct _cmsTagLinkedList_st { + + cmsTagSignature Signature; + cmsTagDescriptor Descriptor; + struct _cmsTagLinkedList_st* Next; + +} _cmsTagLinkedList; + +// This is the list of built-in tags +static _cmsTagLinkedList SupportedTags[] = { + + { cmsSigAToB0Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutAtoBType, cmsSigLut8Type}, DecideLUTtypeA2B}, &SupportedTags[1]}, + { cmsSigAToB1Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutAtoBType, cmsSigLut8Type}, DecideLUTtypeA2B}, &SupportedTags[2]}, + { cmsSigAToB2Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutAtoBType, cmsSigLut8Type}, DecideLUTtypeA2B}, &SupportedTags[3]}, + { cmsSigBToA0Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type}, DecideLUTtypeB2A}, &SupportedTags[4]}, + { cmsSigBToA1Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type}, DecideLUTtypeB2A}, &SupportedTags[5]}, + { cmsSigBToA2Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type}, DecideLUTtypeB2A}, &SupportedTags[6]}, + + // Allow corbis and its broken XYZ type + { cmsSigRedColorantTag, { 1, 2, { cmsSigXYZType, cmsCorbisBrokenXYZtype }, DecideXYZtype}, &SupportedTags[7]}, + { cmsSigGreenColorantTag, { 1, 2, { cmsSigXYZType, cmsCorbisBrokenXYZtype }, DecideXYZtype}, &SupportedTags[8]}, + { cmsSigBlueColorantTag, { 1, 2, { cmsSigXYZType, cmsCorbisBrokenXYZtype }, DecideXYZtype}, &SupportedTags[9]}, + + { cmsSigRedTRCTag, { 1, 3, { cmsSigCurveType, cmsSigParametricCurveType, cmsMonacoBrokenCurveType }, DecideCurveType}, &SupportedTags[10]}, + { cmsSigGreenTRCTag, { 1, 3, { cmsSigCurveType, cmsSigParametricCurveType, cmsMonacoBrokenCurveType }, DecideCurveType}, &SupportedTags[11]}, + { cmsSigBlueTRCTag, { 1, 3, { cmsSigCurveType, cmsSigParametricCurveType, cmsMonacoBrokenCurveType }, DecideCurveType}, &SupportedTags[12]}, + + { cmsSigCalibrationDateTimeTag, { 1, 1, { cmsSigDateTimeType }, NULL}, &SupportedTags[13]}, + { cmsSigCharTargetTag, { 1, 1, { cmsSigTextType }, NULL}, &SupportedTags[14]}, + + { cmsSigChromaticAdaptationTag, { 9, 1, { cmsSigS15Fixed16ArrayType }, NULL}, &SupportedTags[15]}, + { cmsSigChromaticityTag, { 1, 1, { cmsSigChromaticityType }, NULL}, &SupportedTags[16]}, + { cmsSigColorantOrderTag, { 1, 1, { cmsSigColorantOrderType }, NULL}, &SupportedTags[17]}, + { cmsSigColorantTableTag, { 1, 1, { cmsSigColorantTableType }, NULL}, &SupportedTags[18]}, + { cmsSigColorantTableOutTag, { 1, 1, { cmsSigColorantTableType }, NULL}, &SupportedTags[19]}, + + { cmsSigCopyrightTag, { 1, 3, { cmsSigTextType, cmsSigMultiLocalizedUnicodeType, cmsSigTextDescriptionType}, DecideTextType}, &SupportedTags[20]}, + { cmsSigDateTimeTag, { 1, 1, { cmsSigDateTimeType }, NULL}, &SupportedTags[21]}, + + { cmsSigDeviceMfgDescTag, { 1, 3, { cmsSigTextDescriptionType, cmsSigMultiLocalizedUnicodeType, cmsSigTextType}, DecideTextDescType}, &SupportedTags[22]}, + { cmsSigDeviceModelDescTag, { 1, 3, { cmsSigTextDescriptionType, cmsSigMultiLocalizedUnicodeType, cmsSigTextType}, DecideTextDescType}, &SupportedTags[23]}, + + { cmsSigGamutTag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type }, DecideLUTtypeB2A}, &SupportedTags[24]}, + + { cmsSigGrayTRCTag, { 1, 2, { cmsSigCurveType, cmsSigParametricCurveType }, DecideCurveType}, &SupportedTags[25]}, + { cmsSigLuminanceTag, { 1, 1, { cmsSigXYZType }, NULL}, &SupportedTags[26]}, + + { cmsSigMediaBlackPointTag, { 1, 2, { cmsSigXYZType, cmsCorbisBrokenXYZtype }, NULL}, &SupportedTags[27]}, + { cmsSigMediaWhitePointTag, { 1, 2, { cmsSigXYZType, cmsCorbisBrokenXYZtype }, NULL}, &SupportedTags[28]}, + + { cmsSigNamedColor2Tag, { 1, 1, { cmsSigNamedColor2Type }, NULL}, &SupportedTags[29]}, + + { cmsSigPreview0Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type }, DecideLUTtypeB2A}, &SupportedTags[30]}, + { cmsSigPreview1Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type }, DecideLUTtypeB2A}, &SupportedTags[31]}, + { cmsSigPreview2Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type }, DecideLUTtypeB2A}, &SupportedTags[32]}, + + { cmsSigProfileDescriptionTag, { 1, 3, { cmsSigTextDescriptionType, cmsSigMultiLocalizedUnicodeType, cmsSigTextType}, DecideTextDescType}, &SupportedTags[33]}, + { cmsSigProfileSequenceDescTag, { 1, 1, { cmsSigProfileSequenceDescType }, NULL}, &SupportedTags[34]}, + { cmsSigTechnologyTag, { 1, 1, { cmsSigSignatureType }, NULL}, &SupportedTags[35]}, + + { cmsSigColorimetricIntentImageStateTag, { 1, 1, { cmsSigSignatureType }, NULL}, &SupportedTags[36]}, + { cmsSigPerceptualRenderingIntentGamutTag, { 1, 1, { cmsSigSignatureType }, NULL}, &SupportedTags[37]}, + { cmsSigSaturationRenderingIntentGamutTag, { 1, 1, { cmsSigSignatureType }, NULL}, &SupportedTags[38]}, + + { cmsSigMeasurementTag, { 1, 1, { cmsSigMeasurementType }, NULL}, &SupportedTags[39]}, + + { cmsSigPs2CRD0Tag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[40]}, + { cmsSigPs2CRD1Tag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[41]}, + { cmsSigPs2CRD2Tag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[42]}, + { cmsSigPs2CRD3Tag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[43]}, + { cmsSigPs2CSATag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[44]}, + { cmsSigPs2RenderingIntentTag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[45]}, + + { cmsSigViewingCondDescTag, { 1, 3, { cmsSigTextDescriptionType, cmsSigMultiLocalizedUnicodeType, cmsSigTextType}, DecideTextDescType}, &SupportedTags[46]}, + + { cmsSigUcrBgTag, { 1, 1, { cmsSigUcrBgType}, NULL}, &SupportedTags[47]}, + { cmsSigCrdInfoTag, { 1, 1, { cmsSigCrdInfoType}, NULL}, &SupportedTags[48]}, + + { cmsSigDToB0Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[49]}, + { cmsSigDToB1Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[50]}, + { cmsSigDToB2Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[51]}, + { cmsSigDToB3Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[52]}, + { cmsSigBToD0Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[53]}, + { cmsSigBToD1Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[54]}, + { cmsSigBToD2Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[55]}, + { cmsSigBToD3Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[56]}, + + { cmsSigScreeningDescTag, { 1, 1, { cmsSigTextDescriptionType }, NULL}, &SupportedTags[57]}, + { cmsSigViewingConditionsTag, { 1, 1, { cmsSigViewingConditionsType }, NULL}, &SupportedTags[58]}, + + { cmsSigScreeningTag, { 1, 1, { cmsSigScreeningType}, NULL }, &SupportedTags[59]}, + { cmsSigVcgtTag, { 1, 1, { cmsSigVcgtType}, NULL }, &SupportedTags[60]}, + { cmsSigMetaTag, { 1, 1, { cmsSigDictType}, NULL }, &SupportedTags[61]}, + { cmsSigProfileSequenceIdTag, { 1, 1, { cmsSigProfileSequenceIdType}, NULL}, NULL} + +}; + +/* + Not supported Why + ======================= ========================================= + cmsSigOutputResponseTag ==> WARNING, POSSIBLE PATENT ON THIS SUBJECT! + cmsSigNamedColorTag ==> Deprecated + cmsSigDataTag ==> Ancient, unused + cmsSigDeviceSettingsTag ==> Deprecated, useless +*/ + +#define DEFAULT_TAG_COUNT (sizeof(SupportedTags) / sizeof(_cmsTagLinkedList)) + +cmsBool _cmsRegisterTagPlugin(cmsPluginBase* Data) +{ + cmsPluginTag* Plugin = (cmsPluginTag*) Data; + _cmsTagLinkedList *pt, *Anterior; + + + if (Data == NULL) { + + SupportedTags[DEFAULT_TAG_COUNT-1].Next = NULL; + return TRUE; + } + + pt = Anterior = SupportedTags; + while (pt != NULL) { + + if (Plugin->Signature == pt -> Signature) { + pt ->Descriptor = Plugin ->Descriptor; // Replace old behaviour + return TRUE; + } + + Anterior = pt; + pt = pt ->Next; + } + + pt = (_cmsTagLinkedList*) _cmsPluginMalloc(sizeof(_cmsTagLinkedList)); + if (pt == NULL) return FALSE; + + pt ->Signature = Plugin ->Signature; + pt ->Descriptor = Plugin ->Descriptor; + pt ->Next = NULL; + + if (Anterior != NULL) Anterior -> Next = pt; + + return TRUE; +} + +// Return a descriptor for a given tag or NULL +cmsTagDescriptor* _cmsGetTagDescriptor(cmsTagSignature sig) +{ + _cmsTagLinkedList* pt; + + for (pt = SupportedTags; + pt != NULL; + pt = pt ->Next) { + + if (sig == pt -> Signature) return &pt ->Descriptor; + } + + return NULL; +} + diff --git a/src/cmsvirt.c b/src/cmsvirt.c new file mode 100644 index 0000000..9a7e718 --- /dev/null +++ b/src/cmsvirt.c @@ -0,0 +1,1148 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + +// Virtual (built-in) profiles +// ----------------------------------------------------------------------------------- + +static +cmsBool SetTextTags(cmsHPROFILE hProfile, const wchar_t* Description) +{ + cmsMLU *DescriptionMLU, *CopyrightMLU; + cmsBool rc = FALSE; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + + DescriptionMLU = cmsMLUalloc(ContextID, 1); + CopyrightMLU = cmsMLUalloc(ContextID, 1); + + if (DescriptionMLU == NULL || CopyrightMLU == NULL) goto Error; + + if (!cmsMLUsetWide(DescriptionMLU, "en", "US", Description)) goto Error; + if (!cmsMLUsetWide(CopyrightMLU, "en", "US", L"No copyright, use freely")) goto Error; + + if (!cmsWriteTag(hProfile, cmsSigProfileDescriptionTag, DescriptionMLU)) goto Error; + if (!cmsWriteTag(hProfile, cmsSigCopyrightTag, CopyrightMLU)) goto Error; + + rc = TRUE; + +Error: + + if (DescriptionMLU) + cmsMLUfree(DescriptionMLU); + if (CopyrightMLU) + cmsMLUfree(CopyrightMLU); + return rc; +} + + +static +cmsBool SetSeqDescTag(cmsHPROFILE hProfile, const char* Model) +{ + cmsBool rc = FALSE; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + cmsSEQ* Seq = cmsAllocProfileSequenceDescription(ContextID, 1); + + if (Seq == NULL) return FALSE; + + Seq->seq[0].deviceMfg = (cmsSignature) 0; + Seq->seq[0].deviceModel = (cmsSignature) 0; + +#ifdef CMS_DONT_USE_INT64 + Seq->seq[0].attributes[0] = 0; + Seq->seq[0].attributes[1] = 0; +#else + Seq->seq[0].attributes = 0; +#endif + + Seq->seq[0].technology = (cmsTechnologySignature) 0; + + cmsMLUsetASCII( Seq->seq[0].Manufacturer, cmsNoLanguage, cmsNoCountry, "Little CMS"); + cmsMLUsetASCII( Seq->seq[0].Model, cmsNoLanguage, cmsNoCountry, Model); + + if (!_cmsWriteProfileSequence(hProfile, Seq)) goto Error; + + rc = TRUE; + +Error: + if (Seq) + cmsFreeProfileSequenceDescription(Seq); + + return rc; +} + + + +// This function creates a profile based on White point, primaries and +// transfer functions. +cmsHPROFILE CMSEXPORT cmsCreateRGBProfileTHR(cmsContext ContextID, + const cmsCIExyY* WhitePoint, + const cmsCIExyYTRIPLE* Primaries, + cmsToneCurve* const TransferFunction[3]) +{ + cmsHPROFILE hICC; + cmsMAT3 MColorants; + cmsCIEXYZTRIPLE Colorants; + cmsCIExyY MaxWhite; + cmsMAT3 CHAD; + cmsCIEXYZ WhitePointXYZ; + + hICC = cmsCreateProfilePlaceholder(ContextID); + if (!hICC) // can't allocate + return NULL; + + cmsSetProfileVersion(hICC, 4.3); + + cmsSetDeviceClass(hICC, cmsSigDisplayClass); + cmsSetColorSpace(hICC, cmsSigRgbData); + cmsSetPCS(hICC, cmsSigXYZData); + + cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); + + + // Implement profile using following tags: + // + // 1 cmsSigProfileDescriptionTag + // 2 cmsSigMediaWhitePointTag + // 3 cmsSigRedColorantTag + // 4 cmsSigGreenColorantTag + // 5 cmsSigBlueColorantTag + // 6 cmsSigRedTRCTag + // 7 cmsSigGreenTRCTag + // 8 cmsSigBlueTRCTag + // 9 Chromatic adaptation Tag + // This conforms a standard RGB DisplayProfile as says ICC, and then I add (As per addendum II) + // 10 cmsSigChromaticityTag + + + if (!SetTextTags(hICC, L"RGB built-in")) goto Error; + + if (WhitePoint) { + + if (!cmsWriteTag(hICC, cmsSigMediaWhitePointTag, cmsD50_XYZ())) goto Error; + + cmsxyY2XYZ(&WhitePointXYZ, WhitePoint); + _cmsAdaptationMatrix(&CHAD, NULL, &WhitePointXYZ, cmsD50_XYZ()); + + // This is a V4 tag, but many CMM does read and understand it no matter which version + if (!cmsWriteTag(hICC, cmsSigChromaticAdaptationTag, (void*) &CHAD)) goto Error; + } + + if (WhitePoint && Primaries) { + + MaxWhite.x = WhitePoint -> x; + MaxWhite.y = WhitePoint -> y; + MaxWhite.Y = 1.0; + + if (!_cmsBuildRGB2XYZtransferMatrix(&MColorants, &MaxWhite, Primaries)) goto Error; + + Colorants.Red.X = MColorants.v[0].n[0]; + Colorants.Red.Y = MColorants.v[1].n[0]; + Colorants.Red.Z = MColorants.v[2].n[0]; + + Colorants.Green.X = MColorants.v[0].n[1]; + Colorants.Green.Y = MColorants.v[1].n[1]; + Colorants.Green.Z = MColorants.v[2].n[1]; + + Colorants.Blue.X = MColorants.v[0].n[2]; + Colorants.Blue.Y = MColorants.v[1].n[2]; + Colorants.Blue.Z = MColorants.v[2].n[2]; + + if (!cmsWriteTag(hICC, cmsSigRedColorantTag, (void*) &Colorants.Red)) goto Error; + if (!cmsWriteTag(hICC, cmsSigBlueColorantTag, (void*) &Colorants.Blue)) goto Error; + if (!cmsWriteTag(hICC, cmsSigGreenColorantTag, (void*) &Colorants.Green)) goto Error; + } + + + if (TransferFunction) { + + if (!cmsWriteTag(hICC, cmsSigRedTRCTag, (void*) TransferFunction[0])) goto Error; + if (!cmsWriteTag(hICC, cmsSigGreenTRCTag, (void*) TransferFunction[1])) goto Error; + if (!cmsWriteTag(hICC, cmsSigBlueTRCTag, (void*) TransferFunction[2])) goto Error; + } + + if (Primaries) { + if (!cmsWriteTag(hICC, cmsSigChromaticityTag, (void*) Primaries)) goto Error; + } + + + return hICC; + +Error: + if (hICC) + cmsCloseProfile(hICC); + return NULL; +} + +cmsHPROFILE CMSEXPORT cmsCreateRGBProfile(const cmsCIExyY* WhitePoint, + const cmsCIExyYTRIPLE* Primaries, + cmsToneCurve* const TransferFunction[3]) +{ + return cmsCreateRGBProfileTHR(NULL, WhitePoint, Primaries, TransferFunction); +} + + + +// This function creates a profile based on White point and transfer function. +cmsHPROFILE CMSEXPORT cmsCreateGrayProfileTHR(cmsContext ContextID, + const cmsCIExyY* WhitePoint, + const cmsToneCurve* TransferFunction) +{ + cmsHPROFILE hICC; + cmsCIEXYZ tmp; + + hICC = cmsCreateProfilePlaceholder(ContextID); + if (!hICC) // can't allocate + return NULL; + + cmsSetProfileVersion(hICC, 4.3); + + cmsSetDeviceClass(hICC, cmsSigDisplayClass); + cmsSetColorSpace(hICC, cmsSigGrayData); + cmsSetPCS(hICC, cmsSigXYZData); + cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); + + + // Implement profile using following tags: + // + // 1 cmsSigProfileDescriptionTag + // 2 cmsSigMediaWhitePointTag + // 3 cmsSigGrayTRCTag + + // This conforms a standard Gray DisplayProfile + + // Fill-in the tags + + if (!SetTextTags(hICC, L"gray built-in")) goto Error; + + + if (WhitePoint) { + + cmsxyY2XYZ(&tmp, WhitePoint); + if (!cmsWriteTag(hICC, cmsSigMediaWhitePointTag, (void*) &tmp)) goto Error; + } + + if (TransferFunction) { + + if (!cmsWriteTag(hICC, cmsSigGrayTRCTag, (void*) TransferFunction)) goto Error; + } + + return hICC; + +Error: + if (hICC) + cmsCloseProfile(hICC); + return NULL; +} + + + +cmsHPROFILE CMSEXPORT cmsCreateGrayProfile(const cmsCIExyY* WhitePoint, + const cmsToneCurve* TransferFunction) +{ + return cmsCreateGrayProfileTHR(NULL, WhitePoint, TransferFunction); +} + +// This is a devicelink operating in the target colorspace with as many transfer functions as components + +cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLinkTHR(cmsContext ContextID, + cmsColorSpaceSignature ColorSpace, + cmsToneCurve* const TransferFunctions[]) +{ + cmsHPROFILE hICC; + cmsPipeline* Pipeline; + cmsStage* Lin; + int nChannels; + + hICC = cmsCreateProfilePlaceholder(ContextID); + if (!hICC) + return NULL; + + cmsSetProfileVersion(hICC, 4.3); + + cmsSetDeviceClass(hICC, cmsSigLinkClass); + cmsSetColorSpace(hICC, ColorSpace); + cmsSetPCS(hICC, ColorSpace); + + cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); + + // Set up channels + nChannels = cmsChannelsOf(ColorSpace); + + // Creates a Pipeline with prelinearization step only + Pipeline = cmsPipelineAlloc(ContextID, nChannels, nChannels); + if (Pipeline == NULL) goto Error; + + + // Copy tables to Pipeline + Lin = cmsStageAllocToneCurves(ContextID, nChannels, TransferFunctions); + if (Lin == NULL) goto Error; + + cmsPipelineInsertStage(Pipeline, cmsAT_BEGIN, Lin); + + // Create tags + if (!SetTextTags(hICC, L"Linearization built-in")) goto Error; + if (!cmsWriteTag(hICC, cmsSigAToB0Tag, (void*) Pipeline)) goto Error; + if (!SetSeqDescTag(hICC, "Linearization built-in")) goto Error; + + // Pipeline is already on virtual profile + cmsPipelineFree(Pipeline); + + // Ok, done + return hICC; + +Error: + if (hICC) + cmsCloseProfile(hICC); + + + return NULL; +} + +cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLink(cmsColorSpaceSignature ColorSpace, + cmsToneCurve* const TransferFunctions[]) +{ + return cmsCreateLinearizationDeviceLinkTHR(NULL, ColorSpace, TransferFunctions); +} + +// Ink-limiting algorithm +// +// Sum = C + M + Y + K +// If Sum > InkLimit +// Ratio= 1 - (Sum - InkLimit) / (C + M + Y) +// if Ratio <0 +// Ratio=0 +// endif +// Else +// Ratio=1 +// endif +// +// C = Ratio * C +// M = Ratio * M +// Y = Ratio * Y +// K: Does not change + +static +int InkLimitingSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +{ + cmsFloat64Number InkLimit = *(cmsFloat64Number *) Cargo; + cmsFloat64Number SumCMY, SumCMYK, Ratio; + + InkLimit = (InkLimit * 655.35); + + SumCMY = In[0] + In[1] + In[2]; + SumCMYK = SumCMY + In[3]; + + if (SumCMYK > InkLimit) { + + Ratio = 1 - ((SumCMYK - InkLimit) / SumCMY); + if (Ratio < 0) + Ratio = 0; + } + else Ratio = 1; + + Out[0] = _cmsQuickSaturateWord(In[0] * Ratio); // C + Out[1] = _cmsQuickSaturateWord(In[1] * Ratio); // M + Out[2] = _cmsQuickSaturateWord(In[2] * Ratio); // Y + + Out[3] = In[3]; // K (untouched) + + return TRUE; +} + +// This is a devicelink operating in CMYK for ink-limiting + +cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLinkTHR(cmsContext ContextID, + cmsColorSpaceSignature ColorSpace, + cmsFloat64Number Limit) +{ + cmsHPROFILE hICC; + cmsPipeline* LUT; + cmsStage* CLUT; + int nChannels; + + if (ColorSpace != cmsSigCmykData) { + cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "InkLimiting: Only CMYK currently supported"); + return NULL; + } + + if (Limit < 0.0 || Limit > 400) { + + cmsSignalError(ContextID, cmsERROR_RANGE, "InkLimiting: Limit should be between 0..400"); + if (Limit < 0) Limit = 0; + if (Limit > 400) Limit = 400; + + } + + hICC = cmsCreateProfilePlaceholder(ContextID); + if (!hICC) // can't allocate + return NULL; + + cmsSetProfileVersion(hICC, 4.3); + + cmsSetDeviceClass(hICC, cmsSigLinkClass); + cmsSetColorSpace(hICC, ColorSpace); + cmsSetPCS(hICC, ColorSpace); + + cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); + + + // Creates a Pipeline with 3D grid only + LUT = cmsPipelineAlloc(ContextID, 4, 4); + if (LUT == NULL) goto Error; + + + nChannels = cmsChannelsOf(ColorSpace); + + CLUT = cmsStageAllocCLut16bit(ContextID, 17, nChannels, nChannels, NULL); + if (CLUT == NULL) goto Error; + + if (!cmsStageSampleCLut16bit(CLUT, InkLimitingSampler, (void*) &Limit, 0)) goto Error; + + cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, nChannels)); + cmsPipelineInsertStage(LUT, cmsAT_END, CLUT); + cmsPipelineInsertStage(LUT, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, nChannels)); + + // Create tags + if (!SetTextTags(hICC, L"ink-limiting built-in")) goto Error; + + if (!cmsWriteTag(hICC, cmsSigAToB0Tag, (void*) LUT)) goto Error; + if (!SetSeqDescTag(hICC, "ink-limiting built-in")) goto Error; + + // cmsPipeline is already on virtual profile + cmsPipelineFree(LUT); + + // Ok, done + return hICC; + +Error: + if (LUT != NULL) + cmsPipelineFree(LUT); + + if (hICC != NULL) + cmsCloseProfile(hICC); + + return NULL; +} + +cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLink(cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit) +{ + return cmsCreateInkLimitingDeviceLinkTHR(NULL, ColorSpace, Limit); +} + + +// Creates a fake Lab identity. +cmsHPROFILE CMSEXPORT cmsCreateLab2ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint) +{ + cmsHPROFILE hProfile; + cmsPipeline* LUT = NULL; + + hProfile = cmsCreateRGBProfileTHR(ContextID, WhitePoint == NULL ? cmsD50_xyY() : WhitePoint, NULL, NULL); + if (hProfile == NULL) return NULL; + + cmsSetProfileVersion(hProfile, 2.1); + + cmsSetDeviceClass(hProfile, cmsSigAbstractClass); + cmsSetColorSpace(hProfile, cmsSigLabData); + cmsSetPCS(hProfile, cmsSigLabData); + + if (!SetTextTags(hProfile, L"Lab identity built-in")) return NULL; + + // An identity LUT is all we need + LUT = cmsPipelineAlloc(ContextID, 3, 3); + if (LUT == NULL) goto Error; + + cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCLut(ContextID, 3)); + + if (!cmsWriteTag(hProfile, cmsSigAToB0Tag, LUT)) goto Error; + cmsPipelineFree(LUT); + + return hProfile; + +Error: + + if (LUT != NULL) + cmsPipelineFree(LUT); + + if (hProfile != NULL) + cmsCloseProfile(hProfile); + + return NULL; +} + + +cmsHPROFILE CMSEXPORT cmsCreateLab2Profile(const cmsCIExyY* WhitePoint) +{ + return cmsCreateLab2ProfileTHR(NULL, WhitePoint); +} + + +// Creates a fake Lab V4 identity. +cmsHPROFILE CMSEXPORT cmsCreateLab4ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint) +{ + cmsHPROFILE hProfile; + cmsPipeline* LUT = NULL; + + hProfile = cmsCreateRGBProfileTHR(ContextID, WhitePoint == NULL ? cmsD50_xyY() : WhitePoint, NULL, NULL); + if (hProfile == NULL) return NULL; + + cmsSetProfileVersion(hProfile, 4.3); + + cmsSetDeviceClass(hProfile, cmsSigAbstractClass); + cmsSetColorSpace(hProfile, cmsSigLabData); + cmsSetPCS(hProfile, cmsSigLabData); + + if (!SetTextTags(hProfile, L"Lab identity built-in")) goto Error; + + // An empty LUTs is all we need + LUT = cmsPipelineAlloc(ContextID, 3, 3); + if (LUT == NULL) goto Error; + + cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3)); + + if (!cmsWriteTag(hProfile, cmsSigAToB0Tag, LUT)) goto Error; + cmsPipelineFree(LUT); + + return hProfile; + +Error: + + if (LUT != NULL) + cmsPipelineFree(LUT); + + if (hProfile != NULL) + cmsCloseProfile(hProfile); + + return NULL; +} + +cmsHPROFILE CMSEXPORT cmsCreateLab4Profile(const cmsCIExyY* WhitePoint) +{ + return cmsCreateLab4ProfileTHR(NULL, WhitePoint); +} + + +// Creates a fake XYZ identity +cmsHPROFILE CMSEXPORT cmsCreateXYZProfileTHR(cmsContext ContextID) +{ + cmsHPROFILE hProfile; + cmsPipeline* LUT = NULL; + + hProfile = cmsCreateRGBProfileTHR(ContextID, cmsD50_xyY(), NULL, NULL); + if (hProfile == NULL) return NULL; + + cmsSetProfileVersion(hProfile, 4.3); + + cmsSetDeviceClass(hProfile, cmsSigAbstractClass); + cmsSetColorSpace(hProfile, cmsSigXYZData); + cmsSetPCS(hProfile, cmsSigXYZData); + + if (!SetTextTags(hProfile, L"XYZ identity built-in")) goto Error; + + // An identity LUT is all we need + LUT = cmsPipelineAlloc(ContextID, 3, 3); + if (LUT == NULL) goto Error; + + cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3)); + + if (!cmsWriteTag(hProfile, cmsSigAToB0Tag, LUT)) goto Error; + cmsPipelineFree(LUT); + + return hProfile; + +Error: + + if (LUT != NULL) + cmsPipelineFree(LUT); + + if (hProfile != NULL) + cmsCloseProfile(hProfile); + + return NULL; +} + + +cmsHPROFILE CMSEXPORT cmsCreateXYZProfile(void) +{ + return cmsCreateXYZProfileTHR(NULL); +} + + +//sRGB Curves are defined by: +// +//If R’sRGB,G’sRGB, B’sRGB < 0.04045 +// +// R = R’sRGB / 12.92 +// G = G’sRGB / 12.92 +// B = B’sRGB / 12.92 +// +// +//else if R’sRGB,G’sRGB, B’sRGB >= 0.04045 +// +// R = ((R’sRGB + 0.055) / 1.055)^2.4 +// G = ((G’sRGB + 0.055) / 1.055)^2.4 +// B = ((B’sRGB + 0.055) / 1.055)^2.4 + +static +cmsToneCurve* Build_sRGBGamma(cmsContext ContextID) +{ + cmsFloat64Number Parameters[5]; + + Parameters[0] = 2.4; + Parameters[1] = 1. / 1.055; + Parameters[2] = 0.055 / 1.055; + Parameters[3] = 1. / 12.92; + Parameters[4] = 0.04045; + + return cmsBuildParametricToneCurve(ContextID, 4, Parameters); +} + +// Create the ICC virtual profile for sRGB space +cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfileTHR(cmsContext ContextID) +{ + cmsCIExyY D65; + cmsCIExyYTRIPLE Rec709Primaries = { + {0.6400, 0.3300, 1.0}, + {0.3000, 0.6000, 1.0}, + {0.1500, 0.0600, 1.0} + }; + cmsToneCurve* Gamma22[3]; + cmsHPROFILE hsRGB; + + cmsWhitePointFromTemp(&D65, 6504); + Gamma22[0] = Gamma22[1] = Gamma22[2] = Build_sRGBGamma(ContextID); + if (Gamma22[0] == NULL) return NULL; + + hsRGB = cmsCreateRGBProfileTHR(ContextID, &D65, &Rec709Primaries, Gamma22); + cmsFreeToneCurve(Gamma22[0]); + if (hsRGB == NULL) return NULL; + + if (!SetTextTags(hsRGB, L"sRGB built-in")) { + cmsCloseProfile(hsRGB); + return NULL; + } + + return hsRGB; +} + +cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfile(void) +{ + return cmsCreate_sRGBProfileTHR(NULL); +} + + + +typedef struct { + cmsFloat64Number Brightness; + cmsFloat64Number Contrast; + cmsFloat64Number Hue; + cmsFloat64Number Saturation; + cmsCIEXYZ WPsrc, WPdest; + +} BCHSWADJUSTS, *LPBCHSWADJUSTS; + + +static +int bchswSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +{ + cmsCIELab LabIn, LabOut; + cmsCIELCh LChIn, LChOut; + cmsCIEXYZ XYZ; + LPBCHSWADJUSTS bchsw = (LPBCHSWADJUSTS) Cargo; + + + cmsLabEncoded2Float(&LabIn, In); + + + cmsLab2LCh(&LChIn, &LabIn); + + // Do some adjusts on LCh + + LChOut.L = LChIn.L * bchsw ->Contrast + bchsw ->Brightness; + LChOut.C = LChIn.C + bchsw -> Saturation; + LChOut.h = LChIn.h + bchsw -> Hue; + + + cmsLCh2Lab(&LabOut, &LChOut); + + // Move white point in Lab + + cmsLab2XYZ(&bchsw ->WPsrc, &XYZ, &LabOut); + cmsXYZ2Lab(&bchsw ->WPdest, &LabOut, &XYZ); + + // Back to encoded + + cmsFloat2LabEncoded(Out, &LabOut); + + return TRUE; +} + + +// Creates an abstract profile operating in Lab space for Brightness, +// contrast, Saturation and white point displacement + +cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfileTHR(cmsContext ContextID, + int nLUTPoints, + cmsFloat64Number Bright, + cmsFloat64Number Contrast, + cmsFloat64Number Hue, + cmsFloat64Number Saturation, + int TempSrc, + int TempDest) +{ + cmsHPROFILE hICC; + cmsPipeline* Pipeline; + BCHSWADJUSTS bchsw; + cmsCIExyY WhitePnt; + cmsStage* CLUT; + cmsUInt32Number Dimensions[MAX_INPUT_DIMENSIONS]; + int i; + + + bchsw.Brightness = Bright; + bchsw.Contrast = Contrast; + bchsw.Hue = Hue; + bchsw.Saturation = Saturation; + + cmsWhitePointFromTemp(&WhitePnt, TempSrc ); + cmsxyY2XYZ(&bchsw.WPsrc, &WhitePnt); + + cmsWhitePointFromTemp(&WhitePnt, TempDest); + cmsxyY2XYZ(&bchsw.WPdest, &WhitePnt); + + hICC = cmsCreateProfilePlaceholder(ContextID); + if (!hICC) // can't allocate + return NULL; + + + cmsSetDeviceClass(hICC, cmsSigAbstractClass); + cmsSetColorSpace(hICC, cmsSigLabData); + cmsSetPCS(hICC, cmsSigLabData); + + cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); + + + // Creates a Pipeline with 3D grid only + Pipeline = cmsPipelineAlloc(ContextID, 3, 3); + if (Pipeline == NULL) { + cmsCloseProfile(hICC); + return NULL; + } + + for (i=0; i < MAX_INPUT_DIMENSIONS; i++) Dimensions[i] = nLUTPoints; + CLUT = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 3, 3, NULL); + if (CLUT == NULL) return NULL; + + + if (!cmsStageSampleCLut16bit(CLUT, bchswSampler, (void*) &bchsw, 0)) { + + // Shouldn't reach here + cmsPipelineFree(Pipeline); + cmsCloseProfile(hICC); + return NULL; + } + + cmsPipelineInsertStage(Pipeline, cmsAT_END, CLUT); + + // Create tags + + if (!SetTextTags(hICC, L"BCHS built-in")) return NULL; + + cmsWriteTag(hICC, cmsSigMediaWhitePointTag, (void*) cmsD50_XYZ()); + + cmsWriteTag(hICC, cmsSigAToB0Tag, (void*) Pipeline); + + // Pipeline is already on virtual profile + cmsPipelineFree(Pipeline); + + // Ok, done + return hICC; +} + + +CMSAPI cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfile(int nLUTPoints, + cmsFloat64Number Bright, + cmsFloat64Number Contrast, + cmsFloat64Number Hue, + cmsFloat64Number Saturation, + int TempSrc, + int TempDest) +{ + return cmsCreateBCHSWabstractProfileTHR(NULL, nLUTPoints, Bright, Contrast, Hue, Saturation, TempSrc, TempDest); +} + + +// Creates a fake NULL profile. This profile return 1 channel as always 0. +// Is useful only for gamut checking tricks +cmsHPROFILE CMSEXPORT cmsCreateNULLProfileTHR(cmsContext ContextID) +{ + cmsHPROFILE hProfile; + cmsPipeline* LUT = NULL; + cmsStage* PostLin; + cmsToneCurve* EmptyTab; + cmsUInt16Number Zero[2] = { 0, 0 }; + + hProfile = cmsCreateProfilePlaceholder(ContextID); + if (!hProfile) // can't allocate + return NULL; + + cmsSetProfileVersion(hProfile, 4.3); + + if (!SetTextTags(hProfile, L"NULL profile built-in")) goto Error; + + + + cmsSetDeviceClass(hProfile, cmsSigOutputClass); + cmsSetColorSpace(hProfile, cmsSigGrayData); + cmsSetPCS(hProfile, cmsSigLabData); + + // An empty LUTs is all we need + LUT = cmsPipelineAlloc(ContextID, 1, 1); + if (LUT == NULL) goto Error; + + EmptyTab = cmsBuildTabulatedToneCurve16(ContextID, 2, Zero); + PostLin = cmsStageAllocToneCurves(ContextID, 1, &EmptyTab); + cmsFreeToneCurve(EmptyTab); + + cmsPipelineInsertStage(LUT, cmsAT_END, PostLin); + + if (!cmsWriteTag(hProfile, cmsSigBToA0Tag, (void*) LUT)) goto Error; + if (!cmsWriteTag(hProfile, cmsSigMediaWhitePointTag, cmsD50_XYZ())) goto Error; + + cmsPipelineFree(LUT); + return hProfile; + +Error: + + if (LUT != NULL) + cmsPipelineFree(LUT); + + if (hProfile != NULL) + cmsCloseProfile(hProfile); + + return NULL; +} + +cmsHPROFILE CMSEXPORT cmsCreateNULLProfile(void) +{ + return cmsCreateNULLProfileTHR(NULL); +} + + +static +int IsPCS(cmsColorSpaceSignature ColorSpace) +{ + return (ColorSpace == cmsSigXYZData || + ColorSpace == cmsSigLabData); +} + + +static +void FixColorSpaces(cmsHPROFILE hProfile, + cmsColorSpaceSignature ColorSpace, + cmsColorSpaceSignature PCS, + cmsUInt32Number dwFlags) +{ + if (dwFlags & cmsFLAGS_GUESSDEVICECLASS) { + + if (IsPCS(ColorSpace) && IsPCS(PCS)) { + + cmsSetDeviceClass(hProfile, cmsSigAbstractClass); + cmsSetColorSpace(hProfile, ColorSpace); + cmsSetPCS(hProfile, PCS); + return; + } + + if (IsPCS(ColorSpace) && !IsPCS(PCS)) { + + cmsSetDeviceClass(hProfile, cmsSigOutputClass); + cmsSetPCS(hProfile, ColorSpace); + cmsSetColorSpace(hProfile, PCS); + return; + } + + if (IsPCS(PCS) && !IsPCS(ColorSpace)) { + + cmsSetDeviceClass(hProfile, cmsSigInputClass); + cmsSetColorSpace(hProfile, ColorSpace); + cmsSetPCS(hProfile, PCS); + return; + } + } + + cmsSetDeviceClass(hProfile, cmsSigLinkClass); + cmsSetColorSpace(hProfile, ColorSpace); + cmsSetPCS(hProfile, PCS); +} + + + +// This function creates a named color profile dumping all the contents of transform to a single profile +// In this way, LittleCMS may be used to "group" several named color databases into a single profile. +// It has, however, several minor limitations. PCS is always Lab, which is not very critic since this +// is the normal PCS for named color profiles. +static +cmsHPROFILE CreateNamedColorDevicelink(cmsHTRANSFORM xform) +{ + _cmsTRANSFORM* v = (_cmsTRANSFORM*) xform; + cmsHPROFILE hICC = NULL; + int i, nColors; + cmsNAMEDCOLORLIST *nc2 = NULL, *Original = NULL; + + // Create an empty placeholder + hICC = cmsCreateProfilePlaceholder(v->ContextID); + if (hICC == NULL) return NULL; + + // Critical information + cmsSetDeviceClass(hICC, cmsSigNamedColorClass); + cmsSetColorSpace(hICC, v ->ExitColorSpace); + cmsSetPCS(hICC, cmsSigLabData); + + // Tag profile with information + if (!SetTextTags(hICC, L"Named color devicelink")) goto Error; + + Original = cmsGetNamedColorList(xform); + if (Original == NULL) goto Error; + + nColors = cmsNamedColorCount(Original); + nc2 = cmsDupNamedColorList(Original); + if (nc2 == NULL) goto Error; + + // Colorant count now depends on the output space + nc2 ->ColorantCount = cmsPipelineOutputChannels(v ->Lut); + + // Apply the transfor to colorants. + for (i=0; i < nColors; i++) { + cmsDoTransform(xform, &i, nc2 ->List[i].DeviceColorant, 1); + } + + if (!cmsWriteTag(hICC, cmsSigNamedColor2Tag, (void*) nc2)) goto Error; + cmsFreeNamedColorList(nc2); + + return hICC; + +Error: + if (hICC != NULL) cmsCloseProfile(hICC); + return NULL; +} + + +// This structure holds information about which MPU can be stored on a profile based on the version + +typedef struct { + cmsBool IsV4; // Is a V4 tag? + cmsTagSignature RequiredTag; // Set to 0 for both types + cmsTagTypeSignature LutType; // The LUT type + int nTypes; // Number of types (up to 5) + cmsStageSignature MpeTypes[5]; // 5 is the maximum number + +} cmsAllowedLUT; + +static const cmsAllowedLUT AllowedLUTTypes[] = { + + { FALSE, 0, cmsSigLut16Type, 4, { cmsSigMatrixElemType, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType}}, + { FALSE, 0, cmsSigLut16Type, 3, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType}}, + { TRUE , 0, cmsSigLutAtoBType, 1, { cmsSigCurveSetElemType }}, + { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType, 3, { cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType } }, + { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType, 3, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType } }, + { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType, 5, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType }}, + { TRUE , cmsSigBToA0Tag, cmsSigLutBtoAType, 1, { cmsSigCurveSetElemType }}, + { TRUE , cmsSigBToA0Tag, cmsSigLutBtoAType, 3, { cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType }}, + { TRUE , cmsSigBToA0Tag, cmsSigLutBtoAType, 3, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType }}, + { TRUE , cmsSigBToA0Tag, cmsSigLutBtoAType, 5, { cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType }} +}; + +#define SIZE_OF_ALLOWED_LUT (sizeof(AllowedLUTTypes)/sizeof(cmsAllowedLUT)) + +// Check a single entry +static +cmsBool CheckOne(const cmsAllowedLUT* Tab, const cmsPipeline* Lut) +{ + cmsStage* mpe; + int n; + + for (n=0, mpe = Lut ->Elements; mpe != NULL; mpe = mpe ->Next, n++) { + + if (n > Tab ->nTypes) return FALSE; + if (cmsStageType(mpe) != Tab ->MpeTypes[n]) return FALSE; + } + + return (n == Tab ->nTypes); +} + + +static +const cmsAllowedLUT* FindCombination(const cmsPipeline* Lut, cmsBool IsV4, cmsTagSignature DestinationTag) +{ + cmsUInt32Number n; + + for (n=0; n < SIZE_OF_ALLOWED_LUT; n++) { + + const cmsAllowedLUT* Tab = AllowedLUTTypes + n; + + if (IsV4 ^ Tab -> IsV4) continue; + if ((Tab ->RequiredTag != 0) && (Tab ->RequiredTag != DestinationTag)) continue; + + if (CheckOne(Tab, Lut)) return Tab; + } + + return NULL; +} + + +// Does convert a transform into a device link profile +cmsHPROFILE CMSEXPORT cmsTransform2DeviceLink(cmsHTRANSFORM hTransform, cmsFloat64Number Version, cmsUInt32Number dwFlags) +{ + cmsHPROFILE hProfile = NULL; + cmsUInt32Number FrmIn, FrmOut, ChansIn, ChansOut; + cmsUInt32Number ColorSpaceBitsIn, ColorSpaceBitsOut; + _cmsTRANSFORM* xform = (_cmsTRANSFORM*) hTransform; + cmsPipeline* LUT = NULL; + cmsStage* mpe; + cmsContext ContextID = cmsGetTransformContextID(hTransform); + const cmsAllowedLUT* AllowedLUT; + cmsTagSignature DestinationTag; + + _cmsAssert(hTransform != NULL); + + // Get the first mpe to check for named color + mpe = cmsPipelineGetPtrToFirstStage(xform ->Lut); + + // Check if is a named color transform + if (mpe != NULL) { + + if (cmsStageType(mpe) == cmsSigNamedColorElemType) { + return CreateNamedColorDevicelink(hTransform); + } + } + + // First thing to do is to get a copy of the transformation + LUT = cmsPipelineDup(xform ->Lut); + if (LUT == NULL) return NULL; + + // Time to fix the Lab2/Lab4 issue. + if ((xform ->EntryColorSpace == cmsSigLabData) && (Version < 4.0)) { + + cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocLabV2ToV4curves(ContextID)); + } + + // On the output side too + if ((xform ->ExitColorSpace) == cmsSigLabData && (Version < 4.0)) { + + cmsPipelineInsertStage(LUT, cmsAT_END, _cmsStageAllocLabV4ToV2(ContextID)); + } + + + hProfile = cmsCreateProfilePlaceholder(ContextID); + if (!hProfile) goto Error; // can't allocate + + cmsSetProfileVersion(hProfile, Version); + + FixColorSpaces(hProfile, xform -> EntryColorSpace, xform -> ExitColorSpace, dwFlags); + + // Optimize the LUT and precalculate a devicelink + + ChansIn = cmsChannelsOf(xform -> EntryColorSpace); + ChansOut = cmsChannelsOf(xform -> ExitColorSpace); + + ColorSpaceBitsIn = _cmsLCMScolorSpace(xform -> EntryColorSpace); + ColorSpaceBitsOut = _cmsLCMScolorSpace(xform -> ExitColorSpace); + + FrmIn = COLORSPACE_SH(ColorSpaceBitsIn) | CHANNELS_SH(ChansIn)|BYTES_SH(2); + FrmOut = COLORSPACE_SH(ColorSpaceBitsOut) | CHANNELS_SH(ChansOut)|BYTES_SH(2); + + + if (cmsGetDeviceClass(hProfile) == cmsSigOutputClass) + DestinationTag = cmsSigBToA0Tag; + else + DestinationTag = cmsSigAToB0Tag; + + // Check if the profile/version can store the result + if (dwFlags & cmsFLAGS_FORCE_CLUT) + AllowedLUT = NULL; + else + AllowedLUT = FindCombination(LUT, Version >= 4.0, DestinationTag); + + if (AllowedLUT == NULL) { + + // Try to optimize + _cmsOptimizePipeline(&LUT, xform ->RenderingIntent, &FrmIn, &FrmOut, &dwFlags); + AllowedLUT = FindCombination(LUT, Version >= 4.0, DestinationTag); + + } + + // If no way, then force CLUT that for sure can be written + if (AllowedLUT == NULL) { + + dwFlags |= cmsFLAGS_FORCE_CLUT; + _cmsOptimizePipeline(&LUT, xform ->RenderingIntent, &FrmIn, &FrmOut, &dwFlags); + + // Put identity curves if needed + if (cmsPipelineStageCount(LUT) == 1) { + + cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, ChansIn)); + cmsPipelineInsertStage(LUT, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, ChansOut)); + } + + AllowedLUT = FindCombination(LUT, Version >= 4.0, DestinationTag); + } + + // Somethings is wrong... + if (AllowedLUT == NULL) { + goto Error; + } + + + if (dwFlags & cmsFLAGS_8BITS_DEVICELINK) + cmsPipelineSetSaveAs8bitsFlag(LUT, TRUE); + + // Tag profile with information + if (!SetTextTags(hProfile, L"devicelink")) goto Error; + + // Store result + if (!cmsWriteTag(hProfile, DestinationTag, LUT)) goto Error; + + + if (xform -> InputColorant != NULL) { + if (!cmsWriteTag(hProfile, cmsSigColorantTableTag, xform->InputColorant)) goto Error; + } + + if (xform -> OutputColorant != NULL) { + if (!cmsWriteTag(hProfile, cmsSigColorantTableOutTag, xform->OutputColorant)) goto Error; + } + + if (xform ->Sequence != NULL) { + if (!_cmsWriteProfileSequence(hProfile, xform ->Sequence)) goto Error; + } + + cmsPipelineFree(LUT); + return hProfile; + +Error: + if (LUT != NULL) cmsPipelineFree(LUT); + cmsCloseProfile(hProfile); + return NULL; +} diff --git a/src/cmswtpnt.c b/src/cmswtpnt.c new file mode 100644 index 0000000..a52c929 --- /dev/null +++ b/src/cmswtpnt.c @@ -0,0 +1,351 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + + +// D50 - Widely used +const cmsCIEXYZ* CMSEXPORT cmsD50_XYZ(void) +{ + static cmsCIEXYZ D50XYZ = {cmsD50X, cmsD50Y, cmsD50Z}; + + return &D50XYZ; +} + +const cmsCIExyY* CMSEXPORT cmsD50_xyY(void) +{ + static cmsCIExyY D50xyY; + + cmsXYZ2xyY(&D50xyY, cmsD50_XYZ()); + + return &D50xyY; +} + +// Obtains WhitePoint from Temperature +cmsBool CMSEXPORT cmsWhitePointFromTemp(cmsCIExyY* WhitePoint, cmsFloat64Number TempK) +{ + cmsFloat64Number x, y; + cmsFloat64Number T, T2, T3; + // cmsFloat64Number M1, M2; + + _cmsAssert(WhitePoint != NULL); + + T = TempK; + T2 = T*T; // Square + T3 = T2*T; // Cube + + // For correlated color temperature (T) between 4000K and 7000K: + + if (T >= 4000. && T <= 7000.) + { + x = -4.6070*(1E9/T3) + 2.9678*(1E6/T2) + 0.09911*(1E3/T) + 0.244063; + } + else + // or for correlated color temperature (T) between 7000K and 25000K: + + if (T > 7000.0 && T <= 25000.0) + { + x = -2.0064*(1E9/T3) + 1.9018*(1E6/T2) + 0.24748*(1E3/T) + 0.237040; + } + else { + cmsSignalError(0, cmsERROR_RANGE, "cmsWhitePointFromTemp: invalid temp"); + return FALSE; + } + + // Obtain y(x) + + y = -3.000*(x*x) + 2.870*x - 0.275; + + // wave factors (not used, but here for futures extensions) + + // M1 = (-1.3515 - 1.7703*x + 5.9114 *y)/(0.0241 + 0.2562*x - 0.7341*y); + // M2 = (0.0300 - 31.4424*x + 30.0717*y)/(0.0241 + 0.2562*x - 0.7341*y); + + WhitePoint -> x = x; + WhitePoint -> y = y; + WhitePoint -> Y = 1.0; + + return TRUE; +} + + + +typedef struct { + + cmsFloat64Number mirek; // temp (in microreciprocal kelvin) + cmsFloat64Number ut; // u coord of intersection w/ blackbody locus + cmsFloat64Number vt; // v coord of intersection w/ blackbody locus + cmsFloat64Number tt; // slope of ISOTEMPERATURE. line + + } ISOTEMPERATURE; + +static ISOTEMPERATURE isotempdata[] = { +// {Mirek, Ut, Vt, Tt } + {0, 0.18006, 0.26352, -0.24341}, + {10, 0.18066, 0.26589, -0.25479}, + {20, 0.18133, 0.26846, -0.26876}, + {30, 0.18208, 0.27119, -0.28539}, + {40, 0.18293, 0.27407, -0.30470}, + {50, 0.18388, 0.27709, -0.32675}, + {60, 0.18494, 0.28021, -0.35156}, + {70, 0.18611, 0.28342, -0.37915}, + {80, 0.18740, 0.28668, -0.40955}, + {90, 0.18880, 0.28997, -0.44278}, + {100, 0.19032, 0.29326, -0.47888}, + {125, 0.19462, 0.30141, -0.58204}, + {150, 0.19962, 0.30921, -0.70471}, + {175, 0.20525, 0.31647, -0.84901}, + {200, 0.21142, 0.32312, -1.0182 }, + {225, 0.21807, 0.32909, -1.2168 }, + {250, 0.22511, 0.33439, -1.4512 }, + {275, 0.23247, 0.33904, -1.7298 }, + {300, 0.24010, 0.34308, -2.0637 }, + {325, 0.24702, 0.34655, -2.4681 }, + {350, 0.25591, 0.34951, -2.9641 }, + {375, 0.26400, 0.35200, -3.5814 }, + {400, 0.27218, 0.35407, -4.3633 }, + {425, 0.28039, 0.35577, -5.3762 }, + {450, 0.28863, 0.35714, -6.7262 }, + {475, 0.29685, 0.35823, -8.5955 }, + {500, 0.30505, 0.35907, -11.324 }, + {525, 0.31320, 0.35968, -15.628 }, + {550, 0.32129, 0.36011, -23.325 }, + {575, 0.32931, 0.36038, -40.770 }, + {600, 0.33724, 0.36051, -116.45 } +}; + +#define NISO sizeof(isotempdata)/sizeof(ISOTEMPERATURE) + + +// Robertson's method +cmsBool CMSEXPORT cmsTempFromWhitePoint(cmsFloat64Number* TempK, const cmsCIExyY* WhitePoint) +{ + cmsUInt32Number j; + cmsFloat64Number us,vs; + cmsFloat64Number uj,vj,tj,di,dj,mi,mj; + cmsFloat64Number xs, ys; + + _cmsAssert(WhitePoint != NULL); + _cmsAssert(TempK != NULL); + + di = mi = 0; + xs = WhitePoint -> x; + ys = WhitePoint -> y; + + // convert (x,y) to CIE 1960 (u,WhitePoint) + + us = (2*xs) / (-xs + 6*ys + 1.5); + vs = (3*ys) / (-xs + 6*ys + 1.5); + + + for (j=0; j < NISO; j++) { + + uj = isotempdata[j].ut; + vj = isotempdata[j].vt; + tj = isotempdata[j].tt; + mj = isotempdata[j].mirek; + + dj = ((vs - vj) - tj * (us - uj)) / sqrt(1.0 + tj * tj); + + if ((j != 0) && (di/dj < 0.0)) { + + // Found a match + *TempK = 1000000.0 / (mi + (di / (di - dj)) * (mj - mi)); + return TRUE; + } + + di = dj; + mi = mj; + } + + // Not found + return FALSE; +} + + +// Compute chromatic adaptation matrix using Chad as cone matrix + +static +cmsBool ComputeChromaticAdaptation(cmsMAT3* Conversion, + const cmsCIEXYZ* SourceWhitePoint, + const cmsCIEXYZ* DestWhitePoint, + const cmsMAT3* Chad) + +{ + + cmsMAT3 Chad_Inv; + cmsVEC3 ConeSourceXYZ, ConeSourceRGB; + cmsVEC3 ConeDestXYZ, ConeDestRGB; + cmsMAT3 Cone, Tmp; + + + Tmp = *Chad; + if (!_cmsMAT3inverse(&Tmp, &Chad_Inv)) return FALSE; + + _cmsVEC3init(&ConeSourceXYZ, SourceWhitePoint -> X, + SourceWhitePoint -> Y, + SourceWhitePoint -> Z); + + _cmsVEC3init(&ConeDestXYZ, DestWhitePoint -> X, + DestWhitePoint -> Y, + DestWhitePoint -> Z); + + _cmsMAT3eval(&ConeSourceRGB, Chad, &ConeSourceXYZ); + _cmsMAT3eval(&ConeDestRGB, Chad, &ConeDestXYZ); + + // Build matrix + _cmsVEC3init(&Cone.v[0], ConeDestRGB.n[0]/ConeSourceRGB.n[0], 0.0, 0.0); + _cmsVEC3init(&Cone.v[1], 0.0, ConeDestRGB.n[1]/ConeSourceRGB.n[1], 0.0); + _cmsVEC3init(&Cone.v[2], 0.0, 0.0, ConeDestRGB.n[2]/ConeSourceRGB.n[2]); + + + // Normalize + _cmsMAT3per(&Tmp, &Cone, Chad); + _cmsMAT3per(Conversion, &Chad_Inv, &Tmp); + + return TRUE; +} + +// Returns the final chrmatic adaptation from illuminant FromIll to Illuminant ToIll +// The cone matrix can be specified in ConeMatrix. If NULL, Bradford is assumed +cmsBool _cmsAdaptationMatrix(cmsMAT3* r, const cmsMAT3* ConeMatrix, const cmsCIEXYZ* FromIll, const cmsCIEXYZ* ToIll) +{ + cmsMAT3 LamRigg = {{ // Bradford matrix + {{ 0.8951, 0.2664, -0.1614 }}, + {{ -0.7502, 1.7135, 0.0367 }}, + {{ 0.0389, -0.0685, 1.0296 }} + }}; + + if (ConeMatrix == NULL) + ConeMatrix = &LamRigg; + + return ComputeChromaticAdaptation(r, FromIll, ToIll, ConeMatrix); +} + +// Same as anterior, but assuming D50 destination. White point is given in xyY +static +cmsBool _cmsAdaptMatrixToD50(cmsMAT3* r, const cmsCIExyY* SourceWhitePt) +{ + cmsCIEXYZ Dn; + cmsMAT3 Bradford; + cmsMAT3 Tmp; + + cmsxyY2XYZ(&Dn, SourceWhitePt); + + if (!_cmsAdaptationMatrix(&Bradford, NULL, &Dn, cmsD50_XYZ())) return FALSE; + + Tmp = *r; + _cmsMAT3per(r, &Bradford, &Tmp); + + return TRUE; +} + +// Build a White point, primary chromas transfer matrix from RGB to CIE XYZ +// This is just an approximation, I am not handling all the non-linear +// aspects of the RGB to XYZ process, and assumming that the gamma correction +// has transitive property in the tranformation chain. +// +// the alghoritm: +// +// - First I build the absolute conversion matrix using +// primaries in XYZ. This matrix is next inverted +// - Then I eval the source white point across this matrix +// obtaining the coeficients of the transformation +// - Then, I apply these coeficients to the original matrix +// +cmsBool _cmsBuildRGB2XYZtransferMatrix(cmsMAT3* r, const cmsCIExyY* WhitePt, const cmsCIExyYTRIPLE* Primrs) +{ + cmsVEC3 WhitePoint, Coef; + cmsMAT3 Result, Primaries; + cmsFloat64Number xn, yn; + cmsFloat64Number xr, yr; + cmsFloat64Number xg, yg; + cmsFloat64Number xb, yb; + + xn = WhitePt -> x; + yn = WhitePt -> y; + xr = Primrs -> Red.x; + yr = Primrs -> Red.y; + xg = Primrs -> Green.x; + yg = Primrs -> Green.y; + xb = Primrs -> Blue.x; + yb = Primrs -> Blue.y; + + // Build Primaries matrix + _cmsVEC3init(&Primaries.v[0], xr, xg, xb); + _cmsVEC3init(&Primaries.v[1], yr, yg, yb); + _cmsVEC3init(&Primaries.v[2], (1-xr-yr), (1-xg-yg), (1-xb-yb)); + + + // Result = Primaries ^ (-1) inverse matrix + if (!_cmsMAT3inverse(&Primaries, &Result)) + return FALSE; + + + _cmsVEC3init(&WhitePoint, xn/yn, 1.0, (1.0-xn-yn)/yn); + + // Across inverse primaries ... + _cmsMAT3eval(&Coef, &Result, &WhitePoint); + + // Give us the Coefs, then I build transformation matrix + _cmsVEC3init(&r -> v[0], Coef.n[VX]*xr, Coef.n[VY]*xg, Coef.n[VZ]*xb); + _cmsVEC3init(&r -> v[1], Coef.n[VX]*yr, Coef.n[VY]*yg, Coef.n[VZ]*yb); + _cmsVEC3init(&r -> v[2], Coef.n[VX]*(1.0-xr-yr), Coef.n[VY]*(1.0-xg-yg), Coef.n[VZ]*(1.0-xb-yb)); + + + return _cmsAdaptMatrixToD50(r, WhitePt); + +} + + +// Adapts a color to a given illuminant. Original color is expected to have +// a SourceWhitePt white point. +cmsBool CMSEXPORT cmsAdaptToIlluminant(cmsCIEXYZ* Result, + const cmsCIEXYZ* SourceWhitePt, + const cmsCIEXYZ* Illuminant, + const cmsCIEXYZ* Value) +{ + cmsMAT3 Bradford; + cmsVEC3 In, Out; + + _cmsAssert(Result != NULL); + _cmsAssert(SourceWhitePt != NULL); + _cmsAssert(Illuminant != NULL); + _cmsAssert(Value != NULL); + + if (!_cmsAdaptationMatrix(&Bradford, NULL, SourceWhitePt, Illuminant)) return FALSE; + + _cmsVEC3init(&In, Value -> X, Value -> Y, Value -> Z); + _cmsMAT3eval(&Out, &Bradford, &In); + + Result -> X = Out.n[0]; + Result -> Y = Out.n[1]; + Result -> Z = Out.n[2]; + + return TRUE; +} + + diff --git a/src/cmsxform.c b/src/cmsxform.c new file mode 100644 index 0000000..8a76dae --- /dev/null +++ b/src/cmsxform.c @@ -0,0 +1,815 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2_internal.h" + +// Transformations stuff +// ----------------------------------------------------------------------- + +// Alarm codes for 16-bit transformations, because the fixed range of containers there are +// no values left to mark out of gamut. volatile is C99 per 6.2.5 +static volatile cmsUInt16Number Alarm[cmsMAXCHANNELS] = { 0x7F00, 0x7F00, 0x7F00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static volatile cmsFloat64Number GlobalAdaptationState = 1; + +// The adaptation state may be defaulted by this function. If you don't like it, use the extended transform routine +cmsFloat64Number CMSEXPORT cmsSetAdaptationState(cmsFloat64Number d) +{ + cmsFloat64Number OldVal = GlobalAdaptationState; + + if (d >= 0) + GlobalAdaptationState = d; + + return OldVal; +} + +// Alarm codes are always global +void CMSEXPORT cmsSetAlarmCodes(cmsUInt16Number NewAlarm[cmsMAXCHANNELS]) +{ + int i; + + _cmsAssert(NewAlarm != NULL); + + for (i=0; i < cmsMAXCHANNELS; i++) + Alarm[i] = NewAlarm[i]; +} + +// You can get the codes cas well +void CMSEXPORT cmsGetAlarmCodes(cmsUInt16Number OldAlarm[cmsMAXCHANNELS]) +{ + int i; + + _cmsAssert(OldAlarm != NULL); + + for (i=0; i < cmsMAXCHANNELS; i++) + OldAlarm[i] = Alarm[i]; +} + +// Get rid of transform resources +void CMSEXPORT cmsDeleteTransform(cmsHTRANSFORM hTransform) +{ + _cmsTRANSFORM* p = (_cmsTRANSFORM*) hTransform; + + _cmsAssert(p != NULL); + + if (p -> GamutCheck) + cmsPipelineFree(p -> GamutCheck); + + if (p -> Lut) + cmsPipelineFree(p -> Lut); + + if (p ->InputColorant) + cmsFreeNamedColorList(p ->InputColorant); + + if (p -> OutputColorant) + cmsFreeNamedColorList(p ->OutputColorant); + + if (p ->Sequence) + cmsFreeProfileSequenceDescription(p ->Sequence); + + _cmsFree(p ->ContextID, (void *) p); +} + +// Apply transform. +void CMSEXPORT cmsDoTransform(cmsHTRANSFORM Transform, + const void* InputBuffer, + void* OutputBuffer, + cmsUInt32Number Size) + +{ + _cmsTRANSFORM* p = (_cmsTRANSFORM*) Transform; + + p -> xform(p, InputBuffer, OutputBuffer, Size); +} + + +// Transform routines ---------------------------------------------------------------------------------------------------------- + +// Float xform converts floats. Since there are no performance issues, one routine does all job, including gamut check. +// Note that because extended range, we can use a -1.0 value for out of gamut in this case. +static +void FloatXFORM(_cmsTRANSFORM* p, + const void* in, + void* out, cmsUInt32Number Size) +{ + cmsUInt8Number* accum; + cmsUInt8Number* output; + cmsFloat32Number fIn[cmsMAXCHANNELS], fOut[cmsMAXCHANNELS]; + cmsFloat32Number OutOfGamut; + cmsUInt32Number i, j; + + accum = (cmsUInt8Number*) in; + output = (cmsUInt8Number*) out; + + for (i=0; i < Size; i++) { + + accum = p -> FromInputFloat(p, fIn, accum, Size); + + // Any gamut chack to do? + if (p ->GamutCheck != NULL) { + + // Evaluate gamut marker. + cmsPipelineEvalFloat( fIn, &OutOfGamut, p ->GamutCheck); + + // Is current color out of gamut? + if (OutOfGamut > 0.0) { + + // Certainly, out of gamut + for (j=0; j < cmsMAXCHANNELS; j++) + fOut[j] = -1.0; + + } + else { + // No, proceed normally + cmsPipelineEvalFloat(fIn, fOut, p -> Lut); + } + } + else { + + // No gamut check at all + cmsPipelineEvalFloat(fIn, fOut, p -> Lut); + } + + // Back to asked representation + output = p -> ToOutputFloat(p, fOut, output, Size); + } +} + +// 16 bit precision ----------------------------------------------------------------------------------------------------------- + +// Null transformation, only applies formatters. No caché +static +void NullXFORM(_cmsTRANSFORM* p, + const void* in, + void* out, cmsUInt32Number Size) +{ + cmsUInt8Number* accum; + cmsUInt8Number* output; + cmsUInt16Number wIn[cmsMAXCHANNELS]; + cmsUInt32Number i, n; + + accum = (cmsUInt8Number*) in; + output = (cmsUInt8Number*) out; + n = Size; // Buffer len + + for (i=0; i < n; i++) { + + accum = p -> FromInput(p, wIn, accum, Size); + output = p -> ToOutput(p, wIn, output, Size); + } +} + + +// No gamut check, no cache, 16 bits +static +void PrecalculatedXFORM(_cmsTRANSFORM* p, + const void* in, + void* out, cmsUInt32Number Size) +{ + register cmsUInt8Number* accum; + register cmsUInt8Number* output; + cmsUInt16Number wIn[cmsMAXCHANNELS], wOut[cmsMAXCHANNELS]; + cmsUInt32Number i, n; + + accum = (cmsUInt8Number*) in; + output = (cmsUInt8Number*) out; + n = Size; + + for (i=0; i < n; i++) { + + accum = p -> FromInput(p, wIn, accum, Size); + p ->Lut ->Eval16Fn(wIn, wOut, p -> Lut->Data); + output = p -> ToOutput(p, wOut, output, Size); + } +} + + +// Auxiliar: Handle precalculated gamut check +static +void TransformOnePixelWithGamutCheck(_cmsTRANSFORM* p, + const cmsUInt16Number wIn[], + cmsUInt16Number wOut[]) +{ + cmsUInt16Number wOutOfGamut; + + p ->GamutCheck ->Eval16Fn(wIn, &wOutOfGamut, p ->GamutCheck ->Data); + if (wOutOfGamut >= 1) { + + cmsUInt16Number i; + + for (i=0; i < p ->Lut->OutputChannels; i++) + wOut[i] = Alarm[i]; + } + else + p ->Lut ->Eval16Fn(wIn, wOut, p -> Lut->Data); +} + +// Gamut check, No caché, 16 bits. +static +void PrecalculatedXFORMGamutCheck(_cmsTRANSFORM* p, + const void* in, + void* out, cmsUInt32Number Size) +{ + cmsUInt8Number* accum; + cmsUInt8Number* output; + cmsUInt16Number wIn[cmsMAXCHANNELS], wOut[cmsMAXCHANNELS]; + cmsUInt32Number i, n; + + accum = (cmsUInt8Number*) in; + output = (cmsUInt8Number*) out; + n = Size; // Buffer len + + for (i=0; i < n; i++) { + + accum = p -> FromInput(p, wIn, accum, Size); + TransformOnePixelWithGamutCheck(p, wIn, wOut); + output = p -> ToOutput(p, wOut, output, Size); + } +} + + +// No gamut check, Caché, 16 bits, +static +void CachedXFORM(_cmsTRANSFORM* p, + const void* in, + void* out, cmsUInt32Number Size) +{ + cmsUInt8Number* accum; + cmsUInt8Number* output; + cmsUInt16Number wIn[cmsMAXCHANNELS], wOut[cmsMAXCHANNELS]; + cmsUInt32Number i, n; + _cmsCACHE Cache; + + accum = (cmsUInt8Number*) in; + output = (cmsUInt8Number*) out; + n = Size; // Buffer len + + // Empty buffers for quick memcmp + memset(wIn, 0, sizeof(wIn)); + memset(wOut, 0, sizeof(wOut)); + + // Get copy of zero cache + memcpy(&Cache, &p ->Cache, sizeof(Cache)); + + for (i=0; i < n; i++) { + + accum = p -> FromInput(p, wIn, accum, Size); + + if (memcmp(wIn, Cache.CacheIn, sizeof(Cache.CacheIn)) == 0) { + + memcpy(wOut, Cache.CacheOut, sizeof(Cache.CacheOut)); + } + else { + + p ->Lut ->Eval16Fn(wIn, wOut, p -> Lut->Data); + + memcpy(Cache.CacheIn, wIn, sizeof(Cache.CacheIn)); + memcpy(Cache.CacheOut, wOut, sizeof(Cache.CacheOut)); + } + + output = p -> ToOutput(p, wOut, output, Size); + } + +} + + +// All those nice features together +static +void CachedXFORMGamutCheck(_cmsTRANSFORM* p, + const void* in, + void* out, cmsUInt32Number Size) +{ + cmsUInt8Number* accum; + cmsUInt8Number* output; + cmsUInt16Number wIn[cmsMAXCHANNELS], wOut[cmsMAXCHANNELS]; + cmsUInt32Number i, n; + _cmsCACHE Cache; + + accum = (cmsUInt8Number*) in; + output = (cmsUInt8Number*) out; + n = Size; // Buffer len + + // Empty buffers for quick memcmp + memset(wIn, 0, sizeof(cmsUInt16Number) * cmsMAXCHANNELS); + memset(wOut, 0, sizeof(cmsUInt16Number) * cmsMAXCHANNELS); + + // Get copy of zero cache + memcpy(&Cache, &p ->Cache, sizeof(Cache)); + + for (i=0; i < n; i++) { + + accum = p -> FromInput(p, wIn, accum, Size); + + if (memcmp(wIn, Cache.CacheIn, sizeof(Cache.CacheIn)) == 0) { + memcpy(wOut, Cache.CacheOut, sizeof(Cache.CacheOut)); + } + else { + TransformOnePixelWithGamutCheck(p, wIn, wOut); + memcpy(Cache.CacheIn, wIn, sizeof(Cache.CacheIn)); + memcpy(Cache.CacheOut, wOut, sizeof(Cache.CacheOut)); + } + + output = p -> ToOutput(p, wOut, output, Size); + } + +} + + + + +// Allocate transform struct and set it to defaults +static +_cmsTRANSFORM* AllocEmptyTransform(cmsContext ContextID, cmsUInt32Number InputFormat, cmsUInt32Number OutputFormat, cmsUInt32Number dwFlags) +{ + // Allocate needed memory + _cmsTRANSFORM* p = (_cmsTRANSFORM*) _cmsMallocZero(ContextID, sizeof(_cmsTRANSFORM)); + if (!p) return NULL; + + // Check whatever this is a true floating point transform + if (_cmsFormatterIsFloat(InputFormat) && _cmsFormatterIsFloat(OutputFormat)) { + + // Get formatter function always return a valid union, but the contents of this union may be NULL. + p ->FromInputFloat = _cmsGetFormatter(InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat; + p ->ToOutputFloat = _cmsGetFormatter(OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat; + dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; + + if (p ->FromInputFloat == NULL || p ->ToOutputFloat == NULL) { + + cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported raster format"); + _cmsFree(ContextID, p); + return NULL; + } + + // Float transforms don't use caché, always are non-NULL + p ->xform = FloatXFORM; + } + else { + + if (InputFormat == 0 && OutputFormat == 0) { + p ->FromInput = p ->ToOutput = NULL; + } + else { + + int BytesPerPixelInput; + + p ->FromInput = _cmsGetFormatter(InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16; + p ->ToOutput = _cmsGetFormatter(OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16; + + + if (p ->FromInput == NULL || p ->ToOutput == NULL) { + + cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported raster format"); + _cmsFree(ContextID, p); + return NULL; + } + + BytesPerPixelInput = T_BYTES(p ->InputFormat); + if (BytesPerPixelInput == 0 || BytesPerPixelInput >= 2) + dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; + + } + + if (dwFlags & cmsFLAGS_NULLTRANSFORM) { + + p ->xform = NullXFORM; + } + else { + if (dwFlags & cmsFLAGS_NOCACHE) { + + if (dwFlags & cmsFLAGS_GAMUTCHECK) + p ->xform = PrecalculatedXFORMGamutCheck; // Gamut check, no caché + else + p ->xform = PrecalculatedXFORM; // No caché, no gamut check + } + else { + + if (dwFlags & cmsFLAGS_GAMUTCHECK) + p ->xform = CachedXFORMGamutCheck; // Gamut check, caché + else + p ->xform = CachedXFORM; // No gamut check, caché + + } + } + } + + + p ->InputFormat = InputFormat; + p ->OutputFormat = OutputFormat; + p ->dwOriginalFlags = dwFlags; + p ->ContextID = ContextID; + return p; +} + +static +cmsBool GetXFormColorSpaces(int nProfiles, cmsHPROFILE hProfiles[], cmsColorSpaceSignature* Input, cmsColorSpaceSignature* Output) +{ + cmsColorSpaceSignature ColorSpaceIn, ColorSpaceOut; + cmsColorSpaceSignature PostColorSpace; + int i; + + if (hProfiles[0] == NULL) return FALSE; + + *Input = PostColorSpace = cmsGetColorSpace(hProfiles[0]); + + // Special handling for named color profiles as devicelinks + if (nProfiles == 1 && cmsGetDeviceClass(hProfiles[0]) == cmsSigNamedColorClass) { + *Input = cmsSig1colorData; + *Output = PostColorSpace; + return TRUE; + } + + for (i=0; i < nProfiles; i++) { + + cmsHPROFILE hProfile = hProfiles[i]; + + int lIsInput = (PostColorSpace != cmsSigXYZData) && + (PostColorSpace != cmsSigLabData); + + int lIsDeviceLink; + + if (hProfile == NULL) return FALSE; + + lIsDeviceLink = (cmsGetDeviceClass(hProfile) == cmsSigLinkClass); + + if (lIsInput || lIsDeviceLink) { + + ColorSpaceIn = cmsGetColorSpace(hProfile); + ColorSpaceOut = cmsGetPCS(hProfile); + } + else { + + ColorSpaceIn = cmsGetPCS(hProfile); + ColorSpaceOut = cmsGetColorSpace(hProfile); + } + + PostColorSpace = ColorSpaceOut; + } + + *Output = PostColorSpace; + + return TRUE; +} + +// Check colorspace +static +cmsBool IsProperColorSpace(cmsColorSpaceSignature Check, cmsUInt32Number dwFormat) +{ + int Space1 = T_COLORSPACE(dwFormat); + int Space2 = _cmsLCMScolorSpace(Check); + + if (Space1 == PT_ANY) return TRUE; + if (Space1 == Space2) return TRUE; + + if (Space1 == PT_LabV2 && Space2 == PT_Lab) return TRUE; + if (Space1 == PT_Lab && Space2 == PT_LabV2) return TRUE; + + return FALSE; +} + +// ---------------------------------------------------------------------------------------------------------------- + +// New to lcms 2.0 -- have all parameters available. +cmsHTRANSFORM CMSEXPORT cmsCreateExtendedTransform(cmsContext ContextID, + cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsUInt32Number Intents[], + cmsFloat64Number AdaptationStates[], + cmsHPROFILE hGamutProfile, + cmsUInt32Number nGamutPCSposition, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat, + cmsUInt32Number dwFlags) +{ + _cmsTRANSFORM* xform; + cmsBool FloatTransform; + cmsColorSpaceSignature EntryColorSpace; + cmsColorSpaceSignature ExitColorSpace; + cmsPipeline* Lut; + cmsUInt32Number LastIntent = Intents[nProfiles-1]; + + // If gamut check is requested, make sure we have a gamut profile + if (dwFlags & cmsFLAGS_GAMUTCHECK) { + if (hGamutProfile == NULL) dwFlags &= ~cmsFLAGS_GAMUTCHECK; + } + + // On floating point transforms, inhibit optimizations + FloatTransform = (_cmsFormatterIsFloat(InputFormat) && _cmsFormatterIsFloat(OutputFormat)); + + if (_cmsFormatterIsFloat(InputFormat) || _cmsFormatterIsFloat(OutputFormat)) + dwFlags |= cmsFLAGS_NOCACHE; + + // Mark entry/exit spaces + if (!GetXFormColorSpaces(nProfiles, hProfiles, &EntryColorSpace, &ExitColorSpace)) { + cmsSignalError(ContextID, cmsERROR_NULL, "NULL input profiles on transform"); + return NULL; + } + + // Check if proper colorspaces + if (!IsProperColorSpace(EntryColorSpace, InputFormat)) { + cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "Wrong input color space on transform"); + return NULL; + } + + if (!IsProperColorSpace(ExitColorSpace, OutputFormat)) { + cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "Wrong output color space on transform"); + return NULL; + } + + // Create a pipeline with all transformations + Lut = _cmsLinkProfiles(ContextID, nProfiles, Intents, hProfiles, BPC, AdaptationStates, dwFlags); + if (Lut == NULL) { + cmsSignalError(ContextID, cmsERROR_NOT_SUITABLE, "Couldn't link the profiles"); + return NULL; + } + + // Optimize the LUT if possible + _cmsOptimizePipeline(&Lut, LastIntent, &InputFormat, &OutputFormat, &dwFlags); + + + // All seems ok + xform = AllocEmptyTransform(ContextID, InputFormat, OutputFormat, dwFlags); + if (xform == NULL) { + cmsPipelineFree(Lut); + return NULL; + } + + // Keep values + xform ->EntryColorSpace = EntryColorSpace; + xform ->ExitColorSpace = ExitColorSpace; + xform ->RenderingIntent = Intents[nProfiles-1]; + xform ->Lut = Lut; + + // Create a gamut check LUT if requested + if (hGamutProfile != NULL && (dwFlags & cmsFLAGS_GAMUTCHECK)) + xform ->GamutCheck = _cmsCreateGamutCheckPipeline(ContextID, hProfiles, + BPC, Intents, + AdaptationStates, + nGamutPCSposition, + hGamutProfile); + + + // Try to read input and output colorant table + if (cmsIsTag(hProfiles[0], cmsSigColorantTableTag)) { + + // Input table can only come in this way. + xform ->InputColorant = cmsDupNamedColorList((cmsNAMEDCOLORLIST*) cmsReadTag(hProfiles[0], cmsSigColorantTableTag)); + } + + // Output is a little bit more complex. + if (cmsGetDeviceClass(hProfiles[nProfiles-1]) == cmsSigLinkClass) { + + // This tag may exist only on devicelink profiles. + if (cmsIsTag(hProfiles[nProfiles-1], cmsSigColorantTableOutTag)) { + + // It may be NULL if error + xform ->OutputColorant = cmsDupNamedColorList((cmsNAMEDCOLORLIST*) cmsReadTag(hProfiles[nProfiles-1], cmsSigColorantTableOutTag)); + } + + } else { + + if (cmsIsTag(hProfiles[nProfiles-1], cmsSigColorantTableTag)) { + + xform -> OutputColorant = cmsDupNamedColorList((cmsNAMEDCOLORLIST*) cmsReadTag(hProfiles[nProfiles-1], cmsSigColorantTableTag)); + } + } + + // Store the sequence of profiles + if (dwFlags & cmsFLAGS_KEEP_SEQUENCE) { + xform ->Sequence = _cmsCompileProfileSequence(ContextID, nProfiles, hProfiles); + } + else + xform ->Sequence = NULL; + + // If this is a cached transform, init first value, which is zero (16 bits only) + if (!(dwFlags & cmsFLAGS_NOCACHE)) { + + memset(&xform ->Cache.CacheIn, 0, sizeof(xform ->Cache.CacheIn)); + + if (xform ->GamutCheck != NULL) { + TransformOnePixelWithGamutCheck(xform, xform ->Cache.CacheIn, xform->Cache.CacheOut); + } + else { + + xform ->Lut ->Eval16Fn(xform ->Cache.CacheIn, xform->Cache.CacheOut, xform -> Lut->Data); + } + + } + + return (cmsHTRANSFORM) xform; +} + +// Multiprofile transforms: Gamut check is not available here, as it is unclear from which profile the gamut comes. +cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransformTHR(cmsContext ContextID, + cmsHPROFILE hProfiles[], + cmsUInt32Number nProfiles, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags) +{ + cmsUInt32Number i; + cmsBool BPC[256]; + cmsUInt32Number Intents[256]; + cmsFloat64Number AdaptationStates[256]; + + if (nProfiles <= 0 || nProfiles > 255) { + cmsSignalError(ContextID, cmsERROR_RANGE, "Wrong number of profiles. 1..255 expected, %d found.", nProfiles); + return NULL; + } + + for (i=0; i < nProfiles; i++) { + BPC[i] = dwFlags & cmsFLAGS_BLACKPOINTCOMPENSATION ? TRUE : FALSE; + Intents[i] = Intent; + AdaptationStates[i] = GlobalAdaptationState; + } + + + return cmsCreateExtendedTransform(ContextID, nProfiles, hProfiles, BPC, Intents, AdaptationStates, NULL, 0, InputFormat, OutputFormat, dwFlags); +} + + + +cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransform(cmsHPROFILE hProfiles[], + cmsUInt32Number nProfiles, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags) +{ + + if (nProfiles <= 0 || nProfiles > 255) { + cmsSignalError(NULL, cmsERROR_RANGE, "Wrong number of profiles. 1..255 expected, %d found.", nProfiles); + return NULL; + } + + return cmsCreateMultiprofileTransformTHR(cmsGetProfileContextID(hProfiles[0]), + hProfiles, + nProfiles, + InputFormat, + OutputFormat, + Intent, + dwFlags); +} + +cmsHTRANSFORM CMSEXPORT cmsCreateTransformTHR(cmsContext ContextID, + cmsHPROFILE Input, + cmsUInt32Number InputFormat, + cmsHPROFILE Output, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags) +{ + + cmsHPROFILE hArray[2]; + + hArray[0] = Input; + hArray[1] = Output; + + return cmsCreateMultiprofileTransformTHR(ContextID, hArray, Output == NULL ? 1 : 2, InputFormat, OutputFormat, Intent, dwFlags); +} + +CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateTransform(cmsHPROFILE Input, + cmsUInt32Number InputFormat, + cmsHPROFILE Output, + cmsUInt32Number OutputFormat, + cmsUInt32Number Intent, + cmsUInt32Number dwFlags) +{ + return cmsCreateTransformTHR(cmsGetProfileContextID(Input), Input, InputFormat, Output, OutputFormat, Intent, dwFlags); +} + + +cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransformTHR(cmsContext ContextID, + cmsHPROFILE InputProfile, + cmsUInt32Number InputFormat, + cmsHPROFILE OutputProfile, + cmsUInt32Number OutputFormat, + cmsHPROFILE ProofingProfile, + cmsUInt32Number nIntent, + cmsUInt32Number ProofingIntent, + cmsUInt32Number dwFlags) +{ + cmsHPROFILE hArray[4]; + cmsUInt32Number Intents[4]; + cmsBool BPC[4]; + cmsFloat64Number Adaptation[4]; + cmsBool DoBPC = (dwFlags & cmsFLAGS_BLACKPOINTCOMPENSATION) ? TRUE : FALSE; + + + hArray[0] = InputProfile; hArray[1] = ProofingProfile; hArray[2] = ProofingProfile; hArray[3] = OutputProfile; + Intents[0] = nIntent; Intents[1] = nIntent; Intents[2] = INTENT_RELATIVE_COLORIMETRIC; Intents[3] = ProofingIntent; + BPC[0] = DoBPC; BPC[1] = DoBPC; BPC[2] = 0; BPC[3] = 0; + + Adaptation[0] = Adaptation[1] = Adaptation[2] = Adaptation[3] = GlobalAdaptationState; + + if (!(dwFlags & (cmsFLAGS_SOFTPROOFING|cmsFLAGS_GAMUTCHECK))) + return cmsCreateTransformTHR(ContextID, InputProfile, InputFormat, OutputProfile, OutputFormat, nIntent, dwFlags); + + return cmsCreateExtendedTransform(ContextID, 4, hArray, BPC, Intents, Adaptation, + ProofingProfile, 1, InputFormat, OutputFormat, dwFlags); + +} + + +cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransform(cmsHPROFILE InputProfile, + cmsUInt32Number InputFormat, + cmsHPROFILE OutputProfile, + cmsUInt32Number OutputFormat, + cmsHPROFILE ProofingProfile, + cmsUInt32Number nIntent, + cmsUInt32Number ProofingIntent, + cmsUInt32Number dwFlags) +{ + return cmsCreateProofingTransformTHR(cmsGetProfileContextID(InputProfile), + InputProfile, + InputFormat, + OutputProfile, + OutputFormat, + ProofingProfile, + nIntent, + ProofingIntent, + dwFlags); +} + + +// Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed +cmsContext CMSEXPORT cmsGetTransformContextID(cmsHTRANSFORM hTransform) +{ + _cmsTRANSFORM* xform = (_cmsTRANSFORM*) hTransform; + + if (xform == NULL) return NULL; + return xform -> ContextID; +} + +// Grab the input/output formats +cmsUInt32Number CMSEXPORT cmsGetTransformInputFormat(cmsHTRANSFORM hTransform) +{ + _cmsTRANSFORM* xform = (_cmsTRANSFORM*) hTransform; + + if (xform == NULL) return 0; + return xform->InputFormat; +} + +cmsUInt32Number CMSEXPORT cmsGetTransformOutputFormat(cmsHTRANSFORM hTransform) +{ + _cmsTRANSFORM* xform = (_cmsTRANSFORM*) hTransform; + + if (xform == NULL) return 0; + return xform->OutputFormat; +} + +// For backwards compatibility +cmsBool CMSEXPORT cmsChangeBuffersFormat(cmsHTRANSFORM hTransform, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat) +{ + + _cmsTRANSFORM* xform = (_cmsTRANSFORM*) hTransform; + cmsFormatter16 FromInput, ToOutput; + cmsUInt32Number BytesPerPixelInput; + + // We only can afford to change formatters if previous transform is at least 16 bits + BytesPerPixelInput = T_BYTES(xform ->InputFormat); + if (!(xform ->dwOriginalFlags & cmsFLAGS_CAN_CHANGE_FORMATTER)) { + + cmsSignalError(xform ->ContextID, cmsERROR_NOT_SUITABLE, "cmsChangeBuffersFormat works only on transforms created originally with at least 16 bits of precision"); + return FALSE; + } + + FromInput = _cmsGetFormatter(InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16; + ToOutput = _cmsGetFormatter(OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16; + + if (FromInput == NULL || ToOutput == NULL) { + + cmsSignalError(xform -> ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported raster format"); + return FALSE; + } + + xform ->InputFormat = InputFormat; + xform ->OutputFormat = OutputFormat; + xform ->FromInput = FromInput; + xform ->ToOutput = ToOutput; + return TRUE; +} diff --git a/src/lcms2.def b/src/lcms2.def new file mode 100644 index 0000000..b9d2c71 --- /dev/null +++ b/src/lcms2.def @@ -0,0 +1,309 @@ +LIBRARY LCMS2.DLL + +EXPORTS + +_cms15Fixed16toDouble = _cms15Fixed16toDouble +_cms8Fixed8toDouble = _cms8Fixed8toDouble +cmsAdaptToIlluminant = cmsAdaptToIlluminant +_cmsAdjustEndianess16 = _cmsAdjustEndianess16 +_cmsAdjustEndianess32 = _cmsAdjustEndianess32 +_cmsAdjustEndianess64 = _cmsAdjustEndianess64 +cmsAllocNamedColorList = cmsAllocNamedColorList +cmsAllocProfileSequenceDescription = cmsAllocProfileSequenceDescription +cmsAppendNamedColor = cmsAppendNamedColor +cmsBFDdeltaE = cmsBFDdeltaE +cmsBuildGamma = cmsBuildGamma +cmsBuildParametricToneCurve = cmsBuildParametricToneCurve +cmsBuildSegmentedToneCurve = cmsBuildSegmentedToneCurve +cmsBuildTabulatedToneCurve16 = cmsBuildTabulatedToneCurve16 +cmsBuildTabulatedToneCurveFloat = cmsBuildTabulatedToneCurveFloat +_cmsCalloc = _cmsCalloc +cmsChannelsOf = cmsChannelsOf +cmsCIE2000DeltaE = cmsCIE2000DeltaE +cmsCIE94DeltaE = cmsCIE94DeltaE +cmsCIECAM02Done = cmsCIECAM02Done +cmsCIECAM02Forward = cmsCIECAM02Forward +cmsCIECAM02Init = cmsCIECAM02Init +cmsCIECAM02Reverse = cmsCIECAM02Reverse +cmsCloseIOhandler = cmsCloseIOhandler +cmsCloseProfile = cmsCloseProfile +cmsCMCdeltaE = cmsCMCdeltaE +cmsCreate_sRGBProfile = cmsCreate_sRGBProfile +cmsCreate_sRGBProfileTHR = cmsCreate_sRGBProfileTHR +cmsCreateBCHSWabstractProfile = cmsCreateBCHSWabstractProfile +cmsCreateBCHSWabstractProfileTHR = cmsCreateBCHSWabstractProfileTHR +cmsCreateExtendedTransform = cmsCreateExtendedTransform +cmsCreateGrayProfile = cmsCreateGrayProfile +cmsCreateGrayProfileTHR = cmsCreateGrayProfileTHR +cmsCreateInkLimitingDeviceLink = cmsCreateInkLimitingDeviceLink +cmsCreateInkLimitingDeviceLinkTHR = cmsCreateInkLimitingDeviceLinkTHR +cmsCreateLab2Profile = cmsCreateLab2Profile +cmsCreateLab2ProfileTHR = cmsCreateLab2ProfileTHR +cmsCreateLab4Profile = cmsCreateLab4Profile +cmsCreateLab4ProfileTHR = cmsCreateLab4ProfileTHR +cmsCreateLinearizationDeviceLink = cmsCreateLinearizationDeviceLink +cmsCreateLinearizationDeviceLinkTHR = cmsCreateLinearizationDeviceLinkTHR +cmsCreateMultiprofileTransform = cmsCreateMultiprofileTransform +cmsCreateMultiprofileTransformTHR = cmsCreateMultiprofileTransformTHR +cmsCreateNULLProfile = cmsCreateNULLProfile +cmsCreateNULLProfileTHR = cmsCreateNULLProfileTHR +cmsCreateProfilePlaceholder = cmsCreateProfilePlaceholder +cmsCreateProofingTransform = cmsCreateProofingTransform +cmsCreateProofingTransformTHR = cmsCreateProofingTransformTHR +cmsCreateRGBProfile = cmsCreateRGBProfile +cmsCreateRGBProfileTHR = cmsCreateRGBProfileTHR +cmsCreateTransform = cmsCreateTransform +cmsCreateTransformTHR = cmsCreateTransformTHR +cmsCreateXYZProfile = cmsCreateXYZProfile +cmsCreateXYZProfileTHR = cmsCreateXYZProfileTHR +cmsD50_xyY = cmsD50_xyY +cmsD50_XYZ = cmsD50_XYZ +_cmsDecodeDateTimeNumber = _cmsDecodeDateTimeNumber +_cmsDefaultICCintents = _cmsDefaultICCintents +cmsDeleteTransform = cmsDeleteTransform +cmsDeltaE = cmsDeltaE +cmsDetectBlackPoint = cmsDetectBlackPoint +cmsDetectTAC = cmsDetectTAC +cmsDesaturateLab = cmsDesaturateLab +cmsDoTransform = cmsDoTransform +_cmsDoubleTo15Fixed16 = _cmsDoubleTo15Fixed16 +_cmsDoubleTo8Fixed8 = _cmsDoubleTo8Fixed8 +_cmsDupMem = _cmsDupMem +cmsDupNamedColorList = cmsDupNamedColorList +cmsDupProfileSequenceDescription = cmsDupProfileSequenceDescription +cmsDupToneCurve = cmsDupToneCurve +_cmsEncodeDateTimeNumber = _cmsEncodeDateTimeNumber +cmsEstimateGamma = cmsEstimateGamma +cmsEvalToneCurve16 = cmsEvalToneCurve16 +cmsEvalToneCurveFloat = cmsEvalToneCurveFloat +cmsfilelength = cmsfilelength +cmsFloat2LabEncoded = cmsFloat2LabEncoded +cmsFloat2LabEncodedV2 = cmsFloat2LabEncodedV2 +cmsFloat2XYZEncoded = cmsFloat2XYZEncoded +cmsFormatterForColorspaceOfProfile = cmsFormatterForColorspaceOfProfile +cmsFormatterForPCSOfProfile = cmsFormatterForPCSOfProfile +_cmsFree = _cmsFree +cmsFreeNamedColorList = cmsFreeNamedColorList +cmsFreeProfileSequenceDescription = cmsFreeProfileSequenceDescription +cmsFreeToneCurve = cmsFreeToneCurve +cmsFreeToneCurveTriple = cmsFreeToneCurveTriple +cmsGBDAlloc = cmsGBDAlloc +cmsGBDFree = cmsGBDFree +cmsGDBAddPoint = cmsGDBAddPoint +cmsGDBCheckPoint = cmsGDBCheckPoint +cmsGDBCompute = cmsGDBCompute +cmsGetAlarmCodes = cmsGetAlarmCodes +cmsGetColorSpace = cmsGetColorSpace +cmsGetDeviceClass = cmsGetDeviceClass +cmsGetEncodedICCversion = cmsGetEncodedICCversion +cmsGetHeaderAttributes = cmsGetHeaderAttributes +cmsGetHeaderCreationDateTime = cmsGetHeaderCreationDateTime +cmsGetHeaderFlags = cmsGetHeaderFlags +cmsGetHeaderManufacturer = cmsGetHeaderManufacturer +cmsGetHeaderModel = cmsGetHeaderModel +cmsGetHeaderProfileID = cmsGetHeaderProfileID +cmsGetHeaderRenderingIntent = cmsGetHeaderRenderingIntent +cmsGetNamedColorList = cmsGetNamedColorList +cmsGetPCS = cmsGetPCS +cmsGetPostScriptColorResource = cmsGetPostScriptColorResource +cmsGetPostScriptCRD = cmsGetPostScriptCRD +cmsGetPostScriptCSA = cmsGetPostScriptCSA +cmsGetProfileInfo = cmsGetProfileInfo +cmsGetProfileInfoASCII = cmsGetProfileInfoASCII +cmsGetProfileContextID = cmsGetProfileContextID +cmsGetProfileVersion = cmsGetProfileVersion +cmsGetSupportedIntents = cmsGetSupportedIntents +cmsGetTagCount = cmsGetTagCount +cmsGetTagSignature = cmsGetTagSignature +cmsGetTransformContextID = cmsGetTransformContextID +_cmsICCcolorSpace = _cmsICCcolorSpace +_cmsIOPrintf = _cmsIOPrintf +cmsIsCLUT = cmsIsCLUT +cmsIsIntentSupported = cmsIsIntentSupported +cmsIsMatrixShaper = cmsIsMatrixShaper +cmsIsTag = cmsIsTag +cmsIsToneCurveDescending = cmsIsToneCurveDescending +cmsIsToneCurveLinear = cmsIsToneCurveLinear +cmsIsToneCurveMonotonic = cmsIsToneCurveMonotonic +cmsIsToneCurveMultisegment = cmsIsToneCurveMultisegment +cmsGetToneCurveParametricType = cmsGetToneCurveParametricType +cmsIT8Alloc = cmsIT8Alloc +cmsIT8DefineDblFormat = cmsIT8DefineDblFormat +cmsIT8EnumDataFormat = cmsIT8EnumDataFormat +cmsIT8EnumProperties = cmsIT8EnumProperties +cmsIT8Free = cmsIT8Free +cmsIT8GetData = cmsIT8GetData +cmsIT8GetDataDbl = cmsIT8GetDataDbl +cmsIT8FindDataFormat = cmsIT8FindDataFormat +cmsIT8GetDataRowCol = cmsIT8GetDataRowCol +cmsIT8GetDataRowColDbl = cmsIT8GetDataRowColDbl +cmsIT8GetPatchName = cmsIT8GetPatchName +cmsIT8GetProperty = cmsIT8GetProperty +cmsIT8GetPropertyDbl = cmsIT8GetPropertyDbl +cmsIT8GetSheetType = cmsIT8GetSheetType +cmsIT8LoadFromFile = cmsIT8LoadFromFile +cmsIT8LoadFromMem = cmsIT8LoadFromMem +cmsIT8SaveToFile = cmsIT8SaveToFile +cmsIT8SaveToMem = cmsIT8SaveToMem +cmsIT8SetComment = cmsIT8SetComment +cmsIT8SetData = cmsIT8SetData +cmsIT8SetDataDbl = cmsIT8SetDataDbl +cmsIT8SetDataFormat = cmsIT8SetDataFormat +cmsIT8SetDataRowCol = cmsIT8SetDataRowCol +cmsIT8SetDataRowColDbl = cmsIT8SetDataRowColDbl +cmsIT8SetPropertyDbl = cmsIT8SetPropertyDbl +cmsIT8SetPropertyHex = cmsIT8SetPropertyHex +cmsIT8SetPropertyStr = cmsIT8SetPropertyStr +cmsIT8SetPropertyUncooked = cmsIT8SetPropertyUncooked +cmsIT8SetSheetType = cmsIT8SetSheetType +cmsIT8SetTable = cmsIT8SetTable +cmsIT8SetTableByLabel = cmsIT8SetTableByLabel +cmsIT8TableCount = cmsIT8TableCount +cmsJoinToneCurve = cmsJoinToneCurve +cmsLab2LCh = cmsLab2LCh +cmsLab2XYZ = cmsLab2XYZ +cmsLabEncoded2Float = cmsLabEncoded2Float +cmsLabEncoded2FloatV2 = cmsLabEncoded2FloatV2 +cmsLCh2Lab = cmsLCh2Lab +_cmsLCMScolorSpace = _cmsLCMScolorSpace +cmsLinkTag = cmsLinkTag +cmsTagLinkedTo = cmsTagLinkedTo +cmsPipelineAlloc = cmsPipelineAlloc +cmsPipelineCat = cmsPipelineCat +cmsPipelineCheckAndRetreiveStages = cmsPipelineCheckAndRetreiveStages +cmsPipelineDup = cmsPipelineDup +cmsPipelineStageCount = cmsPipelineStageCount +cmsPipelineEval16 = cmsPipelineEval16 +cmsPipelineEvalFloat = cmsPipelineEvalFloat +cmsPipelineEvalReverseFloat = cmsPipelineEvalReverseFloat +cmsPipelineFree = cmsPipelineFree +cmsPipelineGetPtrToFirstStage = cmsPipelineGetPtrToFirstStage +cmsPipelineGetPtrToLastStage = cmsPipelineGetPtrToLastStage +cmsPipelineInputChannels = cmsPipelineInputChannels +cmsPipelineInsertStage = cmsPipelineInsertStage +cmsPipelineOutputChannels = cmsPipelineOutputChannels +cmsPipelineSetSaveAs8bitsFlag = cmsPipelineSetSaveAs8bitsFlag +_cmsPipelineSetOptimizationParameters = _cmsPipelineSetOptimizationParameters +cmsPipelineUnlinkStage = cmsPipelineUnlinkStage +_cmsMalloc = _cmsMalloc +_cmsMallocZero = _cmsMallocZero +_cmsMAT3eval = _cmsMAT3eval +_cmsMAT3identity = _cmsMAT3identity +_cmsMAT3inverse = _cmsMAT3inverse +_cmsMAT3isIdentity = _cmsMAT3isIdentity +_cmsMAT3per = _cmsMAT3per +_cmsMAT3solve = _cmsMAT3solve +cmsMD5computeID = cmsMD5computeID +cmsMLUalloc = cmsMLUalloc +cmsMLUdup = cmsMLUdup +cmsMLUfree = cmsMLUfree +cmsMLUgetASCII = cmsMLUgetASCII +cmsMLUgetTranslation = cmsMLUgetTranslation +cmsMLUgetWide = cmsMLUgetWide +cmsMLUsetASCII = cmsMLUsetASCII +cmsMLUsetWide = cmsMLUsetWide +cmsStageAllocCLut16bit = cmsStageAllocCLut16bit +cmsStageAllocCLut16bitGranular = cmsStageAllocCLut16bitGranular +cmsStageAllocCLutFloat = cmsStageAllocCLutFloat +cmsStageAllocCLutFloatGranular = cmsStageAllocCLutFloatGranular +cmsStageAllocToneCurves = cmsStageAllocToneCurves +cmsStageAllocIdentity = cmsStageAllocIdentity +cmsStageAllocMatrix = cmsStageAllocMatrix +_cmsStageAllocPlaceholder = _cmsStageAllocPlaceholder +cmsStageDup = cmsStageDup +cmsStageFree = cmsStageFree +cmsStageNext = cmsStageNext +cmsStageInputChannels = cmsStageInputChannels +cmsStageOutputChannels = cmsStageOutputChannels +cmsStageSampleCLut16bit = cmsStageSampleCLut16bit +cmsStageSampleCLutFloat = cmsStageSampleCLutFloat +cmsStageType = cmsStageType +cmsStageData = cmsStageData +cmsNamedColorCount = cmsNamedColorCount +cmsNamedColorIndex = cmsNamedColorIndex +cmsNamedColorInfo = cmsNamedColorInfo +cmsOpenIOhandlerFromFile = cmsOpenIOhandlerFromFile +cmsOpenIOhandlerFromMem = cmsOpenIOhandlerFromMem +cmsOpenIOhandlerFromNULL = cmsOpenIOhandlerFromNULL +cmsOpenIOhandlerFromStream = cmsOpenIOhandlerFromStream +cmsOpenProfileFromFile = cmsOpenProfileFromFile +cmsOpenProfileFromFileTHR = cmsOpenProfileFromFileTHR +cmsOpenProfileFromIOhandlerTHR = cmsOpenProfileFromIOhandlerTHR +cmsOpenProfileFromMem = cmsOpenProfileFromMem +cmsOpenProfileFromMemTHR = cmsOpenProfileFromMemTHR +cmsOpenProfileFromStream = cmsOpenProfileFromStream +cmsOpenProfileFromStreamTHR = cmsOpenProfileFromStreamTHR +cmsPlugin = cmsPlugin +_cmsRead15Fixed16Number = _cmsRead15Fixed16Number +_cmsReadAlignment = _cmsReadAlignment +_cmsReadFloat32Number = _cmsReadFloat32Number +cmsReadRawTag = cmsReadRawTag +cmsReadTag = cmsReadTag +_cmsReadTypeBase = _cmsReadTypeBase +_cmsReadUInt16Array = _cmsReadUInt16Array +_cmsReadUInt16Number = _cmsReadUInt16Number +_cmsReadUInt32Number = _cmsReadUInt32Number +_cmsReadUInt64Number = _cmsReadUInt64Number +_cmsReadUInt8Number = _cmsReadUInt8Number +_cmsReadXYZNumber = _cmsReadXYZNumber +_cmsRealloc = _cmsRealloc +cmsReverseToneCurve = cmsReverseToneCurve +cmsReverseToneCurveEx = cmsReverseToneCurveEx +cmsSaveProfileToFile = cmsSaveProfileToFile +cmsSaveProfileToIOhandler = cmsSaveProfileToIOhandler +cmsSaveProfileToMem = cmsSaveProfileToMem +cmsSaveProfileToStream = cmsSaveProfileToStream +cmsSetAdaptationState = cmsSetAdaptationState +cmsSetAlarmCodes = cmsSetAlarmCodes +cmsSetColorSpace = cmsSetColorSpace +cmsSetDeviceClass = cmsSetDeviceClass +cmsSetEncodedICCversion = cmsSetEncodedICCversion +cmsSetHeaderAttributes = cmsSetHeaderAttributes +cmsSetHeaderFlags = cmsSetHeaderFlags +cmsSetHeaderManufacturer = cmsSetHeaderManufacturer +cmsSetHeaderModel = cmsSetHeaderModel +cmsSetHeaderProfileID = cmsSetHeaderProfileID +cmsSetHeaderRenderingIntent = cmsSetHeaderRenderingIntent +cmsSetLogErrorHandler = cmsSetLogErrorHandler +cmsSetPCS = cmsSetPCS +cmsSetProfileVersion = cmsSetProfileVersion +cmsSignalError = cmsSignalError +cmsSmoothToneCurve = cmsSmoothToneCurve +cmsstrcasecmp = cmsstrcasecmp +cmsTempFromWhitePoint = cmsTempFromWhitePoint +cmsTransform2DeviceLink = cmsTransform2DeviceLink +cmsUnregisterPlugins = cmsUnregisterPlugins +_cmsVEC3cross = _cmsVEC3cross +_cmsVEC3distance = _cmsVEC3distance +_cmsVEC3dot = _cmsVEC3dot +_cmsVEC3init = _cmsVEC3init +_cmsVEC3length = _cmsVEC3length +_cmsVEC3minus = _cmsVEC3minus +cmsWhitePointFromTemp = cmsWhitePointFromTemp +_cmsWrite15Fixed16Number = _cmsWrite15Fixed16Number +_cmsWriteAlignment = _cmsWriteAlignment +_cmsWriteFloat32Number = _cmsWriteFloat32Number +cmsWriteRawTag = cmsWriteRawTag +cmsWriteTag = cmsWriteTag +_cmsWriteTypeBase = _cmsWriteTypeBase +_cmsWriteUInt16Array = _cmsWriteUInt16Array +_cmsWriteUInt16Number = _cmsWriteUInt16Number +_cmsWriteUInt32Number = _cmsWriteUInt32Number +_cmsWriteUInt64Number = _cmsWriteUInt64Number +_cmsWriteUInt8Number = _cmsWriteUInt8Number +_cmsWriteXYZNumber = _cmsWriteXYZNumber +cmsxyY2XYZ = cmsxyY2XYZ +cmsXYZ2Lab = cmsXYZ2Lab +cmsXYZ2xyY = cmsXYZ2xyY +cmsXYZEncoded2Float = cmsXYZEncoded2Float +cmsSliceSpace16 = cmsSliceSpace16 +cmsSliceSpaceFloat = cmsSliceSpaceFloat +cmsChangeBuffersFormat = cmsChangeBuffersFormat +cmsDictAlloc = cmsDictAlloc +cmsDictFree = cmsDictFree +cmsDictDup = cmsDictDup +cmsDictAddEntry = cmsDictAddEntry +cmsDictGetEntryList = cmsDictGetEntryList +cmsDictNextEntry = cmsDictNextEntry + + \ No newline at end of file diff --git a/src/lcms2_internal.h b/src/lcms2_internal.h new file mode 100644 index 0000000..39e38f0 --- /dev/null +++ b/src/lcms2_internal.h @@ -0,0 +1,634 @@ + +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#ifndef _lcms_internal_H + +// Include plug-in foundation +#ifndef _lcms_plugin_H +# include "lcms2_plugin.h" +#endif + +// ctype is part of C99 as per 7.1.2 +#include + +// assert macro is part of C99 as per 7.2 +#include + +// Some needed constants +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif + +#ifndef M_LOG10E +# define M_LOG10E 0.434294481903251827651 +#endif + +// BorlandC 5.5, VC2003 are broken on that +#if defined(__BORLANDC__) || (_MSC_VER <= 1400) // 1400 == VC++ 8.0 +#define sinf(x) (float)sin((float)x) +#define sqrtf(x) (float)sqrt((float)x) +#endif + + +// Alignment of ICC file format uses 4 bytes (cmsUInt32Number) +#define _cmsALIGNLONG(x) (((x)+(sizeof(cmsUInt32Number)-1)) & ~(sizeof(cmsUInt32Number)-1)) + +// Alignment to memory pointer +#define _cmsALIGNMEM(x) (((x)+(sizeof(void *) - 1)) & ~(sizeof(void *) - 1)) + +// Maximum encodeable values in floating point +#define MAX_ENCODEABLE_XYZ (1.0 + 32767.0/32768.0) +#define MIN_ENCODEABLE_ab2 (-128.0) +#define MAX_ENCODEABLE_ab2 ((65535.0/256.0) - 128.0) +#define MIN_ENCODEABLE_ab4 (-128.0) +#define MAX_ENCODEABLE_ab4 (127.0) + +// Maximum of channels for internal pipeline evaluation +#define MAX_STAGE_CHANNELS 128 + +// Unused parameter warning supression +#define cmsUNUSED_PARAMETER(x) ((void)x) + +// The specification for "inline" is section 6.7.4 of the C99 standard (ISO/IEC 9899:1999). +// unfortunately VisualC++ does not conform that +#if defined(_MSC_VER) || defined(__BORLANDC__) +# define cmsINLINE __inline +#else +# define cmsINLINE static inline +#endif + +// Other replacement functions +#ifdef _MSC_VER +# ifndef snprintf +# define snprintf _snprintf +# endif +# ifndef vsnprintf +# define vsnprintf _vsnprintf +# endif +#endif + + +// A fast way to convert from/to 16 <-> 8 bits +#define FROM_8_TO_16(rgb) (cmsUInt16Number) ((((cmsUInt16Number) (rgb)) << 8)|(rgb)) +#define FROM_16_TO_8(rgb) (cmsUInt8Number) ((((rgb) * 65281 + 8388608) >> 24) & 0xFF) + +// Code analysis is broken on asserts +#ifdef _MSC_VER +# if (_MSC_VER >= 1500) +# define _cmsAssert(a) { assert((a)); __analysis_assume((a)); } +# else +# define _cmsAssert(a) assert((a)) +# endif +#else +# define _cmsAssert(a) assert((a)) +#endif + +//--------------------------------------------------------------------------------- + +// Determinant lower than that are assumed zero (used on matrix invert) +#define MATRIX_DET_TOLERANCE 0.0001 + +//--------------------------------------------------------------------------------- + +// Fixed point +#define FIXED_TO_INT(x) ((x)>>16) +#define FIXED_REST_TO_INT(x) ((x)&0xFFFFU) +#define ROUND_FIXED_TO_INT(x) (((x)+0x8000)>>16) + +cmsINLINE cmsS15Fixed16Number _cmsToFixedDomain(int a) { return a + ((a + 0x7fff) / 0xffff); } +cmsINLINE int _cmsFromFixedDomain(cmsS15Fixed16Number a) { return a - ((a + 0x7fff) >> 16); } + +// ----------------------------------------------------------------------------------------------------------- + +// Fast floor conversion logic. Thanks to Sree Kotay and Stuart Nixon +// note than this only works in the range ..-32767...+32767 because +// mantissa is interpreted as 15.16 fixed point. +// The union is to avoid pointer aliasing overoptimization. +cmsINLINE int _cmsQuickFloor(cmsFloat64Number val) +{ +#ifdef CMS_DONT_USE_FAST_FLOOR + return (int) floor(val); +#else + const cmsFloat64Number _lcms_double2fixmagic = 68719476736.0 * 1.5; // 2^36 * 1.5, (52-16=36) uses limited precision to floor + union { + cmsFloat64Number val; + int halves[2]; + } temp; + + temp.val = val + _lcms_double2fixmagic; + +#ifdef CMS_USE_BIG_ENDIAN + return temp.halves[1] >> 16; +#else + return temp.halves[0] >> 16; +#endif +#endif +} + +// Fast floor restricted to 0..65535.0 +cmsINLINE cmsUInt16Number _cmsQuickFloorWord(cmsFloat64Number d) +{ + return (cmsUInt16Number) _cmsQuickFloor(d - 32767.0) + 32767U; +} + +// Floor to word, taking care of saturation +cmsINLINE cmsUInt16Number _cmsQuickSaturateWord(cmsFloat64Number d) +{ + d += 0.5; + if (d <= 0) return 0; + if (d >= 65535.0) return 0xffff; + + return _cmsQuickFloorWord(d); +} + +// Plug-In registering --------------------------------------------------------------- + +// Specialized function for plug-in memory management. No pairing free() since whole pool is freed at once. +void* _cmsPluginMalloc(cmsUInt32Number size); + +// Memory management +cmsBool _cmsRegisterMemHandlerPlugin(cmsPluginBase* Plugin); + +// Interpolation +cmsBool _cmsRegisterInterpPlugin(cmsPluginBase* Plugin); + +// Parametric curves +cmsBool _cmsRegisterParametricCurvesPlugin(cmsPluginBase* Plugin); + +// Formatters management +cmsBool _cmsRegisterFormattersPlugin(cmsPluginBase* Plugin); + +// Tag type management +cmsBool _cmsRegisterTagTypePlugin(cmsPluginBase* Plugin); + +// Tag management +cmsBool _cmsRegisterTagPlugin(cmsPluginBase* Plugin); + +// Intent management +cmsBool _cmsRegisterRenderingIntentPlugin(cmsPluginBase* Plugin); + +// Multi Process elements +cmsBool _cmsRegisterMultiProcessElementPlugin(cmsPluginBase* Plugin); + +// Optimization +cmsBool _cmsRegisterOptimizationPlugin(cmsPluginBase* Plugin); + + +// --------------------------------------------------------------------------------------------------------- + +// Suballocators. Those are blocks of memory that is freed at the end on whole block. +typedef struct _cmsSubAllocator_chunk_st { + + cmsUInt8Number* Block; + cmsUInt32Number BlockSize; + cmsUInt32Number Used; + + struct _cmsSubAllocator_chunk_st* next; + +} _cmsSubAllocator_chunk; + + +typedef struct { + + cmsContext ContextID; + _cmsSubAllocator_chunk* h; + +} _cmsSubAllocator; + + +_cmsSubAllocator* _cmsCreateSubAlloc(cmsContext ContextID, cmsUInt32Number Initial); +void _cmsSubAllocDestroy(_cmsSubAllocator* s); +void* _cmsSubAlloc(_cmsSubAllocator* s, cmsUInt32Number size); + +// ---------------------------------------------------------------------------------- + +// MLU internal representation +typedef struct { + + cmsUInt16Number Language; + cmsUInt16Number Country; + + cmsUInt32Number StrW; // Offset to current unicode string + cmsUInt32Number Len; // Lenght in bytes + +} _cmsMLUentry; + +struct _cms_MLU_struct { + + cmsContext ContextID; + + // The directory + int AllocatedEntries; + int UsedEntries; + _cmsMLUentry* Entries; // Array of pointers to strings allocated in MemPool + + // The Pool + cmsUInt32Number PoolSize; // The maximum allocated size + cmsUInt32Number PoolUsed; // The used size + void* MemPool; // Pointer to begin of memory pool +}; + +// Named color list internal representation +typedef struct { + + char Name[cmsMAX_PATH]; + cmsUInt16Number PCS[3]; + cmsUInt16Number DeviceColorant[cmsMAXCHANNELS]; + +} _cmsNAMEDCOLOR; + +struct _cms_NAMEDCOLORLIST_struct { + + cmsUInt32Number nColors; + cmsUInt32Number Allocated; + cmsUInt32Number ColorantCount; + + char Prefix[33]; // Prefix and suffix are defined to be 32 characters at most + char Suffix[33]; + + _cmsNAMEDCOLOR* List; + + cmsContext ContextID; +}; + + +// ---------------------------------------------------------------------------------- + +// This is the internal struct holding profile details. + +// Maximum supported tags in a profile +#define MAX_TABLE_TAG 100 + +typedef struct _cms_iccprofile_struct { + + // I/O handler + cmsIOHANDLER* IOhandler; + + // The thread ID + cmsContext ContextID; + + // Creation time + struct tm Created; + + // Only most important items found in ICC profiles + cmsUInt32Number Version; + cmsProfileClassSignature DeviceClass; + cmsColorSpaceSignature ColorSpace; + cmsColorSpaceSignature PCS; + cmsUInt32Number RenderingIntent; + cmsUInt32Number flags; + cmsUInt32Number manufacturer, model; + cmsUInt64Number attributes; + + cmsProfileID ProfileID; + + // Dictionary + cmsUInt32Number TagCount; + cmsTagSignature TagNames[MAX_TABLE_TAG]; + cmsTagSignature TagLinked[MAX_TABLE_TAG]; // The tag to wich is linked (0=none) + cmsUInt32Number TagSizes[MAX_TABLE_TAG]; // Size on disk + cmsUInt32Number TagOffsets[MAX_TABLE_TAG]; + cmsBool TagSaveAsRaw[MAX_TABLE_TAG]; // True to write uncooked + void * TagPtrs[MAX_TABLE_TAG]; + cmsTagTypeHandler* TagTypeHandlers[MAX_TABLE_TAG]; // Same structure may be serialized on different types + // depending on profile version, so we keep track of the // type handler for each tag in the list. + // Special + cmsBool IsWrite; + +} _cmsICCPROFILE; + +// IO helpers for profiles +cmsBool _cmsReadHeader(_cmsICCPROFILE* Icc); +cmsBool _cmsWriteHeader(_cmsICCPROFILE* Icc, cmsUInt32Number UsedSpace); +int _cmsSearchTag(_cmsICCPROFILE* Icc, cmsTagSignature sig, cmsBool lFollowLinks); + +// Tag types +cmsTagTypeHandler* _cmsGetTagTypeHandler(cmsTagTypeSignature sig); +cmsTagTypeSignature _cmsGetTagTrueType(cmsHPROFILE hProfile, cmsTagSignature sig); +cmsTagDescriptor* _cmsGetTagDescriptor(cmsTagSignature sig); + +// Error logging --------------------------------------------------------------------------------------------------------- + +void _cmsTagSignature2String(char String[5], cmsTagSignature sig); + +// Interpolation --------------------------------------------------------------------------------------------------------- + +cmsInterpParams* _cmsComputeInterpParams(cmsContext ContextID, int nSamples, int InputChan, int OutputChan, const void* Table, cmsUInt32Number dwFlags); +cmsInterpParams* _cmsComputeInterpParamsEx(cmsContext ContextID, const cmsUInt32Number nSamples[], int InputChan, int OutputChan, const void* Table, cmsUInt32Number dwFlags); +void _cmsFreeInterpParams(cmsInterpParams* p); +cmsBool _cmsSetInterpolationRoutine(cmsInterpParams* p); + +// Curves ---------------------------------------------------------------------------------------------------------------- + +// This struct holds information about a segment, plus a pointer to the function that implements the evaluation. +// In the case of table-based, Eval pointer is set to NULL + +// The gamma function main structure +struct _cms_curve_struct { + + cmsInterpParams* InterpParams; // Private optimizations for interpolation + + cmsUInt32Number nSegments; // Number of segments in the curve. Zero for a 16-bit based tables + cmsCurveSegment* Segments; // The segments + cmsInterpParams** SegInterp; // Array of private optimizations for interpolation in table-based segments + + cmsParametricCurveEvaluator* Evals; // Evaluators (one per segment) + + // 16 bit Table-based representation follows + cmsUInt32Number nEntries; // Number of table elements + cmsUInt16Number* Table16; // The table itself. +}; + + +// Pipelines & Stages --------------------------------------------------------------------------------------------- + +// A single stage +struct _cmsStage_struct { + + cmsContext ContextID; + + cmsStageSignature Type; // Identifies the stage + cmsStageSignature Implements; // Identifies the *function* of the stage (for optimizations) + + cmsUInt32Number InputChannels; // Input channels -- for optimization purposes + cmsUInt32Number OutputChannels; // Output channels -- for optimization purposes + + _cmsStageEvalFn EvalPtr; // Points to fn that evaluates the stage (always in floating point) + _cmsStageDupElemFn DupElemPtr; // Points to a fn that duplicates the *data* of the stage + _cmsStageFreeElemFn FreePtr; // Points to a fn that sets the *data* of the stage free + + // A generic pointer to whatever memory needed by the stage + void* Data; + + // Maintains linked list (used internally) + struct _cmsStage_struct* Next; +}; + +// Data kept in "Element" member of cmsStage + +// Curves +typedef struct { + cmsUInt32Number nCurves; + cmsToneCurve** TheCurves; + +} _cmsStageToneCurvesData; + +// Matrix +typedef struct { + cmsFloat64Number* Double; // floating point for the matrix + cmsFloat64Number* Offset; // The offset + +} _cmsStageMatrixData; + +// CLUT +typedef struct { + + union { // Can have only one of both representations at same time + cmsUInt16Number* T; // Points to the table 16 bits table + cmsFloat32Number* TFloat; // Points to the cmsFloat32Number table + + } Tab; + + cmsInterpParams* Params; + cmsUInt32Number nEntries; + cmsBool HasFloatValues; + +} _cmsStageCLutData; + + +// Special Stages (cannot be saved) +cmsStage* _cmsStageAllocLab2XYZ(cmsContext ContextID); +cmsStage* _cmsStageAllocXYZ2Lab(cmsContext ContextID); +cmsStage* _cmsStageAllocLabPrelin(cmsContext ContextID); +cmsStage* _cmsStageAllocLabV2ToV4(cmsContext ContextID); +cmsStage* _cmsStageAllocLabV2ToV4curves(cmsContext ContextID); +cmsStage* _cmsStageAllocLabV4ToV2(cmsContext ContextID); +cmsStage* _cmsStageAllocNamedColor(cmsNAMEDCOLORLIST* NamedColorList, cmsBool UsePCS); +cmsStage* _cmsStageAllocIdentityCurves(cmsContext ContextID, int nChannels); +cmsStage* _cmsStageAllocIdentityCLut(cmsContext ContextID, int nChan); +cmsStage* _cmsStageNormalizeFromLabFloat(cmsContext ContextID); +cmsStage* _cmsStageNormalizeFromXyzFloat(cmsContext ContextID); +cmsStage* _cmsStageNormalizeToLabFloat(cmsContext ContextID); +cmsStage* _cmsStageNormalizeToXyzFloat(cmsContext ContextID); + +// For curve set only +cmsToneCurve** _cmsStageGetPtrToCurveSet(const cmsStage* mpe); + + +// Pipeline Evaluator (in floating point) +typedef void (* _cmsPipelineEvalFloatFn)(const cmsFloat32Number In[], + cmsFloat32Number Out[], + const void* Data); + +struct _cmsPipeline_struct { + + cmsStage* Elements; // Points to elements chain + cmsUInt32Number InputChannels, OutputChannels; + + // Data & evaluators + void *Data; + + _cmsOPTeval16Fn Eval16Fn; + _cmsPipelineEvalFloatFn EvalFloatFn; + _cmsOPTfreeDataFn FreeDataFn; + _cmsOPTdupDataFn DupDataFn; + + cmsContext ContextID; // Environment + + cmsBool SaveAs8Bits; // Implementation-specific: save as 8 bits if possible +}; + +// LUT reading & creation ------------------------------------------------------------------------------------------- + +// Read tags using low-level function, provide necessary glue code to adapt versions, etc. All those return a brand new copy +// of the LUTS, since ownership of original is up to the profile. The user should free allocated resources. + +cmsPipeline* _cmsReadInputLUT(cmsHPROFILE hProfile, int Intent); +cmsPipeline* _cmsReadOutputLUT(cmsHPROFILE hProfile, int Intent); +cmsPipeline* _cmsReadDevicelinkLUT(cmsHPROFILE hProfile, int Intent); + +// Special values +cmsBool _cmsReadMediaWhitePoint(cmsCIEXYZ* Dest, cmsHPROFILE hProfile); +cmsBool _cmsReadCHAD(cmsMAT3* Dest, cmsHPROFILE hProfile); + +// Profile linker -------------------------------------------------------------------------------------------------- + +cmsPipeline* _cmsLinkProfiles(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number TheIntents[], + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags); + +// Sequence -------------------------------------------------------------------------------------------------------- + +cmsSEQ* _cmsReadProfileSequence(cmsHPROFILE hProfile); +cmsBool _cmsWriteProfileSequence(cmsHPROFILE hProfile, const cmsSEQ* seq); +cmsSEQ* _cmsCompileProfileSequence(cmsContext ContextID, cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[]); + + +// LUT optimization ------------------------------------------------------------------------------------------------ + +cmsUInt16Number _cmsQuantizeVal(cmsFloat64Number i, int MaxSamples); +int _cmsReasonableGridpointsByColorspace(cmsColorSpaceSignature Colorspace, cmsUInt32Number dwFlags); + +cmsBool _cmsEndPointsBySpace(cmsColorSpaceSignature Space, + cmsUInt16Number **White, + cmsUInt16Number **Black, + cmsUInt32Number *nOutputs); + +cmsBool _cmsOptimizePipeline(cmsPipeline** Lut, + int Intent, + cmsUInt32Number* InputFormat, + cmsUInt32Number* OutputFormat, + cmsUInt32Number* dwFlags ); + + +// Hi level LUT building ---------------------------------------------------------------------------------------------- + +cmsPipeline* _cmsCreateGamutCheckPipeline(cmsContext ContextID, + cmsHPROFILE hProfiles[], + cmsBool BPC[], + cmsUInt32Number Intents[], + cmsFloat64Number AdaptationStates[], + cmsUInt32Number nGamutPCSposition, + cmsHPROFILE hGamut); + + +// Formatters ------------------------------------------------------------------------------------------------------------ + +#define cmsFLAGS_CAN_CHANGE_FORMATTER 0x02000000 // Allow change buffer format + +cmsBool _cmsFormatterIsFloat(cmsUInt32Number Type); +cmsBool _cmsFormatterIs8bit(cmsUInt32Number Type); + +cmsFormatter _cmsGetFormatter(cmsUInt32Number Type, // Specific type, i.e. TYPE_RGB_8 + cmsFormatterDirection Dir, + cmsUInt32Number dwFlags); + + +// Transform logic ------------------------------------------------------------------------------------------------------ + +struct _cmstransform_struct; + +typedef struct { + + // 1-pixel cache (16 bits only) + cmsUInt16Number CacheIn[cmsMAXCHANNELS]; + cmsUInt16Number CacheOut[cmsMAXCHANNELS]; + +} _cmsCACHE; + + +// Full xform +typedef void (* _cmsTransformFn)(struct _cmstransform_struct *Transform, + const void* InputBuffer, + void* OutputBuffer, + cmsUInt32Number Size); + +typedef struct { + + cmsUInt32Number InputFormat, OutputFormat; // Keep formats for further reference + cmsUInt32Number StrideIn, StrideOut; // Planar support + +} cmsFormatterInfo; + +// Transformation +typedef struct _cmstransform_struct { + + cmsUInt32Number InputFormat, OutputFormat; // Keep formats for further reference + + // Points to transform code + _cmsTransformFn xform; + + // Formatters, cannot be embedded into LUT because cache + cmsFormatter16 FromInput; + cmsFormatter16 ToOutput; + + cmsFormatterFloat FromInputFloat; + cmsFormatterFloat ToOutputFloat; + + // 1-pixel cache seed for zero as input (16 bits, read only) + _cmsCACHE Cache; + + // A MPE LUT holding the full (optimized) transform + cmsPipeline* Lut; + + // A MPE LUT holding the gamut check. It goes from the input space to bilevel + cmsPipeline* GamutCheck; + + // Colorant tables + cmsNAMEDCOLORLIST* InputColorant; // Input Colorant table + cmsNAMEDCOLORLIST* OutputColorant; // Colorant table (for n chans > CMYK) + + // Informational only + cmsColorSpaceSignature EntryColorSpace; + cmsColorSpaceSignature ExitColorSpace; + + // Profiles used to create the transform + cmsSEQ* Sequence; + + cmsUInt32Number dwOriginalFlags; + cmsFloat64Number AdaptationState; + + // The intent of this transform. That is usually the last intent in the profilechain, but may differ + cmsUInt32Number RenderingIntent; + + // An id that uniquely identifies the running context. May be null. + cmsContext ContextID; + +} _cmsTRANSFORM; + +// -------------------------------------------------------------------------------------------------- + +cmsHTRANSFORM _cmsChain2Lab(cmsContext ContextID, + cmsUInt32Number nProfiles, + cmsUInt32Number InputFormat, + cmsUInt32Number OutputFormat, + const cmsUInt32Number Intents[], + const cmsHPROFILE hProfiles[], + const cmsBool BPC[], + const cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags); + + +cmsToneCurve* _cmsBuildKToneCurve(cmsContext ContextID, + cmsUInt32Number nPoints, + cmsUInt32Number nProfiles, + const cmsUInt32Number Intents[], + const cmsHPROFILE hProfiles[], + const cmsBool BPC[], + const cmsFloat64Number AdaptationStates[], + cmsUInt32Number dwFlags); + +cmsBool _cmsAdaptationMatrix(cmsMAT3* r, const cmsMAT3* ConeMatrix, const cmsCIEXYZ* FromIll, const cmsCIEXYZ* ToIll); + +cmsBool _cmsBuildRGB2XYZtransferMatrix(cmsMAT3* r, const cmsCIExyY* WhitePoint, const cmsCIExyYTRIPLE* Primaries); + + +#define _lcms_internal_H +#endif diff --git a/testbed/.deps/testcms2.Po b/testbed/.deps/testcms2.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/testbed/.deps/testcms2.Po @@ -0,0 +1 @@ +# dummy diff --git a/testbed/Makefile b/testbed/Makefile new file mode 100644 index 0000000..ecdaf52 --- /dev/null +++ b/testbed/Makefile @@ -0,0 +1,510 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# testbed/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# +# Makefile for building testcms +# + +pkgdatadir = $(datadir)/lcms2 +pkgincludedir = $(includedir)/lcms2 +pkglibdir = $(libdir)/lcms2 +pkglibexecdir = $(libexecdir)/lcms2 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = arm-unknown-linux-gnueabi +host_triplet = arm-unknown-linux-gnueabi +check_PROGRAMS = testcms$(EXEEXT) +subdir = testbed +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am_testcms_OBJECTS = testcms2.$(OBJEXT) +testcms_OBJECTS = $(am_testcms_OBJECTS) +testcms_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +testcms_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(testcms_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(testcms_SOURCES) +DIST_SOURCES = $(testcms_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoconf +AUTOHEADER = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoheader +AUTOMAKE = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = --pedantic -Wall -std=c99 -O2 +CPP = gcc -std=gnu99 -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DPACKAGE_NAME=\"lcms2\" -DPACKAGE_TARNAME=\"lcms2\" -DPACKAGE_VERSION=\"2.3\" -DPACKAGE_STRING=\"lcms2\ 2.3\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHasJPEG=1 -DHasZLIB=1 -DHasTIFF=1 -DHAVE_TIFFCONF_H=1 +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JPEGICC_DEPLIBS = -ljpeg -lm +LCMS_LIB_DEPLIBS = -lm +LD = /usr/arm-linux-gnueabi/bin/ld +LDFLAGS = +LIBOBJS = +LIBRARY_AGE = 0 +LIBRARY_CURRENT = 2 +LIBRARY_REVISION = 3 +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltmain.sh +LIB_JPEG = -ljpeg +LIB_MATH = -lm +LIB_TIFF = -ltiff +LIB_ZLIB = -lz +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = lcms2 +PACKAGE_BUGREPORT = +PACKAGE_NAME = lcms2 +PACKAGE_STRING = lcms2 2.3 +PACKAGE_TARNAME = lcms2 +PACKAGE_URL = +PACKAGE_VERSION = 2.3 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TIFFICC_DEPLIBS = -ltiff -ljpeg -lz -lm +VERSION = 2.3 +abs_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/testbed +abs_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/testbed +abs_top_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +abs_top_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = arm-unknown-linux-gnueabi +build_alias = +build_cpu = arm +build_os = linux-gnueabi +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = arm-unknown-linux-gnueabi +host_alias = +host_cpu = arm +host_os = linux-gnueabi +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +inline = +install_sh = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/src +testcms_LDADD = $(top_builddir)/src/liblcms2.la +testcms_LDFLAGS = +testcms_SOURCES = testcms2.c +EXTRA_DIST = test1.icc bad.icc toosmall.icc test2.icc \ + test3.icc test4.icc \ + test5.icc + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testbed/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign testbed/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +testcms$(EXEEXT): $(testcms_OBJECTS) $(testcms_DEPENDENCIES) + @rm -f testcms$(EXEEXT) + $(testcms_LINK) $(testcms_OBJECTS) $(testcms_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/testcms2.Po + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +check: + if [ $(top_srcdir) != $(top_builddir) ]; then \ + cp $(top_srcdir)/testbed/*.ic? $(top_builddir)/testbed; \ + fi + ./testcms + if [ $(top_srcdir) != $(top_builddir) ]; then \ + rm -f $(top_builddir)/testbed/*.ic?; \ + fi + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/testbed/Makefile.am b/testbed/Makefile.am new file mode 100644 index 0000000..dccb407 --- /dev/null +++ b/testbed/Makefile.am @@ -0,0 +1,31 @@ +# +# Makefile for building testcms +# + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign + +INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/src + +check_PROGRAMS = testcms + +CFLAGS = --pedantic -Wall -std=c99 -O2 + +testcms_LDADD = $(top_builddir)/src/liblcms2.la +testcms_LDFLAGS = @LDFLAGS@ +testcms_SOURCES = testcms2.c + +EXTRA_DIST = test1.icc bad.icc toosmall.icc test2.icc \ + test3.icc test4.icc \ + test5.icc + +check: + if [ $(top_srcdir) != $(top_builddir) ]; then \ + cp $(top_srcdir)/testbed/*.ic? $(top_builddir)/testbed; \ + fi + ./testcms + if [ $(top_srcdir) != $(top_builddir) ]; then \ + rm -f $(top_builddir)/testbed/*.ic?; \ + fi + + diff --git a/testbed/Makefile.in b/testbed/Makefile.in new file mode 100644 index 0000000..89f5c13 --- /dev/null +++ b/testbed/Makefile.in @@ -0,0 +1,510 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Makefile for building testcms +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = testcms$(EXEEXT) +subdir = testbed +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am_testcms_OBJECTS = testcms2.$(OBJEXT) +testcms_OBJECTS = $(am_testcms_OBJECTS) +testcms_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +testcms_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(testcms_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(testcms_SOURCES) +DIST_SOURCES = $(testcms_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = --pedantic -Wall -std=c99 -O2 +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ +LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRARY_AGE = @LIBRARY_AGE@ +LIBRARY_CURRENT = @LIBRARY_CURRENT@ +LIBRARY_REVISION = @LIBRARY_REVISION@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIB_JPEG = @LIB_JPEG@ +LIB_MATH = @LIB_MATH@ +LIB_TIFF = @LIB_TIFF@ +LIB_ZLIB = @LIB_ZLIB@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +inline = @inline@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/src +testcms_LDADD = $(top_builddir)/src/liblcms2.la +testcms_LDFLAGS = @LDFLAGS@ +testcms_SOURCES = testcms2.c +EXTRA_DIST = test1.icc bad.icc toosmall.icc test2.icc \ + test3.icc test4.icc \ + test5.icc + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testbed/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign testbed/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +testcms$(EXEEXT): $(testcms_OBJECTS) $(testcms_DEPENDENCIES) + @rm -f testcms$(EXEEXT) + $(testcms_LINK) $(testcms_OBJECTS) $(testcms_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testcms2.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +check: + if [ $(top_srcdir) != $(top_builddir) ]; then \ + cp $(top_srcdir)/testbed/*.ic? $(top_builddir)/testbed; \ + fi + ./testcms + if [ $(top_srcdir) != $(top_builddir) ]; then \ + rm -f $(top_builddir)/testbed/*.ic?; \ + fi + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/testbed/bad.icc b/testbed/bad.icc new file mode 100644 index 0000000..ddfa622 --- /dev/null +++ b/testbed/bad.icc @@ -0,0 +1,21 @@ +SHELL = /bin/sh + +CFLAGS = -g -O4 -fomit-frame-pointer -Wall -I../include + +testcms.o: testcms.c + +testcms: testcms.o ../src/liblcms.a + $(CC) $(CFLAGS) testcms.o ../src/liblcms.a -o $@ -lm + +all: testcms test + +test: testcms + ./testcms + +install: + # Nothing to install + +clean: + -rm testcms.o testcms testcms.exe + + diff --git a/testbed/test1.icc b/testbed/test1.icc new file mode 100755 index 0000000000000000000000000000000000000000..d0245c813cfb52a7260186c8a9ba5ae6b8160124 GIT binary patch literal 557536 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

    u~a{qX$F`z8IWheD5?Spm>*^|7jW2jia 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ëLe#YTVXVdMC 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

    {$&C5t9HT%M7t-T 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

    H}m2g5AtIjukvG^ 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�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

      D6+xYLnd{3DS8q66XK;=98VBzJ^nNN=5; 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 z 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¨d*kn=?oOYJ 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 ~(j|zx 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 K75MPKe*2$AJ#1qD literal 0 HcmV?d00001 diff --git a/testbed/test4.icc b/testbed/test4.icc new file mode 100755 index 0000000000000000000000000000000000000000..2270061be6ee16a73b922df534d0ccf5a0e69bba GIT binary patch literal 61020 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 literal 0 HcmV?d00001 diff --git a/testbed/test5.icc b/testbed/test5.icc new file mode 100755 index 0000000000000000000000000000000000000000..34583ab1cd704fda2bf6f39ef42de9a91344729f GIT binary patch literal 3240 zcmb`JcT`i!9>?e2n_g%Mkxu9x1t|ffhF+vf6BS4T1VVt204jFG6FD&m5x zOOdr=!NQ_gz`j8q0?N9$im0f(8+b?AbKbr`_Pjag&i%~y_nY5u=Fa@ixd2d(2sr84 zumS+-La`{!$AcLi6U)T+02mMf4p;$@z{$=G3iplxf7{;m0Z3-NV8s3u?Srts^`l%d6r9Od}g^`#@uuv7xigJ zc|A9si!#DOS)3!`$@mz`g*kj)E&v!Cl=TIYbUw<_DAUt<3Fsa$0+}x6anPI?S$v8p zB8-i44FCj6@*GZ_!(v{ZZ0%rihM1Wx;foUz1w3X_hKMQRB?y?3Y#wTx-J{G4m`Cuk z#mr1mMiO7ZGiM6_$E+EDS!V$v01spXF<^pBAOaa63Gjgc)yz>vh>m5JY#>2ZF-QQ3 zGd3pbm4SLQ(T9hs0+b}Emux}*=O(*9vmxJv&fE)#(fv*Pmh79BQ3n8P0zH?~Z(8CW z0NOSKpz`pWrhfnc`2ql1Z_fFKlt8{%jDBTyQ25u_R1i3`d+~qv&IUo?oAs;PKZiN_ z3D%Z*a|029HLwJKk>;BJInT*y9>z=JiFiT|j~R*HV!kk$$<7dR`C@*CkjWP^{k+(A zRt|P{7S@(%0e@}(aN5`TvoKpXDAVe{0Qw3`pm388kl(ujhDHWR+&v*yQxF898hj2+xOEusa+8N5ISAWH<|61sA~E z;Yzp;J_fhK7vLN4Jy;6AgeMSykP!x=gIFLegpC9vu}BgkLe?ThNCi@dG$9>G7jg%Y zB4fx03=TuXFfkSwCyXy<35J8o!mPz?!&G68U|KPkFn2Hmm~qS(EETJPHN!e${jky4 zWNa?B5LyjPFp=3UJJ-L#6 zoP3o$K>k2cqL@F06g{tMM?Nhs~Hl|KjcT(r57pb36f2aX# zm}-P+tkyWF(XBC|sio#WwOHci__o3CB2eNOuYQ<>?` z6fi59mzd)^8alo@5}jI|9-S#&Bi$vs8+Ds?pXibFSb9l%<$9fZ zg-vZuQ%tK(Z<@hoc4mCDy=J}USaSz+p?RHozXip@-6F@L(PF@oVHs$-(X!3*)qMT= zvGaG#@0$N*f$ajpg8BuItdy+$tu|V9Sp8{jYR$2(w!XWNy3l*!x`pivU)z}3@ND+k z+_$CK2H9@0?X>-DXKyF6YqA@)*SC+iud(lE(ODs^ZLF&fSO*V>bq=Q;J~-MriXBfl z{^4Zdl;(8QX=IVnBHp6oYe!H?G?uw_$e^ z_f+>|?yo!+c!)e&JSN$W>^1E3o`|Q9XOU-*my*{KuPU#n-n!n&-i_YlKDIuqea`!0 zeFJ=V`1bp0`f>ak{Koz5{nz+k3ZMjp2UG<-3p5QB1$G3%LHa}#&(xEupxWc%;Wk$>LmR(z}wp_6M z%nJDx2`f&8FHB!ZhKf46Tg3jNVMM z%)(4*mSfhgtZ`9*=ukG4y)3(3OhJR zIlRhy)eoyNt2wJX^L6q!`~7kK()--|BM$@*UO&uvIQ3}#W9;Li zCkjt0o@zX;`_1IHW~rU@%z)=W_p|V4j|Mq|FaMSOuTMh-&#BKVhP8(qMyy9pk9v>Z zda?Ay(96u1Q)7j{EB;>d%J|jKf4Ke8Jsv$i^jh?K`p<1|RNowaYxA~qB4py}yYzQc mlSS`U-yiwF`q1?;>f`WK?kD`G%FiaBJH7;bc|4syJ^gQ+!Q`+2 literal 0 HcmV?d00001 diff --git a/testbed/testcms2.c b/testbed/testcms2.c new file mode 100644 index 0000000..f070b09 --- /dev/null +++ b/testbed/testcms2.c @@ -0,0 +1,7788 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#ifdef _MSC_VER +# define _CRT_SECURE_NO_WARNINGS 1 +#endif + +#include "lcms2_internal.h" + +// On Visual Studio, use debug CRT +#ifdef _MSC_VER +# include "crtdbg.h" +# include +#endif + +// A single check. Returns 1 if success, 0 if failed +typedef cmsInt32Number (*TestFn)(void); + +// A parametric Tone curve test function +typedef cmsFloat32Number (* dblfnptr)(cmsFloat32Number x, const cmsFloat64Number Params[]); + +// Some globals to keep track of error +#define TEXT_ERROR_BUFFER_SIZE 4096 + +static char ReasonToFailBuffer[TEXT_ERROR_BUFFER_SIZE]; +static char SubTestBuffer[TEXT_ERROR_BUFFER_SIZE]; +static cmsInt32Number TotalTests = 0, TotalFail = 0; +static cmsBool TrappedError; +static cmsInt32Number SimultaneousErrors; + + +#define cmsmin(a, b) (((a) < (b)) ? (a) : (b)) + +// Die, a fatal unexpected error is detected! +static +void Die(const char* Reason) +{ + printf("\n\nArrrgggg!!: %s!\n\n", Reason); + fflush(stdout); + exit(1); +} + +// Memory management replacement ----------------------------------------------------------------------------- + + +// This is just a simple plug-in for malloc, free and realloc to keep track of memory allocated, +// maximum requested as a single block and maximum allocated at a given time. Results are printed at the end +static cmsUInt32Number SingleHit, MaxAllocated=0, TotalMemory=0; + +// I'm hidding the size before the block. This is a well-known technique and probably the blocks coming from +// malloc are built in a way similar to that, but I do on my own to be portable. +typedef struct { + cmsUInt32Number KeepSize; + cmsContext WhoAllocated; + + union { + cmsUInt64Number HiSparc; + + // '_cmsMemoryBlock' block is prepended by the + // allocator for any requested size. Thus, union holds + // "widest" type to guarantee proper '_cmsMemoryBlock' + // alignment for any requested size. + + } alignment; + + +} _cmsMemoryBlock; + +#define SIZE_OF_MEM_HEADER (sizeof(_cmsMemoryBlock)) + +// This is a fake thread descriptor used to check thread integrity. +// Basically it returns a different threadID each time it is called. +// Then the memory management replacement functions does check if each +// free() is being called with same ContextID used on malloc() +static +cmsContext DbgThread(void) +{ + static cmsUInt32Number n = 1; + + return (cmsContext) n++; +} + +// The allocate routine +static +void* DebugMalloc(cmsContext ContextID, cmsUInt32Number size) +{ + _cmsMemoryBlock* blk; + + if (size <= 0) { + Die("malloc requested with zero bytes"); + } + + TotalMemory += size; + + if (TotalMemory > MaxAllocated) + MaxAllocated = TotalMemory; + + if (size > SingleHit) + SingleHit = size; + + blk = (_cmsMemoryBlock*) malloc(size + SIZE_OF_MEM_HEADER); + if (blk == NULL) return NULL; + + blk ->KeepSize = size; + blk ->WhoAllocated = ContextID; + + return (void*) ((cmsUInt8Number*) blk + SIZE_OF_MEM_HEADER); +} + +// The free routine +static +void DebugFree(cmsContext ContextID, void *Ptr) +{ + _cmsMemoryBlock* blk; + + if (Ptr == NULL) { + Die("NULL free (which is a no-op in C, but may be an clue of something going wrong)"); + } + + blk = (_cmsMemoryBlock*) (((cmsUInt8Number*) Ptr) - SIZE_OF_MEM_HEADER); + TotalMemory -= blk ->KeepSize; + + if (blk ->WhoAllocated != ContextID) { + Die("Trying to free memory allocated by a different thread"); + } + + free(blk); +} + +// Reallocate, just a malloc, a copy and a free in this case. +static +void * DebugRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize) +{ + _cmsMemoryBlock* blk; + void* NewPtr; + cmsUInt32Number max_sz; + + NewPtr = DebugMalloc(ContextID, NewSize); + if (Ptr == NULL) return NewPtr; + + blk = (_cmsMemoryBlock*) (((cmsUInt8Number*) Ptr) - SIZE_OF_MEM_HEADER); + max_sz = blk -> KeepSize > NewSize ? NewSize : blk ->KeepSize; + memmove(NewPtr, Ptr, max_sz); + DebugFree(ContextID, Ptr); + + return NewPtr; +} + +// Let's know the totals +static +void DebugMemPrintTotals(void) +{ + printf("[Memory statistics]\n"); + printf("Allocated = %d MaxAlloc = %d Single block hit = %d\n", TotalMemory, MaxAllocated, SingleHit); +} + +// Here we go with the plug-in declaration +static cmsPluginMemHandler DebugMemHandler = {{ cmsPluginMagicNumber, 2000, cmsPluginMemHandlerSig, NULL }, + DebugMalloc, DebugFree, DebugRealloc, NULL, NULL, NULL }; + +// Utils ------------------------------------------------------------------------------------- + +static +void FatalErrorQuit(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text) +{ + Die(Text); +} + +// Print a dot for gauging +static +void Dot(void) +{ + fprintf(stdout, "."); fflush(stdout); +} + +// Keep track of the reason to fail +static +void Fail(const char* frm, ...) +{ + va_list args; + va_start(args, frm); + vsprintf(ReasonToFailBuffer, frm, args); + va_end(args); +} + +// Keep track of subtest +static +void SubTest(const char* frm, ...) +{ + va_list args; + + Dot(); + va_start(args, frm); + vsprintf(SubTestBuffer, frm, args); + va_end(args); +} + + +// Memory string +static +const char* MemStr(cmsUInt32Number size) +{ + static char Buffer[1024]; + + if (size > 1024*1024) { + sprintf(Buffer, "%g Mb", (cmsFloat64Number) size / (1024.0*1024.0)); + } + else + if (size > 1024) { + sprintf(Buffer, "%g Kb", (cmsFloat64Number) size / 1024.0); + } + else + sprintf(Buffer, "%g bytes", (cmsFloat64Number) size); + + return Buffer; +} + + +// The check framework +static +void Check(const char* Title, TestFn Fn) +{ + printf("Checking %s ...", Title); + fflush(stdout); + + ReasonToFailBuffer[0] = 0; + SubTestBuffer[0] = 0; + TrappedError = FALSE; + SimultaneousErrors = 0; + TotalTests++; + + if (Fn() && !TrappedError) { + + // It is a good place to check memory + if (TotalMemory > 0) + printf("Ok, but %s are left!\n", MemStr(TotalMemory)); + else + printf("Ok.\n"); + } + else { + printf("FAIL!\n"); + + if (SubTestBuffer[0]) + printf("%s: [%s]\n\t%s\n", Title, SubTestBuffer, ReasonToFailBuffer); + else + printf("%s:\n\t%s\n", Title, ReasonToFailBuffer); + + if (SimultaneousErrors > 1) + printf("\tMore than one (%d) errors were reported\n", SimultaneousErrors); + + TotalFail++; + } + fflush(stdout); +} + +// Dump a tone curve, for easy diagnostic +void DumpToneCurve(cmsToneCurve* gamma, const char* FileName) +{ + cmsHANDLE hIT8; + cmsUInt32Number i; + + hIT8 = cmsIT8Alloc(gamma ->InterpParams->ContextID); + + cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_FIELDS", 2); + cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_SETS", gamma ->nEntries); + + cmsIT8SetDataFormat(hIT8, 0, "SAMPLE_ID"); + cmsIT8SetDataFormat(hIT8, 1, "VALUE"); + + for (i=0; i < gamma ->nEntries; i++) { + char Val[30]; + + sprintf(Val, "%d", i); + cmsIT8SetDataRowCol(hIT8, i, 0, Val); + sprintf(Val, "0x%x", gamma ->Table16[i]); + cmsIT8SetDataRowCol(hIT8, i, 1, Val); + } + + cmsIT8SaveToFile(hIT8, FileName); + cmsIT8Free(hIT8); +} + +// ------------------------------------------------------------------------------------------------- + + +// Used to perform several checks. +// The space used is a clone of a well-known commercial +// color space which I will name "Above RGB" +static +cmsHPROFILE Create_AboveRGB(void) +{ + cmsToneCurve* Curve[3]; + cmsHPROFILE hProfile; + cmsCIExyY D65; + cmsCIExyYTRIPLE Primaries = {{0.64, 0.33, 1 }, + {0.21, 0.71, 1 }, + {0.15, 0.06, 1 }}; + + Curve[0] = Curve[1] = Curve[2] = cmsBuildGamma(DbgThread(), 2.19921875); + + cmsWhitePointFromTemp(&D65, 6504); + hProfile = cmsCreateRGBProfileTHR(DbgThread(), &D65, &Primaries, Curve); + cmsFreeToneCurve(Curve[0]); + + return hProfile; +} + +// A gamma-2.2 gray space +static +cmsHPROFILE Create_Gray22(void) +{ + cmsHPROFILE hProfile; + cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 2.2); + if (Curve == NULL) return NULL; + + hProfile = cmsCreateGrayProfileTHR(DbgThread(), cmsD50_xyY(), Curve); + cmsFreeToneCurve(Curve); + + return hProfile; +} + + +static +cmsHPROFILE Create_GrayLab(void) +{ + cmsHPROFILE hProfile; + cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 1.0); + if (Curve == NULL) return NULL; + + hProfile = cmsCreateGrayProfileTHR(DbgThread(), cmsD50_xyY(), Curve); + cmsFreeToneCurve(Curve); + + cmsSetPCS(hProfile, cmsSigLabData); + return hProfile; +} + +// A CMYK devicelink that adds gamma 3.0 to each channel +static +cmsHPROFILE Create_CMYK_DeviceLink(void) +{ + cmsHPROFILE hProfile; + cmsToneCurve* Tab[4]; + cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 3.0); + if (Curve == NULL) return NULL; + + Tab[0] = Curve; + Tab[1] = Curve; + Tab[2] = Curve; + Tab[3] = Curve; + + hProfile = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigCmykData, Tab); + if (hProfile == NULL) return NULL; + + cmsFreeToneCurve(Curve); + + return hProfile; +} + + +// Create a fake CMYK profile, without any other requeriment that being coarse CMYK. +// DONT USE THIS PROFILE FOR ANYTHING, IT IS USELESS BUT FOR TESTING PURPOSES. +typedef struct { + + cmsHTRANSFORM hLab2sRGB; + cmsHTRANSFORM sRGB2Lab; + cmsHTRANSFORM hIlimit; + +} FakeCMYKParams; + +static +cmsFloat64Number Clip(cmsFloat64Number v) +{ + if (v < 0) return 0; + if (v > 1) return 1; + + return v; +} + +static +cmsInt32Number ForwardSampler(register const cmsUInt16Number In[], cmsUInt16Number Out[], void* Cargo) +{ + FakeCMYKParams* p = (FakeCMYKParams*) Cargo; + cmsFloat64Number rgb[3], cmyk[4]; + cmsFloat64Number c, m, y, k; + + cmsDoTransform(p ->hLab2sRGB, In, rgb, 1); + + c = 1 - rgb[0]; + m = 1 - rgb[1]; + y = 1 - rgb[2]; + + k = (c < m ? cmsmin(c, y) : cmsmin(m, y)); + + // NONSENSE WARNING!: I'm doing this just because this is a test + // profile that may have ink limit up to 400%. There is no UCR here + // so the profile is basically useless for anything but testing. + + cmyk[0] = c; + cmyk[1] = m; + cmyk[2] = y; + cmyk[3] = k; + + cmsDoTransform(p ->hIlimit, cmyk, Out, 1); + + return 1; +} + + +static +cmsInt32Number ReverseSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +{ + FakeCMYKParams* p = (FakeCMYKParams*) Cargo; + cmsFloat64Number c, m, y, k, rgb[3]; + + c = In[0] / 65535.0; + m = In[1] / 65535.0; + y = In[2] / 65535.0; + k = In[3] / 65535.0; + + if (k == 0) { + + rgb[0] = Clip(1 - c); + rgb[1] = Clip(1 - m); + rgb[2] = Clip(1 - y); + } + else + if (k == 1) { + + rgb[0] = rgb[1] = rgb[2] = 0; + } + else { + + rgb[0] = Clip((1 - c) * (1 - k)); + rgb[1] = Clip((1 - m) * (1 - k)); + rgb[2] = Clip((1 - y) * (1 - k)); + } + + cmsDoTransform(p ->sRGB2Lab, rgb, Out, 1); + return 1; +} + + + +static +cmsHPROFILE CreateFakeCMYK(cmsFloat64Number InkLimit, cmsBool lUseAboveRGB) +{ + cmsHPROFILE hICC; + cmsPipeline* AToB0, *BToA0; + cmsStage* CLUT; + cmsContext ContextID; + FakeCMYKParams p; + cmsHPROFILE hLab, hsRGB, hLimit; + cmsUInt32Number cmykfrm; + + + if (lUseAboveRGB) + hsRGB = Create_AboveRGB(); + else + hsRGB = cmsCreate_sRGBProfile(); + + hLab = cmsCreateLab4Profile(NULL); + hLimit = cmsCreateInkLimitingDeviceLink(cmsSigCmykData, InkLimit); + + cmykfrm = FLOAT_SH(1) | BYTES_SH(0)|CHANNELS_SH(4); + p.hLab2sRGB = cmsCreateTransform(hLab, TYPE_Lab_16, hsRGB, TYPE_RGB_DBL, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE); + p.sRGB2Lab = cmsCreateTransform(hsRGB, TYPE_RGB_DBL, hLab, TYPE_Lab_16, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE); + p.hIlimit = cmsCreateTransform(hLimit, cmykfrm, NULL, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE); + + cmsCloseProfile(hLab); cmsCloseProfile(hsRGB); cmsCloseProfile(hLimit); + + ContextID = DbgThread(); + hICC = cmsCreateProfilePlaceholder(ContextID); + if (!hICC) return NULL; + + cmsSetProfileVersion(hICC, 4.3); + + cmsSetDeviceClass(hICC, cmsSigOutputClass); + cmsSetColorSpace(hICC, cmsSigCmykData); + cmsSetPCS(hICC, cmsSigLabData); + + BToA0 = cmsPipelineAlloc(ContextID, 3, 4); + if (BToA0 == NULL) return 0; + CLUT = cmsStageAllocCLut16bit(ContextID, 17, 3, 4, NULL); + if (CLUT == NULL) return 0; + if (!cmsStageSampleCLut16bit(CLUT, ForwardSampler, &p, 0)) return 0; + + cmsPipelineInsertStage(BToA0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3)); + cmsPipelineInsertStage(BToA0, cmsAT_END, CLUT); + cmsPipelineInsertStage(BToA0, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 4)); + + if (!cmsWriteTag(hICC, cmsSigBToA0Tag, (void*) BToA0)) return 0; + cmsPipelineFree(BToA0); + + AToB0 = cmsPipelineAlloc(ContextID, 4, 3); + if (AToB0 == NULL) return 0; + CLUT = cmsStageAllocCLut16bit(ContextID, 17, 4, 3, NULL); + if (CLUT == NULL) return 0; + if (!cmsStageSampleCLut16bit(CLUT, ReverseSampler, &p, 0)) return 0; + + cmsPipelineInsertStage(AToB0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 4)); + cmsPipelineInsertStage(AToB0, cmsAT_END, CLUT); + cmsPipelineInsertStage(AToB0, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 3)); + + if (!cmsWriteTag(hICC, cmsSigAToB0Tag, (void*) AToB0)) return 0; + cmsPipelineFree(AToB0); + + cmsDeleteTransform(p.hLab2sRGB); + cmsDeleteTransform(p.sRGB2Lab); + cmsDeleteTransform(p.hIlimit); + + cmsLinkTag(hICC, cmsSigAToB1Tag, cmsSigAToB0Tag); + cmsLinkTag(hICC, cmsSigAToB2Tag, cmsSigAToB0Tag); + cmsLinkTag(hICC, cmsSigBToA1Tag, cmsSigBToA0Tag); + cmsLinkTag(hICC, cmsSigBToA2Tag, cmsSigBToA0Tag); + + return hICC; +} + + +// Does create several profiles for latter use------------------------------------------------------------------------------------------------ + +static +cmsInt32Number OneVirtual(cmsHPROFILE h, const char* SubTestTxt, const char* FileName) +{ + SubTest(SubTestTxt); + if (h == NULL) return 0; + + if (!cmsSaveProfileToFile(h, FileName)) return 0; + cmsCloseProfile(h); + + h = cmsOpenProfileFromFile(FileName, "r"); + if (h == NULL) return 0; + + // Do some teste.... + + cmsCloseProfile(h); + + return 1; +} + + + +// This test checks the ability of lcms2 to save its built-ins as valid profiles. +// It does not check the functionality of such profiles +static +cmsInt32Number CreateTestProfiles(void) +{ + cmsHPROFILE h; + + h = cmsCreate_sRGBProfileTHR(DbgThread()); + if (!OneVirtual(h, "sRGB profile", "sRGBlcms2.icc")) return 0; + + // ---- + + h = Create_AboveRGB(); + if (!OneVirtual(h, "aRGB profile", "aRGBlcms2.icc")) return 0; + + // ---- + + h = Create_Gray22(); + if (!OneVirtual(h, "Gray profile", "graylcms2.icc")) return 0; + + // ---- + + h = Create_GrayLab(); + if (!OneVirtual(h, "Gray Lab profile", "glablcms2.icc")) return 0; + + // ---- + + h = Create_CMYK_DeviceLink(); + if (!OneVirtual(h, "Linearization profile", "linlcms2.icc")) return 0; + + // ------- + h = cmsCreateInkLimitingDeviceLinkTHR(DbgThread(), cmsSigCmykData, 150); + if (h == NULL) return 0; + if (!OneVirtual(h, "Ink-limiting profile", "limitlcms2.icc")) return 0; + + // ------ + + h = cmsCreateLab2ProfileTHR(DbgThread(), NULL); + if (!OneVirtual(h, "Lab 2 identity profile", "labv2lcms2.icc")) return 0; + + // ---- + + h = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + if (!OneVirtual(h, "Lab 4 identity profile", "labv4lcms2.icc")) return 0; + + // ---- + + h = cmsCreateXYZProfileTHR(DbgThread()); + if (!OneVirtual(h, "XYZ identity profile", "xyzlcms2.icc")) return 0; + + // ---- + + h = cmsCreateNULLProfileTHR(DbgThread()); + if (!OneVirtual(h, "NULL profile", "nullcms2.icc")) return 0; + + // --- + + h = cmsCreateBCHSWabstractProfileTHR(DbgThread(), 17, 0, 0, 0, 0, 5000, 6000); + if (!OneVirtual(h, "BCHS profile", "bchslcms2.icc")) return 0; + + // --- + + h = CreateFakeCMYK(300, FALSE); + if (!OneVirtual(h, "Fake CMYK profile", "lcms2cmyk.icc")) return 0; + + return 1; +} + +static +void RemoveTestProfiles(void) +{ + remove("sRGBlcms2.icc"); + remove("aRGBlcms2.icc"); + remove("graylcms2.icc"); + remove("linlcms2.icc"); + remove("limitlcms2.icc"); + remove("labv2lcms2.icc"); + remove("labv4lcms2.icc"); + remove("xyzlcms2.icc"); + remove("nullcms2.icc"); + remove("bchslcms2.icc"); + remove("lcms2cmyk.icc"); + remove("glablcms2.icc"); +} + +// ------------------------------------------------------------------------------------------------- + +// Check the size of basic types. If this test fails, nothing is going to work anyway +static +cmsInt32Number CheckBaseTypes(void) +{ + if (sizeof(cmsUInt8Number) != 1) return 0; + if (sizeof(cmsInt8Number) != 1) return 0; + if (sizeof(cmsUInt16Number) != 2) return 0; + if (sizeof(cmsInt16Number) != 2) return 0; + if (sizeof(cmsUInt32Number) != 4) return 0; + if (sizeof(cmsInt32Number) != 4) return 0; + if (sizeof(cmsUInt64Number) != 8) return 0; + if (sizeof(cmsInt64Number) != 8) return 0; + if (sizeof(cmsFloat32Number) != 4) return 0; + if (sizeof(cmsFloat64Number) != 8) return 0; + if (sizeof(cmsSignature) != 4) return 0; + if (sizeof(cmsU8Fixed8Number) != 2) return 0; + if (sizeof(cmsS15Fixed16Number) != 4) return 0; + if (sizeof(cmsU16Fixed16Number) != 4) return 0; + + return 1; +} + +// ------------------------------------------------------------------------------------------------- + + +// Are we little or big endian? From Harbison&Steele. +static +cmsInt32Number CheckEndianess(void) +{ + cmsInt32Number BigEndian, IsOk; + union { + long l; + char c[sizeof (long)]; + } u; + + u.l = 1; + BigEndian = (u.c[sizeof (long) - 1] == 1); + +#ifdef CMS_USE_BIG_ENDIAN + IsOk = BigEndian; +#else + IsOk = !BigEndian; +#endif + + if (!IsOk) { + Fail("\nOOOPPSS! You have CMS_USE_BIG_ENDIAN toggle misconfigured!\n\n" + "Please, edit lcms2.h and %s the CMS_USE_BIG_ENDIAN toggle.\n", BigEndian? "uncomment" : "comment"); + return 0; + } + + return 1; +} + +// Check quick floor +static +cmsInt32Number CheckQuickFloor(void) +{ + if ((_cmsQuickFloor(1.234) != 1) || + (_cmsQuickFloor(32767.234) != 32767) || + (_cmsQuickFloor(-1.234) != -2) || + (_cmsQuickFloor(-32767.1) != -32768)) { + + Fail("\nOOOPPSS! _cmsQuickFloor() does not work as expected in your machine!\n\n" + "Please, edit lcms.h and uncomment the CMS_DONT_USE_FAST_FLOOR toggle.\n"); + return 0; + + } + + return 1; +} + +// Quick floor restricted to word +static +cmsInt32Number CheckQuickFloorWord(void) +{ + cmsUInt32Number i; + + for (i=0; i < 65535; i++) { + + if (_cmsQuickFloorWord((cmsFloat64Number) i + 0.1234) != i) { + + Fail("\nOOOPPSS! _cmsQuickFloorWord() does not work as expected in your machine!\n\n" + "Please, edit lcms.h and uncomment the CMS_DONT_USE_FAST_FLOOR toggle.\n"); + return 0; + } + } + + return 1; +} + +// ------------------------------------------------------------------------------------------------- + +// Precision stuff. + +// On 15.16 fixed point, this is the maximum we can obtain. Remember ICC profiles have storage limits on this number +#define FIXED_PRECISION_15_16 (1.0 / 65535.0) + +// On 8.8 fixed point, that is the max we can obtain. +#define FIXED_PRECISION_8_8 (1.0 / 255.0) + +// On cmsFloat32Number type, this is the precision we expect +#define FLOAT_PRECISSION (0.00001) + +static cmsFloat64Number MaxErr; +static cmsFloat64Number AllowedErr = FIXED_PRECISION_15_16; + +static +cmsBool IsGoodVal(const char *title, cmsFloat64Number in, cmsFloat64Number out, cmsFloat64Number max) +{ + cmsFloat64Number Err = fabs(in - out); + + if (Err > MaxErr) MaxErr = Err; + + if ((Err > max )) { + + Fail("(%s): Must be %f, But is %f ", title, in, out); + return FALSE; + } + + return TRUE; +} + +static +cmsBool IsGoodFixed15_16(const char *title, cmsFloat64Number in, cmsFloat64Number out) +{ + return IsGoodVal(title, in, out, FIXED_PRECISION_15_16); +} + +static +cmsBool IsGoodFixed8_8(const char *title, cmsFloat64Number in, cmsFloat64Number out) +{ + return IsGoodVal(title, in, out, FIXED_PRECISION_8_8); +} + +static +cmsBool IsGoodWord(const char *title, cmsUInt16Number in, cmsUInt16Number out) +{ + if ((abs(in - out) > 0 )) { + + Fail("(%s): Must be %x, But is %x ", title, in, out); + return FALSE; + } + + return TRUE; +} + +static +cmsBool IsGoodWordPrec(const char *title, cmsUInt16Number in, cmsUInt16Number out, cmsUInt16Number maxErr) +{ + if ((abs(in - out) > maxErr )) { + + Fail("(%s): Must be %x, But is %x ", title, in, out); + return FALSE; + } + + return TRUE; +} + +// Fixed point ---------------------------------------------------------------------------------------------- + +static +cmsInt32Number TestSingleFixed15_16(cmsFloat64Number d) +{ + cmsS15Fixed16Number f = _cmsDoubleTo15Fixed16(d); + cmsFloat64Number RoundTrip = _cms15Fixed16toDouble(f); + cmsFloat64Number Error = fabs(d - RoundTrip); + + return ( Error <= FIXED_PRECISION_15_16); +} + +static +cmsInt32Number CheckFixedPoint15_16(void) +{ + if (!TestSingleFixed15_16(1.0)) return 0; + if (!TestSingleFixed15_16(2.0)) return 0; + if (!TestSingleFixed15_16(1.23456)) return 0; + if (!TestSingleFixed15_16(0.99999)) return 0; + if (!TestSingleFixed15_16(0.1234567890123456789099999)) return 0; + if (!TestSingleFixed15_16(-1.0)) return 0; + if (!TestSingleFixed15_16(-2.0)) return 0; + if (!TestSingleFixed15_16(-1.23456)) return 0; + if (!TestSingleFixed15_16(-1.1234567890123456789099999)) return 0; + if (!TestSingleFixed15_16(+32767.1234567890123456789099999)) return 0; + if (!TestSingleFixed15_16(-32767.1234567890123456789099999)) return 0; + return 1; +} + +static +cmsInt32Number TestSingleFixed8_8(cmsFloat64Number d) +{ + cmsS15Fixed16Number f = _cmsDoubleTo8Fixed8(d); + cmsFloat64Number RoundTrip = _cms8Fixed8toDouble((cmsUInt16Number) f); + cmsFloat64Number Error = fabs(d - RoundTrip); + + return ( Error <= FIXED_PRECISION_8_8); +} + +static +cmsInt32Number CheckFixedPoint8_8(void) +{ + if (!TestSingleFixed8_8(1.0)) return 0; + if (!TestSingleFixed8_8(2.0)) return 0; + if (!TestSingleFixed8_8(1.23456)) return 0; + if (!TestSingleFixed8_8(0.99999)) return 0; + if (!TestSingleFixed8_8(0.1234567890123456789099999)) return 0; + if (!TestSingleFixed8_8(+255.1234567890123456789099999)) return 0; + + return 1; +} + +// Linear interpolation ----------------------------------------------------------------------------------------------- + +// Since prime factors of 65535 (FFFF) are, +// +// 0xFFFF = 3 * 5 * 17 * 257 +// +// I test tables of 2, 4, 6, and 18 points, that will be exact. + +static +void BuildTable(cmsInt32Number n, cmsUInt16Number Tab[], cmsBool Descending) +{ + cmsInt32Number i; + + for (i=0; i < n; i++) { + cmsFloat64Number v = (cmsFloat64Number) ((cmsFloat64Number) 65535.0 * i ) / (n-1); + + Tab[Descending ? (n - i - 1) : i ] = (cmsUInt16Number) floor(v + 0.5); + } +} + +// A single function that does check 1D interpolation +// nNodesToCheck = number on nodes to check +// Down = Create decreasing tables +// Reverse = Check reverse interpolation +// max_err = max allowed error + +static +cmsInt32Number Check1D(cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Number max_err) +{ + cmsUInt32Number i; + cmsUInt16Number in, out; + cmsInterpParams* p; + cmsUInt16Number* Tab; + + Tab = (cmsUInt16Number*) malloc(sizeof(cmsUInt16Number)* nNodesToCheck); + if (Tab == NULL) return 0; + + p = _cmsComputeInterpParams(DbgThread(), nNodesToCheck, 1, 1, Tab, CMS_LERP_FLAGS_16BITS); + if (p == NULL) return 0; + + BuildTable(nNodesToCheck, Tab, Down); + + for (i=0; i <= 0xffff; i++) { + + in = (cmsUInt16Number) i; + out = 0; + + p ->Interpolation.Lerp16(&in, &out, p); + + if (Down) out = 0xffff - out; + + if (abs(out - in) > max_err) { + + Fail("(%dp): Must be %x, But is %x : ", nNodesToCheck, in, out); + _cmsFreeInterpParams(p); + free(Tab); + return 0; + } + } + + _cmsFreeInterpParams(p); + free(Tab); + return 1; +} + + +static +cmsInt32Number Check1DLERP2(void) +{ + return Check1D(2, FALSE, 0); +} + + +static +cmsInt32Number Check1DLERP3(void) +{ + return Check1D(3, FALSE, 1); +} + + +static +cmsInt32Number Check1DLERP4(void) +{ + return Check1D(4, FALSE, 0); +} + +static +cmsInt32Number Check1DLERP6(void) +{ + return Check1D(6, FALSE, 0); +} + +static +cmsInt32Number Check1DLERP18(void) +{ + return Check1D(18, FALSE, 0); +} + + +static +cmsInt32Number Check1DLERP2Down(void) +{ + return Check1D(2, TRUE, 0); +} + + +static +cmsInt32Number Check1DLERP3Down(void) +{ + return Check1D(3, TRUE, 1); +} + +static +cmsInt32Number Check1DLERP6Down(void) +{ + return Check1D(6, TRUE, 0); +} + +static +cmsInt32Number Check1DLERP18Down(void) +{ + return Check1D(18, TRUE, 0); +} + +static +cmsInt32Number ExhaustiveCheck1DLERP(void) +{ + cmsUInt32Number j; + + printf("\n"); + for (j=10; j <= 4096; j++) { + + if ((j % 10) == 0) printf("%d \r", j); + + if (!Check1D(j, FALSE, 1)) return 0; + } + + printf("\rResult is "); + return 1; +} + +static +cmsInt32Number ExhaustiveCheck1DLERPDown(void) +{ + cmsUInt32Number j; + + printf("\n"); + for (j=10; j <= 4096; j++) { + + if ((j % 10) == 0) printf("%d \r", j); + + if (!Check1D(j, TRUE, 1)) return 0; + } + + + printf("\rResult is "); + return 1; +} + + + +// 3D interpolation ------------------------------------------------------------------------------------------------- + +static +cmsInt32Number Check3DinterpolationFloatTetrahedral(void) +{ + cmsInterpParams* p; + cmsInt32Number i; + cmsFloat32Number In[3], Out[3]; + cmsFloat32Number FloatTable[] = { //R G B + + 0, 0, 0, // B=0,G=0,R=0 + 0, 0, .25, // B=1,G=0,R=0 + + 0, .5, 0, // B=0,G=1,R=0 + 0, .5, .25, // B=1,G=1,R=0 + + 1, 0, 0, // B=0,G=0,R=1 + 1, 0, .25, // B=1,G=0,R=1 + + 1, .5, 0, // B=0,G=1,R=1 + 1, .5, .25 // B=1,G=1,R=1 + + }; + + p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT); + + + MaxErr = 0.0; + for (i=0; i < 0xffff; i++) { + + In[0] = In[1] = In[2] = (cmsFloat32Number) ( (cmsFloat32Number) i / 65535.0F); + + p ->Interpolation.LerpFloat(In, Out, p); + + if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error; + if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error; + if (!IsGoodFixed15_16("Channel 3", Out[2], (cmsFloat32Number) In[2] / 4.F)) goto Error; + } + + if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); + _cmsFreeInterpParams(p); + return 1; + +Error: + _cmsFreeInterpParams(p); + return 0; +} + +static +cmsInt32Number Check3DinterpolationFloatTrilinear(void) +{ + cmsInterpParams* p; + cmsInt32Number i; + cmsFloat32Number In[3], Out[3]; + cmsFloat32Number FloatTable[] = { //R G B + + 0, 0, 0, // B=0,G=0,R=0 + 0, 0, .25, // B=1,G=0,R=0 + + 0, .5, 0, // B=0,G=1,R=0 + 0, .5, .25, // B=1,G=1,R=0 + + 1, 0, 0, // B=0,G=0,R=1 + 1, 0, .25, // B=1,G=0,R=1 + + 1, .5, 0, // B=0,G=1,R=1 + 1, .5, .25 // B=1,G=1,R=1 + + }; + + p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR); + + MaxErr = 0.0; + for (i=0; i < 0xffff; i++) { + + In[0] = In[1] = In[2] = (cmsFloat32Number) ( (cmsFloat32Number) i / 65535.0F); + + p ->Interpolation.LerpFloat(In, Out, p); + + if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error; + if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error; + if (!IsGoodFixed15_16("Channel 3", Out[2], (cmsFloat32Number) In[2] / 4.F)) goto Error; + } + + if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); + _cmsFreeInterpParams(p); + return 1; + +Error: + _cmsFreeInterpParams(p); + return 0; + +} + +static +cmsInt32Number Check3DinterpolationTetrahedral16(void) +{ + cmsInterpParams* p; + cmsInt32Number i; + cmsUInt16Number In[3], Out[3]; + cmsUInt16Number Table[] = { + + 0, 0, 0, + 0, 0, 0xffff, + + 0, 0xffff, 0, + 0, 0xffff, 0xffff, + + 0xffff, 0, 0, + 0xffff, 0, 0xffff, + + 0xffff, 0xffff, 0, + 0xffff, 0xffff, 0xffff + }; + + p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS); + + MaxErr = 0.0; + for (i=0; i < 0xffff; i++) { + + In[0] = In[1] = In[2] = (cmsUInt16Number) i; + + p ->Interpolation.Lerp16(In, Out, p); + + if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; + if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; + if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error; + } + + if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); + _cmsFreeInterpParams(p); + return 1; + +Error: + _cmsFreeInterpParams(p); + return 0; +} + +static +cmsInt32Number Check3DinterpolationTrilinear16(void) +{ + cmsInterpParams* p; + cmsInt32Number i; + cmsUInt16Number In[3], Out[3]; + cmsUInt16Number Table[] = { + + 0, 0, 0, + 0, 0, 0xffff, + + 0, 0xffff, 0, + 0, 0xffff, 0xffff, + + 0xffff, 0, 0, + 0xffff, 0, 0xffff, + + 0xffff, 0xffff, 0, + 0xffff, 0xffff, 0xffff + }; + + p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR); + + MaxErr = 0.0; + for (i=0; i < 0xffff; i++) { + + In[0] = In[1] = In[2] = (cmsUInt16Number) i; + + p ->Interpolation.Lerp16(In, Out, p); + + if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; + if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; + if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error; + } + + if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); + _cmsFreeInterpParams(p); + return 1; + +Error: + _cmsFreeInterpParams(p); + return 0; +} + + +static +cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void) +{ + cmsInterpParams* p; + cmsInt32Number r, g, b; + cmsFloat32Number In[3], Out[3]; + cmsFloat32Number FloatTable[] = { //R G B + + 0, 0, 0, // B=0,G=0,R=0 + 0, 0, .25, // B=1,G=0,R=0 + + 0, .5, 0, // B=0,G=1,R=0 + 0, .5, .25, // B=1,G=1,R=0 + + 1, 0, 0, // B=0,G=0,R=1 + 1, 0, .25, // B=1,G=0,R=1 + + 1, .5, 0, // B=0,G=1,R=1 + 1, .5, .25 // B=1,G=1,R=1 + + }; + + p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT); + + MaxErr = 0.0; + for (r=0; r < 0xff; r++) + for (g=0; g < 0xff; g++) + for (b=0; b < 0xff; b++) + { + + In[0] = (cmsFloat32Number) r / 255.0F; + In[1] = (cmsFloat32Number) g / 255.0F; + In[2] = (cmsFloat32Number) b / 255.0F; + + + p ->Interpolation.LerpFloat(In, Out, p); + + if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error; + if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error; + if (!IsGoodFixed15_16("Channel 3", Out[2], (cmsFloat32Number) In[2] / 4.F)) goto Error; + } + + if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); + _cmsFreeInterpParams(p); + return 1; + +Error: + _cmsFreeInterpParams(p); + return 0; +} + +static +cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void) +{ + cmsInterpParams* p; + cmsInt32Number r, g, b; + cmsFloat32Number In[3], Out[3]; + cmsFloat32Number FloatTable[] = { //R G B + + 0, 0, 0, // B=0,G=0,R=0 + 0, 0, .25, // B=1,G=0,R=0 + + 0, .5, 0, // B=0,G=1,R=0 + 0, .5, .25, // B=1,G=1,R=0 + + 1, 0, 0, // B=0,G=0,R=1 + 1, 0, .25, // B=1,G=0,R=1 + + 1, .5, 0, // B=0,G=1,R=1 + 1, .5, .25 // B=1,G=1,R=1 + + }; + + p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR); + + MaxErr = 0.0; + for (r=0; r < 0xff; r++) + for (g=0; g < 0xff; g++) + for (b=0; b < 0xff; b++) + { + + In[0] = (cmsFloat32Number) r / 255.0F; + In[1] = (cmsFloat32Number) g / 255.0F; + In[2] = (cmsFloat32Number) b / 255.0F; + + + p ->Interpolation.LerpFloat(In, Out, p); + + if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error; + if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error; + if (!IsGoodFixed15_16("Channel 3", Out[2], (cmsFloat32Number) In[2] / 4.F)) goto Error; + } + + if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); + _cmsFreeInterpParams(p); + return 1; + +Error: + _cmsFreeInterpParams(p); + return 0; + +} + +static +cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(void) +{ + cmsInterpParams* p; + cmsInt32Number r, g, b; + cmsUInt16Number In[3], Out[3]; + cmsUInt16Number Table[] = { + + 0, 0, 0, + 0, 0, 0xffff, + + 0, 0xffff, 0, + 0, 0xffff, 0xffff, + + 0xffff, 0, 0, + 0xffff, 0, 0xffff, + + 0xffff, 0xffff, 0, + 0xffff, 0xffff, 0xffff + }; + + p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS); + + for (r=0; r < 0xff; r++) + for (g=0; g < 0xff; g++) + for (b=0; b < 0xff; b++) + { + In[0] = (cmsUInt16Number) r ; + In[1] = (cmsUInt16Number) g ; + In[2] = (cmsUInt16Number) b ; + + + p ->Interpolation.Lerp16(In, Out, p); + + if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; + if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; + if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error; + } + + _cmsFreeInterpParams(p); + return 1; + +Error: + _cmsFreeInterpParams(p); + return 0; +} + +static +cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void) +{ + cmsInterpParams* p; + cmsInt32Number r, g, b; + cmsUInt16Number In[3], Out[3]; + cmsUInt16Number Table[] = { + + 0, 0, 0, + 0, 0, 0xffff, + + 0, 0xffff, 0, + 0, 0xffff, 0xffff, + + 0xffff, 0, 0, + 0xffff, 0, 0xffff, + + 0xffff, 0xffff, 0, + 0xffff, 0xffff, 0xffff + }; + + p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR); + + for (r=0; r < 0xff; r++) + for (g=0; g < 0xff; g++) + for (b=0; b < 0xff; b++) + { + In[0] = (cmsUInt16Number) r ; + In[1] = (cmsUInt16Number)g ; + In[2] = (cmsUInt16Number)b ; + + + p ->Interpolation.Lerp16(In, Out, p); + + if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; + if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; + if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error; + } + + + _cmsFreeInterpParams(p); + return 1; + +Error: + _cmsFreeInterpParams(p); + return 0; +} + +// Check reverse interpolation on LUTS. This is right now exclusively used by K preservation algorithm +static +cmsInt32Number CheckReverseInterpolation3x3(void) +{ + cmsPipeline* Lut; + cmsStage* clut; + cmsFloat32Number Target[3], Result[3], Hint[3]; + cmsFloat32Number err, max; + cmsInt32Number i; + cmsUInt16Number Table[] = { + + 0, 0, 0, // 0 0 0 + 0, 0, 0xffff, // 0 0 1 + + 0, 0xffff, 0, // 0 1 0 + 0, 0xffff, 0xffff, // 0 1 1 + + 0xffff, 0, 0, // 1 0 0 + 0xffff, 0, 0xffff, // 1 0 1 + + 0xffff, 0xffff, 0, // 1 1 0 + 0xffff, 0xffff, 0xffff, // 1 1 1 + }; + + + + Lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + clut = cmsStageAllocCLut16bit(DbgThread(), 2, 3, 3, Table); + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, clut); + + Target[0] = 0; Target[1] = 0; Target[2] = 0; + Hint[0] = 0; Hint[1] = 0; Hint[2] = 0; + cmsPipelineEvalReverseFloat(Target, Result, NULL, Lut); + if (Result[0] != 0 || Result[1] != 0 || Result[2] != 0){ + + Fail("Reverse interpolation didn't find zero"); + return 0; + } + + // Transverse identity + max = 0; + for (i=0; i <= 100; i++) { + + cmsFloat32Number in = i / 100.0F; + + Target[0] = in; Target[1] = 0; Target[2] = 0; + cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut); + + err = fabsf(in - Result[0]); + if (err > max) max = err; + + memcpy(Hint, Result, sizeof(Hint)); + } + + cmsPipelineFree(Lut); + return (max <= FLOAT_PRECISSION); +} + + +static +cmsInt32Number CheckReverseInterpolation4x3(void) +{ + cmsPipeline* Lut; + cmsStage* clut; + cmsFloat32Number Target[4], Result[4], Hint[4]; + cmsFloat32Number err, max; + cmsInt32Number i; + + // 4 -> 3, output gets 3 first channels copied + cmsUInt16Number Table[] = { + + 0, 0, 0, // 0 0 0 0 = ( 0, 0, 0) + 0, 0, 0, // 0 0 0 1 = ( 0, 0, 0) + + 0, 0, 0xffff, // 0 0 1 0 = ( 0, 0, 1) + 0, 0, 0xffff, // 0 0 1 1 = ( 0, 0, 1) + + 0, 0xffff, 0, // 0 1 0 0 = ( 0, 1, 0) + 0, 0xffff, 0, // 0 1 0 1 = ( 0, 1, 0) + + 0, 0xffff, 0xffff, // 0 1 1 0 = ( 0, 1, 1) + 0, 0xffff, 0xffff, // 0 1 1 1 = ( 0, 1, 1) + + 0xffff, 0, 0, // 1 0 0 0 = ( 1, 0, 0) + 0xffff, 0, 0, // 1 0 0 1 = ( 1, 0, 0) + + 0xffff, 0, 0xffff, // 1 0 1 0 = ( 1, 0, 1) + 0xffff, 0, 0xffff, // 1 0 1 1 = ( 1, 0, 1) + + 0xffff, 0xffff, 0, // 1 1 0 0 = ( 1, 1, 0) + 0xffff, 0xffff, 0, // 1 1 0 1 = ( 1, 1, 0) + + 0xffff, 0xffff, 0xffff, // 1 1 1 0 = ( 1, 1, 1) + 0xffff, 0xffff, 0xffff, // 1 1 1 1 = ( 1, 1, 1) + }; + + + Lut = cmsPipelineAlloc(DbgThread(), 4, 3); + + clut = cmsStageAllocCLut16bit(DbgThread(), 2, 4, 3, Table); + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, clut); + + // Check if the LUT is behaving as expected + SubTest("4->3 feasibility"); + for (i=0; i <= 100; i++) { + + Target[0] = i / 100.0F; + Target[1] = Target[0]; + Target[2] = 0; + Target[3] = 12; + + cmsPipelineEvalFloat(Target, Result, Lut); + + if (!IsGoodFixed15_16("0", Target[0], Result[0])) return 0; + if (!IsGoodFixed15_16("1", Target[1], Result[1])) return 0; + if (!IsGoodFixed15_16("2", Target[2], Result[2])) return 0; + } + + SubTest("4->3 zero"); + Target[0] = 0; + Target[1] = 0; + Target[2] = 0; + + // This one holds the fixed K + Target[3] = 0; + + // This is our hint (which is a big lie in this case) + Hint[0] = 0.1F; Hint[1] = 0.1F; Hint[2] = 0.1F; + + cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut); + + if (Result[0] != 0 || Result[1] != 0 || Result[2] != 0 || Result[3] != 0){ + + Fail("Reverse interpolation didn't find zero"); + return 0; + } + + SubTest("4->3 find CMY"); + max = 0; + for (i=0; i <= 100; i++) { + + cmsFloat32Number in = i / 100.0F; + + Target[0] = in; Target[1] = 0; Target[2] = 0; + cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut); + + err = fabsf(in - Result[0]); + if (err > max) max = err; + + memcpy(Hint, Result, sizeof(Hint)); + } + + cmsPipelineFree(Lut); + return (max <= FLOAT_PRECISSION); +} + + + +// Check all interpolation. + +static +cmsUInt16Number Fn8D1(cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, + cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7, cmsUInt16Number a8, + cmsUInt32Number m) +{ + return (cmsUInt16Number) ((a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8) / m); +} + + +static +cmsUInt16Number Fn8D2(cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, + cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7, cmsUInt16Number a8, + cmsUInt32Number m) +{ + return (cmsUInt16Number) ((a1 + 3* a2 + 3* a3 + a4 + a5 + a6 + a7 + a8 ) / (m + 4)); +} + + +static +cmsUInt16Number Fn8D3(cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, + cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7, cmsUInt16Number a8, + cmsUInt32Number m) +{ + return (cmsUInt16Number) ((3*a1 + 2*a2 + 3*a3 + a4 + a5 + a6 + a7 + a8) / (m + 5)); +} + + + + +static +cmsInt32Number Sampler3D(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register void * Cargo) +{ + + Out[0] = Fn8D1(In[0], In[1], In[2], 0, 0, 0, 0, 0, 3); + Out[1] = Fn8D2(In[0], In[1], In[2], 0, 0, 0, 0, 0, 3); + Out[2] = Fn8D3(In[0], In[1], In[2], 0, 0, 0, 0, 0, 3); + + return 1; +} + +static +cmsInt32Number Sampler4D(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register void * Cargo) +{ + + Out[0] = Fn8D1(In[0], In[1], In[2], In[3], 0, 0, 0, 0, 4); + Out[1] = Fn8D2(In[0], In[1], In[2], In[3], 0, 0, 0, 0, 4); + Out[2] = Fn8D3(In[0], In[1], In[2], In[3], 0, 0, 0, 0, 4); + + return 1; +} + +static +cmsInt32Number Sampler5D(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register void * Cargo) +{ + + Out[0] = Fn8D1(In[0], In[1], In[2], In[3], In[4], 0, 0, 0, 5); + Out[1] = Fn8D2(In[0], In[1], In[2], In[3], In[4], 0, 0, 0, 5); + Out[2] = Fn8D3(In[0], In[1], In[2], In[3], In[4], 0, 0, 0, 5); + + return 1; +} + +static +cmsInt32Number Sampler6D(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register void * Cargo) +{ + + Out[0] = Fn8D1(In[0], In[1], In[2], In[3], In[4], In[5], 0, 0, 6); + Out[1] = Fn8D2(In[0], In[1], In[2], In[3], In[4], In[5], 0, 0, 6); + Out[2] = Fn8D3(In[0], In[1], In[2], In[3], In[4], In[5], 0, 0, 6); + + return 1; +} + +static +cmsInt32Number Sampler7D(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register void * Cargo) +{ + + Out[0] = Fn8D1(In[0], In[1], In[2], In[3], In[4], In[5], In[6], 0, 7); + Out[1] = Fn8D2(In[0], In[1], In[2], In[3], In[4], In[5], In[6], 0, 7); + Out[2] = Fn8D3(In[0], In[1], In[2], In[3], In[4], In[5], In[6], 0, 7); + + return 1; +} + +static +cmsInt32Number Sampler8D(register const cmsUInt16Number In[], + register cmsUInt16Number Out[], + register void * Cargo) +{ + + Out[0] = Fn8D1(In[0], In[1], In[2], In[3], In[4], In[5], In[6], In[7], 8); + Out[1] = Fn8D2(In[0], In[1], In[2], In[3], In[4], In[5], In[6], In[7], 8); + Out[2] = Fn8D3(In[0], In[1], In[2], In[3], In[4], In[5], In[6], In[7], 8); + + return 1; +} + +static +cmsBool CheckOne3D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3) +{ + cmsUInt16Number In[3], Out1[3], Out2[3]; + + In[0] = a1; In[1] = a2; In[2] = a3; + + // This is the interpolated value + cmsPipelineEval16(In, Out1, lut); + + // This is the real value + Sampler3D(In, Out2, NULL); + + // Let's see the difference + + if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; + + return TRUE; +} + +static +cmsBool CheckOne4D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4) +{ + cmsUInt16Number In[4], Out1[3], Out2[3]; + + In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; + + // This is the interpolated value + cmsPipelineEval16(In, Out1, lut); + + // This is the real value + Sampler4D(In, Out2, NULL); + + // Let's see the difference + + if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; + + return TRUE; +} + +static +cmsBool CheckOne5D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, + cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5) +{ + cmsUInt16Number In[5], Out1[3], Out2[3]; + + In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; + + // This is the interpolated value + cmsPipelineEval16(In, Out1, lut); + + // This is the real value + Sampler5D(In, Out2, NULL); + + // Let's see the difference + + if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; + + return TRUE; +} + +static +cmsBool CheckOne6D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, + cmsUInt16Number a3, cmsUInt16Number a4, + cmsUInt16Number a5, cmsUInt16Number a6) +{ + cmsUInt16Number In[6], Out1[3], Out2[3]; + + In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6; + + // This is the interpolated value + cmsPipelineEval16(In, Out1, lut); + + // This is the real value + Sampler6D(In, Out2, NULL); + + // Let's see the difference + + if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; + + return TRUE; +} + + +static +cmsBool CheckOne7D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, + cmsUInt16Number a3, cmsUInt16Number a4, + cmsUInt16Number a5, cmsUInt16Number a6, + cmsUInt16Number a7) +{ + cmsUInt16Number In[7], Out1[3], Out2[3]; + + In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6; In[6] = a7; + + // This is the interpolated value + cmsPipelineEval16(In, Out1, lut); + + // This is the real value + Sampler7D(In, Out2, NULL); + + // Let's see the difference + + if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; + + return TRUE; +} + + +static +cmsBool CheckOne8D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, + cmsUInt16Number a3, cmsUInt16Number a4, + cmsUInt16Number a5, cmsUInt16Number a6, + cmsUInt16Number a7, cmsUInt16Number a8) +{ + cmsUInt16Number In[8], Out1[3], Out2[3]; + + In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6; In[6] = a7; In[7] = a8; + + // This is the interpolated value + cmsPipelineEval16(In, Out1, lut); + + // This is the real value + Sampler8D(In, Out2, NULL); + + // Let's see the difference + + if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; + if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; + + return TRUE; +} + + +static +cmsInt32Number Check3Dinterp(void) +{ + cmsPipeline* lut; + cmsStage* mpe; + + lut = cmsPipelineAlloc(DbgThread(), 3, 3); + mpe = cmsStageAllocCLut16bit(DbgThread(), 9, 3, 3, NULL); + cmsStageSampleCLut16bit(mpe, Sampler3D, NULL, 0); + cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); + + // Check accuracy + + if (!CheckOne3D(lut, 0, 0, 0)) return 0; + if (!CheckOne3D(lut, 0xffff, 0xffff, 0xffff)) return 0; + + if (!CheckOne3D(lut, 0x8080, 0x8080, 0x8080)) return 0; + if (!CheckOne3D(lut, 0x0000, 0xFE00, 0x80FF)) return 0; + if (!CheckOne3D(lut, 0x1111, 0x2222, 0x3333)) return 0; + if (!CheckOne3D(lut, 0x0000, 0x0012, 0x0013)) return 0; + if (!CheckOne3D(lut, 0x3141, 0x1415, 0x1592)) return 0; + if (!CheckOne3D(lut, 0xFF00, 0xFF01, 0xFF12)) return 0; + + cmsPipelineFree(lut); + + return 1; +} + +static +cmsInt32Number Check3DinterpGranular(void) +{ + cmsPipeline* lut; + cmsStage* mpe; + cmsUInt32Number Dimensions[] = { 7, 8, 9 }; + + lut = cmsPipelineAlloc(DbgThread(), 3, 3); + mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 3, 3, NULL); + cmsStageSampleCLut16bit(mpe, Sampler3D, NULL, 0); + cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); + + // Check accuracy + + if (!CheckOne3D(lut, 0, 0, 0)) return 0; + if (!CheckOne3D(lut, 0xffff, 0xffff, 0xffff)) return 0; + + if (!CheckOne3D(lut, 0x8080, 0x8080, 0x8080)) return 0; + if (!CheckOne3D(lut, 0x0000, 0xFE00, 0x80FF)) return 0; + if (!CheckOne3D(lut, 0x1111, 0x2222, 0x3333)) return 0; + if (!CheckOne3D(lut, 0x0000, 0x0012, 0x0013)) return 0; + if (!CheckOne3D(lut, 0x3141, 0x1415, 0x1592)) return 0; + if (!CheckOne3D(lut, 0xFF00, 0xFF01, 0xFF12)) return 0; + + cmsPipelineFree(lut); + + return 1; +} + + +static +cmsInt32Number Check4Dinterp(void) +{ + cmsPipeline* lut; + cmsStage* mpe; + + lut = cmsPipelineAlloc(DbgThread(), 4, 3); + mpe = cmsStageAllocCLut16bit(DbgThread(), 9, 4, 3, NULL); + cmsStageSampleCLut16bit(mpe, Sampler4D, NULL, 0); + cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); + + // Check accuracy + + if (!CheckOne4D(lut, 0, 0, 0, 0)) return 0; + if (!CheckOne4D(lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + + if (!CheckOne4D(lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0; + if (!CheckOne4D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0; + if (!CheckOne4D(lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0; + if (!CheckOne4D(lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0; + if (!CheckOne4D(lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0; + if (!CheckOne4D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0; + + cmsPipelineFree(lut); + + return 1; +} + + + +static +cmsInt32Number Check4DinterpGranular(void) +{ + cmsPipeline* lut; + cmsStage* mpe; + cmsUInt32Number Dimensions[] = { 9, 8, 7, 6 }; + + lut = cmsPipelineAlloc(DbgThread(), 4, 3); + mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 4, 3, NULL); + cmsStageSampleCLut16bit(mpe, Sampler4D, NULL, 0); + cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); + + // Check accuracy + + if (!CheckOne4D(lut, 0, 0, 0, 0)) return 0; + if (!CheckOne4D(lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + + if (!CheckOne4D(lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0; + if (!CheckOne4D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0; + if (!CheckOne4D(lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0; + if (!CheckOne4D(lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0; + if (!CheckOne4D(lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0; + if (!CheckOne4D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0; + + cmsPipelineFree(lut); + + return 1; +} + + +static +cmsInt32Number Check5DinterpGranular(void) +{ + cmsPipeline* lut; + cmsStage* mpe; + cmsUInt32Number Dimensions[] = { 3, 2, 2, 2, 2 }; + + lut = cmsPipelineAlloc(DbgThread(), 5, 3); + mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 5, 3, NULL); + cmsStageSampleCLut16bit(mpe, Sampler5D, NULL, 0); + cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); + + // Check accuracy + + if (!CheckOne5D(lut, 0, 0, 0, 0, 0)) return 0; + if (!CheckOne5D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + + if (!CheckOne5D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234)) return 0; + if (!CheckOne5D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078)) return 0; + if (!CheckOne5D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455)) return 0; + if (!CheckOne5D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333)) return 0; + if (!CheckOne5D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567)) return 0; + if (!CheckOne5D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344)) return 0; + + cmsPipelineFree(lut); + + return 1; +} + +static +cmsInt32Number Check6DinterpGranular(void) +{ + cmsPipeline* lut; + cmsStage* mpe; + cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2 }; + + lut = cmsPipelineAlloc(DbgThread(), 6, 3); + mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 6, 3, NULL); + cmsStageSampleCLut16bit(mpe, Sampler6D, NULL, 0); + cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); + + // Check accuracy + + if (!CheckOne6D(lut, 0, 0, 0, 0, 0, 0)) return 0; + if (!CheckOne6D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + + if (!CheckOne6D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122)) return 0; + if (!CheckOne6D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233)) return 0; + if (!CheckOne6D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344)) return 0; + if (!CheckOne6D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455)) return 0; + if (!CheckOne6D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566)) return 0; + if (!CheckOne6D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677)) return 0; + + cmsPipelineFree(lut); + + return 1; +} + +static +cmsInt32Number Check7DinterpGranular(void) +{ + cmsPipeline* lut; + cmsStage* mpe; + cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2, 2 }; + + lut = cmsPipelineAlloc(DbgThread(), 7, 3); + mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 7, 3, NULL); + cmsStageSampleCLut16bit(mpe, Sampler7D, NULL, 0); + cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); + + // Check accuracy + + if (!CheckOne7D(lut, 0, 0, 0, 0, 0, 0, 0)) return 0; + if (!CheckOne7D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + + if (!CheckOne7D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056)) return 0; + if (!CheckOne7D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088)) return 0; + if (!CheckOne7D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987)) return 0; + if (!CheckOne7D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988)) return 0; + if (!CheckOne7D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56)) return 0; + if (!CheckOne7D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe)) return 0; + + cmsPipelineFree(lut); + + return 1; +} + + +static +cmsInt32Number Check8DinterpGranular(void) +{ + cmsPipeline* lut; + cmsStage* mpe; + cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2, 2, 2 }; + + lut = cmsPipelineAlloc(DbgThread(), 8, 3); + mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 8, 3, NULL); + cmsStageSampleCLut16bit(mpe, Sampler8D, NULL, 0); + cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); + + // Check accuracy + + if (!CheckOne8D(lut, 0, 0, 0, 0, 0, 0, 0, 0)) return 0; + if (!CheckOne8D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + + if (!CheckOne8D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056, 0x0011)) return 0; + if (!CheckOne8D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088, 0x2020)) return 0; + if (!CheckOne8D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987, 0x4532)) return 0; + if (!CheckOne8D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988, 0x1200)) return 0; + if (!CheckOne8D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56, 0x6666)) return 0; + if (!CheckOne8D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe, 0xface)) return 0; + + cmsPipelineFree(lut); + + return 1; +} + +// Colorimetric conversions ------------------------------------------------------------------------------------------------- + +// Lab to LCh and back should be performed at 1E-12 accuracy at least +static +cmsInt32Number CheckLab2LCh(void) +{ + cmsInt32Number l, a, b; + cmsFloat64Number dist, Max = 0; + cmsCIELab Lab, Lab2; + cmsCIELCh LCh; + + for (l=0; l <= 100; l += 10) { + + for (a=-128; a <= +128; a += 8) { + + for (b=-128; b <= 128; b += 8) { + + Lab.L = l; + Lab.a = a; + Lab.b = b; + + cmsLab2LCh(&LCh, &Lab); + cmsLCh2Lab(&Lab2, &LCh); + + dist = cmsDeltaE(&Lab, &Lab2); + if (dist > Max) Max = dist; + } + } + } + + return Max < 1E-12; +} + +// Lab to LCh and back should be performed at 1E-12 accuracy at least +static +cmsInt32Number CheckLab2XYZ(void) +{ + cmsInt32Number l, a, b; + cmsFloat64Number dist, Max = 0; + cmsCIELab Lab, Lab2; + cmsCIEXYZ XYZ; + + for (l=0; l <= 100; l += 10) { + + for (a=-128; a <= +128; a += 8) { + + for (b=-128; b <= 128; b += 8) { + + Lab.L = l; + Lab.a = a; + Lab.b = b; + + cmsLab2XYZ(NULL, &XYZ, &Lab); + cmsXYZ2Lab(NULL, &Lab2, &XYZ); + + dist = cmsDeltaE(&Lab, &Lab2); + if (dist > Max) Max = dist; + + } + } + } + + return Max < 1E-12; +} + +// Lab to xyY and back should be performed at 1E-12 accuracy at least +static +cmsInt32Number CheckLab2xyY(void) +{ + cmsInt32Number l, a, b; + cmsFloat64Number dist, Max = 0; + cmsCIELab Lab, Lab2; + cmsCIEXYZ XYZ; + cmsCIExyY xyY; + + for (l=0; l <= 100; l += 10) { + + for (a=-128; a <= +128; a += 8) { + + for (b=-128; b <= 128; b += 8) { + + Lab.L = l; + Lab.a = a; + Lab.b = b; + + cmsLab2XYZ(NULL, &XYZ, &Lab); + cmsXYZ2xyY(&xyY, &XYZ); + cmsxyY2XYZ(&XYZ, &xyY); + cmsXYZ2Lab(NULL, &Lab2, &XYZ); + + dist = cmsDeltaE(&Lab, &Lab2); + if (dist > Max) Max = dist; + + } + } + } + + return Max < 1E-12; +} + + +static +cmsInt32Number CheckLabV2encoding(void) +{ + cmsInt32Number n2, i, j; + cmsUInt16Number Inw[3], aw[3]; + cmsCIELab Lab; + + n2=0; + + for (j=0; j < 65535; j++) { + + Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j; + + cmsLabEncoded2FloatV2(&Lab, Inw); + cmsFloat2LabEncodedV2(aw, &Lab); + + for (i=0; i < 3; i++) { + + if (aw[i] != j) { + n2++; + } + } + + } + + return (n2 == 0); +} + +static +cmsInt32Number CheckLabV4encoding(void) +{ + cmsInt32Number n2, i, j; + cmsUInt16Number Inw[3], aw[3]; + cmsCIELab Lab; + + n2=0; + + for (j=0; j < 65535; j++) { + + Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j; + + cmsLabEncoded2Float(&Lab, Inw); + cmsFloat2LabEncoded(aw, &Lab); + + for (i=0; i < 3; i++) { + + if (aw[i] != j) { + n2++; + } + } + + } + + return (n2 == 0); +} + + +// BlackBody ----------------------------------------------------------------------------------------------------- + +static +cmsInt32Number CheckTemp2CHRM(void) +{ + cmsInt32Number j; + cmsFloat64Number d, v, Max = 0; + cmsCIExyY White; + + for (j=4000; j < 25000; j++) { + + cmsWhitePointFromTemp(&White, j); + if (!cmsTempFromWhitePoint(&v, &White)) return 0; + + d = fabs(v - j); + if (d > Max) Max = d; + } + + // 100 degree is the actual resolution + return (Max < 100); +} + + + +// Tone curves ----------------------------------------------------------------------------------------------------- + +static +cmsInt32Number CheckGammaEstimation(cmsToneCurve* c, cmsFloat64Number g) +{ + cmsFloat64Number est = cmsEstimateGamma(c, 0.001); + + SubTest("Gamma estimation"); + if (fabs(est - g) > 0.001) return 0; + return 1; +} + +static +cmsInt32Number CheckGammaCreation16(void) +{ + cmsToneCurve* LinGamma = cmsBuildGamma(DbgThread(), 1.0); + cmsInt32Number i; + cmsUInt16Number in, out; + + for (i=0; i < 0xffff; i++) { + + in = (cmsUInt16Number) i; + out = cmsEvalToneCurve16(LinGamma, in); + if (in != out) { + Fail("(lin gamma): Must be %x, But is %x : ", in, out); + cmsFreeToneCurve(LinGamma); + return 0; + } + } + + if (!CheckGammaEstimation(LinGamma, 1.0)) return 0; + + cmsFreeToneCurve(LinGamma); + return 1; + +} + +static +cmsInt32Number CheckGammaCreationFlt(void) +{ + cmsToneCurve* LinGamma = cmsBuildGamma(DbgThread(), 1.0); + cmsInt32Number i; + cmsFloat32Number in, out; + + for (i=0; i < 0xffff; i++) { + + in = (cmsFloat32Number) (i / 65535.0); + out = cmsEvalToneCurveFloat(LinGamma, in); + if (fabs(in - out) > (1/65535.0)) { + Fail("(lin gamma): Must be %f, But is %f : ", in, out); + cmsFreeToneCurve(LinGamma); + return 0; + } + } + + if (!CheckGammaEstimation(LinGamma, 1.0)) return 0; + cmsFreeToneCurve(LinGamma); + return 1; +} + +// Curve curves using a single power function +// Error is given in 0..ffff counts +static +cmsInt32Number CheckGammaFloat(cmsFloat64Number g) +{ + cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), g); + cmsInt32Number i; + cmsFloat32Number in, out; + cmsFloat64Number val, Err; + + MaxErr = 0.0; + for (i=0; i < 0xffff; i++) { + + in = (cmsFloat32Number) (i / 65535.0); + out = cmsEvalToneCurveFloat(Curve, in); + val = pow((cmsFloat64Number) in, g); + + Err = fabs( val - out); + if (Err > MaxErr) MaxErr = Err; + } + + if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); + + if (!CheckGammaEstimation(Curve, g)) return 0; + + cmsFreeToneCurve(Curve); + return 1; +} + +static cmsInt32Number CheckGamma18(void) +{ + return CheckGammaFloat(1.8); +} + +static cmsInt32Number CheckGamma22(void) +{ + return CheckGammaFloat(2.2); +} + +static cmsInt32Number CheckGamma30(void) +{ + return CheckGammaFloat(3.0); +} + + +// Check table-based gamma functions +static +cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g) +{ + cmsFloat32Number Values[1025]; + cmsToneCurve* Curve; + cmsInt32Number i; + cmsFloat32Number in, out; + cmsFloat64Number val, Err; + + for (i=0; i <= 1024; i++) { + + in = (cmsFloat32Number) (i / 1024.0); + Values[i] = powf(in, (float) g); + } + + Curve = cmsBuildTabulatedToneCurveFloat(DbgThread(), 1025, Values); + + MaxErr = 0.0; + for (i=0; i <= 0xffff; i++) { + + in = (cmsFloat32Number) (i / 65535.0); + out = cmsEvalToneCurveFloat(Curve, in); + val = pow(in, g); + + Err = fabs(val - out); + if (Err > MaxErr) MaxErr = Err; + } + + if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); + + if (!CheckGammaEstimation(Curve, g)) return 0; + + cmsFreeToneCurve(Curve); + return 1; +} + + +static cmsInt32Number CheckGamma18Table(void) +{ + return CheckGammaFloatTable(1.8); +} + +static cmsInt32Number CheckGamma22Table(void) +{ + return CheckGammaFloatTable(2.2); +} + +static cmsInt32Number CheckGamma30Table(void) +{ + return CheckGammaFloatTable(3.0); +} + +// Create a curve from a table (which is a pure gamma function) and check it against the pow function. +static +cmsInt32Number CheckGammaWordTable(cmsFloat64Number g) +{ + cmsUInt16Number Values[1025]; + cmsToneCurve* Curve; + cmsInt32Number i; + cmsFloat32Number in, out; + cmsFloat64Number val, Err; + + for (i=0; i <= 1024; i++) { + + in = (cmsFloat32Number) (i / 1024.0); + Values[i] = (cmsUInt16Number) floor(pow(in, g) * 65535.0 + 0.5); + } + + Curve = cmsBuildTabulatedToneCurve16(DbgThread(), 1025, Values); + + MaxErr = 0.0; + for (i=0; i <= 0xffff; i++) { + + in = (cmsFloat32Number) (i / 65535.0); + out = cmsEvalToneCurveFloat(Curve, in); + val = pow(in, g); + + Err = fabs(val - out); + if (Err > MaxErr) MaxErr = Err; + } + + if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); + + if (!CheckGammaEstimation(Curve, g)) return 0; + + cmsFreeToneCurve(Curve); + return 1; +} + +static cmsInt32Number CheckGamma18TableWord(void) +{ + return CheckGammaWordTable(1.8); +} + +static cmsInt32Number CheckGamma22TableWord(void) +{ + return CheckGammaWordTable(2.2); +} + +static cmsInt32Number CheckGamma30TableWord(void) +{ + return CheckGammaWordTable(3.0); +} + + +// Curve joining test. Joining two high-gamma of 3.0 curves should +// give something like linear +static +cmsInt32Number CheckJointCurves(void) +{ + cmsToneCurve *Forward, *Reverse, *Result; + cmsBool rc; + + Forward = cmsBuildGamma(DbgThread(), 3.0); + Reverse = cmsBuildGamma(DbgThread(), 3.0); + + Result = cmsJoinToneCurve(DbgThread(), Forward, Reverse, 256); + + cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); + + rc = cmsIsToneCurveLinear(Result); + cmsFreeToneCurve(Result); + + if (!rc) + Fail("Joining same curve twice does not result in a linear ramp"); + + return rc; +} + + +// Create a gamma curve by cheating the table +static +cmsToneCurve* GammaTableLinear(cmsInt32Number nEntries, cmsBool Dir) +{ + cmsInt32Number i; + cmsToneCurve* g = cmsBuildTabulatedToneCurve16(DbgThread(), nEntries, NULL); + + for (i=0; i < nEntries; i++) { + + cmsInt32Number v = _cmsQuantizeVal(i, nEntries); + + if (Dir) + g->Table16[i] = (cmsUInt16Number) v; + else + g->Table16[i] = (cmsUInt16Number) (0xFFFF - v); + } + + return g; +} + + +static +cmsInt32Number CheckJointCurvesDescending(void) +{ + cmsToneCurve *Forward, *Reverse, *Result; + cmsInt32Number i, rc; + + Forward = cmsBuildGamma(DbgThread(), 2.2); + + // Fake the curve to be table-based + + for (i=0; i < 4096; i++) + Forward ->Table16[i] = 0xffff - Forward->Table16[i]; + Forward ->Segments[0].Type = 0; + + Reverse = cmsReverseToneCurve(Forward); + + Result = cmsJoinToneCurve(DbgThread(), Reverse, Reverse, 256); + + cmsFreeToneCurve(Forward); + cmsFreeToneCurve(Reverse); + + rc = cmsIsToneCurveLinear(Result); + cmsFreeToneCurve(Result); + + return rc; +} + + +static +cmsInt32Number CheckFToneCurvePoint(cmsToneCurve* c, cmsUInt16Number Point, cmsInt32Number Value) +{ + cmsInt32Number Result; + + Result = cmsEvalToneCurve16(c, Point); + + return (abs(Value - Result) < 2); +} + +static +cmsInt32Number CheckReverseDegenerated(void) +{ + cmsToneCurve* p, *g; + cmsUInt16Number Tab[16]; + + Tab[0] = 0; + Tab[1] = 0; + Tab[2] = 0; + Tab[3] = 0; + Tab[4] = 0; + Tab[5] = 0x5555; + Tab[6] = 0x6666; + Tab[7] = 0x7777; + Tab[8] = 0x8888; + Tab[9] = 0x9999; + Tab[10]= 0xffff; + Tab[11]= 0xffff; + Tab[12]= 0xffff; + Tab[13]= 0xffff; + Tab[14]= 0xffff; + Tab[15]= 0xffff; + + p = cmsBuildTabulatedToneCurve16(DbgThread(), 16, Tab); + g = cmsReverseToneCurve(p); + + // Now let's check some points + if (!CheckFToneCurvePoint(g, 0x5555, 0x5555)) return 0; + if (!CheckFToneCurvePoint(g, 0x7777, 0x7777)) return 0; + + // First point for zero + if (!CheckFToneCurvePoint(g, 0x0000, 0x4444)) return 0; + + // Last point + if (!CheckFToneCurvePoint(g, 0xFFFF, 0xFFFF)) return 0; + + cmsFreeToneCurve(p); + cmsFreeToneCurve(g); + + return 1; +} + + +// Build a parametric sRGB-like curve +static +cmsToneCurve* Build_sRGBGamma(void) +{ + cmsFloat64Number Parameters[5]; + + Parameters[0] = 2.4; + Parameters[1] = 1. / 1.055; + Parameters[2] = 0.055 / 1.055; + Parameters[3] = 1. / 12.92; + Parameters[4] = 0.04045; // d + + return cmsBuildParametricToneCurve(DbgThread(), 4, Parameters); +} + + + +// Join two gamma tables in floting point format. Result should be a straight line +static +cmsToneCurve* CombineGammaFloat(cmsToneCurve* g1, cmsToneCurve* g2) +{ + cmsUInt16Number Tab[256]; + cmsFloat32Number f; + cmsInt32Number i; + + for (i=0; i < 256; i++) { + + f = (cmsFloat32Number) i / 255.0F; + f = cmsEvalToneCurveFloat(g2, cmsEvalToneCurveFloat(g1, f)); + + Tab[i] = (cmsUInt16Number) floor(f * 65535.0 + 0.5); + } + + return cmsBuildTabulatedToneCurve16(DbgThread(), 256, Tab); +} + +// Same of anterior, but using quantized tables +static +cmsToneCurve* CombineGamma16(cmsToneCurve* g1, cmsToneCurve* g2) +{ + cmsUInt16Number Tab[256]; + + cmsInt32Number i; + + for (i=0; i < 256; i++) { + + cmsUInt16Number wValIn; + + wValIn = _cmsQuantizeVal(i, 256); + Tab[i] = cmsEvalToneCurve16(g2, cmsEvalToneCurve16(g1, wValIn)); + } + + return cmsBuildTabulatedToneCurve16(DbgThread(), 256, Tab); +} + +static +cmsInt32Number CheckJointFloatCurves_sRGB(void) +{ + cmsToneCurve *Forward, *Reverse, *Result; + cmsBool rc; + + Forward = Build_sRGBGamma(); + Reverse = cmsReverseToneCurve(Forward); + Result = CombineGammaFloat(Forward, Reverse); + cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); + + rc = cmsIsToneCurveLinear(Result); + cmsFreeToneCurve(Result); + + return rc; +} + +static +cmsInt32Number CheckJoint16Curves_sRGB(void) +{ + cmsToneCurve *Forward, *Reverse, *Result; + cmsBool rc; + + Forward = Build_sRGBGamma(); + Reverse = cmsReverseToneCurve(Forward); + Result = CombineGamma16(Forward, Reverse); + cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); + + rc = cmsIsToneCurveLinear(Result); + cmsFreeToneCurve(Result); + + return rc; +} + +// sigmoidal curve f(x) = (1-x^g) ^(1/g) + +static +cmsInt32Number CheckJointCurvesSShaped(void) +{ + cmsFloat64Number p = 3.2; + cmsToneCurve *Forward, *Reverse, *Result; + cmsInt32Number rc; + + Forward = cmsBuildParametricToneCurve(DbgThread(), 108, &p); + Reverse = cmsReverseToneCurve(Forward); + Result = cmsJoinToneCurve(DbgThread(), Forward, Forward, 4096); + + cmsFreeToneCurve(Forward); + cmsFreeToneCurve(Reverse); + + rc = cmsIsToneCurveLinear(Result); + cmsFreeToneCurve(Result); + return rc; +} + + +// -------------------------------------------------------------------------------------------------------- + +// Implementation of some tone curve functions +static +cmsFloat32Number Gamma(cmsFloat32Number x, const cmsFloat64Number Params[]) +{ + return (cmsFloat32Number) pow(x, Params[0]); +} + +static +cmsFloat32Number CIE122(cmsFloat32Number x, const cmsFloat64Number Params[]) + +{ + cmsFloat64Number e, Val; + + if (x >= -Params[2] / Params[1]) { + + e = Params[1]*x + Params[2]; + + if (e > 0) + Val = pow(e, Params[0]); + else + Val = 0; + } + else + Val = 0; + + return (cmsFloat32Number) Val; +} + +static +cmsFloat32Number IEC61966_3(cmsFloat32Number x, const cmsFloat64Number Params[]) +{ + cmsFloat64Number e, Val; + + if (x >= -Params[2] / Params[1]) { + + e = Params[1]*x + Params[2]; + + if (e > 0) + Val = pow(e, Params[0]) + Params[3]; + else + Val = 0; + } + else + Val = Params[3]; + + return (cmsFloat32Number) Val; +} + +static +cmsFloat32Number IEC61966_21(cmsFloat32Number x, const cmsFloat64Number Params[]) +{ + cmsFloat64Number e, Val; + + if (x >= Params[4]) { + + e = Params[1]*x + Params[2]; + + if (e > 0) + Val = pow(e, Params[0]); + else + Val = 0; + } + else + Val = x * Params[3]; + + return (cmsFloat32Number) Val; +} + +static +cmsFloat32Number param_5(cmsFloat32Number x, const cmsFloat64Number Params[]) +{ + cmsFloat64Number e, Val; + // Y = (aX + b)^Gamma + e | X >= d + // Y = cX + f | else + if (x >= Params[4]) { + + e = Params[1]*x + Params[2]; + if (e > 0) + Val = pow(e, Params[0]) + Params[5]; + else + Val = 0; + } + else + Val = x*Params[3] + Params[6]; + + return (cmsFloat32Number) Val; +} + +static +cmsFloat32Number param_6(cmsFloat32Number x, const cmsFloat64Number Params[]) +{ + cmsFloat64Number e, Val; + + e = Params[1]*x + Params[2]; + if (e > 0) + Val = pow(e, Params[0]) + Params[3]; + else + Val = 0; + + return (cmsFloat32Number) Val; +} + +static +cmsFloat32Number param_7(cmsFloat32Number x, const cmsFloat64Number Params[]) +{ + cmsFloat64Number Val; + + + Val = Params[1]*log10(Params[2] * pow(x, Params[0]) + Params[3]) + Params[4]; + + return (cmsFloat32Number) Val; +} + + +static +cmsFloat32Number param_8(cmsFloat32Number x, const cmsFloat64Number Params[]) +{ + cmsFloat64Number Val; + + Val = (Params[0] * pow(Params[1], Params[2] * x + Params[3]) + Params[4]); + + return (cmsFloat32Number) Val; +} + + +static +cmsFloat32Number sigmoidal(cmsFloat32Number x, const cmsFloat64Number Params[]) +{ + cmsFloat64Number Val; + + Val = pow(1.0 - pow(1 - x, 1/Params[0]), 1/Params[0]); + + return (cmsFloat32Number) Val; +} + + +static +cmsBool CheckSingleParametric(const char* Name, dblfnptr fn, cmsInt32Number Type, const cmsFloat64Number Params[]) +{ + cmsInt32Number i; + cmsToneCurve* tc; + cmsToneCurve* tc_1; + char InverseText[256]; + + tc = cmsBuildParametricToneCurve(DbgThread(), Type, Params); + tc_1 = cmsBuildParametricToneCurve(DbgThread(), -Type, Params); + + for (i=0; i <= 1000; i++) { + + cmsFloat32Number x = (cmsFloat32Number) i / 1000; + cmsFloat32Number y_fn, y_param, x_param, y_param2; + + y_fn = fn(x, Params); + y_param = cmsEvalToneCurveFloat(tc, x); + x_param = cmsEvalToneCurveFloat(tc_1, y_param); + + y_param2 = fn(x_param, Params); + + if (!IsGoodVal(Name, y_fn, y_param, FIXED_PRECISION_15_16)) + goto Error; + + sprintf(InverseText, "Inverse %s", Name); + if (!IsGoodVal(InverseText, y_fn, y_param2, FIXED_PRECISION_15_16)) + goto Error; + } + + cmsFreeToneCurve(tc); + cmsFreeToneCurve(tc_1); + return TRUE; + +Error: + cmsFreeToneCurve(tc); + cmsFreeToneCurve(tc_1); + return FALSE; +} + +// Check against some known values +static +cmsInt32Number CheckParametricToneCurves(void) +{ + cmsFloat64Number Params[10]; + + // 1) X = Y ^ Gamma + + Params[0] = 2.2; + + if (!CheckSingleParametric("Gamma", Gamma, 1, Params)) return 0; + + // 2) CIE 122-1966 + // Y = (aX + b)^Gamma | X >= -b/a + // Y = 0 | else + + Params[0] = 2.2; + Params[1] = 1.5; + Params[2] = -0.5; + + if (!CheckSingleParametric("CIE122-1966", CIE122, 2, Params)) return 0; + + // 3) IEC 61966-3 + // Y = (aX + b)^Gamma | X <= -b/a + // Y = c | else + + Params[0] = 2.2; + Params[1] = 1.5; + Params[2] = -0.5; + Params[3] = 0.3; + + + if (!CheckSingleParametric("IEC 61966-3", IEC61966_3, 3, Params)) return 0; + + // 4) IEC 61966-2.1 (sRGB) + // Y = (aX + b)^Gamma | X >= d + // Y = cX | X < d + + Params[0] = 2.4; + Params[1] = 1. / 1.055; + Params[2] = 0.055 / 1.055; + Params[3] = 1. / 12.92; + Params[4] = 0.04045; + + if (!CheckSingleParametric("IEC 61966-2.1", IEC61966_21, 4, Params)) return 0; + + + // 5) Y = (aX + b)^Gamma + e | X >= d + // Y = cX + f | else + + Params[0] = 2.2; + Params[1] = 0.7; + Params[2] = 0.2; + Params[3] = 0.3; + Params[4] = 0.1; + Params[5] = 0.5; + Params[6] = 0.2; + + if (!CheckSingleParametric("param_5", param_5, 5, Params)) return 0; + + // 6) Y = (aX + b) ^ Gamma + c + + Params[0] = 2.2; + Params[1] = 0.7; + Params[2] = 0.2; + Params[3] = 0.3; + + if (!CheckSingleParametric("param_6", param_6, 6, Params)) return 0; + + // 7) Y = a * log (b * X^Gamma + c) + d + + Params[0] = 2.2; + Params[1] = 0.9; + Params[2] = 0.9; + Params[3] = 0.02; + Params[4] = 0.1; + + if (!CheckSingleParametric("param_7", param_7, 7, Params)) return 0; + + // 8) Y = a * b ^ (c*X+d) + e + + Params[0] = 0.9; + Params[1] = 0.9; + Params[2] = 1.02; + Params[3] = 0.1; + Params[4] = 0.2; + + if (!CheckSingleParametric("param_8", param_8, 8, Params)) return 0; + + // 108: S-Shaped: (1 - (1-x)^1/g)^1/g + + Params[0] = 1.9; + if (!CheckSingleParametric("sigmoidal", sigmoidal, 108, Params)) return 0; + + // All OK + + return 1; +} + +// LUT checks ------------------------------------------------------------------------------ + +static +cmsInt32Number CheckLUTcreation(void) +{ + cmsPipeline* lut; + cmsPipeline* lut2; + cmsInt32Number n1, n2; + + lut = cmsPipelineAlloc(DbgThread(), 1, 1); + n1 = cmsPipelineStageCount(lut); + lut2 = cmsPipelineDup(lut); + n2 = cmsPipelineStageCount(lut2); + + cmsPipelineFree(lut); + cmsPipelineFree(lut2); + + return (n1 == 0) && (n2 == 0); +} + +// Create a MPE for a identity matrix +static +void AddIdentityMatrix(cmsPipeline* lut) +{ + const cmsFloat64Number Identity[] = { 1, 0, 0, + 0, 1, 0, + 0, 0, 1, + 0, 0, 0 }; + + cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocMatrix(DbgThread(), 3, 3, Identity, NULL)); +} + +// Create a MPE for identity cmsFloat32Number CLUT +static +void AddIdentityCLUTfloat(cmsPipeline* lut) +{ + const cmsFloat32Number Table[] = { + + 0, 0, 0, + 0, 0, 1.0, + + 0, 1.0, 0, + 0, 1.0, 1.0, + + 1.0, 0, 0, + 1.0, 0, 1.0, + + 1.0, 1.0, 0, + 1.0, 1.0, 1.0 + }; + + cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocCLutFloat(DbgThread(), 2, 3, 3, Table)); +} + +// Create a MPE for identity cmsFloat32Number CLUT +static +void AddIdentityCLUT16(cmsPipeline* lut) +{ + const cmsUInt16Number Table[] = { + + 0, 0, 0, + 0, 0, 0xffff, + + 0, 0xffff, 0, + 0, 0xffff, 0xffff, + + 0xffff, 0, 0, + 0xffff, 0, 0xffff, + + 0xffff, 0xffff, 0, + 0xffff, 0xffff, 0xffff + }; + + + cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocCLut16bit(DbgThread(), 2, 3, 3, Table)); +} + + +// Create a 3 fn identity curves + +static +void Add3GammaCurves(cmsPipeline* lut, cmsFloat64Number Curve) +{ + cmsToneCurve* id = cmsBuildGamma(DbgThread(), Curve); + cmsToneCurve* id3[3]; + + id3[0] = id; + id3[1] = id; + id3[2] = id; + + cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocToneCurves(DbgThread(), 3, id3)); + + cmsFreeToneCurve(id); +} + + +static +cmsInt32Number CheckFloatLUT(cmsPipeline* lut) +{ + cmsInt32Number n1, i, j; + cmsFloat32Number Inf[3], Outf[3]; + + n1=0; + + for (j=0; j < 65535; j++) { + + cmsInt32Number af[3]; + + Inf[0] = Inf[1] = Inf[2] = (cmsFloat32Number) j / 65535.0F; + cmsPipelineEvalFloat(Inf, Outf, lut); + + af[0] = (cmsInt32Number) floor(Outf[0]*65535.0 + 0.5); + af[1] = (cmsInt32Number) floor(Outf[1]*65535.0 + 0.5); + af[2] = (cmsInt32Number) floor(Outf[2]*65535.0 + 0.5); + + for (i=0; i < 3; i++) { + + if (af[i] != j) { + n1++; + } + } + + } + + return (n1 == 0); +} + + +static +cmsInt32Number Check16LUT(cmsPipeline* lut) +{ + cmsInt32Number n2, i, j; + cmsUInt16Number Inw[3], Outw[3]; + + n2=0; + + for (j=0; j < 65535; j++) { + + cmsInt32Number aw[3]; + + Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j; + cmsPipelineEval16(Inw, Outw, lut); + aw[0] = Outw[0]; + aw[1] = Outw[1]; + aw[2] = Outw[2]; + + for (i=0; i < 3; i++) { + + if (aw[i] != j) { + n2++; + } + } + + } + + return (n2 == 0); +} + + +// Check any LUT that is linear +static +cmsInt32Number CheckStagesLUT(cmsPipeline* lut, cmsInt32Number ExpectedStages) +{ + + cmsInt32Number nInpChans, nOutpChans, nStages; + + nInpChans = cmsPipelineInputChannels(lut); + nOutpChans = cmsPipelineOutputChannels(lut); + nStages = cmsPipelineStageCount(lut); + + return (nInpChans == 3) && (nOutpChans == 3) && (nStages == ExpectedStages); +} + + +static +cmsInt32Number CheckFullLUT(cmsPipeline* lut, cmsInt32Number ExpectedStages) +{ + cmsInt32Number rc = CheckStagesLUT(lut, ExpectedStages) && Check16LUT(lut) && CheckFloatLUT(lut); + + cmsPipelineFree(lut); + return rc; +} + + +static +cmsInt32Number Check1StageLUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + AddIdentityMatrix(lut); + return CheckFullLUT(lut, 1); +} + + + +static +cmsInt32Number Check2StageLUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + AddIdentityMatrix(lut); + AddIdentityCLUTfloat(lut); + + return CheckFullLUT(lut, 2); +} + +static +cmsInt32Number Check2Stage16LUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + AddIdentityMatrix(lut); + AddIdentityCLUT16(lut); + + return CheckFullLUT(lut, 2); +} + + + +static +cmsInt32Number Check3StageLUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + AddIdentityMatrix(lut); + AddIdentityCLUTfloat(lut); + Add3GammaCurves(lut, 1.0); + + return CheckFullLUT(lut, 3); +} + +static +cmsInt32Number Check3Stage16LUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + AddIdentityMatrix(lut); + AddIdentityCLUT16(lut); + Add3GammaCurves(lut, 1.0); + + return CheckFullLUT(lut, 3); +} + + + +static +cmsInt32Number Check4StageLUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + AddIdentityMatrix(lut); + AddIdentityCLUTfloat(lut); + Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(lut); + + return CheckFullLUT(lut, 4); +} + +static +cmsInt32Number Check4Stage16LUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + AddIdentityMatrix(lut); + AddIdentityCLUT16(lut); + Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(lut); + + return CheckFullLUT(lut, 4); +} + +static +cmsInt32Number Check5StageLUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + AddIdentityMatrix(lut); + AddIdentityCLUTfloat(lut); + Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(lut); + Add3GammaCurves(lut, 1.0); + + return CheckFullLUT(lut, 5); +} + + +static +cmsInt32Number Check5Stage16LUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + AddIdentityMatrix(lut); + AddIdentityCLUT16(lut); + Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(lut); + Add3GammaCurves(lut, 1.0); + + return CheckFullLUT(lut, 5); +} + +static +cmsInt32Number Check6StageLUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + AddIdentityMatrix(lut); + Add3GammaCurves(lut, 1.0); + AddIdentityCLUTfloat(lut); + Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(lut); + Add3GammaCurves(lut, 1.0); + + return CheckFullLUT(lut, 6); +} + +static +cmsInt32Number Check6Stage16LUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + AddIdentityMatrix(lut); + Add3GammaCurves(lut, 1.0); + AddIdentityCLUT16(lut); + Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(lut); + Add3GammaCurves(lut, 1.0); + + return CheckFullLUT(lut, 6); +} + + +static +cmsInt32Number CheckLab2LabLUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsInt32Number rc; + + cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread())); + cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread())); + + rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 2); + + cmsPipelineFree(lut); + + return rc; +} + + +static +cmsInt32Number CheckXYZ2XYZLUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsInt32Number rc; + + cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread())); + cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread())); + + rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 2); + + cmsPipelineFree(lut); + + return rc; +} + + + +static +cmsInt32Number CheckLab2LabMatLUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsInt32Number rc; + + cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread())); + AddIdentityMatrix(lut); + cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread())); + + rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 3); + + cmsPipelineFree(lut); + + return rc; +} + +static +cmsInt32Number CheckNamedColorLUT(void) +{ + cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsNAMEDCOLORLIST* nc; + cmsInt32Number i,j, rc = 1, n2; + cmsUInt16Number PCS[3]; + cmsUInt16Number Colorant[cmsMAXCHANNELS]; + char Name[255]; + cmsUInt16Number Inw[3], Outw[3]; + + + + nc = cmsAllocNamedColorList(DbgThread(), 256, 3, "pre", "post"); + if (nc == NULL) return 0; + + for (i=0; i < 256; i++) { + + PCS[0] = PCS[1] = PCS[2] = (cmsUInt16Number) i; + Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) i; + + sprintf(Name, "#%d", i); + if (!cmsAppendNamedColor(nc, Name, PCS, Colorant)) { rc = 0; break; } + } + + cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocNamedColor(nc, FALSE)); + + cmsFreeNamedColorList(nc); + if (rc == 0) return 0; + + n2=0; + + for (j=0; j < 256; j++) { + + Inw[0] = (cmsUInt16Number) j; + + cmsPipelineEval16(Inw, Outw, lut); + for (i=0; i < 3; i++) { + + if (Outw[i] != j) { + n2++; + } + } + + } + + cmsPipelineFree(lut); + return (n2 == 0); +} + + + +// -------------------------------------------------------------------------------------------- + +// A lightweight test of multilocalized unicode structures. + +static +cmsInt32Number CheckMLU(void) +{ + cmsMLU* mlu, *mlu2, *mlu3; + char Buffer[256], Buffer2[256]; + cmsInt32Number rc = 1; + cmsInt32Number i; + cmsHPROFILE h= NULL; + + // Allocate a MLU structure, no preferred size + mlu = cmsMLUalloc(DbgThread(), 0); + + // Add some localizations + cmsMLUsetWide(mlu, "en", "US", L"Hello, world"); + cmsMLUsetWide(mlu, "es", "ES", L"Hola, mundo"); + cmsMLUsetWide(mlu, "fr", "FR", L"Bonjour, le monde"); + cmsMLUsetWide(mlu, "ca", "CA", L"Hola, mon"); + + + // Check the returned string for each language + + cmsMLUgetASCII(mlu, "en", "US", Buffer, 256); + if (strcmp(Buffer, "Hello, world") != 0) rc = 0; + + + cmsMLUgetASCII(mlu, "es", "ES", Buffer, 256); + if (strcmp(Buffer, "Hola, mundo") != 0) rc = 0; + + + cmsMLUgetASCII(mlu, "fr", "FR", Buffer, 256); + if (strcmp(Buffer, "Bonjour, le monde") != 0) rc = 0; + + + cmsMLUgetASCII(mlu, "ca", "CA", Buffer, 256); + if (strcmp(Buffer, "Hola, mon") != 0) rc = 0; + + if (rc == 0) + Fail("Unexpected string '%s'", Buffer); + + // So far, so good. + cmsMLUfree(mlu); + + // Now for performance, allocate an empty struct + mlu = cmsMLUalloc(DbgThread(), 0); + + // Fill it with several thousands of different lenguages + for (i=0; i < 4096; i++) { + + char Lang[3]; + + Lang[0] = (char) (i % 255); + Lang[1] = (char) (i / 255); + Lang[2] = 0; + + sprintf(Buffer, "String #%i", i); + cmsMLUsetASCII(mlu, Lang, Lang, Buffer); + } + + // Duplicate it + mlu2 = cmsMLUdup(mlu); + + // Get rid of original + cmsMLUfree(mlu); + + // Check all is still in place + for (i=0; i < 4096; i++) { + + char Lang[3]; + + Lang[0] = (char)(i % 255); + Lang[1] = (char)(i / 255); + Lang[2] = 0; + + cmsMLUgetASCII(mlu2, Lang, Lang, Buffer2, 256); + sprintf(Buffer, "String #%i", i); + + if (strcmp(Buffer, Buffer2) != 0) { rc = 0; break; } + } + + if (rc == 0) + Fail("Unexpected string '%s'", Buffer2); + + // Check profile IO + + h = cmsOpenProfileFromFileTHR(DbgThread(), "mlucheck.icc", "w"); + + cmsSetProfileVersion(h, 4.3); + + cmsWriteTag(h, cmsSigProfileDescriptionTag, mlu2); + cmsCloseProfile(h); + cmsMLUfree(mlu2); + + + h = cmsOpenProfileFromFileTHR(DbgThread(), "mlucheck.icc", "r"); + + mlu3 = cmsReadTag(h, cmsSigProfileDescriptionTag); + if (mlu3 == NULL) { Fail("Profile didn't get the MLU\n"); rc = 0; goto Error; } + + // Check all is still in place + for (i=0; i < 4096; i++) { + + char Lang[3]; + + Lang[0] = (char) (i % 255); + Lang[1] = (char) (i / 255); + Lang[2] = 0; + + cmsMLUgetASCII(mlu3, Lang, Lang, Buffer2, 256); + sprintf(Buffer, "String #%i", i); + + if (strcmp(Buffer, Buffer2) != 0) { rc = 0; break; } + } + + if (rc == 0) Fail("Unexpected string '%s'", Buffer2); + +Error: + + if (h != NULL) cmsCloseProfile(h); + remove("mlucheck.icc"); + + return rc; +} + + +// A lightweight test of named color structures. +static +cmsInt32Number CheckNamedColorList(void) +{ + cmsNAMEDCOLORLIST* nc = NULL, *nc2; + cmsInt32Number i, j, rc=1; + char Name[255]; + cmsUInt16Number PCS[3]; + cmsUInt16Number Colorant[cmsMAXCHANNELS]; + char CheckName[255]; + cmsUInt16Number CheckPCS[3]; + cmsUInt16Number CheckColorant[cmsMAXCHANNELS]; + cmsHPROFILE h; + + nc = cmsAllocNamedColorList(DbgThread(), 0, 4, "prefix", "suffix"); + if (nc == NULL) return 0; + + for (i=0; i < 4096; i++) { + + + PCS[0] = PCS[1] = PCS[2] = (cmsUInt16Number) i; + Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) (4096 - i); + + sprintf(Name, "#%d", i); + if (!cmsAppendNamedColor(nc, Name, PCS, Colorant)) { rc = 0; break; } + } + + for (i=0; i < 4096; i++) { + + CheckPCS[0] = CheckPCS[1] = CheckPCS[2] = (cmsUInt16Number) i; + CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (4096 - i); + + sprintf(CheckName, "#%d", i); + if (!cmsNamedColorInfo(nc, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; } + + + for (j=0; j < 3; j++) { + if (CheckPCS[j] != PCS[j]) { rc = 0; Fail("Invalid PCS"); goto Error; } + } + + for (j=0; j < 4; j++) { + if (CheckColorant[j] != Colorant[j]) { rc = 0; Fail("Invalid Colorant"); goto Error; }; + } + + if (strcmp(Name, CheckName) != 0) {rc = 0; Fail("Invalid Name"); goto Error; }; + } + + h = cmsOpenProfileFromFileTHR(DbgThread(), "namedcol.icc", "w"); + if (h == NULL) return 0; + if (!cmsWriteTag(h, cmsSigNamedColor2Tag, nc)) return 0; + cmsCloseProfile(h); + cmsFreeNamedColorList(nc); + nc = NULL; + + h = cmsOpenProfileFromFileTHR(DbgThread(), "namedcol.icc", "r"); + nc2 = cmsReadTag(h, cmsSigNamedColor2Tag); + + if (cmsNamedColorCount(nc2) != 4096) { rc = 0; Fail("Invalid count"); goto Error; } + + i = cmsNamedColorIndex(nc2, "#123"); + if (i != 123) { rc = 0; Fail("Invalid index"); goto Error; } + + + for (i=0; i < 4096; i++) { + + CheckPCS[0] = CheckPCS[1] = CheckPCS[2] = (cmsUInt16Number) i; + CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (4096 - i); + + sprintf(CheckName, "#%d", i); + if (!cmsNamedColorInfo(nc2, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; } + + + for (j=0; j < 3; j++) { + if (CheckPCS[j] != PCS[j]) { rc = 0; Fail("Invalid PCS"); goto Error; } + } + + for (j=0; j < 4; j++) { + if (CheckColorant[j] != Colorant[j]) { rc = 0; Fail("Invalid Colorant"); goto Error; }; + } + + if (strcmp(Name, CheckName) != 0) {rc = 0; Fail("Invalid Name"); goto Error; }; + } + + cmsCloseProfile(h); + remove("namedcol.icc"); + +Error: + if (nc != NULL) cmsFreeNamedColorList(nc); + return rc; +} + + + +// ---------------------------------------------------------------------------------------------------------- + +// Formatters + +static cmsBool FormatterFailed; + +static +void CheckSingleFormatter16(cmsUInt32Number Type, const char* Text) +{ + cmsUInt16Number Values[cmsMAXCHANNELS]; + cmsUInt8Number Buffer[1024]; + cmsFormatter f, b; + cmsInt32Number i, j, nChannels, bytes; + _cmsTRANSFORM info; + + // Already failed? + if (FormatterFailed) return; + + memset(&info, 0, sizeof(info)); + info.OutputFormat = info.InputFormat = Type; + + // Go forth and back + f = _cmsGetFormatter(Type, cmsFormatterInput, 0); + b = _cmsGetFormatter(Type, cmsFormatterOutput, 0); + + if (f.Fmt16 == NULL || b.Fmt16 == NULL) { + Fail("no formatter for %s", Text); + FormatterFailed = TRUE; + + // Useful for debug + f = _cmsGetFormatter(Type, cmsFormatterInput, 0); + b = _cmsGetFormatter(Type, cmsFormatterOutput, 0); + return; + } + + nChannels = T_CHANNELS(Type); + bytes = T_BYTES(Type); + + for (j=0; j < 5; j++) { + + for (i=0; i < nChannels; i++) { + Values[i] = (cmsUInt16Number) (i+j); + // For 8-bit + if (bytes == 1) + Values[i] <<= 8; + } + + b.Fmt16(&info, Values, Buffer, 1); + memset(Values, 0, sizeof(Values)); + f.Fmt16(&info, Values, Buffer, 1); + + for (i=0; i < nChannels; i++) { + if (bytes == 1) + Values[i] >>= 8; + + if (Values[i] != i+j) { + + Fail("%s failed", Text); + FormatterFailed = TRUE; + + // Useful for debug + for (i=0; i < nChannels; i++) { + Values[i] = (cmsUInt16Number) (i+j); + // For 8-bit + if (bytes == 1) + Values[i] <<= 8; + } + + b.Fmt16(&info, Values, Buffer, 1); + f.Fmt16(&info, Values, Buffer, 1); + return; + } + } + } +} + +#define C(a) CheckSingleFormatter16(a, #a) + + +// Check all formatters +static +cmsInt32Number CheckFormatters16(void) +{ + FormatterFailed = FALSE; + + C( TYPE_GRAY_8 ); + C( TYPE_GRAY_8_REV ); + C( TYPE_GRAY_16 ); + C( TYPE_GRAY_16_REV ); + C( TYPE_GRAY_16_SE ); + C( TYPE_GRAYA_8 ); + C( TYPE_GRAYA_16 ); + C( TYPE_GRAYA_16_SE ); + C( TYPE_GRAYA_8_PLANAR ); + C( TYPE_GRAYA_16_PLANAR ); + C( TYPE_RGB_8 ); + C( TYPE_RGB_8_PLANAR ); + C( TYPE_BGR_8 ); + C( TYPE_BGR_8_PLANAR ); + C( TYPE_RGB_16 ); + C( TYPE_RGB_16_PLANAR ); + C( TYPE_RGB_16_SE ); + C( TYPE_BGR_16 ); + C( TYPE_BGR_16_PLANAR ); + C( TYPE_BGR_16_SE ); + C( TYPE_RGBA_8 ); + C( TYPE_RGBA_8_PLANAR ); + C( TYPE_RGBA_16 ); + C( TYPE_RGBA_16_PLANAR ); + C( TYPE_RGBA_16_SE ); + C( TYPE_ARGB_8 ); + C( TYPE_ARGB_16 ); + C( TYPE_ABGR_8 ); + C( TYPE_ABGR_16 ); + C( TYPE_ABGR_16_PLANAR ); + C( TYPE_ABGR_16_SE ); + C( TYPE_BGRA_8 ); + C( TYPE_BGRA_16 ); + C( TYPE_BGRA_16_SE ); + C( TYPE_CMY_8 ); + C( TYPE_CMY_8_PLANAR ); + C( TYPE_CMY_16 ); + C( TYPE_CMY_16_PLANAR ); + C( TYPE_CMY_16_SE ); + C( TYPE_CMYK_8 ); + C( TYPE_CMYKA_8 ); + C( TYPE_CMYK_8_REV ); + C( TYPE_YUVK_8 ); + C( TYPE_CMYK_8_PLANAR ); + C( TYPE_CMYK_16 ); + C( TYPE_CMYK_16_REV ); + C( TYPE_YUVK_16 ); + C( TYPE_CMYK_16_PLANAR ); + C( TYPE_CMYK_16_SE ); + C( TYPE_KYMC_8 ); + C( TYPE_KYMC_16 ); + C( TYPE_KYMC_16_SE ); + C( TYPE_KCMY_8 ); + C( TYPE_KCMY_8_REV ); + C( TYPE_KCMY_16 ); + C( TYPE_KCMY_16_REV ); + C( TYPE_KCMY_16_SE ); + C( TYPE_CMYK5_8 ); + C( TYPE_CMYK5_16 ); + C( TYPE_CMYK5_16_SE ); + C( TYPE_KYMC5_8 ); + C( TYPE_KYMC5_16 ); + C( TYPE_KYMC5_16_SE ); + C( TYPE_CMYK6_8 ); + C( TYPE_CMYK6_8_PLANAR ); + C( TYPE_CMYK6_16 ); + C( TYPE_CMYK6_16_PLANAR ); + C( TYPE_CMYK6_16_SE ); + C( TYPE_CMYK7_8 ); + C( TYPE_CMYK7_16 ); + C( TYPE_CMYK7_16_SE ); + C( TYPE_KYMC7_8 ); + C( TYPE_KYMC7_16 ); + C( TYPE_KYMC7_16_SE ); + C( TYPE_CMYK8_8 ); + C( TYPE_CMYK8_16 ); + C( TYPE_CMYK8_16_SE ); + C( TYPE_KYMC8_8 ); + C( TYPE_KYMC8_16 ); + C( TYPE_KYMC8_16_SE ); + C( TYPE_CMYK9_8 ); + C( TYPE_CMYK9_16 ); + C( TYPE_CMYK9_16_SE ); + C( TYPE_KYMC9_8 ); + C( TYPE_KYMC9_16 ); + C( TYPE_KYMC9_16_SE ); + C( TYPE_CMYK10_8 ); + C( TYPE_CMYK10_16 ); + C( TYPE_CMYK10_16_SE ); + C( TYPE_KYMC10_8 ); + C( TYPE_KYMC10_16 ); + C( TYPE_KYMC10_16_SE ); + C( TYPE_CMYK11_8 ); + C( TYPE_CMYK11_16 ); + C( TYPE_CMYK11_16_SE ); + C( TYPE_KYMC11_8 ); + C( TYPE_KYMC11_16 ); + C( TYPE_KYMC11_16_SE ); + C( TYPE_CMYK12_8 ); + C( TYPE_CMYK12_16 ); + C( TYPE_CMYK12_16_SE ); + C( TYPE_KYMC12_8 ); + C( TYPE_KYMC12_16 ); + C( TYPE_KYMC12_16_SE ); + C( TYPE_XYZ_16 ); + C( TYPE_Lab_8 ); + C( TYPE_ALab_8 ); + C( TYPE_Lab_16 ); + C( TYPE_Yxy_16 ); + C( TYPE_YCbCr_8 ); + C( TYPE_YCbCr_8_PLANAR ); + C( TYPE_YCbCr_16 ); + C( TYPE_YCbCr_16_PLANAR ); + C( TYPE_YCbCr_16_SE ); + C( TYPE_YUV_8 ); + C( TYPE_YUV_8_PLANAR ); + C( TYPE_YUV_16 ); + C( TYPE_YUV_16_PLANAR ); + C( TYPE_YUV_16_SE ); + C( TYPE_HLS_8 ); + C( TYPE_HLS_8_PLANAR ); + C( TYPE_HLS_16 ); + C( TYPE_HLS_16_PLANAR ); + C( TYPE_HLS_16_SE ); + C( TYPE_HSV_8 ); + C( TYPE_HSV_8_PLANAR ); + C( TYPE_HSV_16 ); + C( TYPE_HSV_16_PLANAR ); + C( TYPE_HSV_16_SE ); + + C( TYPE_XYZ_FLT ); + C( TYPE_Lab_FLT ); + C( TYPE_GRAY_FLT ); + C( TYPE_RGB_FLT ); + C( TYPE_CMYK_FLT ); + C( TYPE_XYZA_FLT ); + C( TYPE_LabA_FLT ); + C( TYPE_RGBA_FLT ); + + C( TYPE_XYZ_DBL ); + C( TYPE_Lab_DBL ); + C( TYPE_GRAY_DBL ); + C( TYPE_RGB_DBL ); + C( TYPE_CMYK_DBL ); + + C( TYPE_LabV2_8 ); + C( TYPE_ALabV2_8 ); + C( TYPE_LabV2_16 ); + + return FormatterFailed == 0 ? 1 : 0; +} +#undef C + +static +void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text) +{ + cmsFloat32Number Values[cmsMAXCHANNELS]; + cmsUInt8Number Buffer[1024]; + cmsFormatter f, b; + cmsInt32Number i, j, nChannels; + _cmsTRANSFORM info; + + // Already failed? + if (FormatterFailed) return; + + memset(&info, 0, sizeof(info)); + info.OutputFormat = info.InputFormat = Type; + + // Go forth and back + f = _cmsGetFormatter(Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT); + b = _cmsGetFormatter(Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT); + + if (f.FmtFloat == NULL || b.FmtFloat == NULL) { + Fail("no formatter for %s", Text); + FormatterFailed = TRUE; + + // Useful for debug + f = _cmsGetFormatter(Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT); + b = _cmsGetFormatter(Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT); + return; + } + + nChannels = T_CHANNELS(Type); + + for (j=0; j < 5; j++) { + + for (i=0; i < nChannels; i++) { + Values[i] = (cmsFloat32Number) (i+j); + } + + b.FmtFloat(&info, Values, Buffer, 1); + memset(Values, 0, sizeof(Values)); + f.FmtFloat(&info, Values, Buffer, 1); + + for (i=0; i < nChannels; i++) { + + cmsFloat64Number delta = fabs(Values[i] - ( i+j)); + + if (delta > 0.000000001) { + + Fail("%s failed", Text); + FormatterFailed = TRUE; + + // Useful for debug + for (i=0; i < nChannels; i++) { + Values[i] = (cmsFloat32Number) (i+j); + } + + b.FmtFloat(&info, Values, Buffer, 1); + f.FmtFloat(&info, Values, Buffer, 1); + return; + } + } + } +} + +#define C(a) CheckSingleFormatterFloat(a, #a) + +static +cmsInt32Number CheckFormattersFloat(void) +{ + FormatterFailed = FALSE; + + C( TYPE_XYZ_FLT ); + C( TYPE_Lab_FLT ); + C( TYPE_GRAY_FLT ); + C( TYPE_RGB_FLT ); + C( TYPE_CMYK_FLT ); + + // User + C( TYPE_XYZA_FLT ); + C( TYPE_LabA_FLT ); + C( TYPE_RGBA_FLT ); + + C( TYPE_XYZ_DBL ); + C( TYPE_Lab_DBL ); + C( TYPE_GRAY_DBL ); + C( TYPE_RGB_DBL ); + C( TYPE_CMYK_DBL ); + + return FormatterFailed == 0 ? 1 : 0; +} +#undef C + + +static +cmsInt32Number CheckOneRGB(cmsHTRANSFORM xform, cmsUInt32Number R, cmsUInt32Number G, cmsUInt32Number B, cmsUInt32Number Ro, cmsUInt32Number Go, cmsUInt32Number Bo) +{ + cmsUInt16Number RGB[3]; + cmsUInt16Number Out[3]; + + RGB[0] = R; + RGB[1] = G; + RGB[2] = B; + + cmsDoTransform(xform, RGB, Out, 1); + + return IsGoodWord("R", Ro , Out[0]) && + IsGoodWord("G", Go , Out[1]) && + IsGoodWord("B", Bo , Out[2]); +} + +// Check known values going from sRGB to XYZ +static +cmsInt32Number CheckOneRGB_double(cmsHTRANSFORM xform, cmsFloat64Number R, cmsFloat64Number G, cmsFloat64Number B, cmsFloat64Number Ro, cmsFloat64Number Go, cmsFloat64Number Bo) +{ + cmsFloat64Number RGB[3]; + cmsFloat64Number Out[3]; + + RGB[0] = R; + RGB[1] = G; + RGB[2] = B; + + cmsDoTransform(xform, RGB, Out, 1); + + return IsGoodVal("R", Ro , Out[0], 0.01) && + IsGoodVal("G", Go , Out[1], 0.01) && + IsGoodVal("B", Bo , Out[2], 0.01); +} + + +static +cmsInt32Number CheckChangeBufferFormat(void) +{ + cmsHPROFILE hsRGB = cmsCreate_sRGBProfile(); + cmsHTRANSFORM xform; + + + xform = cmsCreateTransform(hsRGB, TYPE_RGB_16, hsRGB, TYPE_RGB_16, INTENT_PERCEPTUAL, 0); + cmsCloseProfile(hsRGB); + if (xform == NULL) return 0; + + + if (!CheckOneRGB(xform, 0, 0, 0, 0, 0, 0)) return 0; + if (!CheckOneRGB(xform, 120, 0, 0, 120, 0, 0)) return 0; + if (!CheckOneRGB(xform, 0, 222, 255, 0, 222, 255)) return 0; + + + if (!cmsChangeBuffersFormat(xform, TYPE_BGR_16, TYPE_RGB_16)) return 0; + + if (!CheckOneRGB(xform, 0, 0, 123, 123, 0, 0)) return 0; + if (!CheckOneRGB(xform, 154, 234, 0, 0, 234, 154)) return 0; + + if (!cmsChangeBuffersFormat(xform, TYPE_RGB_DBL, TYPE_RGB_DBL)) return 0; + + if (!CheckOneRGB_double(xform, 0.20, 0, 0, 0.20, 0, 0)) return 0; + if (!CheckOneRGB_double(xform, 0, 0.9, 1, 0, 0.9, 1)) return 0; + + cmsDeleteTransform(xform); + +return 1; +} + + +// Write tag testbed ---------------------------------------------------------------------------------------- + +static +cmsInt32Number CheckXYZ(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsCIEXYZ XYZ, *Pt; + + + switch (Pass) { + + case 1: + + XYZ.X = 1.0; XYZ.Y = 1.1; XYZ.Z = 1.2; + return cmsWriteTag(hProfile, tag, &XYZ); + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + return IsGoodFixed15_16("X", 1.0, Pt ->X) && + IsGoodFixed15_16("Y", 1.1, Pt->Y) && + IsGoodFixed15_16("Z", 1.2, Pt -> Z); + + default: + return 0; + } +} + + +static +cmsInt32Number CheckGamma(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsToneCurve *g, *Pt; + cmsInt32Number rc; + + switch (Pass) { + + case 1: + + g = cmsBuildGamma(DbgThread(), 1.0); + rc = cmsWriteTag(hProfile, tag, g); + cmsFreeToneCurve(g); + return rc; + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + return cmsIsToneCurveLinear(Pt); + + default: + return 0; + } +} + +static +cmsInt32Number CheckText(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsMLU *m, *Pt; + cmsInt32Number rc; + char Buffer[256]; + + + switch (Pass) { + + case 1: + m = cmsMLUalloc(DbgThread(), 0); + cmsMLUsetASCII(m, cmsNoLanguage, cmsNoCountry, "Test test"); + rc = cmsWriteTag(hProfile, tag, m); + cmsMLUfree(m); + return rc; + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + cmsMLUgetASCII(Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256); + return strcmp(Buffer, "Test test") == 0; + + default: + return 0; + } +} + +static +cmsInt32Number CheckData(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsICCData *Pt; + cmsICCData d = { 1, 0, { '?' }}; + cmsInt32Number rc; + + + switch (Pass) { + + case 1: + rc = cmsWriteTag(hProfile, tag, &d); + return rc; + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + return (Pt ->data[0] == '?') && (Pt ->flag == 0) && (Pt ->len == 1); + + default: + return 0; + } +} + + +static +cmsInt32Number CheckSignature(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsTagSignature *Pt, Holder; + + switch (Pass) { + + case 1: + Holder = cmsSigPerceptualReferenceMediumGamut; + return cmsWriteTag(hProfile, tag, &Holder); + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + return *Pt == cmsSigPerceptualReferenceMediumGamut; + + default: + return 0; + } +} + + +static +cmsInt32Number CheckDateTime(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + struct tm *Pt, Holder; + + switch (Pass) { + + case 1: + + Holder.tm_hour = 1; + Holder.tm_min = 2; + Holder.tm_sec = 3; + Holder.tm_mday = 4; + Holder.tm_mon = 5; + Holder.tm_year = 2009 - 1900; + return cmsWriteTag(hProfile, tag, &Holder); + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + + return (Pt ->tm_hour == 1 && + Pt ->tm_min == 2 && + Pt ->tm_sec == 3 && + Pt ->tm_mday == 4 && + Pt ->tm_mon == 5 && + Pt ->tm_year == 2009 - 1900); + + default: + return 0; + } + +} + + +static +cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag, cmsInt32Number max_check, cmsBool colorant_check) +{ + cmsNAMEDCOLORLIST* nc; + cmsInt32Number i, j, rc; + char Name[255]; + cmsUInt16Number PCS[3]; + cmsUInt16Number Colorant[cmsMAXCHANNELS]; + char CheckName[255]; + cmsUInt16Number CheckPCS[3]; + cmsUInt16Number CheckColorant[cmsMAXCHANNELS]; + + switch (Pass) { + + case 1: + + nc = cmsAllocNamedColorList(DbgThread(), 0, 4, "prefix", "suffix"); + if (nc == NULL) return 0; + + for (i=0; i < max_check; i++) { + + PCS[0] = PCS[1] = PCS[2] = (cmsUInt16Number) i; + Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) (max_check - i); + + sprintf(Name, "#%d", i); + if (!cmsAppendNamedColor(nc, Name, PCS, Colorant)) { Fail("Couldn't append named color"); return 0; } + } + + rc = cmsWriteTag(hProfile, tag, nc); + cmsFreeNamedColorList(nc); + return rc; + + case 2: + + nc = cmsReadTag(hProfile, tag); + if (nc == NULL) return 0; + + for (i=0; i < max_check; i++) { + + CheckPCS[0] = CheckPCS[1] = CheckPCS[2] = (cmsUInt16Number) i; + CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (max_check - i); + + sprintf(CheckName, "#%d", i); + if (!cmsNamedColorInfo(nc, i, Name, NULL, NULL, PCS, Colorant)) { Fail("Invalid string"); return 0; } + + + for (j=0; j < 3; j++) { + if (CheckPCS[j] != PCS[j]) { Fail("Invalid PCS"); return 0; } + } + + // This is only used on named color list + if (colorant_check) { + + for (j=0; j < 4; j++) { + if (CheckColorant[j] != Colorant[j]) { Fail("Invalid Colorant"); return 0; }; + } + } + + if (strcmp(Name, CheckName) != 0) { Fail("Invalid Name"); return 0; }; + } + return 1; + + + default: return 0; + } +} + + +static +cmsInt32Number CheckLUT(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsPipeline* Lut, *Pt; + cmsInt32Number rc; + + + switch (Pass) { + + case 1: + + Lut = cmsPipelineAlloc(DbgThread(), 3, 3); + if (Lut == NULL) return 0; + + // Create an identity LUT + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(DbgThread(), 3)); + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocIdentityCLut(DbgThread(), 3)); + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocIdentityCurves(DbgThread(), 3)); + + rc = cmsWriteTag(hProfile, tag, Lut); + cmsPipelineFree(Lut); + return rc; + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + + // Transform values, check for identity + return Check16LUT(Pt); + + default: + return 0; + } +} + +static +cmsInt32Number CheckCHAD(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsFloat64Number *Pt; + cmsFloat64Number CHAD[] = { 0, .1, .2, .3, .4, .5, .6, .7, .8 }; + cmsInt32Number i; + + switch (Pass) { + + case 1: + return cmsWriteTag(hProfile, tag, CHAD); + + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + + for (i=0; i < 9; i++) { + if (!IsGoodFixed15_16("CHAD", Pt[i], CHAD[i])) return 0; + } + + return 1; + + default: + return 0; + } +} + +static +cmsInt32Number CheckChromaticity(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsCIExyYTRIPLE *Pt, c = { {0, .1, 1 }, { .3, .4, 1 }, { .6, .7, 1 }}; + + switch (Pass) { + + case 1: + return cmsWriteTag(hProfile, tag, &c); + + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + + if (!IsGoodFixed15_16("xyY", Pt ->Red.x, c.Red.x)) return 0; + if (!IsGoodFixed15_16("xyY", Pt ->Red.y, c.Red.y)) return 0; + if (!IsGoodFixed15_16("xyY", Pt ->Green.x, c.Green.x)) return 0; + if (!IsGoodFixed15_16("xyY", Pt ->Green.y, c.Green.y)) return 0; + if (!IsGoodFixed15_16("xyY", Pt ->Blue.x, c.Blue.x)) return 0; + if (!IsGoodFixed15_16("xyY", Pt ->Blue.y, c.Blue.y)) return 0; + return 1; + + default: + return 0; + } +} + + +static +cmsInt32Number CheckColorantOrder(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsUInt8Number *Pt, c[cmsMAXCHANNELS]; + cmsInt32Number i; + + switch (Pass) { + + case 1: + for (i=0; i < cmsMAXCHANNELS; i++) c[i] = (cmsUInt8Number) (cmsMAXCHANNELS - i - 1); + return cmsWriteTag(hProfile, tag, c); + + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + + for (i=0; i < cmsMAXCHANNELS; i++) { + if (Pt[i] != ( cmsMAXCHANNELS - i - 1 )) return 0; + } + return 1; + + default: + return 0; + } +} + +static +cmsInt32Number CheckMeasurement(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsICCMeasurementConditions *Pt, m; + + switch (Pass) { + + case 1: + m.Backing.X = 0.1; + m.Backing.Y = 0.2; + m.Backing.Z = 0.3; + m.Flare = 1.0; + m.Geometry = 1; + m.IlluminantType = cmsILLUMINANT_TYPE_D50; + m.Observer = 1; + return cmsWriteTag(hProfile, tag, &m); + + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + + if (!IsGoodFixed15_16("Backing", Pt ->Backing.X, 0.1)) return 0; + if (!IsGoodFixed15_16("Backing", Pt ->Backing.Y, 0.2)) return 0; + if (!IsGoodFixed15_16("Backing", Pt ->Backing.Z, 0.3)) return 0; + if (!IsGoodFixed15_16("Flare", Pt ->Flare, 1.0)) return 0; + + if (Pt ->Geometry != 1) return 0; + if (Pt ->IlluminantType != cmsILLUMINANT_TYPE_D50) return 0; + if (Pt ->Observer != 1) return 0; + return 1; + + default: + return 0; + } +} + + +static +cmsInt32Number CheckUcrBg(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsUcrBg *Pt, m; + cmsInt32Number rc; + char Buffer[256]; + + switch (Pass) { + + case 1: + m.Ucr = cmsBuildGamma(DbgThread(), 2.4); + m.Bg = cmsBuildGamma(DbgThread(), -2.2); + m.Desc = cmsMLUalloc(DbgThread(), 1); + cmsMLUsetASCII(m.Desc, cmsNoLanguage, cmsNoCountry, "test UCR/BG"); + rc = cmsWriteTag(hProfile, tag, &m); + cmsMLUfree(m.Desc); + cmsFreeToneCurve(m.Bg); + cmsFreeToneCurve(m.Ucr); + return rc; + + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + + cmsMLUgetASCII(Pt ->Desc, cmsNoLanguage, cmsNoCountry, Buffer, 256); + if (strcmp(Buffer, "test UCR/BG") != 0) return 0; + return 1; + + default: + return 0; + } +} + + +static +cmsInt32Number CheckCRDinfo(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsMLU *mlu; + char Buffer[256]; + cmsInt32Number rc; + + switch (Pass) { + + case 1: + mlu = cmsMLUalloc(DbgThread(), 5); + + cmsMLUsetWide(mlu, "PS", "nm", L"test postscript"); + cmsMLUsetWide(mlu, "PS", "#0", L"perceptual"); + cmsMLUsetWide(mlu, "PS", "#1", L"relative_colorimetric"); + cmsMLUsetWide(mlu, "PS", "#2", L"saturation"); + cmsMLUsetWide(mlu, "PS", "#3", L"absolute_colorimetric"); + rc = cmsWriteTag(hProfile, tag, mlu); + cmsMLUfree(mlu); + return rc; + + + case 2: + mlu = (cmsMLU*) cmsReadTag(hProfile, tag); + if (mlu == NULL) return 0; + + + + cmsMLUgetASCII(mlu, "PS", "nm", Buffer, 256); + if (strcmp(Buffer, "test postscript") != 0) return 0; + + + cmsMLUgetASCII(mlu, "PS", "#0", Buffer, 256); + if (strcmp(Buffer, "perceptual") != 0) return 0; + + + cmsMLUgetASCII(mlu, "PS", "#1", Buffer, 256); + if (strcmp(Buffer, "relative_colorimetric") != 0) return 0; + + + cmsMLUgetASCII(mlu, "PS", "#2", Buffer, 256); + if (strcmp(Buffer, "saturation") != 0) return 0; + + + cmsMLUgetASCII(mlu, "PS", "#3", Buffer, 256); + if (strcmp(Buffer, "absolute_colorimetric") != 0) return 0; + return 1; + + default: + return 0; + } +} + + +static +cmsToneCurve *CreateSegmentedCurve(void) +{ + cmsCurveSegment Seg[3]; + cmsFloat32Number Sampled[2] = { 0, 1}; + + Seg[0].Type = 6; + Seg[0].Params[0] = 1; + Seg[0].Params[1] = 0; + Seg[0].Params[2] = 0; + Seg[0].Params[3] = 0; + Seg[0].x0 = -1E22F; + Seg[0].x1 = 0; + + Seg[1].Type = 0; + Seg[1].nGridPoints = 2; + Seg[1].SampledPoints = Sampled; + Seg[1].x0 = 0; + Seg[1].x1 = 1; + + Seg[2].Type = 6; + Seg[2].Params[0] = 1; + Seg[2].Params[1] = 0; + Seg[2].Params[2] = 0; + Seg[2].Params[3] = 0; + Seg[2].x0 = 1; + Seg[2].x1 = 1E22F; + + return cmsBuildSegmentedToneCurve(DbgThread(), 3, Seg); +} + + +static +cmsInt32Number CheckMPE(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsPipeline* Lut, *Pt; + cmsToneCurve* G[3]; + cmsInt32Number rc; + + switch (Pass) { + + case 1: + + Lut = cmsPipelineAlloc(DbgThread(), 3, 3); + + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocLabV2ToV4(DbgThread())); + cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV4ToV2(DbgThread())); + AddIdentityCLUTfloat(Lut); + + G[0] = G[1] = G[2] = CreateSegmentedCurve(); + cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(DbgThread(), 3, G)); + cmsFreeToneCurve(G[0]); + + rc = cmsWriteTag(hProfile, tag, Lut); + cmsPipelineFree(Lut); + return rc; + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + return CheckFloatLUT(Pt); + + default: + return 0; + } +} + + +static +cmsInt32Number CheckScreening(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +{ + cmsScreening *Pt, sc; + cmsInt32Number rc; + + switch (Pass) { + + case 1: + + sc.Flag = 0; + sc.nChannels = 1; + sc.Channels[0].Frequency = 2.0; + sc.Channels[0].ScreenAngle = 3.0; + sc.Channels[0].SpotShape = cmsSPOT_ELLIPSE; + + rc = cmsWriteTag(hProfile, tag, &sc); + return rc; + + + case 2: + Pt = cmsReadTag(hProfile, tag); + if (Pt == NULL) return 0; + + if (Pt ->nChannels != 1) return 0; + if (Pt ->Flag != 0) return 0; + if (!IsGoodFixed15_16("Freq", Pt ->Channels[0].Frequency, 2.0)) return 0; + if (!IsGoodFixed15_16("Angle", Pt ->Channels[0].ScreenAngle, 3.0)) return 0; + if (Pt ->Channels[0].SpotShape != cmsSPOT_ELLIPSE) return 0; + return 1; + + default: + return 0; + } +} + + +static +cmsBool CheckOneStr(cmsMLU* mlu, cmsInt32Number n) +{ + char Buffer[256], Buffer2[256]; + + + cmsMLUgetASCII(mlu, "en", "US", Buffer, 255); + sprintf(Buffer2, "Hello, world %d", n); + if (strcmp(Buffer, Buffer2) != 0) return FALSE; + + + cmsMLUgetASCII(mlu, "es", "ES", Buffer, 255); + sprintf(Buffer2, "Hola, mundo %d", n); + if (strcmp(Buffer, Buffer2) != 0) return FALSE; + + return TRUE; +} + + +static +void SetOneStr(cmsMLU** mlu, wchar_t* s1, wchar_t* s2) +{ + *mlu = cmsMLUalloc(DbgThread(), 0); + cmsMLUsetWide(*mlu, "en", "US", s1); + cmsMLUsetWide(*mlu, "es", "ES", s2); +} + + +static +cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfile) +{ + cmsSEQ* s; + cmsInt32Number i; + + switch (Pass) { + + case 1: + + s = cmsAllocProfileSequenceDescription(DbgThread(), 3); + if (s == NULL) return 0; + + SetOneStr(&s -> seq[0].Manufacturer, L"Hello, world 0", L"Hola, mundo 0"); + SetOneStr(&s -> seq[0].Model, L"Hello, world 0", L"Hola, mundo 0"); + SetOneStr(&s -> seq[1].Manufacturer, L"Hello, world 1", L"Hola, mundo 1"); + SetOneStr(&s -> seq[1].Model, L"Hello, world 1", L"Hola, mundo 1"); + SetOneStr(&s -> seq[2].Manufacturer, L"Hello, world 2", L"Hola, mundo 2"); + SetOneStr(&s -> seq[2].Model, L"Hello, world 2", L"Hola, mundo 2"); + + +#ifdef CMS_DONT_USE_INT64 + s ->seq[0].attributes[0] = cmsTransparency|cmsMatte; + s ->seq[0].attributes[1] = 0; +#else + s ->seq[0].attributes = cmsTransparency|cmsMatte; +#endif + +#ifdef CMS_DONT_USE_INT64 + s ->seq[1].attributes[0] = cmsReflective|cmsMatte; + s ->seq[1].attributes[1] = 0; +#else + s ->seq[1].attributes = cmsReflective|cmsMatte; +#endif + +#ifdef CMS_DONT_USE_INT64 + s ->seq[2].attributes[0] = cmsTransparency|cmsGlossy; + s ->seq[2].attributes[1] = 0; +#else + s ->seq[2].attributes = cmsTransparency|cmsGlossy; +#endif + + if (!cmsWriteTag(hProfile, cmsSigProfileSequenceDescTag, s)) return 0; + cmsFreeProfileSequenceDescription(s); + return 1; + + case 2: + + s = cmsReadTag(hProfile, cmsSigProfileSequenceDescTag); + if (s == NULL) return 0; + + if (s ->n != 3) return 0; + +#ifdef CMS_DONT_USE_INT64 + if (s ->seq[0].attributes[0] != (cmsTransparency|cmsMatte)) return 0; + if (s ->seq[0].attributes[1] != 0) return 0; +#else + if (s ->seq[0].attributes != (cmsTransparency|cmsMatte)) return 0; +#endif + +#ifdef CMS_DONT_USE_INT64 + if (s ->seq[1].attributes[0] != (cmsReflective|cmsMatte)) return 0; + if (s ->seq[1].attributes[1] != 0) return 0; +#else + if (s ->seq[1].attributes != (cmsReflective|cmsMatte)) return 0; +#endif + +#ifdef CMS_DONT_USE_INT64 + if (s ->seq[2].attributes[0] != (cmsTransparency|cmsGlossy)) return 0; + if (s ->seq[2].attributes[1] != 0) return 0; +#else + if (s ->seq[2].attributes != (cmsTransparency|cmsGlossy)) return 0; +#endif + + // Check MLU + for (i=0; i < 3; i++) { + + if (!CheckOneStr(s -> seq[i].Manufacturer, i)) return 0; + if (!CheckOneStr(s -> seq[i].Model, i)) return 0; + } + return 1; + + default: + return 0; + } +} + + +static +cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProfile) +{ + cmsSEQ* s; + cmsInt32Number i; + + switch (Pass) { + + case 1: + + s = cmsAllocProfileSequenceDescription(DbgThread(), 3); + if (s == NULL) return 0; + + memcpy(s ->seq[0].ProfileID.ID8, "0123456789ABCDEF", 16); + memcpy(s ->seq[1].ProfileID.ID8, "1111111111111111", 16); + memcpy(s ->seq[2].ProfileID.ID8, "2222222222222222", 16); + + + SetOneStr(&s -> seq[0].Description, L"Hello, world 0", L"Hola, mundo 0"); + SetOneStr(&s -> seq[1].Description, L"Hello, world 1", L"Hola, mundo 1"); + SetOneStr(&s -> seq[2].Description, L"Hello, world 2", L"Hola, mundo 2"); + + if (!cmsWriteTag(hProfile, cmsSigProfileSequenceIdTag, s)) return 0; + cmsFreeProfileSequenceDescription(s); + return 1; + + case 2: + + s = cmsReadTag(hProfile, cmsSigProfileSequenceIdTag); + if (s == NULL) return 0; + + if (s ->n != 3) return 0; + + if (memcmp(s ->seq[0].ProfileID.ID8, "0123456789ABCDEF", 16) != 0) return 0; + if (memcmp(s ->seq[1].ProfileID.ID8, "1111111111111111", 16) != 0) return 0; + if (memcmp(s ->seq[2].ProfileID.ID8, "2222222222222222", 16) != 0) return 0; + + for (i=0; i < 3; i++) { + + if (!CheckOneStr(s -> seq[i].Description, i)) return 0; + } + + return 1; + + default: + return 0; + } +} + + +static +cmsInt32Number CheckICCViewingConditions(cmsInt32Number Pass, cmsHPROFILE hProfile) +{ + cmsICCViewingConditions* v; + cmsICCViewingConditions s; + + switch (Pass) { + + case 1: + s.IlluminantType = 1; + s.IlluminantXYZ.X = 0.1; + s.IlluminantXYZ.Y = 0.2; + s.IlluminantXYZ.Z = 0.3; + s.SurroundXYZ.X = 0.4; + s.SurroundXYZ.Y = 0.5; + s.SurroundXYZ.Z = 0.6; + + if (!cmsWriteTag(hProfile, cmsSigViewingConditionsTag, &s)) return 0; + return 1; + + case 2: + v = cmsReadTag(hProfile, cmsSigViewingConditionsTag); + if (v == NULL) return 0; + + if (v ->IlluminantType != 1) return 0; + if (!IsGoodVal("IlluminantXYZ.X", v ->IlluminantXYZ.X, 0.1, 0.001)) return 0; + if (!IsGoodVal("IlluminantXYZ.Y", v ->IlluminantXYZ.Y, 0.2, 0.001)) return 0; + if (!IsGoodVal("IlluminantXYZ.Z", v ->IlluminantXYZ.Z, 0.3, 0.001)) return 0; + + if (!IsGoodVal("SurroundXYZ.X", v ->SurroundXYZ.X, 0.4, 0.001)) return 0; + if (!IsGoodVal("SurroundXYZ.Y", v ->SurroundXYZ.Y, 0.5, 0.001)) return 0; + if (!IsGoodVal("SurroundXYZ.Z", v ->SurroundXYZ.Z, 0.6, 0.001)) return 0; + + return 1; + + default: + return 0; + } + +} + + +static +cmsInt32Number CheckVCGT(cmsInt32Number Pass, cmsHPROFILE hProfile) +{ + cmsToneCurve* Curves[3]; + cmsToneCurve** PtrCurve; + + switch (Pass) { + + case 1: + Curves[0] = cmsBuildGamma(DbgThread(), 1.1); + Curves[1] = cmsBuildGamma(DbgThread(), 2.2); + Curves[2] = cmsBuildGamma(DbgThread(), 3.4); + + if (!cmsWriteTag(hProfile, cmsSigVcgtTag, Curves)) return 0; + + cmsFreeToneCurveTriple(Curves); + return 1; + + + case 2: + + PtrCurve = cmsReadTag(hProfile, cmsSigVcgtTag); + if (PtrCurve == NULL) return 0; + if (!IsGoodVal("VCGT R", cmsEstimateGamma(PtrCurve[0], 0.01), 1.1, 0.001)) return 0; + if (!IsGoodVal("VCGT G", cmsEstimateGamma(PtrCurve[1], 0.01), 2.2, 0.001)) return 0; + if (!IsGoodVal("VCGT B", cmsEstimateGamma(PtrCurve[2], 0.01), 3.4, 0.001)) return 0; + return 1; + + default:; + } + + return 0; +} + + +// Only one of the two following may be used, as they share the same tag +static +cmsInt32Number CheckDictionary16(cmsInt32Number Pass, cmsHPROFILE hProfile) +{ + cmsHANDLE hDict; + const cmsDICTentry* e; + switch (Pass) { + + case 1: + hDict = cmsDictAlloc(DbgThread()); + cmsDictAddEntry(hDict, L"Name0", NULL, NULL, NULL); + cmsDictAddEntry(hDict, L"Name1", L"", NULL, NULL); + cmsDictAddEntry(hDict, L"Name", L"String", NULL, NULL); + cmsDictAddEntry(hDict, L"Name2", L"12", NULL, NULL); + if (!cmsWriteTag(hProfile, cmsSigMetaTag, hDict)) return 0; + cmsDictFree(hDict); + return 1; + + + case 2: + + hDict = cmsReadTag(hProfile, cmsSigMetaTag); + if (hDict == NULL) return 0; + e = cmsDictGetEntryList(hDict); + if (memcmp(e ->Name, L"Name2", sizeof(wchar_t) * 5) != 0) return 0; + if (memcmp(e ->Value, L"12", sizeof(wchar_t) * 2) != 0) return 0; + e = cmsDictNextEntry(e); + if (memcmp(e ->Name, L"Name", sizeof(wchar_t) * 4) != 0) return 0; + if (memcmp(e ->Value, L"String", sizeof(wchar_t) * 5) != 0) return 0; + e = cmsDictNextEntry(e); + if (memcmp(e ->Name, L"Name1", sizeof(wchar_t) *5) != 0) return 0; + if (e ->Value == NULL) return 0; + if (*e->Value != 0) return 0; + e = cmsDictNextEntry(e); + if (memcmp(e ->Name, L"Name0", sizeof(wchar_t) * 5) != 0) return 0; + if (e ->Value != NULL) return 0; + return 1; + + + default:; + } + + return 0; +} + + + +static +cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile) +{ + cmsHANDLE hDict; + const cmsDICTentry* e; + cmsMLU* DisplayName; + char Buffer[256]; + cmsInt32Number rc = 1; + + switch (Pass) { + + case 1: + hDict = cmsDictAlloc(DbgThread()); + + DisplayName = cmsMLUalloc(DbgThread(), 0); + + cmsMLUsetWide(DisplayName, "en", "US", L"Hello, world"); + cmsMLUsetWide(DisplayName, "es", "ES", L"Hola, mundo"); + cmsMLUsetWide(DisplayName, "fr", "FR", L"Bonjour, le monde"); + cmsMLUsetWide(DisplayName, "ca", "CA", L"Hola, mon"); + + cmsDictAddEntry(hDict, L"Name", L"String", DisplayName, NULL); + cmsMLUfree(DisplayName); + + cmsDictAddEntry(hDict, L"Name2", L"12", NULL, NULL); + if (!cmsWriteTag(hProfile, cmsSigMetaTag, hDict)) return 0; + cmsDictFree(hDict); + + return 1; + + + case 2: + + hDict = cmsReadTag(hProfile, cmsSigMetaTag); + if (hDict == NULL) return 0; + + e = cmsDictGetEntryList(hDict); + if (memcmp(e ->Name, L"Name2", sizeof(wchar_t) * 5) != 0) return 0; + if (memcmp(e ->Value, L"12", sizeof(wchar_t) * 2) != 0) return 0; + e = cmsDictNextEntry(e); + if (memcmp(e ->Name, L"Name", sizeof(wchar_t) * 4) != 0) return 0; + if (memcmp(e ->Value, L"String", sizeof(wchar_t) * 5) != 0) return 0; + + cmsMLUgetASCII(e->DisplayName, "en", "US", Buffer, 256); + if (strcmp(Buffer, "Hello, world") != 0) rc = 0; + + + cmsMLUgetASCII(e->DisplayName, "es", "ES", Buffer, 256); + if (strcmp(Buffer, "Hola, mundo") != 0) rc = 0; + + + cmsMLUgetASCII(e->DisplayName, "fr", "FR", Buffer, 256); + if (strcmp(Buffer, "Bonjour, le monde") != 0) rc = 0; + + + cmsMLUgetASCII(e->DisplayName, "ca", "CA", Buffer, 256); + if (strcmp(Buffer, "Hola, mon") != 0) rc = 0; + + if (rc == 0) + Fail("Unexpected string '%s'", Buffer); + return 1; + + default:; + } + + return 0; +} + +static +cmsInt32Number CheckRAWtags(cmsInt32Number Pass, cmsHPROFILE hProfile) +{ + char Buffer[7]; + + switch (Pass) { + + case 1: + return cmsWriteRawTag(hProfile, 0x31323334, "data123", 7); + + case 2: + if (!cmsReadRawTag(hProfile, 0x31323334, Buffer, 7)) return 0; + + if (strncmp(Buffer, "data123", 7) != 0) return 0; + return 1; + + default: + return 0; + } +} + + +// This is a very big test that checks every single tag +static +cmsInt32Number CheckProfileCreation(void) +{ + cmsHPROFILE h; + cmsInt32Number Pass; + + h = cmsCreateProfilePlaceholder(DbgThread()); + if (h == NULL) return 0; + + cmsSetProfileVersion(h, 4.3); + if (cmsGetTagCount(h) != 0) { Fail("Empty profile with nonzero number of tags"); return 0; } + if (cmsIsTag(h, cmsSigAToB0Tag)) { Fail("Found a tag in an empty profile"); return 0; } + + cmsSetColorSpace(h, cmsSigRgbData); + if (cmsGetColorSpace(h) != cmsSigRgbData) { Fail("Unable to set colorspace"); return 0; } + + cmsSetPCS(h, cmsSigLabData); + if (cmsGetPCS(h) != cmsSigLabData) { Fail("Unable to set colorspace"); return 0; } + + cmsSetDeviceClass(h, cmsSigDisplayClass); + if (cmsGetDeviceClass(h) != cmsSigDisplayClass) { Fail("Unable to set deviceclass"); return 0; } + + cmsSetHeaderRenderingIntent(h, INTENT_SATURATION); + if (cmsGetHeaderRenderingIntent(h) != INTENT_SATURATION) { Fail("Unable to set rendering intent"); return 0; } + + for (Pass = 1; Pass <= 2; Pass++) { + + SubTest("Tags holding XYZ"); + + if (!CheckXYZ(Pass, h, cmsSigBlueColorantTag)) return 0; + if (!CheckXYZ(Pass, h, cmsSigGreenColorantTag)) return 0; + if (!CheckXYZ(Pass, h, cmsSigRedColorantTag)) return 0; + if (!CheckXYZ(Pass, h, cmsSigMediaBlackPointTag)) return 0; + if (!CheckXYZ(Pass, h, cmsSigMediaWhitePointTag)) return 0; + if (!CheckXYZ(Pass, h, cmsSigLuminanceTag)) return 0; + + SubTest("Tags holding curves"); + + if (!CheckGamma(Pass, h, cmsSigBlueTRCTag)) return 0; + if (!CheckGamma(Pass, h, cmsSigGrayTRCTag)) return 0; + if (!CheckGamma(Pass, h, cmsSigGreenTRCTag)) return 0; + if (!CheckGamma(Pass, h, cmsSigRedTRCTag)) return 0; + + SubTest("Tags holding text"); + + if (!CheckText(Pass, h, cmsSigCharTargetTag)) return 0; + if (!CheckText(Pass, h, cmsSigCopyrightTag)) return 0; + if (!CheckText(Pass, h, cmsSigProfileDescriptionTag)) return 0; + if (!CheckText(Pass, h, cmsSigDeviceMfgDescTag)) return 0; + if (!CheckText(Pass, h, cmsSigDeviceModelDescTag)) return 0; + if (!CheckText(Pass, h, cmsSigViewingCondDescTag)) return 0; + if (!CheckText(Pass, h, cmsSigScreeningDescTag)) return 0; + + SubTest("Tags holding cmsICCData"); + + if (!CheckData(Pass, h, cmsSigPs2CRD0Tag)) return 0; + if (!CheckData(Pass, h, cmsSigPs2CRD1Tag)) return 0; + if (!CheckData(Pass, h, cmsSigPs2CRD2Tag)) return 0; + if (!CheckData(Pass, h, cmsSigPs2CRD3Tag)) return 0; + if (!CheckData(Pass, h, cmsSigPs2CSATag)) return 0; + if (!CheckData(Pass, h, cmsSigPs2RenderingIntentTag)) return 0; + + SubTest("Tags holding signatures"); + + if (!CheckSignature(Pass, h, cmsSigColorimetricIntentImageStateTag)) return 0; + if (!CheckSignature(Pass, h, cmsSigPerceptualRenderingIntentGamutTag)) return 0; + if (!CheckSignature(Pass, h, cmsSigSaturationRenderingIntentGamutTag)) return 0; + if (!CheckSignature(Pass, h, cmsSigTechnologyTag)) return 0; + + SubTest("Tags holding date_time"); + + if (!CheckDateTime(Pass, h, cmsSigCalibrationDateTimeTag)) return 0; + if (!CheckDateTime(Pass, h, cmsSigDateTimeTag)) return 0; + + SubTest("Tags holding named color lists"); + + if (!CheckNamedColor(Pass, h, cmsSigColorantTableTag, 15, FALSE)) return 0; + if (!CheckNamedColor(Pass, h, cmsSigColorantTableOutTag, 15, FALSE)) return 0; + if (!CheckNamedColor(Pass, h, cmsSigNamedColor2Tag, 4096, TRUE)) return 0; + + SubTest("Tags holding LUTs"); + + if (!CheckLUT(Pass, h, cmsSigAToB0Tag)) return 0; + if (!CheckLUT(Pass, h, cmsSigAToB1Tag)) return 0; + if (!CheckLUT(Pass, h, cmsSigAToB2Tag)) return 0; + if (!CheckLUT(Pass, h, cmsSigBToA0Tag)) return 0; + if (!CheckLUT(Pass, h, cmsSigBToA1Tag)) return 0; + if (!CheckLUT(Pass, h, cmsSigBToA2Tag)) return 0; + if (!CheckLUT(Pass, h, cmsSigPreview0Tag)) return 0; + if (!CheckLUT(Pass, h, cmsSigPreview1Tag)) return 0; + if (!CheckLUT(Pass, h, cmsSigPreview2Tag)) return 0; + if (!CheckLUT(Pass, h, cmsSigGamutTag)) return 0; + + SubTest("Tags holding CHAD"); + if (!CheckCHAD(Pass, h, cmsSigChromaticAdaptationTag)) return 0; + + SubTest("Tags holding Chromaticity"); + if (!CheckChromaticity(Pass, h, cmsSigChromaticityTag)) return 0; + + SubTest("Tags holding colorant order"); + if (!CheckColorantOrder(Pass, h, cmsSigColorantOrderTag)) return 0; + + SubTest("Tags holding measurement"); + if (!CheckMeasurement(Pass, h, cmsSigMeasurementTag)) return 0; + + SubTest("Tags holding CRD info"); + if (!CheckCRDinfo(Pass, h, cmsSigCrdInfoTag)) return 0; + + SubTest("Tags holding UCR/BG"); + if (!CheckUcrBg(Pass, h, cmsSigUcrBgTag)) return 0; + + SubTest("Tags holding MPE"); + if (!CheckMPE(Pass, h, cmsSigDToB0Tag)) return 0; + if (!CheckMPE(Pass, h, cmsSigDToB1Tag)) return 0; + if (!CheckMPE(Pass, h, cmsSigDToB2Tag)) return 0; + if (!CheckMPE(Pass, h, cmsSigDToB3Tag)) return 0; + if (!CheckMPE(Pass, h, cmsSigBToD0Tag)) return 0; + if (!CheckMPE(Pass, h, cmsSigBToD1Tag)) return 0; + if (!CheckMPE(Pass, h, cmsSigBToD2Tag)) return 0; + if (!CheckMPE(Pass, h, cmsSigBToD3Tag)) return 0; + + SubTest("Tags using screening"); + if (!CheckScreening(Pass, h, cmsSigScreeningTag)) return 0; + + SubTest("Tags holding profile sequence description"); + if (!CheckProfileSequenceTag(Pass, h)) return 0; + if (!CheckProfileSequenceIDTag(Pass, h)) return 0; + + SubTest("Tags holding ICC viewing conditions"); + if (!CheckICCViewingConditions(Pass, h)) return 0; + + + SubTest("VCGT tags"); + if (!CheckVCGT(Pass, h)) return 0; + + SubTest("RAW tags"); + if (!CheckRAWtags(Pass, h)) return 0; + + SubTest("Dictionary meta tags"); + // if (!CheckDictionary16(Pass, h)) return 0; + if (!CheckDictionary24(Pass, h)) return 0; + + if (Pass == 1) { + cmsSaveProfileToFile(h, "alltags.icc"); + cmsCloseProfile(h); + h = cmsOpenProfileFromFileTHR(DbgThread(), "alltags.icc", "r"); + } + + } + + /* + Not implemented (by design): + + cmsSigDataTag = 0x64617461, // 'data' -- Unused + cmsSigDeviceSettingsTag = 0x64657673, // 'devs' -- Unused + cmsSigNamedColorTag = 0x6E636f6C, // 'ncol' -- Don't use this one, deprecated by ICC + cmsSigOutputResponseTag = 0x72657370, // 'resp' -- Possible patent on this + */ + + cmsCloseProfile(h); + remove("alltags.icc"); + return 1; +} + + +// Error reporting ------------------------------------------------------------------------------------------------------- + + +static +void ErrorReportingFunction(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text) +{ + TrappedError = TRUE; + SimultaneousErrors++; + strncpy(ReasonToFailBuffer, Text, TEXT_ERROR_BUFFER_SIZE-1); +} + + +static +cmsInt32Number CheckBadProfiles(void) +{ + cmsHPROFILE h; + + h = cmsOpenProfileFromFileTHR(DbgThread(), "IDoNotExist.icc", "r"); + if (h != NULL) { + cmsCloseProfile(h); + return 0; + } + + h = cmsOpenProfileFromFileTHR(DbgThread(), "IAmIllFormed*.icc", "r"); + if (h != NULL) { + cmsCloseProfile(h); + return 0; + } + + // No profile name given + h = cmsOpenProfileFromFileTHR(DbgThread(), "", "r"); + if (h != NULL) { + cmsCloseProfile(h); + return 0; + } + + h = cmsOpenProfileFromFileTHR(DbgThread(), "..", "r"); + if (h != NULL) { + cmsCloseProfile(h); + return 0; + } + + h = cmsOpenProfileFromFileTHR(DbgThread(), "IHaveBadAccessMode.icc", "@"); + if (h != NULL) { + cmsCloseProfile(h); + return 0; + } + + h = cmsOpenProfileFromFileTHR(DbgThread(), "bad.icc", "r"); + if (h != NULL) { + cmsCloseProfile(h); + return 0; + } + + h = cmsOpenProfileFromFileTHR(DbgThread(), "toosmall.icc", "r"); + if (h != NULL) { + cmsCloseProfile(h); + return 0; + } + + h = cmsOpenProfileFromMemTHR(DbgThread(), NULL, 3); + if (h != NULL) { + cmsCloseProfile(h); + return 0; + } + + h = cmsOpenProfileFromMemTHR(DbgThread(), "123", 3); + if (h != NULL) { + cmsCloseProfile(h); + return 0; + } + + if (SimultaneousErrors != 9) return 0; + + return 1; +} + + +static +cmsInt32Number CheckErrReportingOnBadProfiles(void) +{ + cmsInt32Number rc; + + cmsSetLogErrorHandler(ErrorReportingFunction); + rc = CheckBadProfiles(); + cmsSetLogErrorHandler(FatalErrorQuit); + + // Reset the error state + TrappedError = FALSE; + return rc; +} + + +static +cmsInt32Number CheckBadTransforms(void) +{ + cmsHPROFILE h1 = cmsCreate_sRGBProfile(); + cmsHTRANSFORM x1; + + x1 = cmsCreateTransform(NULL, 0, NULL, 0, 0, 0); + if (x1 != NULL) { + cmsDeleteTransform(x1); + return 0; + } + + + + x1 = cmsCreateTransform(h1, TYPE_RGB_8, h1, TYPE_RGB_8, 12345, 0); + if (x1 != NULL) { + cmsDeleteTransform(x1); + return 0; + } + + x1 = cmsCreateTransform(h1, TYPE_CMYK_8, h1, TYPE_RGB_8, 0, 0); + if (x1 != NULL) { + cmsDeleteTransform(x1); + return 0; + } + + x1 = cmsCreateTransform(h1, TYPE_RGB_8, h1, TYPE_CMYK_8, 1, 0); + if (x1 != NULL) { + cmsDeleteTransform(x1); + return 0; + } + + // sRGB does its output as XYZ! + x1 = cmsCreateTransform(h1, TYPE_RGB_8, NULL, TYPE_Lab_8, 1, 0); + if (x1 != NULL) { + cmsDeleteTransform(x1); + return 0; + } + + cmsCloseProfile(h1); + + + { + + cmsHPROFILE h1 = cmsOpenProfileFromFile("test1.icc", "r"); + cmsHPROFILE h2 = cmsCreate_sRGBProfile(); + + x1 = cmsCreateTransform(h1, TYPE_BGR_8, h2, TYPE_BGR_8, INTENT_PERCEPTUAL, 0); + + cmsCloseProfile(h1); cmsCloseProfile(h2); + if (x1 != NULL) { + cmsDeleteTransform(x1); + return 0; + } + } + + return 1; + +} + +static +cmsInt32Number CheckErrReportingOnBadTransforms(void) +{ + cmsInt32Number rc; + + cmsSetLogErrorHandler(ErrorReportingFunction); + rc = CheckBadTransforms(); + cmsSetLogErrorHandler(FatalErrorQuit); + + // Reset the error state + TrappedError = FALSE; + return rc; +} + + + + +// --------------------------------------------------------------------------------------------------------- + +// Check a linear xform +static +cmsInt32Number Check8linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) +{ + cmsInt32Number n2, i, j; + cmsUInt8Number Inw[cmsMAXCHANNELS], Outw[cmsMAXCHANNELS]; + + n2=0; + + for (j=0; j < 0xFF; j++) { + + memset(Inw, j, sizeof(Inw)); + cmsDoTransform(xform, Inw, Outw, 1); + + for (i=0; i < nChan; i++) { + + cmsInt32Number dif = abs(Outw[i] - j); + if (dif > n2) n2 = dif; + + } + } + + // We allow 2 contone of difference on 8 bits + if (n2 > 2) { + + Fail("Differences too big (%x)", n2); + return 0; + } + + return 1; +} + +static +cmsInt32Number Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) +{ + cmsInt32Number n2, i, j; + cmsUInt8Number Inw[cmsMAXCHANNELS], Outw1[cmsMAXCHANNELS], Outw2[cmsMAXCHANNELS];; + + n2=0; + + for (j=0; j < 0xFF; j++) { + + memset(Inw, j, sizeof(Inw)); + cmsDoTransform(xform1, Inw, Outw1, 1); + cmsDoTransform(xform2, Inw, Outw2, 1); + + for (i=0; i < nChan; i++) { + + cmsInt32Number dif = abs(Outw2[i] - Outw1[i]); + if (dif > n2) n2 = dif; + + } + } + + // We allow 2 contone of difference on 8 bits + if (n2 > 2) { + + Fail("Differences too big (%x)", n2); + return 0; + } + + + return 1; +} + + +// Check a linear xform +static +cmsInt32Number Check16linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) +{ + cmsInt32Number n2, i, j; + cmsUInt16Number Inw[cmsMAXCHANNELS], Outw[cmsMAXCHANNELS]; + + n2=0; + for (j=0; j < 0xFFFF; j++) { + + for (i=0; i < nChan; i++) Inw[i] = (cmsUInt16Number) j; + + cmsDoTransform(xform, Inw, Outw, 1); + + for (i=0; i < nChan; i++) { + + cmsInt32Number dif = abs(Outw[i] - j); + if (dif > n2) n2 = dif; + + } + + + // We allow 2 contone of difference on 16 bits + if (n2 > 0x200) { + + Fail("Differences too big (%x)", n2); + return 0; + } + } + + return 1; +} + +static +cmsInt32Number Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) +{ + cmsInt32Number n2, i, j; + cmsUInt16Number Inw[cmsMAXCHANNELS], Outw1[cmsMAXCHANNELS], Outw2[cmsMAXCHANNELS];; + + n2=0; + + for (j=0; j < 0xFFFF; j++) { + + for (i=0; i < nChan; i++) Inw[i] = (cmsUInt16Number) j; + + cmsDoTransform(xform1, Inw, Outw1, 1); + cmsDoTransform(xform2, Inw, Outw2, 1); + + for (i=0; i < nChan; i++) { + + cmsInt32Number dif = abs(Outw2[i] - Outw1[i]); + if (dif > n2) n2 = dif; + + } + } + + // We allow 2 contone of difference on 16 bits + if (n2 > 0x200) { + + Fail("Differences too big (%x)", n2); + return 0; + } + + + return 1; +} + + +// Check a linear xform +static +cmsInt32Number CheckFloatlinearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) +{ + cmsInt32Number n2, i, j; + cmsFloat32Number In[cmsMAXCHANNELS], Out[cmsMAXCHANNELS]; + + n2=0; + + for (j=0; j < 0xFFFF; j++) { + + for (i=0; i < nChan; i++) In[i] = (cmsFloat32Number) (j / 65535.0);; + + cmsDoTransform(xform, In, Out, 1); + + for (i=0; i < nChan; i++) { + + // We allow no difference in floating point + if (!IsGoodFixed15_16("linear xform cmsFloat32Number", Out[i], (cmsFloat32Number) (j / 65535.0))) + return 0; + } + } + + return 1; +} + + +// Check a linear xform +static +cmsInt32Number CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) +{ + cmsInt32Number n2, i, j; + cmsFloat32Number In[cmsMAXCHANNELS], Out1[cmsMAXCHANNELS], Out2[cmsMAXCHANNELS]; + + n2=0; + + for (j=0; j < 0xFFFF; j++) { + + for (i=0; i < nChan; i++) In[i] = (cmsFloat32Number) (j / 65535.0);; + + cmsDoTransform(xform1, In, Out1, 1); + cmsDoTransform(xform2, In, Out2, 1); + + for (i=0; i < nChan; i++) { + + // We allow no difference in floating point + if (!IsGoodFixed15_16("linear xform cmsFloat32Number", Out1[i], Out2[i])) + return 0; + } + + } + + return 1; +} + + +// Curves only transforms ---------------------------------------------------------------------------------------- + +static +cmsInt32Number CheckCurvesOnlyTransforms(void) +{ + + cmsHTRANSFORM xform1, xform2; + cmsHPROFILE h1, h2, h3; + cmsToneCurve* c1, *c2, *c3; + cmsInt32Number rc = 1; + + + c1 = cmsBuildGamma(DbgThread(), 2.2); + c2 = cmsBuildGamma(DbgThread(), 1/2.2); + c3 = cmsBuildGamma(DbgThread(), 4.84); + + h1 = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigGrayData, &c1); + h2 = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigGrayData, &c2); + h3 = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigGrayData, &c3); + + SubTest("Gray float optimizeable transform"); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_FLT, h2, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); + rc &= CheckFloatlinearXFORM(xform1, 1); + cmsDeleteTransform(xform1); + if (rc == 0) goto Error; + + SubTest("Gray 8 optimizeable transform"); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_8, h2, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); + rc &= Check8linearXFORM(xform1, 1); + cmsDeleteTransform(xform1); + if (rc == 0) goto Error; + + SubTest("Gray 16 optimizeable transform"); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_16, h2, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); + rc &= Check16linearXFORM(xform1, 1); + cmsDeleteTransform(xform1); + if (rc == 0) goto Error; + + SubTest("Gray float non-optimizeable transform"); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_FLT, h1, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); + xform2 = cmsCreateTransform(h3, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); + + rc &= CompareFloatXFORM(xform1, xform2, 1); + cmsDeleteTransform(xform1); + cmsDeleteTransform(xform2); + if (rc == 0) goto Error; + + SubTest("Gray 8 non-optimizeable transform"); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_8, h1, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); + xform2 = cmsCreateTransform(h3, TYPE_GRAY_8, NULL, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); + + rc &= Compare8bitXFORM(xform1, xform2, 1); + cmsDeleteTransform(xform1); + cmsDeleteTransform(xform2); + if (rc == 0) goto Error; + + + SubTest("Gray 16 non-optimizeable transform"); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_16, h1, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); + xform2 = cmsCreateTransform(h3, TYPE_GRAY_16, NULL, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); + + rc &= Compare16bitXFORM(xform1, xform2, 1); + cmsDeleteTransform(xform1); + cmsDeleteTransform(xform2); + if (rc == 0) goto Error; + +Error: + + cmsCloseProfile(h1); cmsCloseProfile(h2); cmsCloseProfile(h3); + cmsFreeToneCurve(c1); cmsFreeToneCurve(c2); cmsFreeToneCurve(c3); + + return rc; +} + + + +// Lab to Lab trivial transforms ---------------------------------------------------------------------------------------- + +static cmsFloat64Number MaxDE; + +static +cmsInt32Number CheckOneLab(cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Number a, cmsFloat64Number b) +{ + cmsCIELab In, Out; + cmsFloat64Number dE; + + In.L = L; In.a = a; In.b = b; + cmsDoTransform(xform, &In, &Out, 1); + + dE = cmsDeltaE(&In, &Out); + + if (dE > MaxDE) MaxDE = dE; + + if (MaxDE > 0.003) { + Fail("dE=%f Lab1=(%f, %f, %f)\n\tLab2=(%f %f %f)", MaxDE, In.L, In.a, In.b, Out.L, Out.a, Out.b); + cmsDoTransform(xform, &In, &Out, 1); + return 0; + } + + return 1; +} + +// Check several Lab, slicing at non-exact values. Precision should be 16 bits. 50x50x50 checks aprox. +static +cmsInt32Number CheckSeveralLab(cmsHTRANSFORM xform) +{ + cmsInt32Number L, a, b; + + MaxDE = 0; + for (L=0; L < 65536; L += 1311) { + + for (a = 0; a < 65536; a += 1232) { + + for (b = 0; b < 65536; b += 1111) { + + if (!CheckOneLab(xform, (L * 100.0) / 65535.0, + (a / 257.0) - 128, (b / 257.0) - 128)) + return 0; + } + + } + + } + return 1; +} + + +static +cmsInt32Number OneTrivialLab(cmsHPROFILE hLab1, cmsHPROFILE hLab2, const char* txt) +{ + cmsHTRANSFORM xform; + cmsInt32Number rc; + + SubTest(txt); + xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hLab1); cmsCloseProfile(hLab2); + + rc = CheckSeveralLab(xform); + cmsDeleteTransform(xform); + return rc; +} + + +static +cmsInt32Number CheckFloatLabTransforms(void) +{ + return OneTrivialLab(cmsCreateLab4ProfileTHR(DbgThread(), NULL), cmsCreateLab4ProfileTHR(DbgThread(), NULL), "Lab4/Lab4") && + OneTrivialLab(cmsCreateLab2ProfileTHR(DbgThread(), NULL), cmsCreateLab2ProfileTHR(DbgThread(), NULL), "Lab2/Lab2") && + OneTrivialLab(cmsCreateLab4ProfileTHR(DbgThread(), NULL), cmsCreateLab2ProfileTHR(DbgThread(), NULL), "Lab4/Lab2") && + OneTrivialLab(cmsCreateLab2ProfileTHR(DbgThread(), NULL), cmsCreateLab4ProfileTHR(DbgThread(), NULL), "Lab2/Lab4"); +} + + +static +cmsInt32Number CheckEncodedLabTransforms(void) +{ + cmsHTRANSFORM xform; + cmsUInt16Number In[3]; + cmsCIELab Lab; + cmsCIELab White = { 100, 0, 0 }; + cmsHPROFILE hLab1 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + cmsHPROFILE hLab2 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + + + xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_Lab_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hLab1); cmsCloseProfile(hLab2); + + In[0] = 0xFFFF; + In[1] = 0x8080; + In[2] = 0x8080; + + cmsDoTransform(xform, In, &Lab, 1); + + if (cmsDeltaE(&Lab, &White) > 0.0001) return 0; + cmsDeleteTransform(xform); + + hLab1 = cmsCreateLab2ProfileTHR(DbgThread(), NULL); + hLab2 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + + xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_LabV2_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hLab1); cmsCloseProfile(hLab2); + + + In[0] = 0xFF00; + In[1] = 0x8000; + In[2] = 0x8000; + + cmsDoTransform(xform, In, &Lab, 1); + + if (cmsDeltaE(&Lab, &White) > 0.0001) return 0; + + cmsDeleteTransform(xform); + + hLab2 = cmsCreateLab2ProfileTHR(DbgThread(), NULL); + hLab1 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + + xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_LabV2_16, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hLab1); cmsCloseProfile(hLab2); + + Lab.L = 100; + Lab.a = 0; + Lab.b = 0; + + cmsDoTransform(xform, &Lab, In, 1); + if (In[0] != 0xFF00 || + In[1] != 0x8000 || + In[2] != 0x8000) return 0; + + cmsDeleteTransform(xform); + + hLab1 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + hLab2 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + + xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_16, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hLab1); cmsCloseProfile(hLab2); + + Lab.L = 100; + Lab.a = 0; + Lab.b = 0; + + cmsDoTransform(xform, &Lab, In, 1); + + if (In[0] != 0xFFFF || + In[1] != 0x8080 || + In[2] != 0x8080) return 0; + + cmsDeleteTransform(xform); + + return 1; +} + +static +cmsInt32Number CheckStoredIdentities(void) +{ + cmsHPROFILE hLab, hLink, h4, h2; + cmsHTRANSFORM xform; + cmsInt32Number rc = 1; + + hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + xform = cmsCreateTransformTHR(DbgThread(), hLab, TYPE_Lab_8, hLab, TYPE_Lab_8, 0, 0); + + hLink = cmsTransform2DeviceLink(xform, 3.4, 0); + cmsSaveProfileToFile(hLink, "abstractv2.icc"); + cmsCloseProfile(hLink); + + hLink = cmsTransform2DeviceLink(xform, 4.3, 0); + cmsSaveProfileToFile(hLink, "abstractv4.icc"); + cmsCloseProfile(hLink); + + cmsDeleteTransform(xform); + cmsCloseProfile(hLab); + + h4 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv4.icc", "r"); + + xform = cmsCreateTransformTHR(DbgThread(), h4, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + + SubTest("V4"); + rc &= CheckSeveralLab(xform); + + cmsDeleteTransform(xform); + cmsCloseProfile(h4); + if (!rc) goto Error; + + + SubTest("V2"); + h2 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv2.icc", "r"); + + xform = cmsCreateTransformTHR(DbgThread(), h2, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + rc &= CheckSeveralLab(xform); + cmsDeleteTransform(xform); + cmsCloseProfile(h2); + if (!rc) goto Error; + + + SubTest("V2 -> V4"); + h2 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv2.icc", "r"); + h4 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv4.icc", "r"); + + xform = cmsCreateTransformTHR(DbgThread(), h4, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + rc &= CheckSeveralLab(xform); + cmsDeleteTransform(xform); + cmsCloseProfile(h2); + cmsCloseProfile(h4); + + SubTest("V4 -> V2"); + h2 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv2.icc", "r"); + h4 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv4.icc", "r"); + + xform = cmsCreateTransformTHR(DbgThread(), h2, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + rc &= CheckSeveralLab(xform); + cmsDeleteTransform(xform); + cmsCloseProfile(h2); + cmsCloseProfile(h4); + +Error: + remove("abstractv2.icc"); + remove("abstractv4.icc"); + return rc; + +} + + + +// Check a simple xform from a matrix profile to itself. Test floating point accuracy. +static +cmsInt32Number CheckMatrixShaperXFORMFloat(void) +{ + cmsHPROFILE hAbove, hSRGB; + cmsHTRANSFORM xform; + cmsInt32Number rc1, rc2; + + hAbove = Create_AboveRGB(); + xform = cmsCreateTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hAbove); + rc1 = CheckFloatlinearXFORM(xform, 3); + cmsDeleteTransform(xform); + + hSRGB = cmsCreate_sRGBProfileTHR(DbgThread()); + xform = cmsCreateTransformTHR(DbgThread(), hSRGB, TYPE_RGB_FLT, hSRGB, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hSRGB); + rc2 = CheckFloatlinearXFORM(xform, 3); + cmsDeleteTransform(xform); + + + return rc1 && rc2; +} + +// Check a simple xform from a matrix profile to itself. Test 16 bits accuracy. +static +cmsInt32Number CheckMatrixShaperXFORM16(void) +{ + cmsHPROFILE hAbove, hSRGB; + cmsHTRANSFORM xform; + cmsInt32Number rc1, rc2; + + hAbove = Create_AboveRGB(); + xform = cmsCreateTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hAbove); + + rc1 = Check16linearXFORM(xform, 3); + cmsDeleteTransform(xform); + + hSRGB = cmsCreate_sRGBProfileTHR(DbgThread()); + xform = cmsCreateTransformTHR(DbgThread(), hSRGB, TYPE_RGB_16, hSRGB, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hSRGB); + rc2 = Check16linearXFORM(xform, 3); + cmsDeleteTransform(xform); + + return rc1 && rc2; + +} + + +// Check a simple xform from a matrix profile to itself. Test 8 bits accuracy. +static +cmsInt32Number CheckMatrixShaperXFORM8(void) +{ + cmsHPROFILE hAbove, hSRGB; + cmsHTRANSFORM xform; + cmsInt32Number rc1, rc2; + + hAbove = Create_AboveRGB(); + xform = cmsCreateTransformTHR(DbgThread(), hAbove, TYPE_RGB_8, hAbove, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hAbove); + rc1 = Check8linearXFORM(xform, 3); + cmsDeleteTransform(xform); + + hSRGB = cmsCreate_sRGBProfileTHR(DbgThread()); + xform = cmsCreateTransformTHR(DbgThread(), hSRGB, TYPE_RGB_8, hSRGB, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hSRGB); + rc2 = Check8linearXFORM(xform, 3); + cmsDeleteTransform(xform); + + + return rc1 && rc2; +} + + +// TODO: Check LUT based to LUT based transforms for CMYK + + + + + + +// ----------------------------------------------------------------------------------------------------------------- + + +// Check known values going from sRGB to XYZ +static +cmsInt32Number CheckOneRGB_f(cmsHTRANSFORM xform, cmsInt32Number R, cmsInt32Number G, cmsInt32Number B, cmsFloat64Number X, cmsFloat64Number Y, cmsFloat64Number Z, cmsFloat64Number err) +{ + cmsFloat32Number RGB[3]; + cmsFloat64Number Out[3]; + + RGB[0] = (cmsFloat32Number) (R / 255.0); + RGB[1] = (cmsFloat32Number) (G / 255.0); + RGB[2] = (cmsFloat32Number) (B / 255.0); + + cmsDoTransform(xform, RGB, Out, 1); + + return IsGoodVal("X", X , Out[0], err) && + IsGoodVal("Y", Y , Out[1], err) && + IsGoodVal("Z", Z , Out[2], err); +} + +static +cmsInt32Number Chack_sRGB_Float(void) +{ + cmsHPROFILE hsRGB, hXYZ, hLab; + cmsHTRANSFORM xform1, xform2; + cmsInt32Number rc; + + + hsRGB = cmsCreate_sRGBProfileTHR(DbgThread()); + hXYZ = cmsCreateXYZProfileTHR(DbgThread()); + hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + + xform1 = cmsCreateTransformTHR(DbgThread(), hsRGB, TYPE_RGB_FLT, hXYZ, TYPE_XYZ_DBL, + INTENT_RELATIVE_COLORIMETRIC, 0); + + xform2 = cmsCreateTransformTHR(DbgThread(), hsRGB, TYPE_RGB_FLT, hLab, TYPE_Lab_DBL, + INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hsRGB); + cmsCloseProfile(hXYZ); + cmsCloseProfile(hLab); + + MaxErr = 0; + + // Xform 1 goes from 8 bits to XYZ, + rc = CheckOneRGB_f(xform1, 1, 1, 1, 0.0002926, 0.00030352, 0.00025037, 0.0001); + rc &= CheckOneRGB_f(xform1, 127, 127, 127, 0.2046329, 0.212230, 0.175069, 0.0001); + rc &= CheckOneRGB_f(xform1, 12, 13, 15, 0.0038364, 0.0039928, 0.00385212, 0.0001); + rc &= CheckOneRGB_f(xform1, 128, 0, 0, 0.0940846, 0.0480030, 0.00300543, 0.0001); + rc &= CheckOneRGB_f(xform1, 190, 25, 210, 0.3203491, 0.1605240, 0.46817115, 0.0001); + + // Xform 2 goes from 8 bits to Lab, we allow 0.01 error max + rc &= CheckOneRGB_f(xform2, 1, 1, 1, 0.2741748, 0, 0, 0.01); + rc &= CheckOneRGB_f(xform2, 127, 127, 127, 53.192776, 0, 0, 0.01); + rc &= CheckOneRGB_f(xform2, 190, 25, 210, 47.043171, 74.564576, -56.89373, 0.01); + rc &= CheckOneRGB_f(xform2, 128, 0, 0, 26.158100, 48.474477, 39.425916, 0.01); + + cmsDeleteTransform(xform1); + cmsDeleteTransform(xform2); + return rc; +} + + +// --------------------------------------------------- + +static +cmsBool GetProfileRGBPrimaries(cmsHPROFILE hProfile, + cmsCIEXYZTRIPLE *result, + cmsUInt32Number intent) +{ + cmsHPROFILE hXYZ; + cmsHTRANSFORM hTransform; + cmsFloat64Number rgb[3][3] = {{1., 0., 0.}, + {0., 1., 0.}, + {0., 0., 1.}}; + + hXYZ = cmsCreateXYZProfile(); + if (hXYZ == NULL) return FALSE; + + hTransform = cmsCreateTransform(hProfile, TYPE_RGB_DBL, hXYZ, TYPE_XYZ_DBL, + intent, cmsFLAGS_NOCACHE | cmsFLAGS_NOOPTIMIZE); + cmsCloseProfile(hXYZ); + if (hTransform == NULL) return FALSE; + + cmsDoTransform(hTransform, rgb, result, 3); + cmsDeleteTransform(hTransform); + return TRUE; +} + + +static +int CheckRGBPrimaries(void) +{ + cmsHPROFILE hsRGB; + cmsCIEXYZTRIPLE tripXYZ; + cmsCIExyYTRIPLE tripxyY; + cmsBool result; + + cmsSetAdaptationState(0); + hsRGB = cmsCreate_sRGBProfileTHR(DbgThread()); + if (!hsRGB) return 0; + + result = GetProfileRGBPrimaries(hsRGB, &tripXYZ, + INTENT_ABSOLUTE_COLORIMETRIC); + + cmsCloseProfile(hsRGB); + if (!result) return 0; + + cmsXYZ2xyY(&tripxyY.Red, &tripXYZ.Red); + cmsXYZ2xyY(&tripxyY.Green, &tripXYZ.Green); + cmsXYZ2xyY(&tripxyY.Blue, &tripXYZ.Blue); + + /* valus were taken from + http://en.wikipedia.org/wiki/RGB_color_spaces#Specifications */ + + if (!IsGoodFixed15_16("xRed", tripxyY.Red.x, 0.64) || + !IsGoodFixed15_16("yRed", tripxyY.Red.y, 0.33) || + !IsGoodFixed15_16("xGreen", tripxyY.Green.x, 0.30) || + !IsGoodFixed15_16("yGreen", tripxyY.Green.y, 0.60) || + !IsGoodFixed15_16("xBlue", tripxyY.Blue.x, 0.15) || + !IsGoodFixed15_16("yBlue", tripxyY.Blue.y, 0.06)) { + Fail("One or more primaries are wrong."); + return FALSE; + } + + return TRUE; +} + + +// ----------------------------------------------------------------------------------------------------------------- + +// This function will check CMYK -> CMYK transforms. It uses FOGRA29 and SWOP ICC profiles + +static +cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char* Profile2) +{ + cmsHPROFILE hSWOP = cmsOpenProfileFromFileTHR(DbgThread(), Profile1, "r"); + cmsHPROFILE hFOGRA = cmsOpenProfileFromFileTHR(DbgThread(), Profile2, "r"); + cmsHTRANSFORM xform, swop_lab, fogra_lab; + cmsFloat32Number CMYK1[4], CMYK2[4]; + cmsCIELab Lab1, Lab2; + cmsHPROFILE hLab; + cmsFloat64Number DeltaL, Max; + cmsInt32Number i; + + hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + + xform = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, Intent, 0); + + swop_lab = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0); + fogra_lab = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0); + + Max = 0; + for (i=0; i <= 100; i++) { + + CMYK1[0] = 10; + CMYK1[1] = 20; + CMYK1[2] = 30; + CMYK1[3] = (cmsFloat32Number) i; + + cmsDoTransform(swop_lab, CMYK1, &Lab1, 1); + cmsDoTransform(xform, CMYK1, CMYK2, 1); + cmsDoTransform(fogra_lab, CMYK2, &Lab2, 1); + + DeltaL = fabs(Lab1.L - Lab2.L); + + if (DeltaL > Max) Max = DeltaL; + } + + + cmsDeleteTransform(xform); + + if (Max > 3.0) return 0; + + xform = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, Intent, 0); + + Max = 0; + + for (i=0; i <= 100; i++) { + CMYK1[0] = 10; + CMYK1[1] = 20; + CMYK1[2] = 30; + CMYK1[3] = (cmsFloat32Number) i; + + cmsDoTransform(fogra_lab, CMYK1, &Lab1, 1); + cmsDoTransform(xform, CMYK1, CMYK2, 1); + cmsDoTransform(swop_lab, CMYK2, &Lab2, 1); + + DeltaL = fabs(Lab1.L - Lab2.L); + + if (DeltaL > Max) Max = DeltaL; + } + + + cmsCloseProfile(hSWOP); + cmsCloseProfile(hFOGRA); + cmsCloseProfile(hLab); + + cmsDeleteTransform(xform); + cmsDeleteTransform(swop_lab); + cmsDeleteTransform(fogra_lab); + + return Max < 3.0; +} + +static +cmsInt32Number CheckCMYKRoundtrip(void) +{ + return CheckCMYK(INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test1.icc"); +} + + +static +cmsInt32Number CheckCMYKPerceptual(void) +{ + return CheckCMYK(INTENT_PERCEPTUAL, "test1.icc", "test2.icc"); +} + + + +static +cmsInt32Number CheckCMYKRelCol(void) +{ + return CheckCMYK(INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test2.icc"); +} + + + +static +cmsInt32Number CheckKOnlyBlackPreserving(void) +{ + cmsHPROFILE hSWOP = cmsOpenProfileFromFileTHR(DbgThread(), "test1.icc", "r"); + cmsHPROFILE hFOGRA = cmsOpenProfileFromFileTHR(DbgThread(), "test2.icc", "r"); + cmsHTRANSFORM xform, swop_lab, fogra_lab; + cmsFloat32Number CMYK1[4], CMYK2[4]; + cmsCIELab Lab1, Lab2; + cmsHPROFILE hLab; + cmsFloat64Number DeltaL, Max; + cmsInt32Number i; + + hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + + xform = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0); + + swop_lab = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); + fogra_lab = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); + + Max = 0; + + for (i=0; i <= 100; i++) { + CMYK1[0] = 0; + CMYK1[1] = 0; + CMYK1[2] = 0; + CMYK1[3] = (cmsFloat32Number) i; + + // SWOP CMYK to Lab1 + cmsDoTransform(swop_lab, CMYK1, &Lab1, 1); + + // SWOP To FOGRA using black preservation + cmsDoTransform(xform, CMYK1, CMYK2, 1); + + // Obtained FOGRA CMYK to Lab2 + cmsDoTransform(fogra_lab, CMYK2, &Lab2, 1); + + // We care only on L* + DeltaL = fabs(Lab1.L - Lab2.L); + + if (DeltaL > Max) Max = DeltaL; + } + + + cmsDeleteTransform(xform); + + // dL should be below 3.0 + if (Max > 3.0) return 0; + + + // Same, but FOGRA to SWOP + xform = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0); + + Max = 0; + + for (i=0; i <= 100; i++) { + CMYK1[0] = 0; + CMYK1[1] = 0; + CMYK1[2] = 0; + CMYK1[3] = (cmsFloat32Number) i; + + cmsDoTransform(fogra_lab, CMYK1, &Lab1, 1); + cmsDoTransform(xform, CMYK1, CMYK2, 1); + cmsDoTransform(swop_lab, CMYK2, &Lab2, 1); + + DeltaL = fabs(Lab1.L - Lab2.L); + + if (DeltaL > Max) Max = DeltaL; + } + + + cmsCloseProfile(hSWOP); + cmsCloseProfile(hFOGRA); + cmsCloseProfile(hLab); + + cmsDeleteTransform(xform); + cmsDeleteTransform(swop_lab); + cmsDeleteTransform(fogra_lab); + + return Max < 3.0; +} + +static +cmsInt32Number CheckKPlaneBlackPreserving(void) +{ + cmsHPROFILE hSWOP = cmsOpenProfileFromFileTHR(DbgThread(), "test1.icc", "r"); + cmsHPROFILE hFOGRA = cmsOpenProfileFromFileTHR(DbgThread(), "test2.icc", "r"); + cmsHTRANSFORM xform, swop_lab, fogra_lab; + cmsFloat32Number CMYK1[4], CMYK2[4]; + cmsCIELab Lab1, Lab2; + cmsHPROFILE hLab; + cmsFloat64Number DeltaE, Max; + cmsInt32Number i; + + hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL); + + xform = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PERCEPTUAL, 0); + + swop_lab = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); + fogra_lab = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); + + Max = 0; + + for (i=0; i <= 100; i++) { + CMYK1[0] = 0; + CMYK1[1] = 0; + CMYK1[2] = 0; + CMYK1[3] = (cmsFloat32Number) i; + + cmsDoTransform(swop_lab, CMYK1, &Lab1, 1); + cmsDoTransform(xform, CMYK1, CMYK2, 1); + cmsDoTransform(fogra_lab, CMYK2, &Lab2, 1); + + DeltaE = cmsDeltaE(&Lab1, &Lab2); + + if (DeltaE > Max) Max = DeltaE; + } + + + cmsDeleteTransform(xform); + + xform = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_PLANE_PERCEPTUAL, 0); + + for (i=0; i <= 100; i++) { + CMYK1[0] = 30; + CMYK1[1] = 20; + CMYK1[2] = 10; + CMYK1[3] = (cmsFloat32Number) i; + + cmsDoTransform(fogra_lab, CMYK1, &Lab1, 1); + cmsDoTransform(xform, CMYK1, CMYK2, 1); + cmsDoTransform(swop_lab, CMYK2, &Lab2, 1); + + DeltaE = cmsDeltaE(&Lab1, &Lab2); + + if (DeltaE > Max) Max = DeltaE; + } + + cmsDeleteTransform(xform); + + + + cmsCloseProfile(hSWOP); + cmsCloseProfile(hFOGRA); + cmsCloseProfile(hLab); + + + cmsDeleteTransform(swop_lab); + cmsDeleteTransform(fogra_lab); + + return Max < 30.0; +} + + +// ------------------------------------------------------------------------------------------------------ + + +static +cmsInt32Number CheckProofingXFORMFloat(void) +{ + cmsHPROFILE hAbove; + cmsHTRANSFORM xform; + cmsInt32Number rc; + + hAbove = Create_AboveRGB(); + xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, + INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_SOFTPROOFING); + cmsCloseProfile(hAbove); + rc = CheckFloatlinearXFORM(xform, 3); + cmsDeleteTransform(xform); + return rc; +} + +static +cmsInt32Number CheckProofingXFORM16(void) +{ + cmsHPROFILE hAbove; + cmsHTRANSFORM xform; + cmsInt32Number rc; + + hAbove = Create_AboveRGB(); + xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove, + INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_SOFTPROOFING|cmsFLAGS_NOCACHE); + cmsCloseProfile(hAbove); + rc = Check16linearXFORM(xform, 3); + cmsDeleteTransform(xform); + return rc; +} + + +static +cmsInt32Number CheckGamutCheck(void) +{ + cmsHPROFILE hSRGB, hAbove; + cmsHTRANSFORM xform; + cmsInt32Number rc; + cmsUInt16Number Alarm[3] = { 0xDEAD, 0xBABE, 0xFACE }; + + // Set alarm codes to fancy values so we could check the out of gamut condition + cmsSetAlarmCodes(Alarm); + + // Create the profiles + hSRGB = cmsCreate_sRGBProfileTHR(DbgThread()); + hAbove = Create_AboveRGB(); + + if (hSRGB == NULL || hAbove == NULL) return 0; // Failed + + SubTest("Gamut check on floating point"); + + // Create a gamut checker in the same space. No value should be out of gamut + xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, + INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_GAMUTCHECK); + + + if (!CheckFloatlinearXFORM(xform, 3)) { + cmsCloseProfile(hSRGB); + cmsCloseProfile(hAbove); + cmsDeleteTransform(xform); + Fail("Gamut check on same profile failed"); + return 0; + } + + cmsDeleteTransform(xform); + + SubTest("Gamut check on 16 bits"); + + xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove, + INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_GAMUTCHECK); + + cmsCloseProfile(hSRGB); + cmsCloseProfile(hAbove); + + rc = Check16linearXFORM(xform, 3); + + cmsDeleteTransform(xform); + + return rc; +} + + + +// ------------------------------------------------------------------------------------------------------------------- + +static +cmsInt32Number CheckBlackPoint(void) +{ + cmsHPROFILE hProfile; + cmsCIEXYZ Black; + cmsCIELab Lab; + + hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "test5.icc", "r"); + cmsDetectBlackPoint(&Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hProfile); + + + hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "test1.icc", "r"); + cmsDetectBlackPoint(&Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsXYZ2Lab(NULL, &Lab, &Black); + cmsCloseProfile(hProfile); + + hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "lcms2cmyk.icc", "r"); + cmsDetectBlackPoint(&Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsXYZ2Lab(NULL, &Lab, &Black); + cmsCloseProfile(hProfile); + + hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "test2.icc", "r"); + cmsDetectBlackPoint(&Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsXYZ2Lab(NULL, &Lab, &Black); + cmsCloseProfile(hProfile); + + hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "test1.icc", "r"); + cmsDetectBlackPoint(&Black, hProfile, INTENT_PERCEPTUAL, 0); + cmsXYZ2Lab(NULL, &Lab, &Black); + cmsCloseProfile(hProfile); + + return 1; +} + + +static +cmsInt32Number CheckOneTAC(cmsFloat64Number InkLimit) +{ + cmsHPROFILE h; + cmsFloat64Number d; + + h =CreateFakeCMYK(InkLimit, TRUE); + cmsSaveProfileToFile(h, "lcmstac.icc"); + cmsCloseProfile(h); + + h = cmsOpenProfileFromFile("lcmstac.icc", "r"); + d = cmsDetectTAC(h); + cmsCloseProfile(h); + + remove("lcmstac.icc"); + + if (fabs(d - InkLimit) > 5) return 0; + + return 1; +} + + +static +cmsInt32Number CheckTAC(void) +{ + if (!CheckOneTAC(180)) return 0; + if (!CheckOneTAC(220)) return 0; + if (!CheckOneTAC(286)) return 0; + if (!CheckOneTAC(310)) return 0; + if (!CheckOneTAC(330)) return 0; + + return 1; +} + +// ------------------------------------------------------------------------------------------------------- + + +#define NPOINTS_IT8 10 // (17*17*17*17) + +static +cmsInt32Number CheckCGATS(void) +{ + cmsHANDLE it8; + cmsInt32Number i; + + + it8 = cmsIT8Alloc(DbgThread()); + if (it8 == NULL) return 0; + + cmsIT8SetSheetType(it8, "LCMS/TESTING"); + cmsIT8SetPropertyStr(it8, "ORIGINATOR", "1 2 3 4"); + cmsIT8SetPropertyUncooked(it8, "DESCRIPTOR", "1234"); + cmsIT8SetPropertyStr(it8, "MANUFACTURER", "3"); + cmsIT8SetPropertyDbl(it8, "CREATED", 4); + cmsIT8SetPropertyDbl(it8, "SERIAL", 5); + cmsIT8SetPropertyHex(it8, "MATERIAL", 0x123); + + cmsIT8SetPropertyDbl(it8, "NUMBER_OF_SETS", NPOINTS_IT8); + cmsIT8SetPropertyDbl(it8, "NUMBER_OF_FIELDS", 4); + + cmsIT8SetDataFormat(it8, 0, "SAMPLE_ID"); + cmsIT8SetDataFormat(it8, 1, "RGB_R"); + cmsIT8SetDataFormat(it8, 2, "RGB_G"); + cmsIT8SetDataFormat(it8, 3, "RGB_B"); + + for (i=0; i < NPOINTS_IT8; i++) { + + char Patch[20]; + + sprintf(Patch, "P%d", i); + + cmsIT8SetDataRowCol(it8, i, 0, Patch); + cmsIT8SetDataRowColDbl(it8, i, 1, i); + cmsIT8SetDataRowColDbl(it8, i, 2, i); + cmsIT8SetDataRowColDbl(it8, i, 3, i); + } + + cmsIT8SaveToFile(it8, "TEST.IT8"); + cmsIT8Free(it8); + + + it8 = cmsIT8LoadFromFile(DbgThread(), "TEST.IT8"); + cmsIT8SaveToFile(it8, "TEST.IT8"); + cmsIT8Free(it8); + + + + it8 = cmsIT8LoadFromFile(DbgThread(), "TEST.IT8"); + + if (cmsIT8GetPropertyDbl(it8, "DESCRIPTOR") != 1234) { + + return 0; + } + + + cmsIT8SetPropertyDbl(it8, "DESCRIPTOR", 5678); + + if (cmsIT8GetPropertyDbl(it8, "DESCRIPTOR") != 5678) { + + return 0; + } + + if (cmsIT8GetDataDbl(it8, "P3", "RGB_G") != 3) { + + return 0; + } + + cmsIT8Free(it8); + + remove("TEST.IT8"); + return 1; + +} + + +// Create CSA/CRD + +static +void GenerateCSA(const char* cInProf, const char* FileName) +{ + cmsHPROFILE hProfile; + cmsUInt32Number n; + char* Buffer; + cmsContext BuffThread = DbgThread(); + FILE* o; + + + if (cInProf == NULL) + hProfile = cmsCreateLab4Profile(NULL); + else + hProfile = cmsOpenProfileFromFile(cInProf, "r"); + + n = cmsGetPostScriptCSA(DbgThread(), hProfile, 0, 0, NULL, 0); + if (n == 0) return; + + Buffer = (char*) _cmsMalloc(BuffThread, n + 1); + cmsGetPostScriptCSA(DbgThread(), hProfile, 0, 0, Buffer, n); + Buffer[n] = 0; + + if (FileName != NULL) { + o = fopen(FileName, "wb"); + fwrite(Buffer, n, 1, o); + fclose(o); + } + + _cmsFree(BuffThread, Buffer); + cmsCloseProfile(hProfile); + remove(FileName); +} + + +static +void GenerateCRD(const char* cOutProf, const char* FileName) +{ + cmsHPROFILE hProfile; + cmsUInt32Number n; + char* Buffer; + cmsUInt32Number dwFlags = 0; + cmsContext BuffThread = DbgThread(); + + + if (cOutProf == NULL) + hProfile = cmsCreateLab4Profile(NULL); + else + hProfile = cmsOpenProfileFromFile(cOutProf, "r"); + + n = cmsGetPostScriptCRD(DbgThread(), hProfile, 0, dwFlags, NULL, 0); + if (n == 0) return; + + Buffer = (char*) _cmsMalloc(BuffThread, n + 1); + cmsGetPostScriptCRD(DbgThread(), hProfile, 0, dwFlags, Buffer, n); + Buffer[n] = 0; + + if (FileName != NULL) { + FILE* o = fopen(FileName, "wb"); + fwrite(Buffer, n, 1, o); + fclose(o); + } + + _cmsFree(BuffThread, Buffer); + cmsCloseProfile(hProfile); + remove(FileName); +} + +static +cmsInt32Number CheckPostScript(void) +{ + GenerateCSA("test5.icc", "sRGB_CSA.ps"); + GenerateCSA("aRGBlcms2.icc", "aRGB_CSA.ps"); + GenerateCSA("test4.icc", "sRGBV4_CSA.ps"); + GenerateCSA("test1.icc", "SWOP_CSA.ps"); + GenerateCSA(NULL, "Lab_CSA.ps"); + GenerateCSA("graylcms2.icc", "gray_CSA.ps"); + + GenerateCRD("test5.icc", "sRGB_CRD.ps"); + GenerateCRD("aRGBlcms2.icc", "aRGB_CRD.ps"); + GenerateCRD(NULL, "Lab_CRD.ps"); + GenerateCRD("test1.icc", "SWOP_CRD.ps"); + GenerateCRD("test4.icc", "sRGBV4_CRD.ps"); + GenerateCRD("graylcms2.icc", "gray_CRD.ps"); + + return 1; +} + + +static +cmsInt32Number CheckGray(cmsHTRANSFORM xform, cmsUInt8Number g, double L) +{ + cmsCIELab Lab; + + cmsDoTransform(xform, &g, &Lab, 1); + + if (!IsGoodVal("a axis on gray", 0, Lab.a, 0.001)) return 0; + if (!IsGoodVal("b axis on gray", 0, Lab.b, 0.001)) return 0; + + return IsGoodVal("Gray value", L, Lab.L, 0.01); +} + +static +cmsInt32Number CheckInputGray(void) +{ + cmsHPROFILE hGray = Create_Gray22(); + cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); + cmsHTRANSFORM xform; + + if (hGray == NULL || hLab == NULL) return 0; + + xform = cmsCreateTransform(hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hGray); cmsCloseProfile(hLab); + + if (!CheckGray(xform, 0, 0)) return 0; + if (!CheckGray(xform, 125, 52.768)) return 0; + if (!CheckGray(xform, 200, 81.069)) return 0; + if (!CheckGray(xform, 255, 100.0)) return 0; + + cmsDeleteTransform(xform); + return 1; +} + +static +cmsInt32Number CheckLabInputGray(void) +{ + cmsHPROFILE hGray = Create_GrayLab(); + cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); + cmsHTRANSFORM xform; + + if (hGray == NULL || hLab == NULL) return 0; + + xform = cmsCreateTransform(hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hGray); cmsCloseProfile(hLab); + + if (!CheckGray(xform, 0, 0)) return 0; + if (!CheckGray(xform, 125, 49.019)) return 0; + if (!CheckGray(xform, 200, 78.431)) return 0; + if (!CheckGray(xform, 255, 100.0)) return 0; + + cmsDeleteTransform(xform); + return 1; +} + + +static +cmsInt32Number CheckOutGray(cmsHTRANSFORM xform, double L, cmsUInt8Number g) +{ + cmsCIELab Lab; + cmsUInt8Number g_out; + + Lab.L = L; + Lab.a = 0; + Lab.b = 0; + + cmsDoTransform(xform, &Lab, &g_out, 1); + + return IsGoodVal("Gray value", g, (double) g_out, 0.01); +} + +static +cmsInt32Number CheckOutputGray(void) +{ + cmsHPROFILE hGray = Create_Gray22(); + cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); + cmsHTRANSFORM xform; + + if (hGray == NULL || hLab == NULL) return 0; + + xform = cmsCreateTransform( hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hGray); cmsCloseProfile(hLab); + + if (!CheckOutGray(xform, 0, 0)) return 0; + if (!CheckOutGray(xform, 100, 255)) return 0; + + if (!CheckOutGray(xform, 20, 52)) return 0; + if (!CheckOutGray(xform, 50, 118)) return 0; + + + cmsDeleteTransform(xform); + return 1; +} + + +static +cmsInt32Number CheckLabOutputGray(void) +{ + cmsHPROFILE hGray = Create_GrayLab(); + cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); + cmsHTRANSFORM xform; + cmsInt32Number i; + + if (hGray == NULL || hLab == NULL) return 0; + + xform = cmsCreateTransform( hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(hGray); cmsCloseProfile(hLab); + + if (!CheckOutGray(xform, 0, 0)) return 0; + if (!CheckOutGray(xform, 100, 255)) return 0; + + for (i=0; i < 100; i++) { + + cmsUInt8Number g; + + g = (cmsUInt8Number) floor(i * 255.0 / 100.0 + 0.5); + + if (!CheckOutGray(xform, i, g)) return 0; + } + + + cmsDeleteTransform(xform); + return 1; +} + + +static +cmsInt32Number CheckV4gamma(void) +{ + cmsHPROFILE h; + cmsUInt16Number Lin[] = {0, 0xffff}; + cmsToneCurve*g = cmsBuildTabulatedToneCurve16(DbgThread(), 2, Lin); + + h = cmsOpenProfileFromFileTHR(DbgThread(), "v4gamma.icc", "w"); + if (h == NULL) return 0; + + + cmsSetProfileVersion(h, 4.3); + + if (!cmsWriteTag(h, cmsSigGrayTRCTag, g)) return 0; + cmsCloseProfile(h); + + cmsFreeToneCurve(g); + remove("v4gamma.icc"); + return 1; +} + +// cmsBool cmsGBDdumpVRML(cmsHANDLE hGBD, const char* fname); + +// Gamut descriptor routines +static +cmsInt32Number CheckGBD(void) +{ + cmsCIELab Lab; + cmsHANDLE h; + cmsInt32Number L, a, b; + cmsUInt32Number r1, g1, b1; + cmsHPROFILE hLab, hsRGB; + cmsHTRANSFORM xform; + + h = cmsGBDAlloc(DbgThread()); + if (h == NULL) return 0; + + // Fill all Lab gamut as valid + SubTest("Filling RAW gamut"); + + for (L=0; L <= 100; L += 10) + for (a = -128; a <= 128; a += 5) + for (b = -128; b <= 128; b += 5) { + + Lab.L = L; + Lab.a = a; + Lab.b = b; + if (!cmsGDBAddPoint(h, &Lab)) return 0; + } + + // Complete boundaries + SubTest("computing Lab gamut"); + if (!cmsGDBCompute(h, 0)) return 0; + + + // All points should be inside gamut + SubTest("checking Lab gamut"); + for (L=10; L <= 90; L += 25) + for (a = -120; a <= 120; a += 25) + for (b = -120; b <= 120; b += 25) { + + Lab.L = L; + Lab.a = a; + Lab.b = b; + if (!cmsGDBCheckPoint(h, &Lab)) { + return 0; + } + } + cmsGBDFree(h); + + + // Now for sRGB + SubTest("checking sRGB gamut"); + h = cmsGBDAlloc(DbgThread()); + hsRGB = cmsCreate_sRGBProfile(); + hLab = cmsCreateLab4Profile(NULL); + + xform = cmsCreateTransform(hsRGB, TYPE_RGB_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE); + cmsCloseProfile(hsRGB); cmsCloseProfile(hLab); + + + for (r1=0; r1 < 256; r1 += 5) { + for (g1=0; g1 < 256; g1 += 5) + for (b1=0; b1 < 256; b1 += 5) { + + + cmsUInt8Number rgb[3]; + + rgb[0] = (cmsUInt8Number) r1; + rgb[1] = (cmsUInt8Number) g1; + rgb[2] = (cmsUInt8Number) b1; + + cmsDoTransform(xform, rgb, &Lab, 1); + + // if (fabs(Lab.b) < 20 && Lab.a > 0) continue; + + if (!cmsGDBAddPoint(h, &Lab)) { + cmsGBDFree(h); + return 0; + } + + + } + } + + + if (!cmsGDBCompute(h, 0)) return 0; + // cmsGBDdumpVRML(h, "c:\\colormaps\\lab.wrl"); + + for (r1=10; r1 < 200; r1 += 10) { + for (g1=10; g1 < 200; g1 += 10) + for (b1=10; b1 < 200; b1 += 10) { + + + cmsUInt8Number rgb[3]; + + rgb[0] = (cmsUInt8Number) r1; + rgb[1] = (cmsUInt8Number) g1; + rgb[2] = (cmsUInt8Number) b1; + + cmsDoTransform(xform, rgb, &Lab, 1); + if (!cmsGDBCheckPoint(h, &Lab)) { + + cmsDeleteTransform(xform); + cmsGBDFree(h); + return 0; + } + } + } + + + cmsDeleteTransform(xform); + cmsGBDFree(h); + + SubTest("checking LCh chroma ring"); + h = cmsGBDAlloc(DbgThread()); + + + for (r1=0; r1 < 360; r1++) { + + cmsCIELCh LCh; + + LCh.L = 70; + LCh.C = 60; + LCh.h = r1; + + cmsLCh2Lab(&Lab, &LCh); + if (!cmsGDBAddPoint(h, &Lab)) { + cmsGBDFree(h); + return 0; + } + } + + + if (!cmsGDBCompute(h, 0)) return 0; + + cmsGBDFree(h); + + return 1; +} + + +static +int CheckMD5(void) +{ + _cmsICCPROFILE* h; + cmsHPROFILE pProfile = cmsOpenProfileFromFile("sRGBlcms2.icc", "r"); + cmsProfileID ProfileID1, ProfileID2, ProfileID3, ProfileID4; + + h =(_cmsICCPROFILE*) pProfile; + if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile, ProfileID1.ID8); + if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile,ProfileID2.ID8); + + cmsCloseProfile(pProfile); + + + pProfile = cmsOpenProfileFromFile("sRGBlcms2.icc", "r"); + + h =(_cmsICCPROFILE*) pProfile; + if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile, ProfileID3.ID8); + if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile,ProfileID4.ID8); + + cmsCloseProfile(pProfile); + + return ((memcmp(ProfileID1.ID8, ProfileID3.ID8, sizeof(ProfileID1)) == 0) && + (memcmp(ProfileID2.ID8, ProfileID4.ID8, sizeof(ProfileID2)) == 0)); +} + + +// -------------------------------------------------------------------------------------------------- +// P E R F O R M A N C E C H E C K S +// -------------------------------------------------------------------------------------------------- + + +typedef struct {cmsUInt8Number r, g, b, a;} Scanline_rgb1; +typedef struct {cmsUInt16Number r, g, b, a;} Scanline_rgb2; +typedef struct {cmsUInt8Number r, g, b;} Scanline_rgb8; +typedef struct {cmsUInt16Number r, g, b;} Scanline_rgb0; + + +static +void TitlePerformance(const char* Txt) +{ + printf("%-45s: ", Txt); fflush(stdout); +} + +static +void PrintPerformance(cmsUInt32Number Bytes, cmsUInt32Number SizeOfPixel, cmsFloat64Number diff) +{ + cmsFloat64Number seconds = (cmsFloat64Number) diff / CLOCKS_PER_SEC; + cmsFloat64Number mpix_sec = Bytes / (1024.0*1024.0*seconds*SizeOfPixel); + + printf("%g MPixel/sec.\n", mpix_sec); + fflush(stdout); +} + + +static +void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) +{ + + cmsInt32Number r, g, b, j; + clock_t atime; + cmsFloat64Number diff; + cmsHTRANSFORM hlcmsxform; + Scanline_rgb0 *In; + cmsUInt32Number Mb; + + if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) + Die("Unable to open profiles"); + + hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_16, + hlcmsProfileOut, TYPE_RGB_16, Intent, cmsFLAGS_NOCACHE); + cmsCloseProfile(hlcmsProfileIn); + cmsCloseProfile(hlcmsProfileOut); + + Mb = 256*256*256*sizeof(Scanline_rgb0); + In = (Scanline_rgb0*) malloc(Mb); + + j = 0; + for (r=0; r < 256; r++) + for (g=0; g < 256; g++) + for (b=0; b < 256; b++) { + + In[j].r = (cmsUInt16Number) ((r << 8) | r); + In[j].g = (cmsUInt16Number) ((g << 8) | g); + In[j].b = (cmsUInt16Number) ((b << 8) | b); + + j++; + } + + + TitlePerformance(Title); + + atime = clock(); + + cmsDoTransform(hlcmsxform, In, In, 256*256*256); + + diff = clock() - atime; + free(In); + + PrintPerformance(Mb, sizeof(Scanline_rgb0), diff); + cmsDeleteTransform(hlcmsxform); + +} + + +static +void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) +{ + cmsInt32Number r, g, b, j; + clock_t atime; + cmsFloat64Number diff; + cmsHTRANSFORM hlcmsxform; + Scanline_rgb2 *In; + cmsUInt32Number Mb; + + if (hlcmsProfileOut == NULL || hlcmsProfileOut == NULL) + Die("Unable to open profiles"); + + hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_16, + hlcmsProfileOut, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); + cmsCloseProfile(hlcmsProfileIn); + cmsCloseProfile(hlcmsProfileOut); + + Mb = 256*256*256*sizeof(Scanline_rgb2); + + In = (Scanline_rgb2*) malloc(Mb); + + j = 0; + for (r=0; r < 256; r++) + for (g=0; g < 256; g++) + for (b=0; b < 256; b++) { + + In[j].r = (cmsUInt16Number) ((r << 8) | r); + In[j].g = (cmsUInt16Number) ((g << 8) | g); + In[j].b = (cmsUInt16Number) ((b << 8) | b); + In[j].a = 0; + + j++; + } + + + TitlePerformance(Title); + + atime = clock(); + + cmsDoTransform(hlcmsxform, In, In, 256*256*256); + + diff = clock() - atime; + + free(In); + + PrintPerformance(Mb, sizeof(Scanline_rgb2), diff); + + cmsDeleteTransform(hlcmsxform); + +} + + +static +void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) +{ + cmsInt32Number r, g, b, j; + clock_t atime; + cmsFloat64Number diff; + cmsHTRANSFORM hlcmsxform; + Scanline_rgb8 *In; + cmsUInt32Number Mb; + + if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) + Die("Unable to open profiles"); + + hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_8, + hlcmsProfileOut, TYPE_RGB_8, Intent, cmsFLAGS_NOCACHE); + cmsCloseProfile(hlcmsProfileIn); + cmsCloseProfile(hlcmsProfileOut); + + Mb = 256*256*256*sizeof(Scanline_rgb8); + + In = (Scanline_rgb8*) malloc(Mb); + + j = 0; + for (r=0; r < 256; r++) + for (g=0; g < 256; g++) + for (b=0; b < 256; b++) { + + In[j].r = (cmsUInt8Number) r; + In[j].g = (cmsUInt8Number) g; + In[j].b = (cmsUInt8Number) b; + + j++; + } + + TitlePerformance(Title); + + atime = clock(); + + cmsDoTransform(hlcmsxform, In, In, 256*256*256); + + diff = clock() - atime; + + free(In); + + PrintPerformance(Mb, sizeof(Scanline_rgb8), diff); + + cmsDeleteTransform(hlcmsxform); + +} + + +static +void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) +{ + cmsInt32Number r, g, b, j; + clock_t atime; + cmsFloat64Number diff; + cmsHTRANSFORM hlcmsxform; + Scanline_rgb2 *In; + cmsUInt32Number Mb; + + if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) + Die("Unable to open profiles"); + + hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_8, + hlcmsProfileOut, TYPE_CMYK_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); + cmsCloseProfile(hlcmsProfileIn); + cmsCloseProfile(hlcmsProfileOut); + + Mb = 256*256*256*sizeof(Scanline_rgb2); + + In = (Scanline_rgb2*) malloc(Mb); + + j = 0; + for (r=0; r < 256; r++) + for (g=0; g < 256; g++) + for (b=0; b < 256; b++) { + + In[j].r = (cmsUInt8Number) r; + In[j].g = (cmsUInt8Number) g; + In[j].b = (cmsUInt8Number) b; + In[j].a = (cmsUInt8Number) 0; + + j++; + } + + TitlePerformance(Title); + + atime = clock(); + + cmsDoTransform(hlcmsxform, In, In, 256*256*256); + + diff = clock() - atime; + + free(In); + + PrintPerformance(Mb, sizeof(Scanline_rgb2), diff); + + + cmsDeleteTransform(hlcmsxform); + +} + + +static +void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) +{ + cmsInt32Number r, g, b, j; + clock_t atime; + cmsFloat64Number diff; + cmsHTRANSFORM hlcmsxform; + cmsUInt8Number *In; + cmsUInt32Number Mb; + + + if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) + Die("Unable to open profiles"); + + hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, + TYPE_GRAY_8, hlcmsProfileOut, TYPE_GRAY_8, Intent, cmsFLAGS_NOCACHE); + cmsCloseProfile(hlcmsProfileIn); + cmsCloseProfile(hlcmsProfileOut); + Mb = 256*256*256; + + In = (cmsUInt8Number*) malloc(Mb); + + j = 0; + for (r=0; r < 256; r++) + for (g=0; g < 256; g++) + for (b=0; b < 256; b++) { + + In[j] = (cmsUInt8Number) r; + + j++; + } + + TitlePerformance(Title); + + atime = clock(); + + cmsDoTransform(hlcmsxform, In, In, 256*256*256); + + diff = clock() - atime; + free(In); + + PrintPerformance(Mb, sizeof(cmsUInt8Number), diff); + cmsDeleteTransform(hlcmsxform); +} + + +static +cmsHPROFILE CreateCurves(void) +{ + cmsToneCurve* Gamma = cmsBuildGamma(DbgThread(), 1.1); + cmsToneCurve* Transfer[3]; + cmsHPROFILE h; + + Transfer[0] = Transfer[1] = Transfer[2] = Gamma; + h = cmsCreateLinearizationDeviceLink(cmsSigRgbData, Transfer); + + cmsFreeToneCurve(Gamma); + + return h; +} + + +static +void SpeedTest(void) +{ + + printf("\n\nP E R F O R M A N C E T E S T S\n"); + printf( "=================================\n\n"); + fflush(stdout); + + SpeedTest16bits("16 bits on CLUT profiles", + cmsOpenProfileFromFile("test5.icc", "r"), + cmsOpenProfileFromFile("test3.icc", "r"), INTENT_PERCEPTUAL); + + SpeedTest8bits("8 bits on CLUT profiles", + cmsOpenProfileFromFile("test5.icc", "r"), + cmsOpenProfileFromFile("test3.icc", "r"), + INTENT_PERCEPTUAL); + + SpeedTest8bits("8 bits on Matrix-Shaper profiles", + cmsOpenProfileFromFile("test5.icc", "r"), + cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), + INTENT_PERCEPTUAL); + + SpeedTest8bits("8 bits on SAME Matrix-Shaper profiles", + cmsOpenProfileFromFile("test5.icc", "r"), + cmsOpenProfileFromFile("test5.icc", "r"), + INTENT_PERCEPTUAL); + + SpeedTest8bits("8 bits on Matrix-Shaper profiles (AbsCol)", + cmsOpenProfileFromFile("test5.icc", "r"), + cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), + INTENT_ABSOLUTE_COLORIMETRIC); + + SpeedTest16bits("16 bits on Matrix-Shaper profiles", + cmsOpenProfileFromFile("test5.icc", "r"), + cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), + INTENT_PERCEPTUAL); + + SpeedTest16bits("16 bits on SAME Matrix-Shaper profiles", + cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), + cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), + INTENT_PERCEPTUAL); + + SpeedTest16bits("16 bits on Matrix-Shaper profiles (AbsCol)", + cmsOpenProfileFromFile("test5.icc", "r"), + cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), + INTENT_ABSOLUTE_COLORIMETRIC); + + SpeedTest8bits("8 bits on curves", + CreateCurves(), + CreateCurves(), + INTENT_PERCEPTUAL); + + SpeedTest16bits("16 bits on curves", + CreateCurves(), + CreateCurves(), + INTENT_PERCEPTUAL); + + SpeedTest8bitsCMYK("8 bits on CMYK profiles", + cmsOpenProfileFromFile("test1.icc", "r"), + cmsOpenProfileFromFile("test2.icc", "r")); + + SpeedTest16bitsCMYK("16 bits on CMYK profiles", + cmsOpenProfileFromFile("test1.icc", "r"), + cmsOpenProfileFromFile("test2.icc", "r")); + + SpeedTest8bitsGray("8 bits on gray-to-gray", + cmsOpenProfileFromFile("graylcms2.icc", "r"), + cmsOpenProfileFromFile("glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); + + SpeedTest8bitsGray("8 bits on SAME gray-to-gray", + cmsOpenProfileFromFile("graylcms2.icc", "r"), + cmsOpenProfileFromFile("graylcms2.icc", "r"), INTENT_PERCEPTUAL); +} + + +// ----------------------------------------------------------------------------------------------------- + + +// Print the supported intents +static +void PrintSupportedIntents(void) +{ + cmsUInt32Number n, i; + cmsUInt32Number Codes[200]; + char* Descriptions[200]; + + n = cmsGetSupportedIntents(200, Codes, Descriptions); + + printf("Supported intents:\n"); + for (i=0; i < n; i++) { + printf("\t%d - %s\n", Codes[i], Descriptions[i]); + } + printf("\n"); +} + +// ZOO checks ------------------------------------------------------------------------------------------------------------ + + +#ifdef CMS_IS_WINDOWS_ + +static char ZOOfolder[cmsMAX_PATH] = "c:\\colormaps\\"; +static char ZOOwrite[cmsMAX_PATH] = "c:\\colormaps\\write\\"; +static char ZOORawWrite[cmsMAX_PATH] = "c:\\colormaps\\rawwrite\\"; + + +// Read all tags on a profile given by its handle +static +void ReadAllTags(cmsHPROFILE h) +{ + cmsInt32Number i, n; + cmsTagSignature sig; + + n = cmsGetTagCount(h); + for (i=0; i < n; i++) { + + sig = cmsGetTagSignature(h, i); + if (cmsReadTag(h, sig) == NULL) return; + } +} + + +// Read all tags on a profile given by its handle +static +void ReadAllRAWTags(cmsHPROFILE h) +{ + cmsInt32Number i, n; + cmsTagSignature sig; + cmsInt32Number len; + + n = cmsGetTagCount(h); + for (i=0; i < n; i++) { + + sig = cmsGetTagSignature(h, i); + len = cmsReadRawTag(h, sig, NULL, 0); + } +} + + +static +void PrintInfo(cmsHPROFILE h, cmsInfoType Info) +{ + wchar_t* text; + cmsInt32Number len; + cmsContext id = DbgThread(); + + len = cmsGetProfileInfo(h, Info, "en", "US", NULL, 0); + if (len == 0) return; + + text = _cmsMalloc(id, len); + cmsGetProfileInfo(h, Info, "en", "US", text, len); + + wprintf(L"%s\n", text); + _cmsFree(id, text); +} + + +static +void PrintAllInfos(cmsHPROFILE h) +{ + PrintInfo(h, cmsInfoDescription); + PrintInfo(h, cmsInfoManufacturer); + PrintInfo(h, cmsInfoModel); + PrintInfo(h, cmsInfoCopyright); + printf("\n\n"); +} + +static +void ReadAllLUTS(cmsHPROFILE h) +{ + cmsPipeline* a; + cmsCIEXYZ Black; + + a = _cmsReadInputLUT(h, INTENT_PERCEPTUAL); + if (a) cmsPipelineFree(a); + + a = _cmsReadInputLUT(h, INTENT_RELATIVE_COLORIMETRIC); + if (a) cmsPipelineFree(a); + + a = _cmsReadInputLUT(h, INTENT_SATURATION); + if (a) cmsPipelineFree(a); + + a = _cmsReadInputLUT(h, INTENT_ABSOLUTE_COLORIMETRIC); + if (a) cmsPipelineFree(a); + + + a = _cmsReadOutputLUT(h, INTENT_PERCEPTUAL); + if (a) cmsPipelineFree(a); + + a = _cmsReadOutputLUT(h, INTENT_RELATIVE_COLORIMETRIC); + if (a) cmsPipelineFree(a); + + a = _cmsReadOutputLUT(h, INTENT_SATURATION); + if (a) cmsPipelineFree(a); + + a = _cmsReadOutputLUT(h, INTENT_ABSOLUTE_COLORIMETRIC); + if (a) cmsPipelineFree(a); + + + a = _cmsReadDevicelinkLUT(h, INTENT_PERCEPTUAL); + if (a) cmsPipelineFree(a); + + a = _cmsReadDevicelinkLUT(h, INTENT_RELATIVE_COLORIMETRIC); + if (a) cmsPipelineFree(a); + + a = _cmsReadDevicelinkLUT(h, INTENT_SATURATION); + if (a) cmsPipelineFree(a); + + a = _cmsReadDevicelinkLUT(h, INTENT_ABSOLUTE_COLORIMETRIC); + if (a) cmsPipelineFree(a); + + + cmsDetectBlackPoint(&Black, h, INTENT_PERCEPTUAL, 0); + cmsDetectBlackPoint(&Black, h, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsDetectBlackPoint(&Black, h, INTENT_SATURATION, 0); + cmsDetectBlackPoint(&Black, h, INTENT_ABSOLUTE_COLORIMETRIC, 0); + cmsDetectTAC(h); +} + +// Check one specimen in the ZOO + +static +cmsInt32Number CheckSingleSpecimen(const char* Profile) +{ + char BuffSrc[256]; + char BuffDst[256]; + cmsHPROFILE h; + + sprintf(BuffSrc, "%s%s", ZOOfolder, Profile); + sprintf(BuffDst, "%s%s", ZOOwrite, Profile); + + h = cmsOpenProfileFromFile(BuffSrc, "r"); + if (h == NULL) return 0; + + printf("%s\n", Profile); + PrintAllInfos(h); + ReadAllTags(h); + // ReadAllRAWTags(h); + ReadAllLUTS(h); + + cmsSaveProfileToFile(h, BuffDst); + cmsCloseProfile(h); + + h = cmsOpenProfileFromFile(BuffDst, "r"); + if (h == NULL) return 0; + ReadAllTags(h); + + + cmsCloseProfile(h); + + return 1; +} + +static +cmsInt32Number CheckRAWSpecimen(const char* Profile) +{ + char BuffSrc[256]; + char BuffDst[256]; + cmsHPROFILE h; + + sprintf(BuffSrc, "%s%s", ZOOfolder, Profile); + sprintf(BuffDst, "%s%s", ZOORawWrite, Profile); + + h = cmsOpenProfileFromFile(BuffSrc, "r"); + if (h == NULL) return 0; + + ReadAllTags(h); + ReadAllRAWTags(h); + cmsSaveProfileToFile(h, BuffDst); + cmsCloseProfile(h); + + h = cmsOpenProfileFromFile(BuffDst, "r"); + if (h == NULL) return 0; + ReadAllTags(h); + cmsCloseProfile(h); + + return 1; +} + + +static +void CheckProfileZOO(void) +{ + + struct _finddata_t c_file; + intptr_t hFile; + + cmsSetLogErrorHandler(NULL); + + if ( (hFile = _findfirst("c:\\colormaps\\*.*", &c_file)) == -1L ) + printf("No files in current directory"); + else + { + do + { + + printf("%s\n", c_file.name); + if (strcmp(c_file.name, ".") != 0 && + strcmp(c_file.name, "..") != 0) { + + CheckSingleSpecimen( c_file.name); + CheckRAWSpecimen( c_file.name); + + if (TotalMemory > 0) + printf("Ok, but %s are left!\n", MemStr(TotalMemory)); + else + printf("Ok.\n"); + + } + + } while ( _findnext(hFile, &c_file) == 0 ); + + _findclose(hFile); + } + + cmsSetLogErrorHandler(FatalErrorQuit); +} + +#endif + + +#if 0 +#define TYPE_709 709 +static double Rec709Math(int Type, const double Params[], double R) +{ double Fun; + +switch (Type) +{ +case 709: + +if (R <= (Params[3]*Params[4])) Fun = R / Params[3]; +else Fun = pow(((R - Params[2])/Params[1]), Params[0]); +break; + +case -709: + +if (R <= Params[4]) Fun = R * Params[3]; +else Fun = Params[1] * pow(R, (1/Params[0])) + Params[2]; +break; +} +return Fun; +} + + +// Add nonstandard TRC curves -> Rec709 +cmsPluginParametricCurves NewCurvePlugin = { +{ cmsPluginMagicNumber, 2000, cmsPluginParametricCurveSig, NULL }, +1, {TYPE_709}, {5}, Rec709Math}; +#endif + + + + +// --------------------------------------------------------------------------------------- + +int main(int argc, char* argv[]) +{ + cmsInt32Number Exhaustive = 0; + cmsInt32Number DoSpeedTests = 1; + + +#ifdef _MSC_VER + _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); +#endif + + printf("LittleCMS %2.2f test bed %s %s\n\n", LCMS_VERSION / 1000.0, __DATE__, __TIME__); + + if ((argc == 2) && strcmp(argv[1], "--exhaustive") == 0) { + + Exhaustive = 1; + printf("Running exhaustive tests (will take a while...)\n\n"); + } + + + printf("Installing debug memory plug-in ... "); + cmsPlugin(&DebugMemHandler); + printf("done.\n"); + + printf("Installing error logger ... "); + cmsSetLogErrorHandler(FatalErrorQuit); + printf("done.\n"); + +#ifdef CMS_IS_WINDOWS_ + // CheckProfileZOO(); +#endif + + PrintSupportedIntents(); + + // Create utility profiles + Check("Creation of test profiles", CreateTestProfiles); + + Check("Base types", CheckBaseTypes); + Check("endianess", CheckEndianess); + Check("quick floor", CheckQuickFloor); + Check("quick floor word", CheckQuickFloorWord); + Check("Fixed point 15.16 representation", CheckFixedPoint15_16); + Check("Fixed point 8.8 representation", CheckFixedPoint8_8); + + // Forward 1D interpolation + Check("1D interpolation in 2pt tables", Check1DLERP2); + Check("1D interpolation in 3pt tables", Check1DLERP3); + Check("1D interpolation in 4pt tables", Check1DLERP4); + Check("1D interpolation in 6pt tables", Check1DLERP6); + Check("1D interpolation in 18pt tables", Check1DLERP18); + Check("1D interpolation in descending 2pt tables", Check1DLERP2Down); + Check("1D interpolation in descending 3pt tables", Check1DLERP3Down); + Check("1D interpolation in descending 6pt tables", Check1DLERP6Down); + Check("1D interpolation in descending 18pt tables", Check1DLERP18Down); + + if (Exhaustive) { + + Check("1D interpolation in n tables", ExhaustiveCheck1DLERP); + Check("1D interpolation in descending tables", ExhaustiveCheck1DLERPDown); + } + + // Forward 3D interpolation + Check("3D interpolation Tetrahedral (float) ", Check3DinterpolationFloatTetrahedral); + Check("3D interpolation Trilinear (float) ", Check3DinterpolationFloatTrilinear); + Check("3D interpolation Tetrahedral (16) ", Check3DinterpolationTetrahedral16); + Check("3D interpolation Trilinear (16) ", Check3DinterpolationTrilinear16); + + if (Exhaustive) { + + Check("Exhaustive 3D interpolation Tetrahedral (float) ", ExaustiveCheck3DinterpolationFloatTetrahedral); + Check("Exhaustive 3D interpolation Trilinear (float) ", ExaustiveCheck3DinterpolationFloatTrilinear); + Check("Exhaustive 3D interpolation Tetrahedral (16) ", ExhaustiveCheck3DinterpolationTetrahedral16); + Check("Exhaustive 3D interpolation Trilinear (16) ", ExhaustiveCheck3DinterpolationTrilinear16); + } + + Check("Reverse interpolation 3 -> 3", CheckReverseInterpolation3x3); + Check("Reverse interpolation 4 -> 3", CheckReverseInterpolation4x3); + + + // High dimensionality interpolation + + Check("3D interpolation", Check3Dinterp); + Check("3D interpolation with granularity", Check3DinterpGranular); + Check("4D interpolation", Check4Dinterp); + Check("4D interpolation with granularity", Check4DinterpGranular); + Check("5D interpolation with granularity", Check5DinterpGranular); + Check("6D interpolation with granularity", Check6DinterpGranular); + Check("7D interpolation with granularity", Check7DinterpGranular); + Check("8D interpolation with granularity", Check8DinterpGranular); + + // Encoding of colorspaces + Check("Lab to LCh and back (float only) ", CheckLab2LCh); + Check("Lab to XYZ and back (float only) ", CheckLab2XYZ); + Check("Lab to xyY and back (float only) ", CheckLab2xyY); + Check("Lab V2 encoding", CheckLabV2encoding); + Check("Lab V4 encoding", CheckLabV4encoding); + + // BlackBody + Check("Blackbody radiator", CheckTemp2CHRM); + + // Tone curves + Check("Linear gamma curves (16 bits)", CheckGammaCreation16); + Check("Linear gamma curves (float)", CheckGammaCreationFlt); + + Check("Curve 1.8 (float)", CheckGamma18); + Check("Curve 2.2 (float)", CheckGamma22); + Check("Curve 3.0 (float)", CheckGamma30); + + Check("Curve 1.8 (table)", CheckGamma18Table); + Check("Curve 2.2 (table)", CheckGamma22Table); + Check("Curve 3.0 (table)", CheckGamma30Table); + + Check("Curve 1.8 (word table)", CheckGamma18TableWord); + Check("Curve 2.2 (word table)", CheckGamma22TableWord); + Check("Curve 3.0 (word table)", CheckGamma30TableWord); + + Check("Parametric curves", CheckParametricToneCurves); + + Check("Join curves", CheckJointCurves); + Check("Join curves descending", CheckJointCurvesDescending); + Check("Join curves degenerated", CheckReverseDegenerated); + Check("Join curves sRGB (Float)", CheckJointFloatCurves_sRGB); + Check("Join curves sRGB (16 bits)", CheckJoint16Curves_sRGB); + Check("Join curves sigmoidal", CheckJointCurvesSShaped); + + // LUT basics + Check("LUT creation & dup", CheckLUTcreation); + Check("1 Stage LUT ", Check1StageLUT); + Check("2 Stage LUT ", Check2StageLUT); + Check("2 Stage LUT (16 bits)", Check2Stage16LUT); + Check("3 Stage LUT ", Check3StageLUT); + Check("3 Stage LUT (16 bits)", Check3Stage16LUT); + Check("4 Stage LUT ", Check4StageLUT); + Check("4 Stage LUT (16 bits)", Check4Stage16LUT); + Check("5 Stage LUT ", Check5StageLUT); + Check("5 Stage LUT (16 bits) ", Check5Stage16LUT); + Check("6 Stage LUT ", Check6StageLUT); + Check("6 Stage LUT (16 bits) ", Check6Stage16LUT); + + // LUT operation + Check("Lab to Lab LUT (float only) ", CheckLab2LabLUT); + Check("XYZ to XYZ LUT (float only) ", CheckXYZ2XYZLUT); + Check("Lab to Lab MAT LUT (float only) ", CheckLab2LabMatLUT); + Check("Named Color LUT", CheckNamedColorLUT); + Check("Usual formatters", CheckFormatters16); + Check("Floating point formatters", CheckFormattersFloat); + + // ChangeBuffersFormat + Check("ChangeBuffersFormat", CheckChangeBufferFormat); + + // MLU + Check("Multilocalized Unicode", CheckMLU); + + // Named color + Check("Named color lists", CheckNamedColorList); + + // Profile I/O (this one is huge!) + Check("Profile creation", CheckProfileCreation); + + + // Error reporting + Check("Error reporting on bad profiles", CheckErrReportingOnBadProfiles); + Check("Error reporting on bad transforms", CheckErrReportingOnBadTransforms); + + // Transforms + Check("Curves only transforms", CheckCurvesOnlyTransforms); + Check("Float Lab->Lab transforms", CheckFloatLabTransforms); + Check("Encoded Lab->Lab transforms", CheckEncodedLabTransforms); + Check("Stored identities", CheckStoredIdentities); + + Check("Matrix-shaper transform (float)", CheckMatrixShaperXFORMFloat); + Check("Matrix-shaper transform (16 bits)", CheckMatrixShaperXFORM16); + Check("Matrix-shaper transform (8 bits)", CheckMatrixShaperXFORM8); + + Check("Primaries of sRGB", CheckRGBPrimaries); + + // Known values + Check("Known values across matrix-shaper", Chack_sRGB_Float); + Check("Gray input profile", CheckInputGray); + Check("Gray Lab input profile", CheckLabInputGray); + Check("Gray output profile", CheckOutputGray); + Check("Gray Lab output profile", CheckLabOutputGray); + + Check("Matrix-shaper proofing transform (float)", CheckProofingXFORMFloat); + Check("Matrix-shaper proofing transform (16 bits)", CheckProofingXFORM16); + + Check("Gamut check", CheckGamutCheck); + + Check("CMYK roundtrip on perceptual transform", CheckCMYKRoundtrip); + + Check("CMYK perceptual transform", CheckCMYKPerceptual); + // Check("CMYK rel.col. transform", CheckCMYKRelCol); + + Check("Black ink only preservation", CheckKOnlyBlackPreserving); + Check("Black plane preservation", CheckKPlaneBlackPreserving); + + + Check("Deciding curve types", CheckV4gamma); + + Check("Black point detection", CheckBlackPoint); + Check("TAC detection", CheckTAC); + + Check("CGATS parser", CheckCGATS); + Check("PostScript generator", CheckPostScript); + Check("Segment maxima GBD", CheckGBD); + Check("MD5 digest", CheckMD5); + + + if (DoSpeedTests) + SpeedTest(); + + DebugMemPrintTotals(); + + cmsUnregisterPlugins(); + + // Cleanup + RemoveTestProfiles(); + + return TotalFail; +} + + + diff --git a/testbed/testthread.cpp b/testbed/testthread.cpp new file mode 100644 index 0000000..435445c --- /dev/null +++ b/testbed/testthread.cpp @@ -0,0 +1,52 @@ + +#include +#include "lcms.h" + +static cmsHPROFILE prof_xyz,prof_rgb; +static cmsHTRANSFORM trans_xyz_to_rgb,trans_rgb_to_xyz; + +static DWORD WINAPI make_trans_xyz_to_rgb(LPVOID lpParameter) +{ + trans_xyz_to_rgb = cmsCreateTransform( + prof_xyz,TYPE_XYZ_DBL, + prof_rgb,TYPE_RGB_DBL, + INTENT_ABSOLUTE_COLORIMETRIC,cmsFLAGS_NOTPRECALC); + return 0; +} + +static DWORD WINAPI make_trans_rgb_to_xyz(LPVOID lpParameter) +{ + trans_rgb_to_xyz = cmsCreateTransform( + prof_rgb,TYPE_RGB_DBL, + prof_xyz,TYPE_XYZ_DBL, + INTENT_ABSOLUTE_COLORIMETRIC,cmsFLAGS_NOTPRECALC); + return 0; +} + +int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR +lpCmdLine,int nCmdShow) +{ + prof_xyz = cmsCreateXYZProfile(); + prof_rgb = cmsOpenProfileFromFile("AdobeRGB1998.icc","rb"); +//cmsCreate_sRGBProfile(); + for (int i=0;i<10;++i) + { +#define try_threads +#ifdef try_threads + DWORD threadid; + HANDLE workers[2]; + workers[0] = CreateThread(NULL,0,make_trans_xyz_to_rgb,NULL,0,&threadid); + workers[1] = CreateThread(NULL,0,make_trans_rgb_to_xyz,NULL,0,&threadid); + WaitForMultipleObjects(2,workers,TRUE,INFINITE); + for (unsigned i=0;i<2;++i) + CloseHandle(workers[i]); +#else + make_trans_xyz_to_rgb(0); + make_trans_rgb_to_xyz(0); +#endif + cmsDeleteTransform(trans_xyz_to_rgb); + cmsDeleteTransform(trans_rgb_to_xyz); + } + cmsCloseProfile(prof_rgb); + cmsCloseProfile(prof_xyz); +} diff --git a/testbed/toosmall.icc b/testbed/toosmall.icc new file mode 100755 index 0000000000000000000000000000000000000000..15e5e497842881c7c79bf18106ff0a9ec11949d3 GIT binary patch literal 158 zcmZQzU_6kMoLkJIz`#&YR8r&~= 1400) +# ifndef _CRT_SECURE_NO_DEPRECATE +# define _CRT_SECURE_NO_DEPRECATE +# endif +# ifndef _CRT_SECURE_NO_WARNINGS +# define _CRT_SECURE_NO_WARNINGS +# endif +# endif +#endif + +#include "lcms2.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +// Avoid warnings + +#define UTILS_UNUSED_PARAMETER(x) ((void)x) + +// Init the utility functions + +void InitUtils(const char* PName); + +// Fatal Error (print the message and exit(1))--------------------------------------------- + +extern int Verbose; + +void FatalError(const char *frm, ...); + +// xgetopt() interface ------------------------------------------------------------- + +extern int xoptind; +extern char *xoptarg; +extern int xopterr; +extern char SW; + +int xgetopt(int argc, char *argv[], char *optionS); + +// The stock profile utility ------------------------------------------------------- + +cmsHPROFILE OpenStockProfile(cmsContext ContextID, const char* File); + +// The print info utility ---------------------------------------------------------- + +void PrintProfileInformation(cmsHPROFILE h); + +// --------------------------------------------------------------------------------- + +void PrintRenderingIntents(void); +void PrintBuiltins(void); + +// --------------------------------------------------------------------------------- + +cmsBool SaveMemoryBlock(const cmsUInt8Number* Buffer, cmsUInt32Number dwLen, const char* Filename); + +// --------------------------------------------------------------------------------- + +// Return a pixel type on depending on the number of channels +int PixelTypeFromChanCount(int ColorChannels); + +// ------------------------------------------------------------------------------ + +// Return number of channels of pixel type +int ChanCountFromPixelType(int ColorChannels); + +#define _lcms_utils_h +#endif diff --git a/utils/common/vprf.c b/utils/common/vprf.c new file mode 100644 index 0000000..c166de9 --- /dev/null +++ b/utils/common/vprf.c @@ -0,0 +1,333 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "utils.h" + + +int Verbose = 0; + +static char ProgramName[256] = ""; + +void FatalError(const char *frm, ...) +{ + va_list args; + + va_start(args, frm); + fprintf(stderr, "[%s fatal error]: ", ProgramName); + vfprintf(stderr, frm, args); + fprintf(stderr, "\n"); + va_end(args); + + exit(1); +} + +// Show errors to the end user (unless quiet option) +static +void MyErrorLogHandler(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text) +{ + if (Verbose >= 0) + fprintf(stderr, "[%s]: %s\n", ProgramName, Text); + + UTILS_UNUSED_PARAMETER(ErrorCode); + UTILS_UNUSED_PARAMETER(ContextID); +} + + +void InitUtils(const char* PName) +{ + strncpy(ProgramName, PName, sizeof(ProgramName)); + ProgramName[sizeof(ProgramName)-1] = 0; + + cmsSetLogErrorHandler(MyErrorLogHandler); +} + + +// Virtual profiles are handled here. +cmsHPROFILE OpenStockProfile(cmsContext ContextID, const char* File) +{ + if (!File) + return cmsCreate_sRGBProfileTHR(ContextID); + + if (cmsstrcasecmp(File, "*Lab2") == 0) + return cmsCreateLab2ProfileTHR(ContextID, NULL); + + if (cmsstrcasecmp(File, "*Lab4") == 0) + return cmsCreateLab4ProfileTHR(ContextID, NULL); + + if (cmsstrcasecmp(File, "*Lab") == 0) + return cmsCreateLab4ProfileTHR(ContextID, NULL); + + if (cmsstrcasecmp(File, "*LabD65") == 0) { + + cmsCIExyY D65xyY; + + cmsWhitePointFromTemp( &D65xyY, 6504); + return cmsCreateLab4ProfileTHR(ContextID, &D65xyY); + } + + if (cmsstrcasecmp(File, "*XYZ") == 0) + return cmsCreateXYZProfileTHR(ContextID); + + if (cmsstrcasecmp(File, "*Gray22") == 0) { + + cmsToneCurve* Curve = cmsBuildGamma(ContextID, 2.2); + cmsHPROFILE hProfile = cmsCreateGrayProfileTHR(ContextID, cmsD50_xyY(), Curve); + cmsFreeToneCurve(Curve); + return hProfile; + } + + if (cmsstrcasecmp(File, "*Gray30") == 0) { + + cmsToneCurve* Curve = cmsBuildGamma(ContextID, 3.0); + cmsHPROFILE hProfile = cmsCreateGrayProfileTHR(ContextID, cmsD50_xyY(), Curve); + cmsFreeToneCurve(Curve); + return hProfile; + } + + if (cmsstrcasecmp(File, "*srgb") == 0) + return cmsCreate_sRGBProfileTHR(ContextID); + + if (cmsstrcasecmp(File, "*null") == 0) + return cmsCreateNULLProfileTHR(ContextID); + + + if (cmsstrcasecmp(File, "*Lin2222") == 0) { + + cmsToneCurve* Gamma = cmsBuildGamma(0, 2.2); + cmsToneCurve* Gamma4[4]; + cmsHPROFILE hProfile; + + Gamma4[0] = Gamma4[1] = Gamma4[2] = Gamma4[3] = Gamma; + hProfile = cmsCreateLinearizationDeviceLink(cmsSigCmykData, Gamma4); + cmsFreeToneCurve(Gamma); + return hProfile; + } + + + return cmsOpenProfileFromFileTHR(ContextID, File, "r"); +} + +// Help on available built-ins +void PrintBuiltins(void) +{ + fprintf(stderr, "\nBuilt-in profiles:\n\n"); + fprintf(stderr, "\t*Lab2 -- D50-based v2 CIEL*a*b\n" + "\t*Lab4 -- D50-based v4 CIEL*a*b\n" + "\t*Lab -- D50-based v4 CIEL*a*b\n" + "\t*XYZ -- CIE XYZ (PCS)\n" + "\t*sRGB -- sRGB color space\n" + "\t*Gray22 - Monochrome of Gamma 2.2\n" + "\t*Gray30 - Monochrome of Gamma 3.0\n" + "\t*null - Monochrome black for all input\n" + "\t*Lin2222- CMYK linearization of gamma 2.2 on each channel\n"); +} + + +// Auxiliar for printing information on profile +static +void PrintInfo(cmsHPROFILE h, cmsInfoType Info) +{ + char* text; + int len; + + len = cmsGetProfileInfoASCII(h, Info, "en", "US", NULL, 0); + if (len == 0) return; + + text = malloc(len * sizeof(char)); + if (text == NULL) return; + + cmsGetProfileInfoASCII(h, Info, "en", "US", text, len); + + if (strlen(text) > 0) + printf("%s\n", text); + + free(text); +} + + + +// Displays the colorant table +static +void PrintColorantTable(cmsHPROFILE hInput, cmsTagSignature Sig, const char* Title) +{ + cmsNAMEDCOLORLIST* list; + int i, n; + + if (cmsIsTag(hInput, Sig)) { + + printf("%s:\n", Title); + + list = cmsReadTag(hInput, Sig); + if (list == NULL) { + printf("(Unavailable)\n"); + return; + } + + n = cmsNamedColorCount(list); + for (i=0; i < n; i++) { + + char Name[cmsMAX_PATH]; + + cmsNamedColorInfo(list, i, Name, NULL, NULL, NULL, NULL); + printf("\t%s\n", Name); + } + + printf("\n"); + } + +} + + +void PrintProfileInformation(cmsHPROFILE hInput) +{ + PrintInfo(hInput, cmsInfoDescription); + PrintInfo(hInput, cmsInfoManufacturer); + PrintInfo(hInput, cmsInfoModel); + PrintInfo(hInput, cmsInfoCopyright); + + if (Verbose > 2) { + + PrintColorantTable(hInput, cmsSigColorantTableTag, "Input colorant table"); + PrintColorantTable(hInput, cmsSigColorantTableOutTag, "Input colorant out table"); + } + + printf("\n"); +} + +// ----------------------------------------------------------------------------- + + +void PrintRenderingIntents(void) +{ + cmsUInt32Number Codes[200]; + char* Descriptions[200]; + cmsUInt32Number n, i; + + fprintf(stderr, "%ct rendering intent:\n\n", SW); + + n = cmsGetSupportedIntents(200, Codes, Descriptions); + + for (i=0; i < n; i++) { + fprintf(stderr, "\t%d - %s\n", Codes[i], Descriptions[i]); + } + fprintf(stderr, "\n"); +} + + + +// ------------------------------------------------------------------------------ + +cmsBool SaveMemoryBlock(const cmsUInt8Number* Buffer, cmsUInt32Number dwLen, const char* Filename) +{ + FILE* out = fopen(Filename, "wb"); + if (out == NULL) { + FatalError("Cannot create '%s'", Filename); + return FALSE; + } + + if (fwrite(Buffer, 1, dwLen, out) != dwLen) { + FatalError("Cannot write %ld bytes to %s", dwLen, Filename); + return FALSE; + } + + if (fclose(out) != 0) { + FatalError("Error flushing file '%s'", Filename); + return FALSE; + } + + return TRUE; +} + +// ------------------------------------------------------------------------------ + +// Return a pixel type on depending on the number of channels +int PixelTypeFromChanCount(int ColorChannels) +{ + switch (ColorChannels) { + + case 1: return PT_GRAY; + case 2: return PT_MCH2; + case 3: return PT_MCH3; + case 4: return PT_CMYK; + case 5: return PT_MCH5; + case 6: return PT_MCH6; + case 7: return PT_MCH7; + case 8: return PT_MCH8; + case 9: return PT_MCH9; + case 10: return PT_MCH10; + case 11: return PT_MCH11; + case 12: return PT_MCH12; + case 13: return PT_MCH13; + case 14: return PT_MCH14; + case 15: return PT_MCH15; + + default: + + FatalError("What a weird separation of %d channels?!?!", ColorChannels); + return -1; + } +} + + +// ------------------------------------------------------------------------------ + +// Return number of channels of pixel type +int ChanCountFromPixelType(int ColorChannels) +{ + switch (ColorChannels) { + + case PT_GRAY: return 1; + + case PT_RGB: + case PT_CMY: + case PT_Lab: + case PT_YUV: + case PT_YCbCr: return 3; + + case PT_CMYK: return 4 ; + case PT_MCH2: return 2 ; + case PT_MCH3: return 3 ; + case PT_MCH4: return 4 ; + case PT_MCH5: return 5 ; + case PT_MCH6: return 6 ; + case PT_MCH7: return 7 ; + case PT_MCH8: return 8 ; + case PT_MCH9: return 9 ; + case PT_MCH10: return 10; + case PT_MCH11: return 11; + case PT_MCH12: return 12; + case PT_MCH13: return 12; + case PT_MCH14: return 14; + case PT_MCH15: return 15; + + default: + + FatalError("Unsupported color space of %d channels", ColorChannels); + return -1; + } +} + + diff --git a/utils/common/xgetopt.c b/utils/common/xgetopt.c new file mode 100644 index 0000000..3eb08fe --- /dev/null +++ b/utils/common/xgetopt.c @@ -0,0 +1,75 @@ +/* + getopt.c + +*/ + +#include +#include +#include + +int xoptind = 1; /* index of which argument is next */ +char *xoptarg; /* pointer to argument of current option */ +int xopterr = 0; /* allow error message */ + +static char *letP = NULL; /* remember next option char's location */ +char SW = '-'; /* DOS switch character, either '-' or '/' */ + +/* + Parse the command line options, System V style. + + Standard option syntax is: + + option ::= SW [optLetter]* [argLetter space* argument] + +*/ + +int xgetopt(int argc, char *argv[], char *optionS) +{ + unsigned char ch; + char *optP; + + if (SW == 0) { + SW = '/'; + } + + if (argc > xoptind) { + if (letP == NULL) { + if ((letP = argv[xoptind]) == NULL || + *(letP++) != SW) goto gopEOF; + if (*letP == SW) { + xoptind++; goto gopEOF; + } + } + if (0 == (ch = *(letP++))) { + xoptind++; goto gopEOF; + } + if (':' == ch || (optP = strchr(optionS, ch)) == NULL) + goto gopError; + if (':' == *(++optP)) { + xoptind++; + if (0 == *letP) { + if (argc <= xoptind) goto gopError; + letP = argv[xoptind++]; + } + xoptarg = letP; + letP = NULL; + } else { + if (0 == *letP) { + xoptind++; + letP = NULL; + } + xoptarg = NULL; + } + return ch; + } +gopEOF: + xoptarg = letP = NULL; + return EOF; + +gopError: + xoptarg = NULL; + errno = EINVAL; + if (xopterr) + perror ("get command line option"); + return ('?'); +} diff --git a/utils/delphi/delphidemo.dpr b/utils/delphi/delphidemo.dpr new file mode 100755 index 0000000..a78d56c --- /dev/null +++ b/utils/delphi/delphidemo.dpr @@ -0,0 +1,13 @@ +program delphidemo; + +uses + Forms, + demo1 in 'demo1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/utils/delphi/delphidemo.dproj b/utils/delphi/delphidemo.dproj new file mode 100755 index 0000000..61fc4f2 --- /dev/null +++ b/utils/delphi/delphidemo.dproj @@ -0,0 +1,114 @@ + + + {E3F889E8-CB8A-49AE-8173-4DDA022466BE} + delphidemo.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + vcl;rtl;vclx;vclimg;vclactnband;dbrtl;vcldb;vcldbx;bdertl;vcltouch;xmlrtl;dsnap;dsnapcon;TeeUI;TeeDB;Tee;vclib;ibxpress;adortl;IndyCore;IndySystem;IndyProtocols;inet;intrawebdb_100_140;Intraweb_100_140;VclSmp;vclie;websnap;webdsnap;inetdb;inetdbbde;inetdbxpress;soaprtl;vclribbon;dbexpress;DbxCommonDriver;DataSnapIndy10ServerTransport;DataSnapProviderClient;DbxClientDriver;DataSnapServer;DBXInterBaseDriver;DBXMySQLDriver;dbxcds;DBXFirebirdDriver;DBXSybaseASEDriver;DBXSybaseASADriver;DBXOracleDriver;DBXMSSQLDriver;DBXInformixDriver;DBXDb2Driver;Rave77VCL + 00400000 + 1 + delphidemo.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;WinTypes=Windows;WinProcs=Windows;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
      Form1
      +
      + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
      + + + Delphi.Personality.12 + VCLApplication + + + + delphidemo.dpr + + + False + d:\lcms-1.13\delphi + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 3082 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + False + + 12 + +
      diff --git a/utils/delphi/delphidemo.res b/utils/delphi/delphidemo.res new file mode 100755 index 0000000000000000000000000000000000000000..ca4824f8cbfff65bbd83189c6c7c788f672878ee GIT binary patch literal 876 zcmah|!D`z;6dY9sgdj-T zRtj03H%^aL5)>CVzoK4miXvSVl^*o#q)l&+)n?F@YIl|1upd`Ml&o)$$4c*+%elE~ zx4T_w^O5N4X1CpHeNUYiZ1Prb4kRNnOztww#)|Jz3N8ZuV>rz-O z!*!|G95%FBj51Li{iU!*q> zcJz_nGvf;*zcSy{jQhwp<~cCtC1jj3&OZV8LK^cCKkyab@ss?9CF2R_??PUKhuLgo JUxmCP53f)$4b=bu literal 0 HcmV?d00001 diff --git a/utils/delphi/demo1.dfm b/utils/delphi/demo1.dfm new file mode 100755 index 0000000000000000000000000000000000000000..c7722534bbca6bec413c034f42c1ce27685a1004 GIT binary patch literal 4400 zcmd5=J#X7a7^aREsqff995^Y^a;YO3fe<@EhqQ}6?8Jo?3lh5`;_jx}~e-<=* zXaAtHsohz&Ry57-?%Xl#9Ui!wS$SRBBS%92Rnu+m>tAYS3;Tj{&sf`|LNH=EZfI>; zZNmH!wFboHr52;a6AuX;j)Z;#71jKZ4#Y@*iLx!ucwpuo))d|jcF1ard!Yz0^+Z_j zP%r-BZ<*2#_e8xl!a+!cd8NI*)A(r5{J9j*O(vo!U#L~k z?|C_Ugk55kJ3Xt1z0m5BfF7ye_rw_^MXj>W2CaZ#LH2_I3G(GGoe&mwNwDiVBlM&Y zEgUbotQq#Mi-*LJ*G)+flKdbotIT|yF=8`vnNkM_L+XX~h)A?lOs2pmS}G^AgNQA( zR7vJdE(CYcQntb9&@&CpqMw^R5fI^w@}=#G&!|I%Toh^NF>NWQ9c3b?rJz1pG^iYA z%D0!p(!ESMfvISDk*OpPVtTq6P0QOoutf;qJsBuc^~dK7K!rt-YBtFUVPtTgM*VrF zn81s8L-Sy709eEBVvjIGUT1x;=Q6SLU!nx(%3_=kJS#a|n+p}i>L`Lkq*;5o4`#`0%zjm}ufK>zjUL2iq2X{Z;u zXU2{=4Bl0Ce4W^F_W&q{ zomf@e4=snYy2U+qR?{@oZjK>idZxO?gnf%-+4?MT{mo?8o3AI~6!R;n((Cp5GzjzN zz6Z(DIW|i%LOF}FUyHka-sF>VGLRBiv^`haO$^YhNe)MA3$h>%wTp(lI;lX;n4?@p z8!E_}6H8S8BlYt;i^Y41O3Hg253F^cI$|7&a3+;__f87R1!%_pMLI7<#X>+g8ZpttC^-#l+LXoYg4%C7E9kNG*D^y zK08awa5zP6%%_dbIBk^dZor2DSl+}zX=Z#*6RWW%zE8SAbmL9iG{tVt)|E85?aGR+ z;_h=vebP$kTPgFeSy!_1L}gZ-upMx}%}>2O8j7@D{%y6HV$bEEQjV}UBqsE`sx&I( z>gl|w3vfzvh%Z3M#_9oK5Ctc2ER7C^)FmK&$0+nLlmr3!%H_In z+KrA2XeOwOQ#UP7cU3L|Hm}Ux*+#wZ z`ck7PCtC^7a#1d(Rw+iSsNp7@WRCEdiS3Cnbn3Xtav#Y57?PN_svC9cIJd3n=GI^b lxV$g_KiN;h~8}!cA+r`z-<~BnYuz!l}K`6*I)OVUL literal 0 HcmV?d00001 diff --git a/utils/delphi/demo1.pas b/utils/delphi/demo1.pas new file mode 100755 index 0000000..750f29b --- /dev/null +++ b/utils/delphi/demo1.pas @@ -0,0 +1,322 @@ +unit demo1; + +interface + +uses + Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, StdCtrls, ExtDlgs, lcms2dll, ComCtrls; + +type + TForm1 = class(TForm) + + Image1: TImage; + Image2: TImage; + Panel1: TPanel; + Splitter1: TSplitter; + Button2: TButton; + ComboBoxInput: TComboBox; + ComboBoxOutput: TComboBox; + Label1: TLabel; + Label2: TLabel; + WBCompensation: TCheckBox; + NoTransform: TCheckBox; + RadioGroup1: TRadioGroup; + OpenPictureDialog1: TOpenPictureDialog; + Button1: TButton; + ProgressBar1: TProgressBar; + ComboBoxIntent: TComboBox; + Label3: TLabel; + Button3: TButton; + Button4: TButton; + OpenDialog1: TOpenDialog; + Label4: TLabel; + ScrollBar1: TScrollBar; + + procedure Button2Click(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure ComboBoxIntentChange(Sender: TObject); + procedure ScrollBar1Change(Sender: TObject); + private + { Private declarations } + function ComputeFlags: DWORD; + + public + constructor Create(Owner: TComponent); Override; + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +CONST + IS_INPUT = $1; + IS_DISPLAY = $2; + IS_COLORSPACE = $4; + IS_OUTPUT = $8; + IS_ABSTRACT = $10; + +VAR + IntentCodes: array [0 .. 20] of cmsUInt32Number; + +FUNCTION InSignatures(Signature: cmsProfileClassSignature; dwFlags: DWORD): Boolean; +BEGIN + + if (((dwFlags AND IS_DISPLAY) <> 0) AND (Signature = cmsSigDisplayClass)) then + InSignatures := TRUE + else if (((dwFlags AND IS_OUTPUT) <> 0) AND (Signature = cmsSigOutputClass)) + then + InSignatures := TRUE + else if (((dwFlags AND IS_INPUT) <> 0) AND (Signature = cmsSigInputClass)) + then + InSignatures := TRUE + else if (((dwFlags AND IS_COLORSPACE) <> 0) AND + (Signature = cmsSigColorSpaceClass)) then + InSignatures := TRUE + else if (((dwFlags AND IS_ABSTRACT) <> 0) AND + (Signature = cmsSigAbstractClass)) then + InSignatures := TRUE + else + InSignatures := FALSE +END; + +PROCEDURE FillCombo(var Combo: TComboBox; Signatures: DWORD); +var + Files, Descriptions: TStringList; + Found: Integer; + SearchRec: TSearchRec; + Path, Profile: String; + Dir: ARRAY [0 .. 1024] OF Char; + hProfile: cmsHPROFILE; + Descrip: array [0 .. 256] of Char; +begin + Files := TStringList.Create; + Descriptions := TStringList.Create; + GetSystemDirectory(Dir, 1023); + Path := String(Dir) + '\SPOOL\DRIVERS\COLOR\'; + Found := FindFirst(Path + '*.ic?', faAnyFile, SearchRec); + while Found = 0 do + begin + Profile := Path + SearchRec.Name; + hProfile := cmsOpenProfileFromFile(PAnsiChar(AnsiString(Profile)), 'r'); + if (hProfile <> NIL) THEN + begin + + if ((cmsGetColorSpace(hProfile) = cmsSigRgbData) AND InSignatures + (cmsGetDeviceClass(hProfile), Signatures)) then + begin + cmsGetProfileInfo(hProfile, cmsInfoDescription, 'EN', 'us', Descrip, + 256); + Descriptions.Add(Descrip); + Files.Add(Profile); + end; + cmsCloseProfile(hProfile); + end; + + Found := FindNext(SearchRec); + + end; + FindClose(SearchRec); + Combo.Items := Descriptions; + Combo.Tag := Integer(Files); +end; + +// A rather simple Logger... note the "cdecl" convention +PROCEDURE ErrorLogger(ContextID: cmsContext; ErrorCode: cmsUInt32Number; + Text: PAnsiChar); Cdecl; +begin + MessageBox(0, PWideChar(WideString(Text)), 'Something is going wrong...', + MB_OK OR MB_ICONWARNING or MB_TASKMODAL); +end; + +constructor TForm1.Create(Owner: TComponent); +var + IntentNames: array [0 .. 20] of PAnsiChar; + i, n: Integer; +begin + inherited Create(Owner); + + // Set the logger + cmsSetLogErrorHandler(ErrorLogger); + + ScrollBar1.Min := 0; + ScrollBar1.Max := 100; + + FillCombo(ComboBoxInput, IS_INPUT OR IS_COLORSPACE OR IS_DISPLAY); + FillCombo(ComboBoxOutput, $FFFF ); + + + // Get the supported intents + n := cmsGetSupportedIntents(20, @IntentCodes, @IntentNames); + + + ComboBoxIntent.Items.BeginUpdate; + ComboBoxIntent.Items.Clear; + for i:= 0 TO n - 1 DO + ComboBoxIntent.Items.Add(String(IntentNames[i])); + + ComboBoxIntent.ItemIndex := 0; + ComboBoxIntent.Items.EndUpdate; +end; + + + +procedure TForm1.ScrollBar1Change(Sender: TObject); +var d: Integer; + s: String; +begin + d := ScrollBar1.Position; + Str(d, s); + Label4.Caption := 'Adaptation state '+s + '% (Abs. col only)'; +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + if OpenPictureDialog1.Execute then + begin + Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); + Image1.Picture.Bitmap.PixelFormat := pf24bit; + + Image2.Picture.LoadFromFile(OpenPictureDialog1.FileName); + Image2.Picture.Bitmap.PixelFormat := pf24bit; + + end +end; + +function SelectedFile(var Combo: TComboBox): string; +var + List: TStringList; + n: Integer; +begin + + List := TStringList(Combo.Tag); + n := Combo.ItemIndex; + if (n >= 0) then + SelectedFile := List.Strings[n] + else + SelectedFile := Combo.Text; +end; + +procedure TForm1.ComboBoxIntentChange(Sender: TObject); +begin + ScrollBar1.Enabled := (ComboBoxIntent.itemIndex = 3); +end; + +function TForm1.ComputeFlags: DWORD; +var + dwFlags: DWORD; +begin + dwFlags := 0; + if (WBCompensation.Checked) then + begin + dwFlags := dwFlags OR cmsFLAGS_BLACKPOINTCOMPENSATION + end; + + if (NoTransform.Checked) then + begin + dwFlags := dwFlags OR cmsFLAGS_NULLTRANSFORM + end; + + case RadioGroup1.ItemIndex of + 0: + dwFlags := dwFlags OR cmsFLAGS_NOOPTIMIZE; + 1: + dwFlags := dwFlags OR cmsFLAGS_HIGHRESPRECALC; + 3: + dwFlags := dwFlags OR cmsFLAGS_LOWRESPRECALC; + end; + + ComputeFlags := dwFlags +end; + +procedure TForm1.Button1Click(Sender: TObject); +var + Source, Dest: String; + hSrc, hDest: cmsHPROFILE; + xform: cmsHTRANSFORM; + i, PicW, PicH: Integer; + Intent: Integer; + dwFlags: DWORD; +begin + + Source := SelectedFile(ComboBoxInput); + Dest := SelectedFile(ComboBoxOutput); + + dwFlags := ComputeFlags; + + Intent := IntentCodes[ComboBoxIntent.ItemIndex]; + + cmsSetAdaptationState( ScrollBar1.Position / 100.0 ); + + if (Source <> '') AND (Dest <> '') then + begin + hSrc := cmsOpenProfileFromFile(PAnsiChar(AnsiString(Source)), 'r'); + hDest := cmsOpenProfileFromFile(PAnsiChar(AnsiString(Dest)), 'r'); + + if (hSrc <> Nil) and (hDest <> Nil) then + begin + xform := cmsCreateTransform(hSrc, TYPE_BGR_8, hDest, TYPE_BGR_8, Intent, + dwFlags); + end + else + begin + xform := nil; + end; + + if hSrc <> nil then + begin + cmsCloseProfile(hSrc); + end; + + if hDest <> Nil then + begin + cmsCloseProfile(hDest); + end; + + if (xform <> nil) then + begin + + PicW := Image2.Picture.width; + PicH := Image2.Picture.height; + ProgressBar1.Min := 0; + ProgressBar1.Max := PicH; + ProgressBar1.Step := 1; + + for i := 0 TO (PicH - 1) do + begin + if ((i MOD 100) = 0) then + ProgressBar1.Position := i; + + cmsDoTransform(xform, Image1.Picture.Bitmap.Scanline[i], + Image2.Picture.Bitmap.Scanline[i], PicW); + + end; + ProgressBar1.Position := PicH; + + cmsDeleteTransform(xform); + + end; + + Image2.Repaint; + ProgressBar1.Position := 0; + end +end; + +procedure TForm1.Button3Click(Sender: TObject); +begin + if OpenDialog1.Execute then + ComboBoxInput.Text := OpenDialog1.FileName; +end; + +procedure TForm1.Button4Click(Sender: TObject); +begin + if OpenDialog1.Execute then + ComboBoxOutput.Text := OpenDialog1.FileName; +end; + +end. diff --git a/utils/delphi/lcms2.dll b/utils/delphi/lcms2.dll new file mode 100755 index 0000000000000000000000000000000000000000..0dd48eb3b0ccdaecbee37dc6214648e344e887d1 GIT binary patch literal 334848 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

      )~MC;6=w;HVmW}u;P*C3fGifpvM=aZ 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

      RHqTKedmmAVs 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 Chromaticity (Black body) +FUNCTION cmsWhitePointFromTemp(var WhitePoint: cmsCIExyY; TempK: cmsFloat64Number) : cmsBool; StdCall; +FUNCTION cmsTempFromWhitePoint(var TeampK: cmsFloat64Number; var WhitePoint: cmsCIExyY) : cmsBool; StdCall; + + +// Chromatic adaptation +FUNCTION cmsAdaptToIlluminant(Result: LPcmsCIEXYZ; SourceWhitePt: LPcmsCIEXYZ; + Illuminant: LPcmsCIEXYZ; Value: LPcmsCIEXYZ): cmsBool; StdCall; + + +// CIECAM02 --------------------------------------------------------------------------------------------------- + +// Viewing conditions. Please note those are CAM model viewing conditions, and not the ICC tag viewing +// conditions, which I'm naming cmsICCViewingConditions to make differences evident. Unfortunately, the tag +// cannot deal with surround La, Yb and D value so is basically useless to store CAM02 viewing conditions. + + CONST + + AVG_SURROUND = 1; + DIM_SURROUND = 2; + DARK_SURROUND = 3; + CUTSHEET_SURROUND = 4; + + D_CALCULATE = -1; + + TYPE + + cmsViewingConditions = PACKED RECORD + + WhitePoint: cmsCIEXYZ; + Yb : cmsFloat64Number; + La : cmsFloat64Number; + surround : Integer; + D_value : cmsFloat64Number + END; + + + LPcmsViewingConditions = ^cmsViewingConditions; + +FUNCTION cmsCIECAM02Init(pVC : LPcmsViewingConditions ) : Pointer; StdCall; +PROCEDURE cmsCIECAM02Done(hModel : Pointer); StdCall; +PROCEDURE cmsCIECAM02Forward(hModel: Pointer; pIn: LPcmsCIEXYZ; pOut: LPcmsJCh ); StdCall; +PROCEDURE cmsCIECAM02Reverse(hModel: Pointer; pIn: LPcmsJCh; pOut: LPcmsCIEXYZ ); StdCall; + +// Tone curves ----------------------------------------------------------------------------------------- + +// This describes a curve segment. For a table of supported types, see the manual. User can increase the number of +// available types by using a proper plug-in. Parametric segments allow 10 parameters at most + +TYPE +cmsCurveSegment = PACKED RECORD + x0, x1: cmsFloat32Number; // Domain; for x0 < x <= x1 + PType: cmsInt32Number; // Parametric type, Type == 0 means sampled segment. Negative values are reserved + Params: array [0..9] of cmsFloat64Number; // Parameters if Type != 0 + nGridPoints: cmsUInt32Number; // Number of grid points if Type == 0 + SampledPoints: LPcmsFloat32Number; // Points to an array of floats if Type == 0 +END; + +LPcmsToneCurve = Pointer; +LPcmsCurveSegmentArray = ^cmsCurveSegmentArray; +cmsCurveSegmentArray = array[0..0] of cmsCurveSegment; + +LPcmsFloat64NumberArray = ^cmsFloat64NumberArray; +cmsFloat64NumberArray = array[0..0] of cmsFloat64Number; + +LPcmsUInt16NumberArray = ^cmsUInt16NumberArray; +cmsUInt16NumberArray = array[0..0] of cmsUInt16Number; + +LPcmsFloat32NumberArray = ^cmsFloat32NumberArray; +cmsFloat32NumberArray = array[0..0] of cmsFloat32Number; + +LPLPcmsToneCurveArray = ^LPcmsToneCurveArray; +LPcmsToneCurveArray = array[0..0] of LPcmsToneCurve; + +LPcmsUInt32NumberArray = ^cmsUInt32NumberArray; +cmsUInt32NumberArray = array[0..0] of cmsUInt32Number; + +FUNCTION cmsBuildSegmentedToneCurve(ContextID: cmsContext; nSegments: cmsInt32Number; Segments: LPcmsCurveSegmentArray): LPcmsToneCurve; StdCall; +FUNCTION cmsBuildParametricToneCurve(ContextID: cmsContext; CType: cmsInt32Number; Params: LPcmsFloat64NumberArray): LPcmsToneCurve; StdCall; +FUNCTION cmsBuildGamma(ContextID: cmsContext; Gamma: cmsFloat64Number): LPcmsToneCurve; StdCall; +FUNCTION cmsBuildTabulatedToneCurve16(ContextID: cmsContext; nEntries: cmsInt32Number; values: LPcmsUInt16NumberArray): LPcmsToneCurve; StdCall; +FUNCTION cmsBuildTabulatedToneCurveFloat(ContextID: cmsContext; nEntries: cmsUInt32Number; values: LPcmsFloat32NumberArray): LPcmsToneCurve; StdCall; +PROCEDURE cmsFreeToneCurve(Curve: LPcmsToneCurve); StdCall; +PROCEDURE cmsFreeToneCurveTriple(Curve: LPLPcmsToneCurveArray); StdCall; +FUNCTION cmsDupToneCurve(Src: LPcmsToneCurve): LPcmsToneCurve; StdCall; +FUNCTION cmsReverseToneCurve(InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall; +FUNCTION cmsReverseToneCurveEx(nResultSamples: cmsInt32Number; InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall; +FUNCTION cmsJoinToneCurve(ContextID: cmsContext; X, Y: LPcmsToneCurve; nPoints: cmsUInt32Number ): LPcmsToneCurve; StdCall; +FUNCTION cmsSmoothToneCurve(Tab: LPcmsToneCurve; lambda: cmsFloat64Number): cmsBool; StdCall; +FUNCTION cmsEvalToneCurveFloat(Curve: LPcmsToneCurve; v: cmsFloat32Number):cmsFloat32Number; StdCall; +FUNCTION cmsEvalToneCurve16(Curve: LPcmsToneCurve; v:cmsUInt16Number):cmsUInt16Number; StdCall; +FUNCTION cmsIsToneCurveMultisegment(InGamma: LPcmsToneCurve):cmsBool; StdCall; +FUNCTION cmsIsToneCurveLinear(Curve: LPcmsToneCurve):cmsBool; StdCall; +FUNCTION cmsIsToneCurveMonotonic(t: LPcmsToneCurve):cmsBool; StdCall; +FUNCTION cmsIsToneCurveDescending(t: LPcmsToneCurve):cmsBool; StdCall; +FUNCTION cmsGetToneCurveParametricType(t: LPcmsToneCurve):cmsInt32Number; StdCall; +FUNCTION cmsEstimateGamma(t: LPcmsToneCurve; Precision:cmsFloat64Number):cmsFloat64Number; StdCall; + + +// Implements pipelines of multi-processing elements ------------------------------------------------------------- + +TYPE + LPcmsPipeline = Pointer; + LPcmsStage = Pointer; + LPLPcmsStage = ^LPcmsStage; + +// Those are hi-level pipelines +FUNCTION cmsPipelineAlloc(ContextID: cmsContext; InputChannels, OutputChannels: cmsUInt32Number): LPcmsPipeline; StdCall; +PROCEDURE cmsPipelineFree(lut: LPcmsPipeline); StdCall; +FUNCTION cmsPipelineDup(Orig: LPcmsPipeline): LPcmsPipeline; StdCall; +FUNCTION cmsPipelineInputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall; +FUNCTION cmsPipelineOutputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall; + +FUNCTION cmsPipelineStageCount(lut: LPcmsPipeline): cmsUInt32Number; StdCall; +FUNCTION cmsPipelineGetPtrToFirstStage(lut: LPcmsPipeline): LPcmsStage; StdCall; +FUNCTION cmsPipelineGetPtrToLastStage(lut: LPcmsPipeline): LPcmsStage; StdCall; + +PROCEDURE cmsPipelineEval16(Inv, Outv: LPcmsUInt16NumberArray; lut: LPcmsPipeline); StdCall; +PROCEDURE cmsPipelineEvalFloat(Inv, Outv: LPcmsFloat32NumberArray; lut: LPcmsPipeline); StdCall; + +FUNCTION cmsPipelineEvalReverseFloat(Target, Result, Hint: LPcmsFloat32NumberArray; lut: LPcmsPipeline): cmsBool; StdCall; +FUNCTION cmsPipelineCat(l1, l2: LPcmsPipeline): cmsBool; StdCall; +FUNCTION cmsPipelineSetSaveAs8bitsFlag(lut: LPcmsPipeline; On: cmsBool): cmsBool; StdCall; + +// Where to place/locate the stages in the pipeline chain +TYPE + cmsStageLoc = (cmsAT_BEGIN = 0, cmsAT_END = 1 ); + +PROCEDURE cmsPipelineInsertStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPcmsStage); StdCall; +PROCEDURE cmsPipelineUnlinkStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPLPcmsStage); StdCall; + +// This function is quite useful to analyze the structure of a Pipeline and retrieve the Stage elements +// that conform the Pipeline. It should be called with the Pipeline, the number of expected elements and +// then a list of expected types followed with a list of double pointers to Stage elements. If +// the function founds a match with current pipeline, it fills the pointers and returns TRUE +// if not, returns FALSE without touching anything. +// FUNCTION cmsPipelineCheckAndRetreiveStages(const cmsPipeline* Lut, n: cmsUInt32Number, ...): cmsBool; StdCall; + +// Matrix has double precision and CLUT has only float precision. That is because an ICC profile can encode +// matrices with far more precision that CLUTS +FUNCTION cmsStageAllocIdentity(ContextID: cmsContext; nChannels: cmsUInt32Number): LPcmsStage; StdCall; +FUNCTION cmsStageAllocToneCurves(ContextID: cmsContext; nChannels: cmsUInt32Number; Curves: LPLPcmsToneCurveArray): LPcmsStage; StdCall; +FUNCTION cmsStageAllocMatrix(ContextID: cmsContext; Rows, Cols: cmsUInt32Number; Matrix, Offset: LPcmsFloat64NumberArray): LPcmsStage; StdCall; + +FUNCTION cmsStageAllocCLut16bit(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall; +FUNCTION cmsStageAllocCLutFloat(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall; + +FUNCTION cmsStageAllocCLut16bitGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall; +FUNCTION cmsStageAllocCLutFloatGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall; + + +FUNCTION cmsStageDup(mpe: LPcmsStage): LPcmsStage; StdCall; +PROCEDURE cmsStageFree(mpe: LPcmsStage); StdCall; +FUNCTION cmsStageNext(mpe: LPcmsStage): LPcmsStage; StdCall; + +FUNCTION cmsStageInputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall; +FUNCTION cmsStageOutputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall; +FUNCTION cmsStageType(mpe: LPcmsStage): cmsStageSignature; StdCall; +FUNCTION cmsStageData(mpe: LPcmsStage): Pointer; StdCall; + +// Sampling + +Type + cmsSAMPLER16 = FUNCTION (Inp, Outp: LPcmsUInt16NumberArray; Cargo: Pointer): cmsInt32Number; CDecl; + cmsSAMPLERFLOAT = FUNCTION (Inp, Outp: LPcmsFloat32NumberArray; Cargo: Pointer): cmsInt32Number; CDecl; + +// Use this flag to prevent changes being written to destination + +Const + +SAMPLER_INSPECT = $01000000; + + +// For CLUT only +FUNCTION cmsStageSampleCLut16bit(mpe: LPcmsStage; Sampler: cmsSAMPLER16; Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall; +FUNCTION cmsStageSampleCLutFloat(mpe: LPcmsStage; Sampler: cmsSAMPLERFLOAT; Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall; + + +// Slicers +FUNCTION cmsSliceSpace16(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray; + Sampler: cmsSAMPLER16; Cargo: Pointer): cmsBool; StdCall; + +FUNCTION cmsSliceSpaceFloat(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray; + Sampler: cmsSAMPLERFLOAT; Cargo: Pointer): cmsBool; StdCall; + +// Multilocalized Unicode management --------------------------------------------------------------------------------------- + +Type + LPcmsMLU = Pointer; + +Const + +cmsNoLanguage = #0#0#0; +cmsNoCountry = #0#0#0; + + +FUNCTION cmsMLUalloc(ContextID: cmsContext; nItems: cmsUInt32Number): LPcmsMLU; StdCall; +PROCEDURE cmsMLUfree(mlu: LPcmsMLU); StdCall; +FUNCTION cmsMLUdup(mlu: LPcmsMLU): LPcmsMLU; StdCall; + +FUNCTION cmsMLUsetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode, ASCIIString: PAnsiChar): cmsBool; StdCall; +FUNCTION cmsMLUsetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; WideString: PWChar): cmsBool; StdCall; + +FUNCTION cmsMLUgetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; + +FUNCTION cmsMLUgetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; + +FUNCTION cmsMLUgetTranslation(mlu: LPcmsMLU; LanguageCode, CountryCode, ObtainedLanguage, ObtainedCountry: PAnsiChar): cmsBool; StdCall; + +// Undercolorremoval & black generation ------------------------------------------------------------------------------------- + +Type + +cmsUcrBg = PACKED RECORD + Ucr, Bg: LPcmsToneCurve; + Desc: LPcmsMLU; + END; + + +// Screening ---------------------------------------------------------------------------------------------------------------- + +Const + + cmsPRINTER_DEFAULT_SCREENS = $0001; + cmsFREQUENCE_UNITS_LINES_CM = $0000; + cmsFREQUENCE_UNITS_LINES_INCH = $0002; + + cmsSPOT_UNKNOWN = 0; + cmsSPOT_PRINTER_DEFAULT = 1; + cmsSPOT_ROUND = 2; + cmsSPOT_DIAMOND = 3; + cmsSPOT_ELLIPSE = 4; + cmsSPOT_LINE = 5; + cmsSPOT_SQUARE = 6; + cmsSPOT_CROSS = 7; + + +Type + +cmsScreeningChannel = PACKED RECORD + + Frequency, + ScreenAngle: cmsFloat64Number; + SpotShape: cmsUInt32Number; + +END; + +cmsScreening = PACKED RECORD + + Flag, + nChannels : cmsUInt32Number; + Channels: Array [0..cmsMAXCHANNELS-1] OF cmsScreeningChannel; +END; + + +// Named color ----------------------------------------------------------------------------------------------------------------- + + +LPcmsNAMEDCOLORLIST = Pointer; + +FUNCTION cmsAllocNamedColorList(ContextID: cmsContext; n, ColorantCount :cmsUInt32Number; + Prefix, Suffix: PAnsiChar): LPcmsNAMEDCOLORLIST; StdCall; + +PROCEDURE cmsFreeNamedColorList(v: LPcmsNAMEDCOLORLIST); StdCall; +FUNCTION cmsDupNamedColorList(v: LPcmsNAMEDCOLORLIST): LPcmsNAMEDCOLORLIST; StdCall; +FUNCTION cmsAppendNamedColor(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar; + PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall; + +FUNCTION cmsNamedColorCount(v: LPcmsNAMEDCOLORLIST): cmsUInt32Number; StdCall; +FUNCTION cmsNamedColorIndex(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar): cmsInt32Number; StdCall; + +FUNCTION cmsNamedColorInfo(v: LPcmsNAMEDCOLORLIST; nColor : cmsUInt32Number; + Name,Prefix, Suffix : PAnsiChar; + PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall; + +// Retrieve named color list from transform +FUNCTION cmsGetNamedColorList(xform: cmsHTRANSFORM ): LPcmsNAMEDCOLORLIST; StdCall; + +// Profile sequence ----------------------------------------------------------------------------------------------------- + +Type + +// Profile sequence descriptor. Some fields come from profile sequence descriptor tag, others +// come from Profile Sequence Identifier Tag + +cmsPSEQDESC = PACKED RECORD + deviceMfg, deviceModel: cmsSignature; + + attributes: cmsUInt64Number; + technology: cmsTechnologySignature; + ProfileID: cmsProfileID; + Manufacturer, + Model, + Description : LPcmsMLU; + END; + + LPcmsSEQDESC = ^cmsPSEQDESC; + +cmsSEQ = PACKED RECORD + + n: cmsUInt32Number; + ContextID: cmsContext; + seq: LPcmsSEQDESC; +END; + +LPcmsSEQ = ^cmsSEQ; + +FUNCTION cmsAllocProfileSequenceDescription(ContextID: cmsContext; n: cmsUInt32Number):LPcmsSEQ; StdCall; +FUNCTION cmsDupProfileSequenceDescription(pseq: LPcmsSEQ):LPcmsSEQ; StdCall; +PROCEDURE cmsFreeProfileSequenceDescription(pseq: LPcmsSEQ); StdCall; + +// Dictionaries -------------------------------------------------------------------------------------------------------- + +TYPE + + LPcmsDICTentry = ^cmsDICTentry; + +cmsDICTentry = PACKED RECORD + + Next: LPcmsDICTentry; + + DisplayName, DisplayValue: LPcmsMLU; + Name, Value : PWChar; +END; + +FUNCTION cmsDictAlloc(ContextID: cmsContext): cmsHANDLE; StdCall; +PROCEDURE cmsDictFree(hDict: cmsHANDLE); StdCall; +FUNCTION cmsDictDup(hDict: cmsHANDLE): cmsHANDLE; StdCall; + +FUNCTION cmsDictAddEntry(hDict: cmsHANDLE; Name, Value: PWChar; DisplayName, DisplayValue : LPcmsMLU): cmsBool; StdCall; +FUNCTION cmsDictGetEntryList(hDict: cmsHANDLE): LPcmsDICTentry; StdCall; +FUNCTION cmsDictNextEntry(e : LPcmsDICTentry): LPcmsDICTentry; StdCall; + +// Access to Profile data ---------------------------------------------------------------------------------------------- +FUNCTION cmsCreateProfilePlaceholder(ContextID: cmsContext): cmsHPROFILE; StdCall; + +FUNCTION cmsGetProfileContextID(hProfile: cmsHPROFILE):cmsContext; StdCall; +FUNCTION cmsGetTagCount(hProfile: cmsHPROFILE): cmsInt32Number; StdCall; +FUNCTION cmsGetTagSignature(hProfile: cmsHPROFILE; n: cmsUInt32Number): cmsTagSignature; StdCall; +FUNCTION cmsIsTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): cmsBool; StdCall; + +// Read and write pre-formatted data +FUNCTION cmsReadTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): Pointer; StdCall; +FUNCTION cmsWriteTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer): cmsBool; StdCall; +FUNCTION cmsLinkTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; dest: cmsTagSignature): cmsBool; StdCall; +FUNCTION cmsTagLinkedTo(hProfile: cmsHPROFILE; sig: cmsTagSignature):cmsTagSignature; StdCall; + +// Read and write raw data +FUNCTION cmsReadRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; Buffer: Pointer; BufferSize: cmsUInt32Number): cmsInt32Number; StdCall; +FUNCTION cmsWriteRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer; Size: cmsUInt32Number): cmsBool; StdCall; + +// Access header data +Const + + cmsEmbeddedProfileFalse = $00000000; + cmsEmbeddedProfileTrue = $00000001; + cmsUseAnywhere = $00000000; + cmsUseWithEmbeddedDataOnly = $00000002; + +FUNCTION cmsGetHeaderFlags(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; +PROCEDURE cmsGetHeaderAttributes(hProfile: cmsHPROFILE; Flags: LPcmsUInt64Number); StdCall; +PROCEDURE cmsGetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall; + +// TODO: +// FUNCTION cmsGetHeaderCreationDateTime(hProfile: cmsHPROFILE; struct tm *Dest): cmsBool; StdCall; + +FUNCTION cmsGetHeaderRenderingIntent(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; +PROCEDURE cmsSetHeaderFlags(hProfile: cmsHPROFILE; Flags: cmsUInt32Number); StdCall; +FUNCTION cmsGetHeaderManufacturer(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; +PROCEDURE cmsSetHeaderManufacturer(hProfile: cmsHPROFILE; manufacturer: cmsUInt32Number ); StdCall; +FUNCTION cmsGetHeaderModel(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; +PROCEDURE cmsSetHeaderModel(hProfile: cmsHPROFILE; model: cmsUInt32Number ); StdCall; +PROCEDURE cmsSetHeaderAttributes(hProfile: cmsHPROFILE; Flags: cmsUInt64Number); StdCall; +PROCEDURE cmsSetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall; +PROCEDURE cmsSetHeaderRenderingIntent(hProfile: cmsHPROFILE; RenderingIntent: cmsUInt32Number ); StdCall; + +FUNCTION cmsGetPCS(hProfile: cmsHPROFILE):cmsColorSpaceSignature; StdCall; +PROCEDURE cmsSetPCS(hProfile: cmsHPROFILE; pcs: cmsColorSpaceSignature); StdCall; +FUNCTION cmsGetColorSpace(hProfile: cmsHPROFILE): cmsColorSpaceSignature; StdCall; +PROCEDURE cmsSetColorSpace(hProfile: cmsHPROFILE; sig: cmsColorSpaceSignature); StdCall; +FUNCTION cmsGetDeviceClass(hProfile: cmsHPROFILE): cmsProfileClassSignature; StdCall; +PROCEDURE cmsSetDeviceClass(hProfile: cmsHPROFILE; sig: cmsProfileClassSignature); StdCall; +PROCEDURE cmsSetProfileVersion(hProfile: cmsHPROFILE; Version: cmsFloat64Number); StdCall; +FUNCTION cmsGetProfileVersion(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall; + +FUNCTION cmsGetEncodedICCversion(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; +PROCEDURE cmsSetEncodedICCversion(hProfile: cmsHPROFILE; Version: cmsUInt32Number); StdCall; + + +Const + + // How profiles may be used + LCMS_USED_AS_INPUT = 0; + LCMS_USED_AS_OUTPUT = 1; + LCMS_USED_AS_PROOF = 2; + +FUNCTION cmsIsIntentSupported(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall; +FUNCTION cmsIsMatrixShaper(hProfile: cmsHPROFILE): cmsBool; StdCall; +FUNCTION cmsIsCLUT(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall; + +// Translate form/to our notation to ICC +FUNCTION _cmsICCcolorSpace(OurNotation: Integer): cmsColorSpaceSignature; StdCall; +FUNCTION _cmsLCMScolorSpace(ProfileSpace: cmsColorSpaceSignature): Integer; StdCall; + +FUNCTION cmsChannelsOf( ColorSpace: cmsColorSpaceSignature): cmsUInt32Number; StdCall; + +// Build a suitable formatter for the colorspace of this profile +FUNCTION cmsFormatterForColorspaceOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall; +FUNCTION cmsFormatterForPCSOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall; + +Type + +// Localized info +cmsInfoType = ( + cmsInfoDescription = 0, + cmsInfoManufacturer = 1, + cmsInfoModel = 2, + cmsInfoCopyright = 3 +); + +FUNCTION cmsGetProfileInfo(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar; + Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; + +FUNCTION cmsGetProfileInfoASCII(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar; + Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; + +// IO handlers ---------------------------------------------------------------------------------------------------------- + +Type + +LPcmsIOHANDLER = Pointer; + +FUNCTION cmsOpenIOhandlerFromFile(ContextID: cmsContext; FileName, AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall; +// FUNCTION cmsOpenIOhandlerFromStream(ContextID: cmsContext; FILE* Stream): LPcmsIOHANDLER; StdCall; +FUNCTION cmsOpenIOhandlerFromMem(ContextID: cmsContext; Buffer: Pointer; size: cmsUInt32Number; AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall; +FUNCTION cmsOpenIOhandlerFromNULL(ContextID: cmsContext): LPcmsIOHANDLER; StdCall; +FUNCTION cmsCloseIOhandler(io: LPcmsIOHANDLER): cmsBool; StdCall; + +// MD5 message digest -------------------------------------------------------------------------------------------------- + +FUNCTION cmsMD5computeID(hProfile: cmsHPROFILE): cmsBool; StdCall; + +// Profile high level funtions ------------------------------------------------------------------------------------------ + +FUNCTION cmsOpenProfileFromFile(ICCProfile : PAnsiChar; sAccess: PAnsiChar): cmsHPROFILE; StdCall; +FUNCTION cmsOpenProfileFromFileTHR(ContextID: cmsContext; ICCProfile, sAccess: PAnsiChar): cmsHPROFILE; StdCall; +// FUNCTION CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall; +// FUNCTION CMSEXPORT cmsOpenProfileFromStreamTHR(ContextID: cmsContext; FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall; +FUNCTION cmsOpenProfileFromMem(MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall; +FUNCTION cmsOpenProfileFromMemTHR(ContextID: cmsContext; MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall; +FUNCTION cmsOpenProfileFromIOhandlerTHR(ContextID: cmsContext; io: LPcmsIOHANDLER): cmsHPROFILE; StdCall; +FUNCTION cmsCloseProfile(hProfile: cmsHPROFILE): cmsBool; StdCall; + +FUNCTION cmsSaveProfileToFile(hProfile: cmsHPROFILE; FileName: PAnsiChar): cmsBool; StdCall; +// FUNCTION CMSEXPORT cmsSaveProfileToStream(hProfile: cmsHPROFILE, FILE* Stream): cmsBool; StdCall; +FUNCTION cmsSaveProfileToMem(hProfile: cmsHPROFILE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall; +FUNCTION cmsSaveProfileToIOhandler(hProfile: cmsHPROFILE; io: LPcmsIOHANDLER):cmsUInt32Number; StdCall; + +// Predefined virtual profiles ------------------------------------------------------------------------------------------ + +FUNCTION cmsCreateRGBProfileTHR(ContextID: cmsContext; + WhitePoint: LPcmsCIExyY; + Primaries: LPcmsCIExyYTRIPLE; + TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; + +FUNCTION cmsCreateRGBProfile(WhitePoint: LPcmsCIExyY; + Primaries: LPcmsCIExyYTRIPLE; + TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; + +FUNCTION cmsCreateGrayProfileTHR(ContextID: cmsContext; + WhitePoint: LPcmsCIExyY; + TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall; + +FUNCTION cmsCreateGrayProfile(WhitePoint: LPcmsCIExyY; + TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall; + +FUNCTION cmsCreateLinearizationDeviceLinkTHR(ContextID: cmsContext; + ColorSpace: cmsColorSpaceSignature; + TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; + +FUNCTION cmsCreateLinearizationDeviceLink(ColorSpace: cmsColorSpaceSignature; + TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; + +FUNCTION cmsCreateInkLimitingDeviceLinkTHR(ContextID: cmsContext; + ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall; + +FUNCTION cmsCreateInkLimitingDeviceLink(ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall; + + +FUNCTION cmsCreateLab2ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; +FUNCTION cmsCreateLab2Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; +FUNCTION cmsCreateLab4ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; +FUNCTION cmsCreateLab4Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; + +FUNCTION cmsCreateXYZProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; +FUNCTION cmsCreateXYZProfile: cmsHPROFILE; StdCall; + +FUNCTION cmsCreate_sRGBProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; +FUNCTION cmsCreate_sRGBProfile: cmsHPROFILE; StdCall; + +FUNCTION cmsCreateBCHSWabstractProfileTHR(ContextID: cmsContext; + nLUTPoints: Integer; + Bright, + Contrast, + Hue, + Saturation: cmsFloat64Number; + TempSrc, + TempDest: Integer): cmsHPROFILE; StdCall; + +FUNCTION cmsCreateBCHSWabstractProfile( nLUTPoints: Integer; + Bright, + Contrast, + Hue, + Saturation: cmsFloat64Number; + TempSrc, + TempDest: Integer): cmsHPROFILE; StdCall; + +FUNCTION cmsCreateNULLProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; +FUNCTION cmsCreateNULLProfile: cmsHPROFILE; StdCall; + +// Converts a transform to a devicelink profile +FUNCTION cmsTransform2DeviceLink(hTransform: cmsHTRANSFORM; Version: cmsFloat64Number; dwFlags: cmsUInt32Number): cmsHPROFILE; StdCall; + +// Intents ---------------------------------------------------------------------------------------------- + +Const + +// ICC Intents +INTENT_PERCEPTUAL = 0; +INTENT_RELATIVE_COLORIMETRIC = 1; +INTENT_SATURATION = 2; +INTENT_ABSOLUTE_COLORIMETRIC = 3; + +// Non-ICC intents +INTENT_PRESERVE_K_ONLY_PERCEPTUAL = 10; +INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC = 11; +INTENT_PRESERVE_K_ONLY_SATURATION = 12; +INTENT_PRESERVE_K_PLANE_PERCEPTUAL = 13; +INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC = 14; +INTENT_PRESERVE_K_PLANE_SATURATION = 15; + +Type +LPPAnsiChar = ^PAnsiChar; + +// Call with NULL as parameters to get the intent count +FUNCTION cmsGetSupportedIntents(nMax: cmsUInt32Number; Codes: LPcmsUInt32Number; Descriptions: LPPAnsiChar): cmsUInt32Number; StdCall; + +Const + +// Flags + +cmsFLAGS_NOCACHE = $0040; // Inhibit 1-pixel cache +cmsFLAGS_NOOPTIMIZE = $0100; // Inhibit optimizations +cmsFLAGS_NULLTRANSFORM = $0200; // Don't transform anyway + +// Proofing flags +cmsFLAGS_GAMUTCHECK = $1000; // Out of Gamut alarm +cmsFLAGS_SOFTPROOFING = $4000; // Do softproofing + +// Misc +cmsFLAGS_BLACKPOINTCOMPENSATION = $2000; +cmsFLAGS_NOWHITEONWHITEFIXUP = $0004; // Don't fix scum dot +cmsFLAGS_HIGHRESPRECALC = $0400; // Use more memory to give better accurancy +cmsFLAGS_LOWRESPRECALC = $0800; // Use less memory to minimize resouces + +// For devicelink creation +cmsFLAGS_8BITS_DEVICELINK = $0008; // Create 8 bits devicelinks +cmsFLAGS_GUESSDEVICECLASS = $0020; // Guess device class (for transform2devicelink) +cmsFLAGS_KEEP_SEQUENCE = $0080; // Keep profile sequence for devicelink creation + +// Specific to a particular optimizations +cmsFLAGS_FORCE_CLUT = $0002; // Force CLUT optimization +cmsFLAGS_CLUT_POST_LINEARIZATION = $0001; // create postlinearization tables if possible +cmsFLAGS_CLUT_PRE_LINEARIZATION = $0010; // create prelinearization tables if possible + +// CRD special +cmsFLAGS_NODEFAULTRESOURCEDEF = $01000000; + +// Fine-tune control over number of gridpoints +FUNCTION cmsFLAGS_GRIDPOINTS(n: Integer): Integer; + + +// Transforms --------------------------------------------------------------------------------------------------- + +type + LPcmsHPROFILEArray = ^cmsHPROFILEArray; + cmsHPROFILEArray = array[0..0] of cmsHPROFILE; + + LPcmsBoolArray = ^cmsBoolArray; + cmsBoolArray = array[0..0] of cmsBool; + +FUNCTION cmsCreateTransformTHR(ContextID: cmsContext; + Input: cmsHPROFILE; + InputFormat: cmsUInt32Number; + Output: cmsHPROFILE; + OutputFormat: cmsUInt32Number; + Intent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; + +FUNCTION cmsCreateTransform(Input: cmsHPROFILE; + InputFormat: cmsUInt32Number; + Output: cmsHPROFILE; + OutputFormat: cmsUInt32Number; + Intent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; + +FUNCTION cmsCreateProofingTransformTHR(ContextID: cmsContext; + Input: cmsHPROFILE; + InputFormat: cmsUInt32Number; + Output: cmsHPROFILE; + OutputFormat: cmsUInt32Number; + Proofing: cmsHPROFILE; + Intent: cmsUInt32Number; + ProofingIntent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; + +FUNCTION cmsCreateProofingTransform(Input: cmsHPROFILE; + InputFormat: cmsUInt32Number; + Output: cmsHPROFILE; + OutputFormat: cmsUInt32Number; + Proofing: cmsHPROFILE; + Intent: cmsUInt32Number; + ProofingIntent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; + +FUNCTION cmsCreateMultiprofileTransformTHR(ContextID: cmsContext; + hProfiles: LPcmsHPROFILEArray; + nProfiles: cmsUInt32Number; + InputFormat: cmsUInt32Number; + OutputFormat: cmsUInt32Number; + Intent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; + + +FUNCTION cmsCreateMultiprofileTransform( hProfiles: LPcmsHPROFILEArray; + nProfiles: cmsUInt32Number; + InputFormat: cmsUInt32Number; + OutputFormat: cmsUInt32Number; + Intent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; + + +FUNCTION cmsCreateExtendedTransform(ContextID: cmsContext; + nProfiles: cmsUInt32Number; + hProfiles: LPcmsHPROFILEArray; + BPC: LPcmsBoolArray; + Intents: LPcmsUInt32NumberArray; + AdaptationStates: LPcmsFloat64NumberArray; + hGamutProfile: cmsHPROFILE; + nGamutPCSposition: cmsUInt32Number; + InputFormat, + OutputFormat: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; + +PROCEDURE cmsDeleteTransform(hTransform: cmsHTRANSFORM); StdCall; + +PROCEDURE cmsDoTransform(Transform: cmsHTRANSFORM; InputBuffer, OutputBuffer: Pointer; size: cmsUInt32Number); StdCall; + +PROCEDURE cmsSetAlarmCodes( NewAlarm: LPcmsUInt16NumberArray); StdCall; +PROCEDURE cmsGetAlarmCodes(NewAlarm: LPcmsUInt16NumberArray); StdCall; + +// Adaptation state for absolute colorimetric intent +FUNCTION cmsSetAdaptationState(d: cmsFloat64Number):cmsFloat64Number; StdCall; + +// Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed +FUNCTION cmsGetTransformContextID(hTransform: cmsHTRANSFORM):cmsContext; StdCall; + +// For backwards compatibility +FUNCTION cmsChangeBuffersFormat(hTransform: cmsHTRANSFORM; InputFormat, OutputFormat: cmsUInt32Number): cmsBool; StdCall; + + + +// PostScript ColorRenderingDictionary and ColorSpaceArray ---------------------------------------------------- + +Type + +cmsPSResourceType = (cmsPS_RESOURCE_CSA, cmsPS_RESOURCE_CRD ) ; + +// lcms2 unified method to access postscript color resources +FUNCTION cmsGetPostScriptColorResource(ContextID: cmsContext; RType: cmsPSResourceType; + hProfile: cmsHPROFILE; + Intent: cmsUInt32Number; + dwFlags: cmsUInt32Number; + io: LPcmsIOHANDLER): cmsUInt32Number; StdCall; + +FUNCTION cmsGetPostScriptCSA(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number ): cmsUInt32Number; StdCall; +FUNCTION cmsGetPostScriptCRD(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number): cmsUInt32Number; StdCall; + + +// IT8.7 / CGATS.17-20$ handling ----------------------------------------------------------------------------- + + +// CGATS.13 parser + +FUNCTION cmsIT8Alloc: cmsHANDLE; StdCall; +PROCEDURE cmsIT8Free(hIT8: cmsHANDLE); StdCall; + +// Tables + +FUNCTION cmsIT8TableCount(hIT8: cmsHANDLE): Integer; StdCall; +FUNCTION cmsIT8SetTable(hIT8: cmsHANDLE; nTable: Integer): Integer; StdCall; + +// Persistence +FUNCTION cmsIT8LoadFromFile(cFileName: PAnsiChar): cmsHANDLE; StdCall; +FUNCTION cmsIT8LoadFromMem(Ptr: Pointer; size :DWord): cmsHANDLE; StdCall; + +FUNCTION cmsIT8SaveToFile(hIT8: cmsHANDLE; cFileName: PAnsiChar): cmsBool; StdCall; +FUNCTION cmsIT8SaveToMem(hIT8: cmsHANDLE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall; +// Properties + +FUNCTION cmsIT8GetSheetType(hIT8: cmsHANDLE): PAnsiChar; StdCall; +FUNCTION cmsIT8SetSheetType(hIT8: cmsHANDLE; TheType: PAnsiChar): cmsBool; StdCall; + +FUNCTION cmsIT8SetComment(hIT8: cmsHANDLE; cComment: PAnsiChar): cmsBool; StdCall; + +FUNCTION cmsIT8SetPropertyStr(hIT8: cmsHANDLE; cProp, Str: PAnsiChar): cmsBool; StdCall; +FUNCTION cmsIT8SetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Double): cmsBool; StdCall; +FUNCTION cmsIT8SetPropertyHex(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Integer): cmsBool; StdCall; +FUNCTION cmsIT8SetPropertyUncooked(hIT8: cmsHANDLE; Key, Buffer: PAnsiChar): cmsBool; StdCall; + + +FUNCTION cmsIT8GetProperty(hIT8: cmsHANDLE; cProp: PAnsiChar): PAnsiChar; StdCall; +FUNCTION cmsIT8GetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar): Double; StdCall; +FUNCTION cmsIT8EnumProperties(hIT8: cmsHANDLE; var PropertyNames: LPPAnsiChar): Integer; StdCall; + +// Datasets + +FUNCTION cmsIT8GetDataRowCol(hIT8: cmsHANDLE; row, col: Integer): PAnsiChar; StdCall; +FUNCTION cmsIT8GetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer): Double; StdCall; + +FUNCTION cmsIT8SetDataRowCol(hIT8: cmsHANDLE; row, col: Integer; Val: PAnsiChar): cmsBool; StdCall; +FUNCTION cmsIT8SetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer; Val: Double): cmsBool; StdCall; + +FUNCTION cmsIT8GetData(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar): PAnsiChar; StdCall; + +FUNCTION cmsIT8GetDataDbl(hIT8: cmsHANDLE;cPatch, cSample: PAnsiChar): Double; StdCall; + +FUNCTION cmsIT8SetData(hIT8: cmsHANDLE; cPatch, cSample, Val: PAnsiChar): cmsBool; StdCall; + +FUNCTION cmsIT8SetDataDbl(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar; Val: Double): cmsBool; StdCall; + +FUNCTION cmsIT8SetDataFormat(hIT8: cmsHANDLE; n: Integer; Sample: PAnsiChar): cmsBool; StdCall; +FUNCTION cmsIT8EnumDataFormat(hIT8: cmsHANDLE; var SampleNames: LPPAnsiChar): Integer; StdCall; +FUNCTION cmsIT8GetPatchName(hIT8: cmsHANDLE; nPatch: Integer; Buffer: PAnsiChar): PAnsiChar; StdCall; + +// The LABEL extension +FUNCTION cmsIT8SetTableByLabel(hIT8: cmsHANDLE; cSet, cField, ExpectedType: PAnsiChar): Integer; StdCall; + +FUNCTION cmsIT8FindDataFormat(hIT8: cmsHANDLE; cSample: PAnsiChar): Integer; StdCall; + +// Formatter for double +PROCEDURE cmsIT8DefineDblFormat(hIT8: cmsHANDLE; Formatter: PAnsiChar); StdCall; + +// Gamut boundary description routines ------------------------------------------------------------------------------ + +FUNCTION cmsGBDAlloc(ContextID: cmsContext):cmsHANDLE; StdCall; +PROCEDURE cmsGBDFree(hGBD: cmsHANDLE); StdCall; +FUNCTION cmsGDBAddPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall; +FUNCTION cmsGDBCompute(hGDB: cmsHANDLE; dwFlags: cmsUInt32Number): cmsBool; StdCall; +FUNCTION cmsGDBCheckPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall; + +// Feature detection ---------------------------------------------------------------------------------------------- + +// Estimate the black point +FUNCTION cmsDetectBlackPoint( BlackPoint: LPcmsCIEXYZ; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsBool; StdCall; + +// Estimate total area coverage +FUNCTION cmsDetectTAC(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall; + + +// Poor man's gamut mapping +FUNCTION cmsDesaturateLab(Lab: LPcmsCIELab; amax, amin, bmax, bmin: cmsFloat64Number): cmsBool; StdCall; + + +IMPLEMENTATION + + + + FUNCTION FLOAT_SH(a: cmsUInt32Number): cmsUInt32Number; begin FLOAT_SH := ((a) shl 22) end; + FUNCTION OPTIMIZED_SH(s: cmsUInt32Number): cmsUInt32Number; begin OPTIMIZED_SH := ((s) shl 21) end; + FUNCTION COLORSPACE_SH(s: cmsUInt32Number):cmsUInt32Number; begin COLORSPACE_SH := ((s) shl 16) end; + FUNCTION SWAPFIRST_SH(s: cmsUInt32Number):cmsUInt32Number; begin SWAPFIRST_SH := ((s) shl 14) end; + FUNCTION FLAVOR_SH(s: cmsUInt32Number):cmsUInt32Number; begin FLAVOR_SH := ((s) shl 13) end; + FUNCTION PLANAR_SH(p: cmsUInt32Number):cmsUInt32Number; begin PLANAR_SH := ((p) shl 12) end; + FUNCTION ENDIAN16_SH(e: cmsUInt32Number):cmsUInt32Number; begin ENDIAN16_SH := ((e) shl 11) end; + FUNCTION DOSWAP_SH(e: cmsUInt32Number):cmsUInt32Number; begin DOSWAP_SH := ((e) shl 10) end; + FUNCTION EXTRA_SH(e: cmsUInt32Number):cmsUInt32Number; begin EXTRA_SH := ((e) shl 7) end; + FUNCTION CHANNELS_SH(c: cmsUInt32Number):cmsUInt32Number; begin CHANNELS_SH := ((c) shl 3) end; + FUNCTION BYTES_SH(b: cmsUInt32Number):cmsUInt32Number; begin BYTES_SH := (b) end; + + + FUNCTION T_FLOAT(a: cmsUInt32Number): cmsUInt32Number; begin T_FLOAT := (((a) shr 22) and 1) end; + FUNCTION T_OPTIMIZED(o: cmsUInt32Number): cmsUInt32Number; begin T_OPTIMIZED := (((o) shr 21) and 1) end; + FUNCTION T_COLORSPACE(s: cmsUInt32Number): cmsUInt32Number; begin T_COLORSPACE := (((s) shr 16) and 31) end; + FUNCTION T_SWAPFIRST(s: cmsUInt32Number): cmsUInt32Number; begin T_SWAPFIRST := (((s) shr 14) and 1) end; + FUNCTION T_FLAVOR(s: cmsUInt32Number): cmsUInt32Number; begin T_FLAVOR := (((s) shr 13) and 1) end; + FUNCTION T_PLANAR(p: cmsUInt32Number): cmsUInt32Number; begin T_PLANAR := (((p) shr 12) and 1) end; + FUNCTION T_ENDIAN16(e: cmsUInt32Number): cmsUInt32Number; begin T_ENDIAN16 := (((e) shr 11) and 1) end; + FUNCTION T_DOSWAP(e: cmsUInt32Number): cmsUInt32Number; begin T_DOSWAP := (((e) shr 10) and 1) end; + FUNCTION T_EXTRA(e: cmsUInt32Number): cmsUInt32Number; begin T_EXTRA := (((e) shr 7) and 7) end; + FUNCTION T_CHANNELS(c: cmsUInt32Number): cmsUInt32Number; begin T_CHANNELS := (((c) shr 3) and 15) end; + FUNCTION T_BYTES(b: cmsUInt32Number): cmsUInt32Number; begin T_BYTES := ((b) and 7) end; + + + +// + + +FUNCTION cmsPlugin(Plugin: Pointer): cmsBool; StdCall; external 'lcms2.dll'; +PROCEDURE cmsUnregisterPlugins; StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetLogErrorHandler(Fn: cmsLogErrorHandlerFunction); StdCall; external 'lcms2.dll'; +FUNCTION cmsD50_XYZ: LPcmsCIEXYZ; StdCall; external 'lcms2.dll'; +FUNCTION cmsD50_xyY: LPcmsCIExyY; StdCall; external 'lcms2.dll'; +PROCEDURE cmsXYZ2xyY(Dest: LPcmsCIExyY; Source: LPcmsCIEXYZ); StdCall; external 'lcms2.dll'; +PROCEDURE cmsxyY2XYZ(Dest: LPcmsCIEXYZ; Source: LPcmsCIExyY); StdCall; external 'lcms2.dll'; +PROCEDURE cmsLab2XYZ(WhitePoint: LPcmsCIEXYZ; xyz: LPcmsCIEXYZ; Lab: LPcmsCIELab); StdCall; external 'lcms2.dll'; +PROCEDURE cmsXYZ2Lab(WhitePoint: LPcmsCIEXYZ; Lab: LPcmsCIELab; xyz: LPcmsCIEXYZ); StdCall; external 'lcms2.dll'; +PROCEDURE cmsLab2LCh(LCh: LPcmsCIELCh; Lab: LPcmsCIELab); StdCall; external 'lcms2.dll'; +PROCEDURE cmsLCh2Lab(Lab: LPcmsCIELab; LCh: LPcmsCIELCh); StdCall; external 'lcms2.dll'; +PROCEDURE cmsLabEncoded2Float(Lab: LPcmsCIELab; wLab: Pointer); StdCall; external 'lcms2.dll'; +PROCEDURE cmsLabEncoded2FloatV2(Lab: LPcmsCIELab; wLab: Pointer); StdCall; external 'lcms2.dll'; +PROCEDURE cmsFloat2LabEncoded(wLab: Pointer; Lab: LPcmsCIELab); StdCall; external 'lcms2.dll'; +PROCEDURE cmsFloat2LabEncodedV2(wLab: Pointer; Lab: LPcmsCIELab); StdCall; external 'lcms2.dll'; +PROCEDURE cmsXYZEncoded2Float(fxyz : LPcmsCIEXYZ; XYZ: Pointer); StdCall; external 'lcms2.dll'; +PROCEDURE cmsFloat2XYZEncoded(XYZ: Pointer; fXYZ: LPcmsCIEXYZ); StdCall; external 'lcms2.dll'; +FUNCTION cmsDeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external 'lcms2.dll'; +FUNCTION cmsCIE94DeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external 'lcms2.dll'; +FUNCTION cmsBFDdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external 'lcms2.dll'; +FUNCTION cmsCMCdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external 'lcms2.dll'; +FUNCTION cmsCIE2000DeltaE(Lab1, Lab2: LPcmsCIELab; Kl, Kc, Kh: Double): Double; StdCall; external 'lcms2.dll'; +FUNCTION cmsWhitePointFromTemp(var WhitePoint: cmsCIExyY; TempK: cmsFloat64Number) : cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsTempFromWhitePoint(var TeampK: cmsFloat64Number; var WhitePoint: cmsCIExyY) : cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsAdaptToIlluminant(Result: LPcmsCIEXYZ; SourceWhitePt: LPcmsCIEXYZ; + Illuminant: LPcmsCIEXYZ; Value: LPcmsCIEXYZ): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsCIECAM02Init(pVC : LPcmsViewingConditions ) : Pointer; StdCall; external 'lcms2.dll'; +PROCEDURE cmsCIECAM02Done(hModel : Pointer); StdCall; external 'lcms2.dll'; +PROCEDURE cmsCIECAM02Forward(hModel: Pointer; pIn: LPcmsCIEXYZ; pOut: LPcmsJCh ); StdCall; external 'lcms2.dll'; +PROCEDURE cmsCIECAM02Reverse(hModel: Pointer; pIn: LPcmsJCh; pOut: LPcmsCIEXYZ ); StdCall; external 'lcms2.dll'; +FUNCTION cmsBuildSegmentedToneCurve(ContextID: cmsContext; nSegments: cmsInt32Number; Segments: LPcmsCurveSegmentArray): LPcmsToneCurve; StdCall; external 'lcms2.dll'; +FUNCTION cmsBuildParametricToneCurve(ContextID: cmsContext; CType: cmsInt32Number; Params: LPcmsFloat64NumberArray): LPcmsToneCurve; StdCall; external 'lcms2.dll'; +FUNCTION cmsBuildGamma(ContextID: cmsContext; Gamma: cmsFloat64Number): LPcmsToneCurve; StdCall; external 'lcms2.dll'; +FUNCTION cmsBuildTabulatedToneCurve16(ContextID: cmsContext; nEntries: cmsInt32Number; values: LPcmsUInt16NumberArray): LPcmsToneCurve; StdCall; external 'lcms2.dll'; +FUNCTION cmsBuildTabulatedToneCurveFloat(ContextID: cmsContext; nEntries: cmsUInt32Number; values: LPcmsFloat32NumberArray): LPcmsToneCurve; StdCall; external 'lcms2.dll'; +PROCEDURE cmsFreeToneCurve(Curve: LPcmsToneCurve); StdCall; external 'lcms2.dll'; +PROCEDURE cmsFreeToneCurveTriple(Curve: LPLPcmsToneCurveArray); StdCall; external 'lcms2.dll'; +FUNCTION cmsDupToneCurve(Src: LPcmsToneCurve): LPcmsToneCurve; StdCall; external 'lcms2.dll'; +FUNCTION cmsReverseToneCurve(InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall; external 'lcms2.dll'; +FUNCTION cmsReverseToneCurveEx(nResultSamples: cmsInt32Number; InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall; external 'lcms2.dll'; +FUNCTION cmsJoinToneCurve(ContextID: cmsContext; X, Y: LPcmsToneCurve; nPoints: cmsUInt32Number ): LPcmsToneCurve; StdCall; external 'lcms2.dll'; +FUNCTION cmsSmoothToneCurve(Tab: LPcmsToneCurve; lambda: cmsFloat64Number): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsEvalToneCurveFloat(Curve: LPcmsToneCurve; v: cmsFloat32Number):cmsFloat32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsEvalToneCurve16(Curve: LPcmsToneCurve; v:cmsUInt16Number):cmsUInt16Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsIsToneCurveMultisegment(InGamma: LPcmsToneCurve):cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsIsToneCurveLinear(Curve: LPcmsToneCurve):cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsIsToneCurveMonotonic(t: LPcmsToneCurve):cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsIsToneCurveDescending(t: LPcmsToneCurve):cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsGetToneCurveParametricType(t: LPcmsToneCurve):cmsInt32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsEstimateGamma(t: LPcmsToneCurve; Precision:cmsFloat64Number):cmsFloat64Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsPipelineAlloc(ContextID: cmsContext; InputChannels, OutputChannels: cmsUInt32Number): LPcmsPipeline; StdCall; external 'lcms2.dll'; +PROCEDURE cmsPipelineFree(lut: LPcmsPipeline); StdCall; external 'lcms2.dll'; +FUNCTION cmsPipelineDup(Orig: LPcmsPipeline): LPcmsPipeline; StdCall; external 'lcms2.dll'; +FUNCTION cmsPipelineInputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsPipelineOutputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsPipelineStageCount(lut: LPcmsPipeline): cmsUInt32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsPipelineGetPtrToFirstStage(lut: LPcmsPipeline): LPcmsStage; StdCall; external 'lcms2.dll'; +FUNCTION cmsPipelineGetPtrToLastStage(lut: LPcmsPipeline): LPcmsStage; StdCall; external 'lcms2.dll'; + +PROCEDURE cmsPipelineEval16(Inv, Outv: LPcmsUInt16NumberArray; lut: LPcmsPipeline); StdCall; external 'lcms2.dll'; +PROCEDURE cmsPipelineEvalFloat(Inv, Outv: LPcmsFloat32NumberArray; lut: LPcmsPipeline); StdCall; external 'lcms2.dll'; + +FUNCTION cmsPipelineEvalReverseFloat(Target, Result, Hint: LPcmsFloat32NumberArray; lut: LPcmsPipeline): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsPipelineCat(l1, l2: LPcmsPipeline): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsPipelineSetSaveAs8bitsFlag(lut: LPcmsPipeline; On: cmsBool): cmsBool; StdCall; external 'lcms2.dll'; +PROCEDURE cmsPipelineInsertStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPcmsStage); StdCall; external 'lcms2.dll'; +PROCEDURE cmsPipelineUnlinkStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPLPcmsStage); StdCall; external 'lcms2.dll'; +FUNCTION cmsStageAllocIdentity(ContextID: cmsContext; nChannels: cmsUInt32Number): LPcmsStage; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageAllocToneCurves(ContextID: cmsContext; nChannels: cmsUInt32Number; Curves: LPLPcmsToneCurveArray): LPcmsStage; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageAllocMatrix(ContextID: cmsContext; Rows, Cols: cmsUInt32Number; Matrix, Offset: LPcmsFloat64NumberArray): LPcmsStage; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageAllocCLut16bit(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageAllocCLutFloat(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageAllocCLut16bitGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageAllocCLutFloatGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageDup(mpe: LPcmsStage): LPcmsStage; StdCall; external 'lcms2.dll'; +PROCEDURE cmsStageFree(mpe: LPcmsStage); StdCall; external 'lcms2.dll'; +FUNCTION cmsStageNext(mpe: LPcmsStage): LPcmsStage; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageInputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageOutputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageType(mpe: LPcmsStage): cmsStageSignature; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageData(mpe: LPcmsStage): Pointer; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageSampleCLut16bit(mpe: LPcmsStage; Sampler: cmsSAMPLER16; Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsStageSampleCLutFloat(mpe: LPcmsStage; Sampler: cmsSAMPLERFLOAT; Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsSliceSpace16(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray; + Sampler: cmsSAMPLER16; Cargo: Pointer): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsSliceSpaceFloat(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray; + Sampler: cmsSAMPLERFLOAT; Cargo: Pointer): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsMLUalloc(ContextID: cmsContext; nItems: cmsUInt32Number): LPcmsMLU; StdCall; external 'lcms2.dll'; +PROCEDURE cmsMLUfree(mlu: LPcmsMLU); StdCall; external 'lcms2.dll'; +FUNCTION cmsMLUdup(mlu: LPcmsMLU): LPcmsMLU; StdCall; external 'lcms2.dll'; + +FUNCTION cmsMLUsetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode, ASCIIString: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsMLUsetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; WideString: PWChar): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsMLUgetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external 'lcms2.dll'; + +FUNCTION cmsMLUgetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external 'lcms2.dll'; + +FUNCTION cmsMLUgetTranslation(mlu: LPcmsMLU; LanguageCode, CountryCode, ObtainedLanguage, ObtainedCountry: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsAllocNamedColorList(ContextID: cmsContext; n, ColorantCount :cmsUInt32Number; + Prefix, Suffix: PAnsiChar): LPcmsNAMEDCOLORLIST; StdCall; external 'lcms2.dll'; + +PROCEDURE cmsFreeNamedColorList(v: LPcmsNAMEDCOLORLIST); StdCall; external 'lcms2.dll'; +FUNCTION cmsDupNamedColorList(v: LPcmsNAMEDCOLORLIST): LPcmsNAMEDCOLORLIST; StdCall; external 'lcms2.dll'; +FUNCTION cmsAppendNamedColor(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar; + PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsNamedColorCount(v: LPcmsNAMEDCOLORLIST): cmsUInt32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsNamedColorIndex(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar): cmsInt32Number; StdCall; external 'lcms2.dll'; + +FUNCTION cmsNamedColorInfo(v: LPcmsNAMEDCOLORLIST; nColor : cmsUInt32Number; + Name,Prefix, Suffix : PAnsiChar; + PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsGetNamedColorList(xform: cmsHTRANSFORM ): LPcmsNAMEDCOLORLIST; StdCall; external 'lcms2.dll'; + +FUNCTION cmsAllocProfileSequenceDescription(ContextID: cmsContext; n: cmsUInt32Number):LPcmsSEQ; StdCall; external 'lcms2.dll'; +FUNCTION cmsDupProfileSequenceDescription(pseq: LPcmsSEQ):LPcmsSEQ; StdCall; external 'lcms2.dll'; +PROCEDURE cmsFreeProfileSequenceDescription(pseq: LPcmsSEQ); StdCall; external 'lcms2.dll'; + +FUNCTION cmsDictAlloc(ContextID: cmsContext): cmsHANDLE; StdCall; external 'lcms2.dll'; +PROCEDURE cmsDictFree(hDict: cmsHANDLE); StdCall; external 'lcms2.dll'; +FUNCTION cmsDictDup(hDict: cmsHANDLE): cmsHANDLE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsDictAddEntry(hDict: cmsHANDLE; Name, Value: PWChar; DisplayName, DisplayValue : LPcmsMLU): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsDictGetEntryList(hDict: cmsHANDLE): LPcmsDICTentry; StdCall; external 'lcms2.dll'; +FUNCTION cmsDictNextEntry(e : LPcmsDICTentry): LPcmsDICTentry; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateProfilePlaceholder(ContextID: cmsContext): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsGetProfileContextID(hProfile: cmsHPROFILE):cmsContext; StdCall; external 'lcms2.dll'; +FUNCTION cmsGetTagCount(hProfile: cmsHPROFILE): cmsInt32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsGetTagSignature(hProfile: cmsHPROFILE; n: cmsUInt32Number): cmsTagSignature; StdCall; external 'lcms2.dll'; +FUNCTION cmsIsTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsReadTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): Pointer; StdCall; external 'lcms2.dll'; +FUNCTION cmsWriteTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsLinkTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; dest: cmsTagSignature): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsTagLinkedTo(hProfile: cmsHPROFILE; sig: cmsTagSignature):cmsTagSignature; StdCall; external 'lcms2.dll'; + +FUNCTION cmsReadRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; Buffer: Pointer; BufferSize: cmsUInt32Number): cmsInt32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsWriteRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer; Size: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsGetHeaderFlags(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external 'lcms2.dll'; +PROCEDURE cmsGetHeaderAttributes(hProfile: cmsHPROFILE; Flags: LPcmsUInt64Number); StdCall; external 'lcms2.dll'; +PROCEDURE cmsGetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall; external 'lcms2.dll'; + +FUNCTION cmsGetHeaderRenderingIntent(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetHeaderFlags(hProfile: cmsHPROFILE; Flags: cmsUInt32Number); StdCall; external 'lcms2.dll'; +FUNCTION cmsGetHeaderManufacturer(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetHeaderManufacturer(hProfile: cmsHPROFILE; manufacturer: cmsUInt32Number ); StdCall; external 'lcms2.dll'; +FUNCTION cmsGetHeaderModel(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetHeaderModel(hProfile: cmsHPROFILE; model: cmsUInt32Number ); StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetHeaderAttributes(hProfile: cmsHPROFILE; Flags: cmsUInt64Number); StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetHeaderRenderingIntent(hProfile: cmsHPROFILE; RenderingIntent: cmsUInt32Number ); StdCall; external 'lcms2.dll'; + +FUNCTION cmsGetPCS(hProfile: cmsHPROFILE):cmsColorSpaceSignature; StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetPCS(hProfile: cmsHPROFILE; pcs: cmsColorSpaceSignature); StdCall; external 'lcms2.dll'; +FUNCTION cmsGetColorSpace(hProfile: cmsHPROFILE): cmsColorSpaceSignature; StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetColorSpace(hProfile: cmsHPROFILE; sig: cmsColorSpaceSignature); StdCall; external 'lcms2.dll'; +FUNCTION cmsGetDeviceClass(hProfile: cmsHPROFILE): cmsProfileClassSignature; StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetDeviceClass(hProfile: cmsHPROFILE; sig: cmsProfileClassSignature); StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetProfileVersion(hProfile: cmsHPROFILE; Version: cmsFloat64Number); StdCall; external 'lcms2.dll'; +FUNCTION cmsGetProfileVersion(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall; external 'lcms2.dll'; + +FUNCTION cmsGetEncodedICCversion(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external 'lcms2.dll'; +PROCEDURE cmsSetEncodedICCversion(hProfile: cmsHPROFILE; Version: cmsUInt32Number); StdCall; external 'lcms2.dll'; + + +FUNCTION cmsIsIntentSupported(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsIsMatrixShaper(hProfile: cmsHPROFILE): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsIsCLUT(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION _cmsICCcolorSpace(OurNotation: Integer): cmsColorSpaceSignature; StdCall; external 'lcms2.dll'; +FUNCTION _cmsLCMScolorSpace(ProfileSpace: cmsColorSpaceSignature): Integer; StdCall; external 'lcms2.dll'; + +FUNCTION cmsChannelsOf( ColorSpace: cmsColorSpaceSignature): cmsUInt32Number; StdCall; external 'lcms2.dll'; + +FUNCTION cmsFormatterForColorspaceOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsFormatterForPCSOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall; external 'lcms2.dll'; + + +FUNCTION cmsGetProfileInfo(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar; + Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external 'lcms2.dll'; + +FUNCTION cmsGetProfileInfoASCII(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar; + Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external 'lcms2.dll'; + + +FUNCTION cmsOpenIOhandlerFromFile(ContextID: cmsContext; FileName, AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall; external 'lcms2.dll'; +// FUNCTION cmsOpenIOhandlerFromStream(ContextID: cmsContext; FILE* Stream): LPcmsIOHANDLER; StdCall; external 'lcms2.dll'; +FUNCTION cmsOpenIOhandlerFromMem(ContextID: cmsContext; Buffer: Pointer; size: cmsUInt32Number; AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall; external 'lcms2.dll'; +FUNCTION cmsOpenIOhandlerFromNULL(ContextID: cmsContext): LPcmsIOHANDLER; StdCall; external 'lcms2.dll'; +FUNCTION cmsCloseIOhandler(io: LPcmsIOHANDLER): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsMD5computeID(hProfile: cmsHPROFILE): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsOpenProfileFromFile(ICCProfile : PAnsiChar; sAccess: PAnsiChar): cmsHPROFILE; StdCall; external 'lcms2.dll'; +FUNCTION cmsOpenProfileFromFileTHR(ContextID: cmsContext; ICCProfile, sAccess: PAnsiChar): cmsHPROFILE; StdCall; external 'lcms2.dll'; +// FUNCTION CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall; external 'lcms2.dll'; +// FUNCTION CMSEXPORT cmsOpenProfileFromStreamTHR(ContextID: cmsContext; FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall; external 'lcms2.dll'; +FUNCTION cmsOpenProfileFromMem(MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall; external 'lcms2.dll'; +FUNCTION cmsOpenProfileFromMemTHR(ContextID: cmsContext; MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall; external 'lcms2.dll'; +FUNCTION cmsOpenProfileFromIOhandlerTHR(ContextID: cmsContext; io: LPcmsIOHANDLER): cmsHPROFILE; StdCall; external 'lcms2.dll'; +FUNCTION cmsCloseProfile(hProfile: cmsHPROFILE): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsSaveProfileToFile(hProfile: cmsHPROFILE; FileName: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll'; +// FUNCTION CMSEXPORT cmsSaveProfileToStream(hProfile: cmsHPROFILE, FILE* Stream): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsSaveProfileToMem(hProfile: cmsHPROFILE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsSaveProfileToIOhandler(hProfile: cmsHPROFILE; io: LPcmsIOHANDLER):cmsUInt32Number; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateRGBProfileTHR(ContextID: cmsContext; + WhitePoint: LPcmsCIExyY; + Primaries: LPcmsCIExyYTRIPLE; + TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateRGBProfile(WhitePoint: LPcmsCIExyY; + Primaries: LPcmsCIExyYTRIPLE; + TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateGrayProfileTHR(ContextID: cmsContext; + WhitePoint: LPcmsCIExyY; + TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateGrayProfile(WhitePoint: LPcmsCIExyY; + TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateLinearizationDeviceLinkTHR(ContextID: cmsContext; + ColorSpace: cmsColorSpaceSignature; + TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateLinearizationDeviceLink(ColorSpace: cmsColorSpaceSignature; + TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateInkLimitingDeviceLinkTHR(ContextID: cmsContext; + ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateInkLimitingDeviceLink(ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall; external 'lcms2.dll'; + + +FUNCTION cmsCreateLab2ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external 'lcms2.dll'; +FUNCTION cmsCreateLab2Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external 'lcms2.dll'; +FUNCTION cmsCreateLab4ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external 'lcms2.dll'; +FUNCTION cmsCreateLab4Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateXYZProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; external 'lcms2.dll'; +FUNCTION cmsCreateXYZProfile: cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreate_sRGBProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; external 'lcms2.dll'; +FUNCTION cmsCreate_sRGBProfile: cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateBCHSWabstractProfileTHR(ContextID: cmsContext; + nLUTPoints: Integer; + Bright, + Contrast, + Hue, + Saturation: cmsFloat64Number; + TempSrc, + TempDest: Integer): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateBCHSWabstractProfile( nLUTPoints: Integer; + Bright, + Contrast, + Hue, + Saturation: cmsFloat64Number; + TempSrc, + TempDest: Integer): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateNULLProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; external 'lcms2.dll'; +FUNCTION cmsCreateNULLProfile: cmsHPROFILE; StdCall; external 'lcms2.dll'; + +// Converts a transform to a devicelink profile +FUNCTION cmsTransform2DeviceLink(hTransform: cmsHTRANSFORM; Version: cmsFloat64Number; dwFlags: cmsUInt32Number): cmsHPROFILE; StdCall; external 'lcms2.dll'; + +// Call with NULL as parameters to get the intent count +FUNCTION cmsGetSupportedIntents(nMax: cmsUInt32Number; Codes: LPcmsUInt32Number; Descriptions: LPPAnsiChar): cmsUInt32Number; StdCall; external 'lcms2.dll'; + +FUNCTION cmsFLAGS_GRIDPOINTS(n: Integer): Integer; begin cmsFLAGS_GRIDPOINTS := (((n) and $FF) shl 16) end; + + +FUNCTION cmsCreateTransformTHR(ContextID: cmsContext; + Input: cmsHPROFILE; + InputFormat: cmsUInt32Number; + Output: cmsHPROFILE; + OutputFormat: cmsUInt32Number; + Intent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateTransform(Input: cmsHPROFILE; + InputFormat: cmsUInt32Number; + Output: cmsHPROFILE; + OutputFormat: cmsUInt32Number; + Intent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateProofingTransformTHR(ContextID: cmsContext; + Input: cmsHPROFILE; + InputFormat: cmsUInt32Number; + Output: cmsHPROFILE; + OutputFormat: cmsUInt32Number; + Proofing: cmsHPROFILE; + Intent: cmsUInt32Number; + ProofingIntent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateProofingTransform(Input: cmsHPROFILE; + InputFormat: cmsUInt32Number; + Output: cmsHPROFILE; + OutputFormat: cmsUInt32Number; + Proofing: cmsHPROFILE; + Intent: cmsUInt32Number; + ProofingIntent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll'; + +FUNCTION cmsCreateMultiprofileTransformTHR(ContextID: cmsContext; + hProfiles: LPcmsHPROFILEArray; + nProfiles: cmsUInt32Number; + InputFormat: cmsUInt32Number; + OutputFormat: cmsUInt32Number; + Intent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll'; + + +FUNCTION cmsCreateMultiprofileTransform( hProfiles: LPcmsHPROFILEArray; + nProfiles: cmsUInt32Number; + InputFormat: cmsUInt32Number; + OutputFormat: cmsUInt32Number; + Intent: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll'; + + +FUNCTION cmsCreateExtendedTransform(ContextID: cmsContext; + nProfiles: cmsUInt32Number; + hProfiles: LPcmsHPROFILEArray; + BPC: LPcmsBoolArray; + Intents: LPcmsUInt32NumberArray; + AdaptationStates: LPcmsFloat64NumberArray; + hGamutProfile: cmsHPROFILE; + nGamutPCSposition: cmsUInt32Number; + InputFormat, + OutputFormat: cmsUInt32Number; + dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll'; + +PROCEDURE cmsDeleteTransform(hTransform: cmsHTRANSFORM); StdCall; external 'lcms2.dll'; + +PROCEDURE cmsDoTransform(Transform: cmsHTRANSFORM; InputBuffer, OutputBuffer: Pointer; size: cmsUInt32Number); StdCall; external 'lcms2.dll'; + +PROCEDURE cmsSetAlarmCodes( NewAlarm: LPcmsUInt16NumberArray); StdCall; external 'lcms2.dll'; +PROCEDURE cmsGetAlarmCodes(NewAlarm: LPcmsUInt16NumberArray); StdCall; external 'lcms2.dll'; + +// Adaptation state for absolute colorimetric intent +FUNCTION cmsSetAdaptationState(d: cmsFloat64Number):cmsFloat64Number; StdCall; external 'lcms2.dll'; + +// Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed +FUNCTION cmsGetTransformContextID(hTransform: cmsHTRANSFORM):cmsContext; StdCall; external 'lcms2.dll'; + +// For backwards compatibility +FUNCTION cmsChangeBuffersFormat(hTransform: cmsHTRANSFORM; InputFormat, OutputFormat: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll'; + + +// lcms2 unified method to access postscript color resources +FUNCTION cmsGetPostScriptColorResource(ContextID: cmsContext; RType: cmsPSResourceType; + hProfile: cmsHPROFILE; + Intent: cmsUInt32Number; + dwFlags: cmsUInt32Number; + io: LPcmsIOHANDLER): cmsUInt32Number; StdCall; external 'lcms2.dll'; + +FUNCTION cmsGetPostScriptCSA(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number ): cmsUInt32Number; StdCall; external 'lcms2.dll'; +FUNCTION cmsGetPostScriptCRD(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number): cmsUInt32Number; StdCall; external 'lcms2.dll'; + + +// CGATS.13 parser + +FUNCTION cmsIT8Alloc: cmsHANDLE; StdCall; external 'lcms2.dll'; +PROCEDURE cmsIT8Free(hIT8: cmsHANDLE); StdCall; external 'lcms2.dll'; + +// Tables + +FUNCTION cmsIT8TableCount(hIT8: cmsHANDLE): Integer; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8SetTable(hIT8: cmsHANDLE; nTable: Integer): Integer; StdCall; external 'lcms2.dll'; + +// Persistence +FUNCTION cmsIT8LoadFromFile(cFileName: PAnsiChar): cmsHANDLE; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8LoadFromMem(Ptr: Pointer; size :DWord): cmsHANDLE; StdCall; external 'lcms2.dll'; + +FUNCTION cmsIT8SaveToFile(hIT8: cmsHANDLE; cFileName: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8SaveToMem(hIT8: cmsHANDLE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll'; +// Properties + +FUNCTION cmsIT8GetSheetType(hIT8: cmsHANDLE): PAnsiChar; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8SetSheetType(hIT8: cmsHANDLE; TheType: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsIT8SetComment(hIT8: cmsHANDLE; cComment: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsIT8SetPropertyStr(hIT8: cmsHANDLE; cProp, Str: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8SetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Double): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8SetPropertyHex(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Integer): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8SetPropertyUncooked(hIT8: cmsHANDLE; Key, Buffer: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll'; + + +FUNCTION cmsIT8GetProperty(hIT8: cmsHANDLE; cProp: PAnsiChar): PAnsiChar; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8GetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar): Double; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8EnumProperties(hIT8: cmsHANDLE; var PropertyNames: LPPAnsiChar): Integer; StdCall; external 'lcms2.dll'; + +// Datasets + +FUNCTION cmsIT8GetDataRowCol(hIT8: cmsHANDLE; row, col: Integer): PAnsiChar; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8GetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer): Double; StdCall; external 'lcms2.dll'; + +FUNCTION cmsIT8SetDataRowCol(hIT8: cmsHANDLE; row, col: Integer; Val: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8SetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer; Val: Double): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsIT8GetData(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar): PAnsiChar; StdCall; external 'lcms2.dll'; + +FUNCTION cmsIT8GetDataDbl(hIT8: cmsHANDLE;cPatch, cSample: PAnsiChar): Double; StdCall; external 'lcms2.dll'; + +FUNCTION cmsIT8SetData(hIT8: cmsHANDLE; cPatch, cSample, Val: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsIT8SetDataDbl(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar; Val: Double): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsIT8SetDataFormat(hIT8: cmsHANDLE; n: Integer; Sample: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8EnumDataFormat(hIT8: cmsHANDLE; var SampleNames: LPPAnsiChar): Integer; StdCall; external 'lcms2.dll'; +FUNCTION cmsIT8GetPatchName(hIT8: cmsHANDLE; nPatch: Integer; Buffer: PAnsiChar): PAnsiChar; StdCall; external 'lcms2.dll'; + +// The LABEL extension + +FUNCTION cmsIT8SetTableByLabel(hIT8: cmsHANDLE; cSet, cField, ExpectedType: PAnsiChar): Integer; StdCall; external 'lcms2.dll'; + +FUNCTION cmsIT8FindDataFormat(hIT8: cmsHANDLE; cSample: PAnsiChar): Integer; StdCall; external 'lcms2.dll'; + +// Formatter for double +PROCEDURE cmsIT8DefineDblFormat(hIT8: cmsHANDLE; Formatter: PAnsiChar); StdCall; external 'lcms2.dll'; + +FUNCTION cmsGBDAlloc(ContextID: cmsContext):cmsHANDLE; StdCall; external 'lcms2.dll'; +PROCEDURE cmsGBDFree(hGBD: cmsHANDLE); StdCall; external 'lcms2.dll'; +FUNCTION cmsGDBAddPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsGDBCompute(hGDB: cmsHANDLE; dwFlags: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll'; +FUNCTION cmsGDBCheckPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsDetectBlackPoint( BlackPoint: LPcmsCIEXYZ; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll'; + +FUNCTION cmsDetectTAC(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall; external 'lcms2.dll'; + +FUNCTION cmsDesaturateLab(Lab: LPcmsCIELab; amax, amin, bmax, bmin: cmsFloat64Number): cmsBool; StdCall; external 'lcms2.dll'; + +END. diff --git a/utils/jpgicc/.deps/iccjpeg.Po b/utils/jpgicc/.deps/iccjpeg.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/jpgicc/.deps/iccjpeg.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/jpgicc/.deps/jpgicc.Po b/utils/jpgicc/.deps/jpgicc.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/jpgicc/.deps/jpgicc.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/jpgicc/.deps/vprf.Po b/utils/jpgicc/.deps/vprf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/jpgicc/.deps/vprf.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/jpgicc/.deps/xgetopt.Po b/utils/jpgicc/.deps/xgetopt.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/jpgicc/.deps/xgetopt.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/jpgicc/Makefile b/utils/jpgicc/Makefile new file mode 100644 index 0000000..1c094a9 --- /dev/null +++ b/utils/jpgicc/Makefile @@ -0,0 +1,650 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# utils/jpgicc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# +# Makefile for building jpegicc +# Written by Bob Friesenhahn, June 2003 +# Bugs introduced by Marti Maria on October 2004 + + +pkgdatadir = $(datadir)/lcms2 +pkgincludedir = $(includedir)/lcms2 +pkglibdir = $(libdir)/lcms2 +pkglibexecdir = $(libexecdir)/lcms2 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = arm-unknown-linux-gnueabi +host_triplet = arm-unknown-linux-gnueabi +bin_PROGRAMS = jpgicc$(EXEEXT) +subdir = utils/jpgicc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" +PROGRAMS = $(bin_PROGRAMS) +am_jpgicc_OBJECTS = jpgicc.$(OBJEXT) iccjpeg.$(OBJEXT) \ + xgetopt.$(OBJEXT) vprf.$(OBJEXT) +jpgicc_OBJECTS = $(am_jpgicc_OBJECTS) +jpgicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +jpgicc_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(jpgicc_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(jpgicc_SOURCES) +DIST_SOURCES = $(jpgicc_SOURCES) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoconf +AUTOHEADER = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoheader +AUTOMAKE = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall +CPP = gcc -std=gnu99 -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DPACKAGE_NAME=\"lcms2\" -DPACKAGE_TARNAME=\"lcms2\" -DPACKAGE_VERSION=\"2.3\" -DPACKAGE_STRING=\"lcms2\ 2.3\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHasJPEG=1 -DHasZLIB=1 -DHasTIFF=1 -DHAVE_TIFFCONF_H=1 +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JPEGICC_DEPLIBS = -ljpeg -lm +LCMS_LIB_DEPLIBS = -lm +LD = /usr/arm-linux-gnueabi/bin/ld +LDFLAGS = +LIBOBJS = +LIBRARY_AGE = 0 +LIBRARY_CURRENT = 2 +LIBRARY_REVISION = 3 +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltmain.sh +LIB_JPEG = -ljpeg +LIB_MATH = -lm +LIB_TIFF = -ltiff +LIB_ZLIB = -lz +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = lcms2 +PACKAGE_BUGREPORT = +PACKAGE_NAME = lcms2 +PACKAGE_STRING = lcms2 2.3 +PACKAGE_TARNAME = lcms2 +PACKAGE_URL = +PACKAGE_VERSION = 2.3 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TIFFICC_DEPLIBS = -ltiff -ljpeg -lz -lm +VERSION = 2.3 +abs_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/utils/jpgicc +abs_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/utils/jpgicc +abs_top_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +abs_top_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = arm-unknown-linux-gnueabi +build_alias = +build_cpu = arm +build_os = linux-gnueabi +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = arm-unknown-linux-gnueabi +host_alias = +host_cpu = arm +host_os = linux-gnueabi +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +inline = +install_sh = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +jpgicc_LDADD = $(top_builddir)/src/liblcms2.la -ljpeg -lm +jpgicc_LDFLAGS = +jpgicc_SOURCES = jpgicc.c iccjpeg.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +man_MANS = jpgicc.1 +EXTRA_DIST = iccjpeg.h $(man_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/jpgicc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign utils/jpgicc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +jpgicc$(EXEEXT): $(jpgicc_OBJECTS) $(jpgicc_DEPENDENCIES) + @rm -f jpgicc$(EXEEXT) + $(jpgicc_LINK) $(jpgicc_OBJECTS) $(jpgicc_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/iccjpeg.Po +include ./$(DEPDIR)/jpgicc.Po +include ./$(DEPDIR)/vprf.Po +include ./$(DEPDIR)/xgetopt.Po + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +xgetopt.o: ../common/xgetopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.o -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +# source='../common/xgetopt.c' object='xgetopt.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + +xgetopt.obj: ../common/xgetopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.obj -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +# source='../common/xgetopt.c' object='xgetopt.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + +vprf.o: ../common/vprf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.o -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +# source='../common/vprf.c' object='vprf.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + +vprf.obj: ../common/vprf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.obj -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +# source='../common/vprf.c' object='vprf.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/utils/jpgicc/Makefile.am b/utils/jpgicc/Makefile.am new file mode 100644 index 0000000..59d5ab1 --- /dev/null +++ b/utils/jpgicc/Makefile.am @@ -0,0 +1,22 @@ +# +# Makefile for building jpegicc +# Written by Bob Friesenhahn, June 2003 +# Bugs introduced by Marti Maria on October 2004 + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign + +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common +if HasJPEG +bin_PROGRAMS = jpgicc +else +bin_PROGRAMS = +endif + +jpgicc_LDADD = $(top_builddir)/src/liblcms2.la @JPEGICC_DEPLIBS@ +jpgicc_LDFLAGS = @LDFLAGS@ +jpgicc_SOURCES = jpgicc.c iccjpeg.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +man_MANS = jpgicc.1 + +EXTRA_DIST = iccjpeg.h $(man_MANS) diff --git a/utils/jpgicc/Makefile.in b/utils/jpgicc/Makefile.in new file mode 100644 index 0000000..25f7079 --- /dev/null +++ b/utils/jpgicc/Makefile.in @@ -0,0 +1,650 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Makefile for building jpegicc +# Written by Bob Friesenhahn, June 2003 +# Bugs introduced by Marti Maria on October 2004 + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HasJPEG_TRUE@bin_PROGRAMS = jpgicc$(EXEEXT) +subdir = utils/jpgicc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" +PROGRAMS = $(bin_PROGRAMS) +am_jpgicc_OBJECTS = jpgicc.$(OBJEXT) iccjpeg.$(OBJEXT) \ + xgetopt.$(OBJEXT) vprf.$(OBJEXT) +jpgicc_OBJECTS = $(am_jpgicc_OBJECTS) +jpgicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +jpgicc_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(jpgicc_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(jpgicc_SOURCES) +DIST_SOURCES = $(jpgicc_SOURCES) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ +LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRARY_AGE = @LIBRARY_AGE@ +LIBRARY_CURRENT = @LIBRARY_CURRENT@ +LIBRARY_REVISION = @LIBRARY_REVISION@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIB_JPEG = @LIB_JPEG@ +LIB_MATH = @LIB_MATH@ +LIB_TIFF = @LIB_TIFF@ +LIB_ZLIB = @LIB_ZLIB@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +inline = @inline@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +jpgicc_LDADD = $(top_builddir)/src/liblcms2.la @JPEGICC_DEPLIBS@ +jpgicc_LDFLAGS = @LDFLAGS@ +jpgicc_SOURCES = jpgicc.c iccjpeg.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +man_MANS = jpgicc.1 +EXTRA_DIST = iccjpeg.h $(man_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/jpgicc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign utils/jpgicc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +jpgicc$(EXEEXT): $(jpgicc_OBJECTS) $(jpgicc_DEPENDENCIES) + @rm -f jpgicc$(EXEEXT) + $(jpgicc_LINK) $(jpgicc_OBJECTS) $(jpgicc_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iccjpeg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpgicc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vprf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetopt.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +xgetopt.o: ../common/xgetopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.o -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/xgetopt.c' object='xgetopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + +xgetopt.obj: ../common/xgetopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.obj -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/xgetopt.c' object='xgetopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + +vprf.o: ../common/vprf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.o -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/vprf.c' object='vprf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + +vprf.obj: ../common/vprf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.obj -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/vprf.c' object='vprf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/utils/jpgicc/iccjpeg.c b/utils/jpgicc/iccjpeg.c new file mode 100644 index 0000000..aa96c8b --- /dev/null +++ b/utils/jpgicc/iccjpeg.c @@ -0,0 +1,248 @@ +/* + * iccprofile.c + * + * This file provides code to read and write International Color Consortium + * (ICC) device profiles embedded in JFIF JPEG image files. The ICC has + * defined a standard format for including such data in JPEG "APP2" markers. + * The code given here does not know anything about the internal structure + * of the ICC profile data; it just knows how to put the profile data into + * a JPEG file being written, or get it back out when reading. + * + * This code depends on new features added to the IJG JPEG library as of + * IJG release 6b; it will not compile or work with older IJG versions. + * + * NOTE: this code would need surgery to work on 16-bit-int machines + * with ICC profiles exceeding 64K bytes in size. If you need to do that, + * change all the "unsigned int" variables to "INT32". You'll also need + * to find a malloc() replacement that can allocate more than 64K. + */ + +#include "iccjpeg.h" +#include /* define malloc() */ + + +/* + * Since an ICC profile can be larger than the maximum size of a JPEG marker + * (64K), we need provisions to split it into multiple markers. The format + * defined by the ICC specifies one or more APP2 markers containing the + * following data: + * Identifying string ASCII "ICC_PROFILE\0" (12 bytes) + * Marker sequence number 1 for first APP2, 2 for next, etc (1 byte) + * Number of markers Total number of APP2's used (1 byte) + * Profile data (remainder of APP2 data) + * Decoders should use the marker sequence numbers to reassemble the profile, + * rather than assuming that the APP2 markers appear in the correct sequence. + */ + +#define ICC_MARKER (JPEG_APP0 + 2) /* JPEG marker code for ICC */ +#define ICC_OVERHEAD_LEN 14 /* size of non-profile data in APP2 */ +#define MAX_BYTES_IN_MARKER 65533 /* maximum data len of a JPEG marker */ +#define MAX_DATA_BYTES_IN_MARKER (MAX_BYTES_IN_MARKER - ICC_OVERHEAD_LEN) + + +/* + * This routine writes the given ICC profile data into a JPEG file. + * It *must* be called AFTER calling jpeg_start_compress() and BEFORE + * the first call to jpeg_write_scanlines(). + * (This ordering ensures that the APP2 marker(s) will appear after the + * SOI and JFIF or Adobe markers, but before all else.) + */ + +void +write_icc_profile (j_compress_ptr cinfo, + const JOCTET *icc_data_ptr, + unsigned int icc_data_len) +{ + unsigned int num_markers; /* total number of markers we'll write */ + int cur_marker = 1; /* per spec, counting starts at 1 */ + unsigned int length; /* number of bytes to write in this marker */ + + /* Calculate the number of markers we'll need, rounding up of course */ + num_markers = icc_data_len / MAX_DATA_BYTES_IN_MARKER; + if (num_markers * MAX_DATA_BYTES_IN_MARKER != icc_data_len) + num_markers++; + + while (icc_data_len > 0) { + /* length of profile to put in this marker */ + length = icc_data_len; + if (length > MAX_DATA_BYTES_IN_MARKER) + length = MAX_DATA_BYTES_IN_MARKER; + icc_data_len -= length; + + /* Write the JPEG marker header (APP2 code and marker length) */ + jpeg_write_m_header(cinfo, ICC_MARKER, + (unsigned int) (length + ICC_OVERHEAD_LEN)); + + /* Write the marker identifying string "ICC_PROFILE" (null-terminated). + * We code it in this less-than-transparent way so that the code works + * even if the local character set is not ASCII. + */ + jpeg_write_m_byte(cinfo, 0x49); + jpeg_write_m_byte(cinfo, 0x43); + jpeg_write_m_byte(cinfo, 0x43); + jpeg_write_m_byte(cinfo, 0x5F); + jpeg_write_m_byte(cinfo, 0x50); + jpeg_write_m_byte(cinfo, 0x52); + jpeg_write_m_byte(cinfo, 0x4F); + jpeg_write_m_byte(cinfo, 0x46); + jpeg_write_m_byte(cinfo, 0x49); + jpeg_write_m_byte(cinfo, 0x4C); + jpeg_write_m_byte(cinfo, 0x45); + jpeg_write_m_byte(cinfo, 0x0); + + /* Add the sequencing info */ + jpeg_write_m_byte(cinfo, cur_marker); + jpeg_write_m_byte(cinfo, (int) num_markers); + + /* Add the profile data */ + while (length--) { + jpeg_write_m_byte(cinfo, *icc_data_ptr); + icc_data_ptr++; + } + cur_marker++; + } +} + + +/* + * Prepare for reading an ICC profile + */ + +void +setup_read_icc_profile (j_decompress_ptr cinfo) +{ + /* Tell the library to keep any APP2 data it may find */ + jpeg_save_markers(cinfo, ICC_MARKER, 0xFFFF); +} + + +/* + * Handy subroutine to test whether a saved marker is an ICC profile marker. + */ + +static boolean +marker_is_icc (jpeg_saved_marker_ptr marker) +{ + return + marker->marker == ICC_MARKER && + marker->data_length >= ICC_OVERHEAD_LEN && + /* verify the identifying string */ + GETJOCTET(marker->data[0]) == 0x49 && + GETJOCTET(marker->data[1]) == 0x43 && + GETJOCTET(marker->data[2]) == 0x43 && + GETJOCTET(marker->data[3]) == 0x5F && + GETJOCTET(marker->data[4]) == 0x50 && + GETJOCTET(marker->data[5]) == 0x52 && + GETJOCTET(marker->data[6]) == 0x4F && + GETJOCTET(marker->data[7]) == 0x46 && + GETJOCTET(marker->data[8]) == 0x49 && + GETJOCTET(marker->data[9]) == 0x4C && + GETJOCTET(marker->data[10]) == 0x45 && + GETJOCTET(marker->data[11]) == 0x0; +} + + +/* + * See if there was an ICC profile in the JPEG file being read; + * if so, reassemble and return the profile data. + * + * TRUE is returned if an ICC profile was found, FALSE if not. + * If TRUE is returned, *icc_data_ptr is set to point to the + * returned data, and *icc_data_len is set to its length. + * + * IMPORTANT: the data at **icc_data_ptr has been allocated with malloc() + * and must be freed by the caller with free() when the caller no longer + * needs it. (Alternatively, we could write this routine to use the + * IJG library's memory allocator, so that the data would be freed implicitly + * at jpeg_finish_decompress() time. But it seems likely that many apps + * will prefer to have the data stick around after decompression finishes.) + * + * NOTE: if the file contains invalid ICC APP2 markers, we just silently + * return FALSE. You might want to issue an error message instead. + */ + +boolean +read_icc_profile (j_decompress_ptr cinfo, + JOCTET **icc_data_ptr, + unsigned int *icc_data_len) +{ + jpeg_saved_marker_ptr marker; + int num_markers = 0; + int seq_no; + JOCTET *icc_data; + unsigned int total_length; +#define MAX_SEQ_NO 255 /* sufficient since marker numbers are bytes */ + char marker_present[MAX_SEQ_NO+1]; /* 1 if marker found */ + unsigned int data_length[MAX_SEQ_NO+1]; /* size of profile data in marker */ + unsigned int data_offset[MAX_SEQ_NO+1]; /* offset for data in marker */ + + *icc_data_ptr = NULL; /* avoid confusion if FALSE return */ + *icc_data_len = 0; + + /* This first pass over the saved markers discovers whether there are + * any ICC markers and verifies the consistency of the marker numbering. + */ + + for (seq_no = 1; seq_no <= MAX_SEQ_NO; seq_no++) + marker_present[seq_no] = 0; + + for (marker = cinfo->marker_list; marker != NULL; marker = marker->next) { + if (marker_is_icc(marker)) { + if (num_markers == 0) + num_markers = GETJOCTET(marker->data[13]); + else if (num_markers != GETJOCTET(marker->data[13])) + return FALSE; /* inconsistent num_markers fields */ + seq_no = GETJOCTET(marker->data[12]); + if (seq_no <= 0 || seq_no > num_markers) + return FALSE; /* bogus sequence number */ + if (marker_present[seq_no]) + return FALSE; /* duplicate sequence numbers */ + marker_present[seq_no] = 1; + data_length[seq_no] = marker->data_length - ICC_OVERHEAD_LEN; + } + } + + if (num_markers == 0) + return FALSE; + + /* Check for missing markers, count total space needed, + * compute offset of each marker's part of the data. + */ + + total_length = 0; + for (seq_no = 1; seq_no <= num_markers; seq_no++) { + if (marker_present[seq_no] == 0) + return FALSE; /* missing sequence number */ + data_offset[seq_no] = total_length; + total_length += data_length[seq_no]; + } + + if (total_length <= 0) + return FALSE; /* found only empty markers? */ + + /* Allocate space for assembled data */ + icc_data = (JOCTET *) malloc(total_length * sizeof(JOCTET)); + if (icc_data == NULL) + return FALSE; /* oops, out of memory */ + + /* and fill it in */ + for (marker = cinfo->marker_list; marker != NULL; marker = marker->next) { + if (marker_is_icc(marker)) { + JOCTET FAR *src_ptr; + JOCTET *dst_ptr; + unsigned int length; + seq_no = GETJOCTET(marker->data[12]); + dst_ptr = icc_data + data_offset[seq_no]; + src_ptr = marker->data + ICC_OVERHEAD_LEN; + length = data_length[seq_no]; + while (length--) { + *dst_ptr++ = *src_ptr++; + } + } + } + + *icc_data_ptr = icc_data; + *icc_data_len = total_length; + + return TRUE; +} diff --git a/utils/jpgicc/iccjpeg.h b/utils/jpgicc/iccjpeg.h new file mode 100644 index 0000000..5e1888d --- /dev/null +++ b/utils/jpgicc/iccjpeg.h @@ -0,0 +1,73 @@ +/* + * iccprofile.h + * + * This file provides code to read and write International Color Consortium + * (ICC) device profiles embedded in JFIF JPEG image files. The ICC has + * defined a standard format for including such data in JPEG "APP2" markers. + * The code given here does not know anything about the internal structure + * of the ICC profile data; it just knows how to put the profile data into + * a JPEG file being written, or get it back out when reading. + * + * This code depends on new features added to the IJG JPEG library as of + * IJG release 6b; it will not compile or work with older IJG versions. + * + * NOTE: this code would need surgery to work on 16-bit-int machines + * with ICC profiles exceeding 64K bytes in size. See iccprofile.c + * for details. + */ + +#include /* needed to define "FILE", "NULL" */ +#include "jpeglib.h" + + +/* + * This routine writes the given ICC profile data into a JPEG file. + * It *must* be called AFTER calling jpeg_start_compress() and BEFORE + * the first call to jpeg_write_scanlines(). + * (This ordering ensures that the APP2 marker(s) will appear after the + * SOI and JFIF or Adobe markers, but before all else.) + */ + +extern void write_icc_profile JPP((j_compress_ptr cinfo, + const JOCTET *icc_data_ptr, + unsigned int icc_data_len)); + + +/* + * Reading a JPEG file that may contain an ICC profile requires two steps: + * + * 1. After jpeg_create_decompress() but before jpeg_read_header(), + * call setup_read_icc_profile(). This routine tells the IJG library + * to save in memory any APP2 markers it may find in the file. + * + * 2. After jpeg_read_header(), call read_icc_profile() to find out + * whether there was a profile and obtain it if so. + */ + + +/* + * Prepare for reading an ICC profile + */ + +extern void setup_read_icc_profile JPP((j_decompress_ptr cinfo)); + + +/* + * See if there was an ICC profile in the JPEG file being read; + * if so, reassemble and return the profile data. + * + * TRUE is returned if an ICC profile was found, FALSE if not. + * If TRUE is returned, *icc_data_ptr is set to point to the + * returned data, and *icc_data_len is set to its length. + * + * IMPORTANT: the data at **icc_data_ptr has been allocated with malloc() + * and must be freed by the caller with free() when the caller no longer + * needs it. (Alternatively, we could write this routine to use the + * IJG library's memory allocator, so that the data would be freed implicitly + * at jpeg_finish_decompress() time. But it seems likely that many apps + * will prefer to have the data stick around after decompression finishes.) + */ + +extern boolean read_icc_profile JPP((j_decompress_ptr cinfo, + JOCTET **icc_data_ptr, + unsigned int *icc_data_len)); diff --git a/utils/jpgicc/jpgicc.1 b/utils/jpgicc/jpgicc.1 new file mode 100644 index 0000000..19a3669 --- /dev/null +++ b/utils/jpgicc/jpgicc.1 @@ -0,0 +1,79 @@ +.\"Shiju P. Nair September 30, 2004 +.TH JPEGICC 1 "September 30, 2004" +.SH NAME +jpegicc - little cms ICC profile applier for JPEG. +.SH SYNOPSIS +.B jpegicc +.RI [ options ] " input.jpg output.jpg" +.SH DESCRIPTION +lcms is a standalone CMM engine, which deals with the color management. +It implements a fast transformation between ICC profiles. +.B jpegicc +is little cms ICC profile applier for JPEG. +.SH OPTIONS +.TP +.B \-b +Black point compensation. +.TP +.B \-c <0,1,2,3> +Precalculates transform. (0=Off, 1=Normal, 2=Hi-res, 3=LoRes) [defaults to 1] +.TP +.B \-g +Marks out-of-gamut colors on softproof. +.TP +.B \-h <0,1,2> +Show summary of options and examples. +.TP +.BI \-i\ profile +Input profile (defaults to sRGB). +.TP +.B \-m <0,1,2,3> +SoftProof intent. +.TP +.B \-n +Ignore embedded profile. +.TP +.BI \-p\ profile +Soft proof profile +.TP +.BI \-o\ profile +.p +Output profile (defaults to sRGB). +.TP +.B \-q <0..100> +Output JPEG quality. +.TP +.B \-t <0,1,2,3> +Intent (0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute). +.TP +.B \-v +Verbose. +.SH EXAMPLES +.nf +To color correct from scanner to sRGB: + jpegicc -iscanner.icm in.jpg out.jpg + +To convert from monitor1 to monitor2: + jpegicc -imon1.icm -omon2.icm in.jpg out.jpg + +To make a CMYK separation: + jpegicc -oprinter.icm inrgb.jpg outcmyk.jpg + +To recover sRGB from a CMYK separation: + jpegicc -iprinter.icm incmyk.jpg outrgb.jpg + +To convert from CIELab ITU/Fax JPEG to sRGB + jpegicc -iitufax.icm in.jpg out.jpg +.fi +.SH NOTES +For suggestions, comments, bug reports etc. send mail to +info@littlecms.com. +.SH SEE ALSO +.BR tifficc (1), +.BR icc2ps (1), +.BR icclink (1), +.BR icctrans (1), +.BR wtpt (1) +.SH AUTHOR +This manual page was written by Shiju p. Nair , +for the Debian project. diff --git a/utils/jpgicc/jpgicc.c b/utils/jpgicc/jpgicc.c new file mode 100644 index 0000000..9b902f6 --- /dev/null +++ b/utils/jpgicc/jpgicc.c @@ -0,0 +1,1268 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// This program does apply profiles to (some) JPEG files + + +#include "utils.h" + +#include "jpeglib.h" +#include "iccjpeg.h" + +// Flags +static cmsBool BlackPointCompensation = FALSE; +static cmsBool IgnoreEmbedded = FALSE; +static cmsBool GamutCheck = FALSE; +static cmsBool lIsITUFax = FALSE; +static cmsBool lIsPhotoshopApp13 = FALSE; +static cmsBool lIsEXIF; +static cmsBool lIsDeviceLink = FALSE; +static cmsBool EmbedProfile = FALSE; + +static const char* SaveEmbedded = NULL; + +static int Intent = INTENT_PERCEPTUAL; +static int ProofingIntent = INTENT_PERCEPTUAL; +static int PrecalcMode = 1; + +static int jpegQuality = 75; + +static cmsFloat64Number ObserverAdaptationState = 0; + + +static char *cInpProf = NULL; +static char *cOutProf = NULL; +static char *cProofing = NULL; + +static FILE * InFile; +static FILE * OutFile; + +static struct jpeg_decompress_struct Decompressor; +static struct jpeg_compress_struct Compressor; + + +static struct my_error_mgr { + + struct jpeg_error_mgr pub; // "public" fields + void* Cargo; // "private" fields + +} ErrorHandler; + + +cmsUInt16Number Alarm[4] = {128,128,128,0}; + +// Out of mem +static +void OutOfMem(size_t size) +{ + FatalError("Out of memory on allocating %d bytes.", size); +} + + +static +void my_error_exit (j_common_ptr cinfo) +{ + char buffer[JMSG_LENGTH_MAX]; + + (*cinfo->err->format_message) (cinfo, buffer); + FatalError(buffer); +} + +/* +Definition of the APPn Markers Defined for continuous-tone G3FAX + +The application code APP1 initiates identification of the image as +a G3FAX application and defines the spatial resolution and subsampling. +This marker directly follows the SOI marker. The data format will be as follows: + +X'FFE1' (APP1), length, FAX identifier, version, spatial resolution. + +The above terms are defined as follows: + +Length: (Two octets) Total APP1 field octet count including the octet count itself, but excluding the APP1 +marker. + +FAX identifier: (Six octets) X'47', X'33', X'46', X'41', X'58', X'00'. This X'00'-terminated string "G3FAX" +uniquely identifies this APP1 marker. + +Version: (Two octets) X'07CA'. This string specifies the year of approval of the standard, for identification +in the case of future revision (for example, 1994). + +Spatial Resolution: (Two octets) Lightness pixel density in pels/25.4 mm. The basic value is 200. Allowed values are +100, 200, 300, 400, 600 and 1200 pels/25.4 mm, with square (or equivalent) pels. + +NOTE – The functional equivalence of inch-based and mm-based resolutions is maintained. For example, the 200 × 200 +*/ + +static +cmsBool IsITUFax(jpeg_saved_marker_ptr ptr) +{ + while (ptr) + { + if (ptr -> marker == (JPEG_APP0 + 1) && ptr -> data_length > 5) { + + const char* data = (const char*) ptr -> data; + + if (strcmp(data, "G3FAX") == 0) return TRUE; + } + + ptr = ptr -> next; + } + + return FALSE; +} + +// Save a ITU T.42/Fax marker with defaults on boundaries. This is the only mode we support right now. +static +void SetITUFax(j_compress_ptr cinfo) +{ + unsigned char Marker[] = "G3FAX\x00\0x07\xCA\x00\xC8"; + + jpeg_write_marker(cinfo, (JPEG_APP0 + 1), Marker, 10); +} + + +// Build a profile for decoding ITU T.42/Fax JPEG streams. +// The profile has an additional ability in the input direction of +// gamut compress values between 85 < a < -85 and -75 < b < 125. This conforms +// the default range for ITU/T.42 -- See RFC 2301, section 6.2.3 for details + +// L* = [0, 100] +// a* = [–85, 85] +// b* = [–75, 125] + + +// These functions does convert the encoding of ITUFAX to floating point +// and vice-versa. No gamut mapping is performed yet. + +static +void ITU2Lab(const cmsUInt16Number In[3], cmsCIELab* Lab) +{ + Lab -> L = (double) In[0] / 655.35; + Lab -> a = (double) 170.* (In[1] - 32768.) / 65535.; + Lab -> b = (double) 200.* (In[2] - 24576.) / 65535.; +} + +static +void Lab2ITU(const cmsCIELab* Lab, cmsUInt16Number Out[3]) +{ + Out[0] = (cmsUInt16Number) floor((double) (Lab -> L / 100.)* 65535. ); + Out[1] = (cmsUInt16Number) floor((double) (Lab -> a / 170.)* 65535. + 32768. ); + Out[2] = (cmsUInt16Number) floor((double) (Lab -> b / 200.)* 65535. + 24576. ); +} + +// These are the samplers-- They are passed as callbacks to cmsStageSampleCLut16bit() +// then, cmsSample3DGrid() will sweel whole Lab gamut calling these functions +// once for each node. In[] will contain the Lab PCS value to convert to ITUFAX +// on PCS2ITU, or the ITUFAX value to convert to Lab in ITU2PCS +// You can change the number of sample points if desired, the algorithm will +// remain same. 33 points gives good accurancy, but you can reduce to 22 or less +// is space is critical + +#define GRID_POINTS 33 + +static +int PCS2ITU(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +{ + cmsCIELab Lab; + + cmsLabEncoded2Float(&Lab, In); + cmsDesaturateLab(&Lab, 85, -85, 125, -75); // This function does the necessary gamut remapping + Lab2ITU(&Lab, Out); + return TRUE; + + UTILS_UNUSED_PARAMETER(Cargo); +} + + +static +int ITU2PCS( register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) +{ + cmsCIELab Lab; + + ITU2Lab(In, &Lab); + cmsFloat2LabEncoded(Out, &Lab); + return TRUE; + + UTILS_UNUSED_PARAMETER(Cargo); +} + +// This function does create the virtual input profile, which decodes ITU to the profile connection space +static +cmsHPROFILE CreateITU2PCS_ICC(void) +{ + cmsHPROFILE hProfile; + cmsPipeline* AToB0; + cmsStage* ColorMap; + + AToB0 = cmsPipelineAlloc(0, 3, 3); + if (AToB0 == NULL) return NULL; + + ColorMap = cmsStageAllocCLut16bit(0, GRID_POINTS, 3, 3, NULL); + if (ColorMap == NULL) return NULL; + + cmsPipelineInsertStage(AToB0, cmsAT_BEGIN, ColorMap); + cmsStageSampleCLut16bit(ColorMap, ITU2PCS, NULL, 0); + + hProfile = cmsCreateProfilePlaceholder(0); + if (hProfile == NULL) { + cmsPipelineFree(AToB0); + return NULL; + } + + cmsWriteTag(hProfile, cmsSigAToB0Tag, AToB0); + cmsSetColorSpace(hProfile, cmsSigLabData); + cmsSetPCS(hProfile, cmsSigLabData); + cmsSetDeviceClass(hProfile, cmsSigColorSpaceClass); + cmsPipelineFree(AToB0); + + return hProfile; +} + + +// This function does create the virtual output profile, with the necessary gamut mapping +static +cmsHPROFILE CreatePCS2ITU_ICC(void) +{ + cmsHPROFILE hProfile; + cmsPipeline* BToA0; + cmsStage* ColorMap; + + BToA0 = cmsPipelineAlloc(0, 3, 3); + if (BToA0 == NULL) return NULL; + + ColorMap = cmsStageAllocCLut16bit(0, GRID_POINTS, 3, 3, NULL); + if (ColorMap == NULL) return NULL; + + cmsPipelineInsertStage(BToA0, cmsAT_BEGIN, ColorMap); + cmsStageSampleCLut16bit(ColorMap, PCS2ITU, NULL, 0); + + hProfile = cmsCreateProfilePlaceholder(0); + if (hProfile == NULL) { + cmsPipelineFree(BToA0); + return NULL; + } + + cmsWriteTag(hProfile, cmsSigBToA0Tag, BToA0); + cmsSetColorSpace(hProfile, cmsSigLabData); + cmsSetPCS(hProfile, cmsSigLabData); + cmsSetDeviceClass(hProfile, cmsSigColorSpaceClass); + + cmsPipelineFree(BToA0); + + return hProfile; +} + + + +#define PS_FIXED_TO_FLOAT(h, l) ((float) (h) + ((float) (l)/(1<<16))) + +static +cmsBool ProcessPhotoshopAPP13(JOCTET FAR *data, int datalen) +{ + int i; + + for (i = 14; i < datalen; ) + { + long len; + unsigned int type; + + if (!(GETJOCTET(data[i] ) == 0x38 && + GETJOCTET(data[i+1]) == 0x42 && + GETJOCTET(data[i+2]) == 0x49 && + GETJOCTET(data[i+3]) == 0x4D)) break; // Not recognized + + i += 4; // identifying string + + type = (unsigned int) (GETJOCTET(data[i]<<8) + GETJOCTET(data[i+1])); + + i += 2; // resource type + + i += GETJOCTET(data[i]) + ((GETJOCTET(data[i]) & 1) ? 1 : 2); // resource name + + len = ((((GETJOCTET(data[i]<<8) + GETJOCTET(data[i+1]))<<8) + + GETJOCTET(data[i+2]))<<8) + GETJOCTET(data[i+3]); + + i += 4; // Size + + if (type == 0x03ED && len >= 16) { + + Decompressor.X_density = (UINT16) PS_FIXED_TO_FLOAT(GETJOCTET(data[i]<<8) + GETJOCTET(data[i+1]), + GETJOCTET(data[i+2]<<8) + GETJOCTET(data[i+3])); + Decompressor.Y_density = (UINT16) PS_FIXED_TO_FLOAT(GETJOCTET(data[i+8]<<8) + GETJOCTET(data[i+9]), + GETJOCTET(data[i+10]<<8) + GETJOCTET(data[i+11])); + + // Set the density unit to 1 since the + // Vertical and Horizontal resolutions + // are specified in Pixels per inch + + Decompressor.density_unit = 0x01; + return TRUE; + + } + + i += len + ((len & 1) ? 1 : 0); // Alignment + } + return FALSE; +} + + +static +cmsBool HandlePhotoshopAPP13(jpeg_saved_marker_ptr ptr) +{ + while (ptr) { + + if (ptr -> marker == (JPEG_APP0 + 13) && ptr -> data_length > 9) + { + JOCTET FAR* data = ptr -> data; + + if(GETJOCTET(data[0]) == 0x50 && + GETJOCTET(data[1]) == 0x68 && + GETJOCTET(data[2]) == 0x6F && + GETJOCTET(data[3]) == 0x74 && + GETJOCTET(data[4]) == 0x6F && + GETJOCTET(data[5]) == 0x73 && + GETJOCTET(data[6]) == 0x68 && + GETJOCTET(data[7]) == 0x6F && + GETJOCTET(data[8]) == 0x70) { + + ProcessPhotoshopAPP13(data, ptr -> data_length); + return TRUE; + } + } + + ptr = ptr -> next; + } + + return FALSE; +} + + +typedef unsigned short uint16_t; +typedef unsigned char uint8_t; +typedef unsigned int uint32_t; + +#define INTEL_BYTE_ORDER 0x4949 +#define XRESOLUTION 0x011a +#define YRESOLUTION 0x011b +#define RESOLUTION_UNIT 0x128 + +// Read a 16-bit word +static +uint16_t read16(uint8_t* arr, int pos, int swapBytes) +{ + uint8_t b1 = arr[pos]; + uint8_t b2 = arr[pos+1]; + + return (swapBytes) ? ((b2 << 8) | b1) : ((b1 << 8) | b2); +} + + +// Read a 32-bit word +static +uint32_t read32(uint8_t* arr, int pos, int swapBytes) +{ + + if(!swapBytes) { + + return (arr[pos] << 24) | + (arr[pos+1] << 16) | + (arr[pos+2] << 8) | + arr[pos+3]; + } + + return arr[pos] | + (arr[pos+1] << 8) | + (arr[pos+2] << 16) | + (arr[pos+3] << 24); +} + + + +static +int read_tag(uint8_t* arr, int pos, int swapBytes, void* dest) +{ + // Format should be 5 over here (rational) + uint32_t format = read16(arr, pos + 2, swapBytes); + // Components should be 1 + uint32_t components = read32(arr, pos + 4, swapBytes); + // Points to the value + uint32_t offset; + + // sanity + if (components != 1) return 0; + + if (format == 3) + offset = pos + 8; + else + offset = read32(arr, pos + 8, swapBytes); + + switch (format) { + + case 5: // Rational + { + double num = read32(arr, offset, swapBytes); + double den = read32(arr, offset + 4, swapBytes); + *(double *) dest = num / den; + } + break; + + case 3: // uint 16 + *(int*) dest = read16(arr, offset, swapBytes); + break; + + default: return 0; + } + + return 1; +} + + + +// Handler for EXIF data +static + cmsBool HandleEXIF(struct jpeg_decompress_struct* cinfo) +{ + jpeg_saved_marker_ptr ptr; + uint32_t ifd_ofs; + int pos = 0, swapBytes = 0; + uint32_t i, numEntries; + double XRes = -1, YRes = -1; + int Unit = 2; // Inches + + + for (ptr = cinfo ->marker_list; ptr; ptr = ptr ->next) { + + if ((ptr ->marker == JPEG_APP0+1) && ptr ->data_length > 6) { + JOCTET FAR* data = ptr -> data; + + if (memcmp(data, "Exif\0\0", 6) == 0) { + + data += 6; // Skip EXIF marker + + // 8 byte TIFF header + // first two determine byte order + pos = 0; + if (read16(data, pos, 0) == INTEL_BYTE_ORDER) { + swapBytes = 1; + } + + pos += 2; + + // next two bytes are always 0x002A (TIFF version) + pos += 2; + + // offset to Image File Directory (includes the previous 8 bytes) + ifd_ofs = read32(data, pos, swapBytes); + + // Search the directory for resolution tags + numEntries = read16(data, ifd_ofs, swapBytes); + + for (i=0; i < numEntries; i++) { + + uint32_t entryOffset = ifd_ofs + 2 + (12 * i); + uint32_t tag = read16(data, entryOffset, swapBytes); + + switch (tag) { + + case RESOLUTION_UNIT: + if (!read_tag(data, entryOffset, swapBytes, &Unit)) return FALSE; + break; + + case XRESOLUTION: + if (!read_tag(data, entryOffset, swapBytes, &XRes)) return FALSE; + break; + + case YRESOLUTION: + if (!read_tag(data, entryOffset, swapBytes, &YRes)) return FALSE; + break; + + default:; + } + + } + + // Proceed if all found + + if (XRes != -1 && YRes != -1) + { + + // 1 = None + // 2 = inches + // 3 = cm + + switch (Unit) { + + case 2: + + cinfo ->X_density = (UINT16) floor(XRes + 0.5); + cinfo ->Y_density = (UINT16) floor(YRes + 0.5); + break; + + case 1: + + cinfo ->X_density = (UINT16) floor(XRes * 2.54 + 0.5); + cinfo ->Y_density = (UINT16) floor(YRes * 2.54 + 0.5); + break; + + default: return FALSE; + } + + cinfo ->density_unit = 1; /* 1 for dots/inch, or 2 for dots/cm.*/ + + } + + + } + } + } + return FALSE; +} + + +static +cmsBool OpenInput(const char* FileName) +{ + int m; + + lIsITUFax = FALSE; + InFile = fopen(FileName, "rb"); + if (InFile == NULL) { + FatalError("Cannot open '%s'", FileName); + } + + // Now we can initialize the JPEG decompression object. + Decompressor.err = jpeg_std_error(&ErrorHandler.pub); + ErrorHandler.pub.error_exit = my_error_exit; + ErrorHandler.pub.output_message = my_error_exit; + + jpeg_create_decompress(&Decompressor); + jpeg_stdio_src(&Decompressor, InFile); + + for (m = 0; m < 16; m++) + jpeg_save_markers(&Decompressor, JPEG_APP0 + m, 0xFFFF); + + // setup_read_icc_profile(&Decompressor); + + fseek(InFile, 0, SEEK_SET); + jpeg_read_header(&Decompressor, TRUE); + + return TRUE; +} + + +static +cmsBool OpenOutput(const char* FileName) +{ + + OutFile = fopen(FileName, "wb"); + if (OutFile == NULL) { + FatalError("Cannot create '%s'", FileName); + + } + + Compressor.err = jpeg_std_error(&ErrorHandler.pub); + ErrorHandler.pub.error_exit = my_error_exit; + ErrorHandler.pub.output_message = my_error_exit; + + Compressor.input_components = Compressor.num_components = 4; + + jpeg_create_compress(&Compressor); + jpeg_stdio_dest(&Compressor, OutFile); + return TRUE; +} + +static +cmsBool Done(void) +{ + jpeg_destroy_decompress(&Decompressor); + jpeg_destroy_compress(&Compressor); + return fclose(InFile) + fclose(OutFile); + +} + + +// Build up the pixeltype descriptor + +static +cmsUInt32Number GetInputPixelType(void) +{ + int space, bps, extra, ColorChannels, Flavor; + + lIsITUFax = IsITUFax(Decompressor.marker_list); + lIsPhotoshopApp13 = HandlePhotoshopAPP13(Decompressor.marker_list); + lIsEXIF = HandleEXIF(&Decompressor); + + ColorChannels = Decompressor.num_components; + extra = 0; // Alpha = None + bps = 1; // 8 bits + Flavor = 0; // Vanilla + + if (lIsITUFax) { + + space = PT_Lab; + Decompressor.out_color_space = JCS_YCbCr; // Fake to don't touch + } + else + switch (Decompressor.jpeg_color_space) { + + case JCS_GRAYSCALE: // monochrome + space = PT_GRAY; + Decompressor.out_color_space = JCS_GRAYSCALE; + break; + + case JCS_RGB: // red/green/blue + space = PT_RGB; + Decompressor.out_color_space = JCS_RGB; + break; + + case JCS_YCbCr: // Y/Cb/Cr (also known as YUV) + space = PT_RGB; // Let IJG code to do the conversion + Decompressor.out_color_space = JCS_RGB; + break; + + case JCS_CMYK: // C/M/Y/K + space = PT_CMYK; + Decompressor.out_color_space = JCS_CMYK; + if (Decompressor.saw_Adobe_marker) // Adobe keeps CMYK inverted, so change flavor + Flavor = 1; // from vanilla to chocolate + break; + + case JCS_YCCK: // Y/Cb/Cr/K + space = PT_CMYK; + Decompressor.out_color_space = JCS_CMYK; + if (Decompressor.saw_Adobe_marker) // ditto + Flavor = 1; + break; + + default: + FatalError("Unsupported color space (0x%x)", Decompressor.jpeg_color_space); + return 0; + } + + return (EXTRA_SH(extra)|CHANNELS_SH(ColorChannels)|BYTES_SH(bps)|COLORSPACE_SH(space)|FLAVOR_SH(Flavor)); +} + + +// Rearrange pixel type to build output descriptor +static +cmsUInt32Number ComputeOutputFormatDescriptor(cmsUInt32Number dwInput, int OutColorSpace) +{ + int IsPlanar = T_PLANAR(dwInput); + int Channels = 0; + int Flavor = 0; + + switch (OutColorSpace) { + + case PT_GRAY: + Channels = 1; + break; + case PT_RGB: + case PT_CMY: + case PT_Lab: + case PT_YUV: + case PT_YCbCr: + Channels = 3; + break; + + case PT_CMYK: + if (Compressor.write_Adobe_marker) // Adobe keeps CMYK inverted, so change flavor to chocolate + Flavor = 1; + Channels = 4; + break; + default: + FatalError("Unsupported output color space"); + } + + return (COLORSPACE_SH(OutColorSpace)|PLANAR_SH(IsPlanar)|CHANNELS_SH(Channels)|BYTES_SH(1)|FLAVOR_SH(Flavor)); +} + + +// Equivalence between ICC color spaces and lcms color spaces +static +int GetProfileColorSpace(cmsHPROFILE hProfile) +{ + cmsColorSpaceSignature ProfileSpace = cmsGetColorSpace(hProfile); + + return _cmsLCMScolorSpace(ProfileSpace); +} + +static +int GetDevicelinkColorSpace(cmsHPROFILE hProfile) +{ + cmsColorSpaceSignature ProfileSpace = cmsGetPCS(hProfile); + + return _cmsLCMScolorSpace(ProfileSpace); +} + + +// From TRANSUPP + +static +void jcopy_markers_execute(j_decompress_ptr srcinfo, j_compress_ptr dstinfo) +{ + jpeg_saved_marker_ptr marker; + + /* In the current implementation, we don't actually need to examine the + * option flag here; we just copy everything that got saved. + * But to avoid confusion, we do not output JFIF and Adobe APP14 markers + * if the encoder library already wrote one. + */ + for (marker = srcinfo->marker_list; marker != NULL; marker = marker->next) { + + if (dstinfo->write_JFIF_header && + marker->marker == JPEG_APP0 && + marker->data_length >= 5 && + GETJOCTET(marker->data[0]) == 0x4A && + GETJOCTET(marker->data[1]) == 0x46 && + GETJOCTET(marker->data[2]) == 0x49 && + GETJOCTET(marker->data[3]) == 0x46 && + GETJOCTET(marker->data[4]) == 0) + continue; /* reject duplicate JFIF */ + + if (dstinfo->write_Adobe_marker && + marker->marker == JPEG_APP0+14 && + marker->data_length >= 5 && + GETJOCTET(marker->data[0]) == 0x41 && + GETJOCTET(marker->data[1]) == 0x64 && + GETJOCTET(marker->data[2]) == 0x6F && + GETJOCTET(marker->data[3]) == 0x62 && + GETJOCTET(marker->data[4]) == 0x65) + continue; /* reject duplicate Adobe */ + + jpeg_write_marker(dstinfo, marker->marker, + marker->data, marker->data_length); + } +} + +static +void WriteOutputFields(int OutputColorSpace) +{ + J_COLOR_SPACE in_space, jpeg_space; + int components; + + switch (OutputColorSpace) { + + case PT_GRAY: in_space = jpeg_space = JCS_GRAYSCALE; + components = 1; + break; + + case PT_RGB: in_space = JCS_RGB; + jpeg_space = JCS_YCbCr; + components = 3; + break; // red/green/blue + + case PT_YCbCr: in_space = jpeg_space = JCS_YCbCr; + components = 3; + break; // Y/Cb/Cr (also known as YUV) + + case PT_CMYK: in_space = JCS_CMYK; + jpeg_space = JCS_YCCK; + components = 4; + break; // C/M/Y/components + + case PT_Lab: in_space = jpeg_space = JCS_YCbCr; + components = 3; + break; // Fake to don't touch + default: + FatalError("Unsupported output color space"); + return; + } + + + if (jpegQuality >= 100) { + + // avoid destructive conversion when asking for lossless compression + jpeg_space = in_space; + } + + Compressor.in_color_space = in_space; + Compressor.jpeg_color_space = jpeg_space; + Compressor.input_components = Compressor.num_components = components; + jpeg_set_defaults(&Compressor); + jpeg_set_colorspace(&Compressor, jpeg_space); + + + // Make sure to pass resolution through + if (OutputColorSpace == PT_CMYK) + Compressor.write_JFIF_header = 1; + + // Avoid subsampling on high quality factor + jpeg_set_quality(&Compressor, jpegQuality, 1); + if (jpegQuality >= 70) { + + int i; + for(i=0; i < Compressor.num_components; i++) { + + Compressor.comp_info[i].h_samp_factor = 1; + Compressor.comp_info[i].v_samp_factor = 1; + } + + } + +} + + +static +void DoEmbedProfile(const char* ProfileFile) +{ + FILE* f; + size_t size, EmbedLen; + cmsUInt8Number* EmbedBuffer; + + f = fopen(ProfileFile, "rb"); + if (f == NULL) return; + + size = cmsfilelength(f); + EmbedBuffer = (cmsUInt8Number*) malloc(size + 1); + EmbedLen = fread(EmbedBuffer, 1, size, f); + fclose(f); + EmbedBuffer[EmbedLen] = 0; + + write_icc_profile (&Compressor, EmbedBuffer, EmbedLen); + free(EmbedBuffer); +} + + + +static +int DoTransform(cmsHTRANSFORM hXForm, int OutputColorSpace) +{ + JSAMPROW ScanLineIn; + JSAMPROW ScanLineOut; + + + //Preserve resolution values from the original + // (Thanks to Robert Bergs for finding out this bug) + Compressor.density_unit = Decompressor.density_unit; + Compressor.X_density = Decompressor.X_density; + Compressor.Y_density = Decompressor.Y_density; + + // Compressor.write_JFIF_header = 1; + + jpeg_start_decompress(&Decompressor); + jpeg_start_compress(&Compressor, TRUE); + + if (OutputColorSpace == PT_Lab) + SetITUFax(&Compressor); + + // Embed the profile if needed + if (EmbedProfile && cOutProf) + DoEmbedProfile(cOutProf); + + ScanLineIn = (JSAMPROW) malloc(Decompressor.output_width * Decompressor.num_components); + ScanLineOut = (JSAMPROW) malloc(Compressor.image_width * Compressor.num_components); + + while (Decompressor.output_scanline < + Decompressor.output_height) { + + jpeg_read_scanlines(&Decompressor, &ScanLineIn, 1); + + cmsDoTransform(hXForm, ScanLineIn, ScanLineOut, Decompressor.output_width); + + jpeg_write_scanlines(&Compressor, &ScanLineOut, 1); + } + + free(ScanLineIn); + free(ScanLineOut); + + jpeg_finish_decompress(&Decompressor); + jpeg_finish_compress(&Compressor); + + return TRUE; +} + + + +// Transform one image + +static +int TransformImage(char *cDefInpProf, char *cOutProf) +{ + cmsHPROFILE hIn, hOut, hProof; + cmsHTRANSFORM xform; + cmsUInt32Number wInput, wOutput; + int OutputColorSpace; + cmsUInt32Number dwFlags = 0; + cmsUInt32Number EmbedLen; + cmsUInt8Number* EmbedBuffer; + + + cmsSetAdaptationState(ObserverAdaptationState); + + if (BlackPointCompensation) { + + dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; + } + + + switch (PrecalcMode) { + + case 0: dwFlags |= cmsFLAGS_NOOPTIMIZE; break; + case 2: dwFlags |= cmsFLAGS_HIGHRESPRECALC; break; + case 3: dwFlags |= cmsFLAGS_LOWRESPRECALC; break; + default:; + } + + + if (GamutCheck) { + dwFlags |= cmsFLAGS_GAMUTCHECK; + cmsSetAlarmCodes(Alarm); + } + + // Take input color space + wInput = GetInputPixelType(); + + if (lIsDeviceLink) { + + hIn = cmsOpenProfileFromFile(cDefInpProf, "r"); + hOut = NULL; + hProof = NULL; + } + else { + + if (!IgnoreEmbedded && read_icc_profile(&Decompressor, &EmbedBuffer, &EmbedLen)) + { + hIn = cmsOpenProfileFromMem(EmbedBuffer, EmbedLen); + + if (Verbose) { + + fprintf(stdout, " (Embedded profile found)\n"); + PrintProfileInformation(hIn); + fflush(stdout); + } + + if (hIn != NULL && SaveEmbedded != NULL) + SaveMemoryBlock(EmbedBuffer, EmbedLen, SaveEmbedded); + + free(EmbedBuffer); + } + else + { + // Default for ITU/Fax + if (cDefInpProf == NULL && T_COLORSPACE(wInput) == PT_Lab) + cDefInpProf = "*Lab"; + + if (cDefInpProf != NULL && cmsstrcasecmp(cDefInpProf, "*lab") == 0) + hIn = CreateITU2PCS_ICC(); + else + hIn = OpenStockProfile(0, cDefInpProf); + } + + if (cOutProf != NULL && cmsstrcasecmp(cOutProf, "*lab") == 0) + hOut = CreatePCS2ITU_ICC(); + else + hOut = OpenStockProfile(0, cOutProf); + + hProof = NULL; + if (cProofing != NULL) { + + hProof = OpenStockProfile(0, cProofing); + if (hProof == NULL) { + FatalError("Proofing profile couldn't be read."); + } + dwFlags |= cmsFLAGS_SOFTPROOFING; + } + } + + if (!hIn) + FatalError("Input profile couldn't be read."); + if (!hOut) + FatalError("Output profile couldn't be read."); + + // Assure both, input profile and input JPEG are on same colorspace + if (cmsGetColorSpace(hIn) != _cmsICCcolorSpace(T_COLORSPACE(wInput))) + FatalError("Input profile is not operating in proper color space"); + + + // Output colorspace is given by output profile + + if (lIsDeviceLink) { + OutputColorSpace = GetDevicelinkColorSpace(hIn); + } + else { + OutputColorSpace = GetProfileColorSpace(hOut); + } + + jpeg_copy_critical_parameters(&Decompressor, &Compressor); + + WriteOutputFields(OutputColorSpace); + + wOutput = ComputeOutputFormatDescriptor(wInput, OutputColorSpace); + + + xform = cmsCreateProofingTransform(hIn, wInput, + hOut, wOutput, + hProof, Intent, + ProofingIntent, dwFlags); + if (xform == NULL) + FatalError("Cannot transform by using the profiles"); + + DoTransform(xform, OutputColorSpace); + + + jcopy_markers_execute(&Decompressor, &Compressor); + + cmsDeleteTransform(xform); + cmsCloseProfile(hIn); + cmsCloseProfile(hOut); + if (hProof) cmsCloseProfile(hProof); + + return 1; +} + + +// Simply print help + +static +void Help(int level) +{ + fprintf(stderr, "little cms ICC profile applier for JPEG - v3.1 [LittleCMS %2.2f]\n\n", LCMS_VERSION / 1000.0); + + switch(level) { + + default: + case 0: + + fprintf(stderr, "usage: jpegicc [flags] input.jpg output.jpg\n"); + + fprintf(stderr, "\nflags:\n\n"); + fprintf(stderr, "%cv - Verbose\n", SW); + fprintf(stderr, "%ci - Input profile (defaults to sRGB)\n", SW); + fprintf(stderr, "%co - Output profile (defaults to sRGB)\n", SW); + + PrintRenderingIntents(); + + + fprintf(stderr, "%cb - Black point compensation\n", SW); + fprintf(stderr, "%cd<0..1> - Observer adaptation state (abs.col. only)\n", SW); + fprintf(stderr, "%cn - Ignore embedded profile\n", SW); + fprintf(stderr, "%ce - Embed destination profile\n", SW); + fprintf(stderr, "%cs - Save embedded profile as \n", SW); + + fprintf(stderr, "\n"); + + fprintf(stderr, "%cc<0,1,2,3> - Precalculates transform (0=Off, 1=Normal, 2=Hi-res, 3=LoRes) [defaults to 1]\n", SW); + fprintf(stderr, "\n"); + + fprintf(stderr, "%cp - Soft proof profile\n", SW); + fprintf(stderr, "%cm<0,1,2,3> - SoftProof intent\n", SW); + fprintf(stderr, "%cg - Marks out-of-gamut colors on softproof\n", SW); + fprintf(stderr, "%c!,, - Out-of-gamut marker channel values\n", SW); + + fprintf(stderr, "\n"); + fprintf(stderr, "%cq<0..100> - Output JPEG quality\n", SW); + + fprintf(stderr, "\n"); + fprintf(stderr, "%ch<0,1,2,3> - More help\n", SW); + break; + + case 1: + + fprintf(stderr, "Examples:\n\n" + "To color correct from scanner to sRGB:\n" + "\tjpegicc %ciscanner.icm in.jpg out.jpg\n" + "To convert from monitor1 to monitor2:\n" + "\tjpegicc %cimon1.icm %comon2.icm in.jpg out.jpg\n" + "To make a CMYK separation:\n" + "\tjpegicc %coprinter.icm inrgb.jpg outcmyk.jpg\n" + "To recover sRGB from a CMYK separation:\n" + "\tjpegicc %ciprinter.icm incmyk.jpg outrgb.jpg\n" + "To convert from CIELab ITU/Fax JPEG to sRGB\n" + "\tjpegicc in.jpg out.jpg\n\n", + SW, SW, SW, SW, SW, SW); + break; + + case 2: + PrintBuiltins(); + break; + + case 3: + + fprintf(stderr, "This program is intended to be a demo of the little cms\n" + "engine. Both lcms and this program are freeware. You can\n" + "obtain both in source code at http://www.littlecms.com\n" + "For suggestions, comments, bug reports etc. send mail to\n" + "marti@littlecms.com\n\n"); + break; + } + + exit(0); +} + + +// The toggles stuff + +static +void HandleSwitches(int argc, char *argv[]) +{ + int s; + + while ((s=xgetopt(argc,argv,"bBnNvVGgh:H:i:I:o:O:P:p:t:T:c:C:Q:q:M:m:L:l:eEs:S:!:D:d:")) != EOF) { + + switch (s) + { + + case 'b': + case 'B': + BlackPointCompensation = TRUE; + break; + + case 'd': + case 'D': ObserverAdaptationState = atof(xoptarg); + if (ObserverAdaptationState < 0 || + ObserverAdaptationState > 1.0) + FatalError("Adaptation state should be 0..1"); + break; + + case 'v': + case 'V': + Verbose = TRUE; + break; + + case 'i': + case 'I': + if (lIsDeviceLink) + FatalError("Device-link already specified"); + + cInpProf = xoptarg; + break; + + case 'o': + case 'O': + if (lIsDeviceLink) + FatalError("Device-link already specified"); + + cOutProf = xoptarg; + break; + + case 'l': + case 'L': + if (cInpProf != NULL || cOutProf != NULL) + FatalError("input/output profiles already specified"); + + cInpProf = xoptarg; + lIsDeviceLink = TRUE; + break; + + case 'p': + case 'P': + cProofing = xoptarg; + break; + + case 't': + case 'T': + Intent = atoi(xoptarg); + break; + + case 'N': + case 'n': + IgnoreEmbedded = TRUE; + break; + + case 'e': + case 'E': + EmbedProfile = TRUE; + break; + + + case 'g': + case 'G': + GamutCheck = TRUE; + break; + + case 'c': + case 'C': + PrecalcMode = atoi(xoptarg); + if (PrecalcMode < 0 || PrecalcMode > 2) + FatalError("Unknown precalc mode '%d'", PrecalcMode); + break; + + case 'H': + case 'h': { + + int a = atoi(xoptarg); + Help(a); + } + break; + + case 'q': + case 'Q': + jpegQuality = atoi(xoptarg); + if (jpegQuality > 100) jpegQuality = 100; + if (jpegQuality < 0) jpegQuality = 0; + break; + + case 'm': + case 'M': + ProofingIntent = atoi(xoptarg); + break; + + case 's': + case 'S': SaveEmbedded = xoptarg; + break; + + case '!': + if (sscanf(xoptarg, "%hu,%hu,%hu", &Alarm[0], &Alarm[1], &Alarm[2]) == 3) { + int i; + for (i=0; i < 3; i++) { + Alarm[i] = (Alarm[i] << 8) | Alarm[i]; + } + } + break; + + default: + + FatalError("Unknown option - run without args to see valid ones"); + } + + } +} + + +int main(int argc, char* argv[]) +{ + InitUtils("jpegicc"); + + HandleSwitches(argc, argv); + + if ((argc - xoptind) != 2) { + Help(0); + } + + OpenInput(argv[xoptind]); + OpenOutput(argv[xoptind+1]); + + TransformImage(cInpProf, cOutProf); + + + if (Verbose) { fprintf(stdout, "\n"); fflush(stdout); } + + Done(); + + return 0; +} + + + diff --git a/utils/linkicc/.deps/linkicc.Po b/utils/linkicc/.deps/linkicc.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/linkicc/.deps/linkicc.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/linkicc/.deps/vprf.Po b/utils/linkicc/.deps/vprf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/linkicc/.deps/vprf.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/linkicc/.deps/xgetopt.Po b/utils/linkicc/.deps/xgetopt.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/linkicc/.deps/xgetopt.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/linkicc/Makefile b/utils/linkicc/Makefile new file mode 100644 index 0000000..e79a855 --- /dev/null +++ b/utils/linkicc/Makefile @@ -0,0 +1,571 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# utils/linkicc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# +# Makefile for building lcms sample programs +# Originally Written by Bob Friesenhahn, June 2003 +# Additions and bugs by Marti Maria + + +pkgdatadir = $(datadir)/lcms2 +pkgincludedir = $(includedir)/lcms2 +pkglibdir = $(libdir)/lcms2 +pkglibexecdir = $(libexecdir)/lcms2 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = arm-unknown-linux-gnueabi +host_triplet = arm-unknown-linux-gnueabi +bin_PROGRAMS = linkicc$(EXEEXT) +subdir = utils/linkicc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_linkicc_OBJECTS = linkicc.$(OBJEXT) xgetopt.$(OBJEXT) \ + vprf.$(OBJEXT) +linkicc_OBJECTS = $(am_linkicc_OBJECTS) +linkicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +linkicc_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(linkicc_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(linkicc_SOURCES) +DIST_SOURCES = $(linkicc_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoconf +AUTOHEADER = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoheader +AUTOMAKE = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall +CPP = gcc -std=gnu99 -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DPACKAGE_NAME=\"lcms2\" -DPACKAGE_TARNAME=\"lcms2\" -DPACKAGE_VERSION=\"2.3\" -DPACKAGE_STRING=\"lcms2\ 2.3\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHasJPEG=1 -DHasZLIB=1 -DHasTIFF=1 -DHAVE_TIFFCONF_H=1 +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JPEGICC_DEPLIBS = -ljpeg -lm +LCMS_LIB_DEPLIBS = -lm +LD = /usr/arm-linux-gnueabi/bin/ld +LDFLAGS = +LIBOBJS = +LIBRARY_AGE = 0 +LIBRARY_CURRENT = 2 +LIBRARY_REVISION = 3 +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltmain.sh +LIB_JPEG = -ljpeg +LIB_MATH = -lm +LIB_TIFF = -ltiff +LIB_ZLIB = -lz +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = lcms2 +PACKAGE_BUGREPORT = +PACKAGE_NAME = lcms2 +PACKAGE_STRING = lcms2 2.3 +PACKAGE_TARNAME = lcms2 +PACKAGE_URL = +PACKAGE_VERSION = 2.3 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TIFFICC_DEPLIBS = -ltiff -ljpeg -lz -lm +VERSION = 2.3 +abs_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/utils/linkicc +abs_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/utils/linkicc +abs_top_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +abs_top_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = arm-unknown-linux-gnueabi +build_alias = +build_cpu = arm +build_os = linux-gnueabi +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = arm-unknown-linux-gnueabi +host_alias = +host_cpu = arm +host_os = linux-gnueabi +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +inline = +install_sh = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +linkicc_LDADD = $(top_builddir)/src/liblcms2.la +linkicc_LDFLAGS = +linkicc_SOURCES = linkicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +linkicc_MANS = linkicc.1 +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/linkicc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign utils/linkicc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +linkicc$(EXEEXT): $(linkicc_OBJECTS) $(linkicc_DEPENDENCIES) + @rm -f linkicc$(EXEEXT) + $(linkicc_LINK) $(linkicc_OBJECTS) $(linkicc_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/linkicc.Po +include ./$(DEPDIR)/vprf.Po +include ./$(DEPDIR)/xgetopt.Po + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +xgetopt.o: ../common/xgetopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.o -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +# source='../common/xgetopt.c' object='xgetopt.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + +xgetopt.obj: ../common/xgetopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.obj -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +# source='../common/xgetopt.c' object='xgetopt.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + +vprf.o: ../common/vprf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.o -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +# source='../common/vprf.c' object='vprf.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + +vprf.obj: ../common/vprf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.obj -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +# source='../common/vprf.c' object='vprf.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/utils/linkicc/Makefile.am b/utils/linkicc/Makefile.am new file mode 100644 index 0000000..d7eef57 --- /dev/null +++ b/utils/linkicc/Makefile.am @@ -0,0 +1,19 @@ +# +# Makefile for building lcms sample programs +# Originally Written by Bob Friesenhahn, June 2003 +# Additions and bugs by Marti Maria + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign + +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +bin_PROGRAMS = linkicc + +linkicc_LDADD = $(top_builddir)/src/liblcms2.la +linkicc_LDFLAGS = @LDFLAGS@ +linkicc_SOURCES = linkicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +linkicc_MANS = linkicc.1 + +EXTRA_DIST = $(man_MANS) diff --git a/utils/linkicc/Makefile.in b/utils/linkicc/Makefile.in new file mode 100644 index 0000000..0476e51 --- /dev/null +++ b/utils/linkicc/Makefile.in @@ -0,0 +1,571 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Makefile for building lcms sample programs +# Originally Written by Bob Friesenhahn, June 2003 +# Additions and bugs by Marti Maria + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = linkicc$(EXEEXT) +subdir = utils/linkicc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_linkicc_OBJECTS = linkicc.$(OBJEXT) xgetopt.$(OBJEXT) \ + vprf.$(OBJEXT) +linkicc_OBJECTS = $(am_linkicc_OBJECTS) +linkicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +linkicc_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(linkicc_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(linkicc_SOURCES) +DIST_SOURCES = $(linkicc_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ +LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRARY_AGE = @LIBRARY_AGE@ +LIBRARY_CURRENT = @LIBRARY_CURRENT@ +LIBRARY_REVISION = @LIBRARY_REVISION@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIB_JPEG = @LIB_JPEG@ +LIB_MATH = @LIB_MATH@ +LIB_TIFF = @LIB_TIFF@ +LIB_ZLIB = @LIB_ZLIB@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +inline = @inline@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +linkicc_LDADD = $(top_builddir)/src/liblcms2.la +linkicc_LDFLAGS = @LDFLAGS@ +linkicc_SOURCES = linkicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +linkicc_MANS = linkicc.1 +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/linkicc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign utils/linkicc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +linkicc$(EXEEXT): $(linkicc_OBJECTS) $(linkicc_DEPENDENCIES) + @rm -f linkicc$(EXEEXT) + $(linkicc_LINK) $(linkicc_OBJECTS) $(linkicc_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linkicc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vprf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetopt.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +xgetopt.o: ../common/xgetopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.o -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/xgetopt.c' object='xgetopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + +xgetopt.obj: ../common/xgetopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.obj -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/xgetopt.c' object='xgetopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + +vprf.o: ../common/vprf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.o -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/vprf.c' object='vprf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + +vprf.obj: ../common/vprf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.obj -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/vprf.c' object='vprf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/utils/linkicc/linkicc.1 b/utils/linkicc/linkicc.1 new file mode 100644 index 0000000..7d78db2 --- /dev/null +++ b/utils/linkicc/linkicc.1 @@ -0,0 +1,90 @@ +.\"Shiju P. Nair September 30, 2004 +.TH ICCLINK 1 "September 30, 2004" +.SH NAME +icclink - little cms device link generator. +.SH SYNOPSIS +.B icclink +.RI [ options ] " " +.SH DESCRIPTION +lcms is a standalone CMM engine, which deals with the color management. +It implements a fast transformation between ICC profiles. +.B icclink +is little cms device link generator. +.P +Links two or more profiles into a single devicelink profile. +Colorspaces must be paired except Lab/XYZ, that can be interchanged. +.SH OPTIONS +.TP +.B \-8 +Creates 8-bit devicelink. +.TP +.B \-b +Black point compensation. +.TP +.B \-c <0,1,2,3> +Precision (0=LowRes, 1=Normal, 2=Hi-res). [defaults to 1] +.TP +.BI \-d\ description +Description text (quotes can be used). +.TP +.B \-h <0,1,2,3> +Show summary of options and examples. +.TP +.BI \-i\ profile +Input profile (defaults to sRGB). +.TP +.B -k <0..400> +Ink-limiting in % (CMYK only) +.TP +.BI \-o\ profile +Output devicelink profile. [defaults to 'devicelink.icm'] +.TP +.B \-t <0,1,2,3> +Intent (0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute). +.TP +.B \-x +Creatively, guess deviceclass of resulting profile. +.TP +.nf +Built-in profiles: + *Lab -- D50-based CIEL*a*b (PCS) + *XYZ -- CIE XYZ (PCS) + *sRGB -- sRGB color space + *Gray22- Monochrome of Gamma 2.2 + *Lin2222- CMYK linearization of gamma 2.2 on each channel +.fi +.SH EXAMPLES +.nf +To create 'devicelink.icm' from a.icc to b.icc: + icclink a.icc b.icc + +To create 'out.icc' from sRGB to cmyk.icc: + icclink -o out.icc *sRGB cmyk.icc + +To create a sRGB input profile working in Lab: + icclink -x -o sRGBLab.icc *sRGB *Lab + +To create a XYZ -> sRGB output profile: + icclink -x -o sRGBLab.icc *XYZ *sRGB + +To create a abstract profile doing softproof for cmyk.icc: + icclink -t1 -x -o softproof.icc *Lab cmyk.icc cmyk.icc *Lab + +To create a 'grayer' sRGB input profile: + icclink -x -o grayer.icc *sRGB gray.icc gray.icc *Lab + +To embed ink limiting into a cmyk output profile: + icclink -x -o cmyklimited.icc -k 250 cmyk.icc *Lab +.fi +.SH NOTES +For suggestions, comments, bug reports etc. send mail to +info@littlecms.com. +.SH SEE ALSO +.BR jpegicc (1), +.BR tifficc (1), +.BR icc2ps (1), +.BR icctrans (1), +.BR wtpt (1) +.SH AUTHOR +This manual page was written by Shiju p. Nair , +for the Debian project. diff --git a/utils/linkicc/linkicc.c b/utils/linkicc/linkicc.c new file mode 100644 index 0000000..b532ecb --- /dev/null +++ b/utils/linkicc/linkicc.c @@ -0,0 +1,384 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- + +#include "utils.h" + +// --------------------------------------------------------------------------------- + +static char* Description = "Devicelink profile"; +static char* Copyright = "No copyright, use freely"; +static int Intent = INTENT_PERCEPTUAL; +static char* cOutProf = "devicelink.icc"; +static int PrecalcMode = 1; +static int NumOfGridPoints = 0; + +static cmsFloat64Number ObserverAdaptationState = 1.0; // According ICC 4.2 this is the default + +static cmsBool BlackPointCompensation = FALSE; + +static cmsFloat64Number InkLimit = 400; +static cmsBool lUse8bits = FALSE; +static cmsBool TagResult = FALSE; +static cmsBool KeepLinearization = FALSE; +static cmsFloat64Number Version = 4.3; + + +// The manual +static +int Help(int level) +{ + switch (level) { + + default: + case 0: + + fprintf(stderr, "\nlinkicc: Links profiles into a single devicelink.\n"); + + fprintf(stderr, "\n"); + fprintf(stderr, "usage: linkicc [flags] \n\n"); + fprintf(stderr, "flags:\n\n"); + fprintf(stderr, "%co - Output devicelink profile. [defaults to 'devicelink.icc']\n", SW); + + PrintRenderingIntents(); + + fprintf(stderr, "%cc<0,1,2> - Precision (0=LowRes, 1=Normal, 2=Hi-res) [defaults to 1]\n", SW); + fprintf(stderr, "%cn - Alternate way to set precision, number of CLUT points\n", SW); + fprintf(stderr, "%cd - description text (quotes can be used)\n", SW); + fprintf(stderr, "%cy - copyright notice (quotes can be used)\n", SW); + + fprintf(stderr, "\n%ck<0..400> - Ink-limiting in %% (CMYK only)\n", SW); + fprintf(stderr, "%c8 - Creates 8-bit devicelink\n", SW); + fprintf(stderr, "%cx - Creatively, guess deviceclass of resulting profile.\n", SW); + fprintf(stderr, "%cb - Black point compensation\n", SW); + fprintf(stderr, "%ca<0..1> - Observer adaptation state (abs.col. only)\n\n", SW); + fprintf(stderr, "%cl - Use linearization curves (may affect accuracy)\n", SW); + fprintf(stderr, "%cr - Profile version. (CAUTION: may change the profile implementation)\n", SW); + fprintf(stderr, "\n"); + fprintf(stderr, "Colorspaces must be paired except Lab/XYZ, that can be interchanged.\n\n"); + + fprintf(stderr, "%ch<0,1,2,3> - More help\n", SW); + break; + + case 1: + PrintBuiltins(); + break; + + case 2: + + fprintf(stderr, "\nExamples:\n\n" + "To create 'devicelink.icm' from a.icc to b.icc:\n" + "\tlinkicc a.icc b.icc\n\n" + "To create 'out.icc' from sRGB to cmyk.icc:\n" + "\tlinkicc -o out.icc *sRGB cmyk.icc\n\n" + "To create a sRGB input profile working in Lab:\n" + "\tlinkicc -x -o sRGBLab.icc *sRGB *Lab\n\n" + "To create a XYZ -> sRGB output profile:\n" + "\tlinkicc -x -o sRGBLab.icc *XYZ *sRGB\n\n" + "To create a abstract profile doing softproof for cmyk.icc:\n" + "\tlinkicc -t1 -x -o softproof.icc *Lab cmyk.icc cmyk.icc *Lab\n\n" + "To create a 'grayer' sRGB input profile:\n" + "\tlinkicc -x -o grayer.icc *sRGB gray.icc gray.icc *Lab\n\n" + "To embed ink limiting into a cmyk output profile:\n" + "\tlinkicc -x -o cmyklimited.icc -k 250 cmyk.icc *Lab\n\n"); + break; + + case 3: + + fprintf(stderr, "This program is intended to be a demo of the little cms\n" + "engine. Both lcms and this program are freeware. You can\n" + "obtain both in source code at http://www.littlecms.com\n" + "For suggestions, comments, bug reports etc. send mail to\n" + "info@littlecms.com\n\n"); + } + + exit(0); +} + +// The toggles stuff +static +void HandleSwitches(int argc, char *argv[]) +{ + int s; + + while ((s = xgetopt(argc,argv,"a:A:BbC:c:D:d:h:H:k:K:lLn:N:O:o:r:R:T:t:V:v:xX8y:Y:")) != EOF) { + + switch (s) { + + + case 'a': + case 'A': + ObserverAdaptationState = atof(xoptarg); + if (ObserverAdaptationState < 0 || + ObserverAdaptationState > 1.0) + FatalError("Adaptation state should be 0..1"); + break; + + case 'b': + case 'B': + BlackPointCompensation = TRUE; + break; + + case 'c': + case 'C': + PrecalcMode = atoi(xoptarg); + if (PrecalcMode < 0 || PrecalcMode > 2) { + FatalError("Unknown precalc mode '%d'", PrecalcMode); + } + break; + + case 'd': + case 'D': + // Doing that is correct and safe: Description points to memory allocated in the command line. + // same for Copyright and output devicelink. + Description = xoptarg; + break; + + case 'h': + case 'H': + Help(atoi(xoptarg)); + return; + + case 'k': + case 'K': + InkLimit = atof(xoptarg); + if (InkLimit < 0.0 || InkLimit > 400.0) { + FatalError("Ink limit must be 0%%..400%%"); + } + break; + + + case 'l': + case 'L': KeepLinearization = TRUE; + break; + + case 'n': + case 'N': + if (PrecalcMode != 1) { + FatalError("Precalc mode already specified"); + } + NumOfGridPoints = atoi(xoptarg); + break; + + case 'o': + case 'O': + cOutProf = xoptarg; + break; + + + case 'r': + case 'R': + Version = atof(xoptarg); + if (Version < 2.0 || Version > 4.3) { + fprintf(stderr, "WARNING: lcms was not aware of this version, tag types may be wrong!\n"); + } + break; + + case 't': + case 'T': + Intent = atoi(xoptarg); // Will be validated latter on + break; + + case 'V': + case 'v': + Verbose = atoi(xoptarg); + if (Verbose < 0 || Verbose > 3) { + FatalError("Unknown verbosity level '%d'", Verbose); + } + break; + + case '8': + lUse8bits = TRUE; + break; + + + + case 'y': + case 'Y': + Copyright = xoptarg; + break; + + + + case 'x': + case 'X': TagResult = TRUE; + break; + + + + default: + + FatalError("Unknown option - run without args to see valid ones.\n"); + } + } +} + +// Set the copyright and description +static +cmsBool SetTextTags(cmsHPROFILE hProfile) +{ + cmsMLU *DescriptionMLU, *CopyrightMLU; + cmsBool rc = FALSE; + cmsContext ContextID = cmsGetProfileContextID(hProfile); + + DescriptionMLU = cmsMLUalloc(ContextID, 1); + CopyrightMLU = cmsMLUalloc(ContextID, 1); + + if (DescriptionMLU == NULL || CopyrightMLU == NULL) goto Error; + + if (!cmsMLUsetASCII(DescriptionMLU, "en", "US", Description)) goto Error; + if (!cmsMLUsetASCII(CopyrightMLU, "en", "US", Copyright)) goto Error; + + if (!cmsWriteTag(hProfile, cmsSigProfileDescriptionTag, DescriptionMLU)) goto Error; + if (!cmsWriteTag(hProfile, cmsSigCopyrightTag, CopyrightMLU)) goto Error; + + rc = TRUE; + +Error: + + if (DescriptionMLU) + cmsMLUfree(DescriptionMLU); + if (CopyrightMLU) + cmsMLUfree(CopyrightMLU); + return rc; +} + + + +int main(int argc, char *argv[]) +{ + int i, nargs, rc; + cmsHPROFILE Profiles[257]; + cmsHPROFILE hProfile; + cmsUInt32Number dwFlags; + cmsHTRANSFORM hTransform = NULL; + + // Here we are + fprintf(stderr, "little cms ICC device link generator - v2.2 [LittleCMS %2.2f]\n", LCMS_VERSION / 1000.0); + fflush(stderr); + + // Initialize + InitUtils("linkicc"); + rc = 0; + + // Get the options + HandleSwitches(argc, argv); + + // How many profiles to link? + nargs = (argc - xoptind); + if (nargs < 1) + return Help(0); + + if (nargs > 255) { + FatalError("Holy profile! what are you trying to do with so many profiles!?"); + goto Cleanup; + } + + // Open all profiles + memset(Profiles, 0, sizeof(Profiles)); + for (i=0; i < nargs; i++) { + + Profiles[i] = OpenStockProfile(0, argv[i + xoptind]); + if (Profiles[i] == NULL) goto Cleanup; + + if (Verbose >= 1) { + PrintProfileInformation(Profiles[i]); + } + } + + // Ink limiting + if (InkLimit != 400.0) { + cmsColorSpaceSignature EndingColorSpace = cmsGetColorSpace(Profiles[nargs-1]); + Profiles[nargs++] = cmsCreateInkLimitingDeviceLink(EndingColorSpace, InkLimit); + } + + // Set the flags + dwFlags = cmsFLAGS_KEEP_SEQUENCE; + switch (PrecalcMode) { + + case 0: dwFlags |= cmsFLAGS_LOWRESPRECALC; break; + case 2: dwFlags |= cmsFLAGS_HIGHRESPRECALC; break; + case 1: + if (NumOfGridPoints > 0) + dwFlags |= cmsFLAGS_GRIDPOINTS(NumOfGridPoints); + break; + + default: + { + FatalError("Unknown precalculation mode '%d'", PrecalcMode); + goto Cleanup; + } + } + + if (BlackPointCompensation) + dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; + + if (TagResult) + dwFlags |= cmsFLAGS_GUESSDEVICECLASS; + + if (KeepLinearization) + dwFlags |= cmsFLAGS_CLUT_PRE_LINEARIZATION|cmsFLAGS_CLUT_POST_LINEARIZATION; + + if (lUse8bits) dwFlags |= cmsFLAGS_8BITS_DEVICELINK; + + cmsSetAdaptationState(ObserverAdaptationState); + + // Create the color transform. Specify 0 for the format is safe as the transform + // is intended to be used only for the devicelink. + hTransform = cmsCreateMultiprofileTransform(Profiles, nargs, 0, 0, Intent, dwFlags); + if (hTransform == NULL) { + FatalError("Transform creation failed"); + goto Cleanup; + } + + hProfile = cmsTransform2DeviceLink(hTransform, Version, dwFlags); + if (hProfile == NULL) { + FatalError("Devicelink creation failed"); + goto Cleanup; + } + + SetTextTags(hProfile); + cmsSetHeaderRenderingIntent(hProfile, Intent); + + if (cmsSaveProfileToFile(hProfile, cOutProf)) { + + if (Verbose > 0) + fprintf(stderr, "Ok"); + } + else + FatalError("Error saving file!"); + + cmsCloseProfile(hProfile); + + +Cleanup: + + if (hTransform != NULL) cmsDeleteTransform(hTransform); + for (i=0; i < nargs; i++) { + + if (Profiles[i] != NULL) cmsCloseProfile(Profiles[i]); + } + + return rc; +} diff --git a/utils/matlab/icctrans.c b/utils/matlab/icctrans.c new file mode 100755 index 0000000..d6cdfed --- /dev/null +++ b/utils/matlab/icctrans.c @@ -0,0 +1,724 @@ +// +// Little cms +// Copyright (C) 1998-2010 Marti Maria, Ignacio Ruiz de Conejo +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +#include "mex.h" + +#include "lcms2.h" +#include "string.h" +#include "stdarg.h" + +// xgetopt() interface ----------------------------------------------------- + +static int xoptind; +static char *xoptarg; +static int xopterr; +static char *letP; +static char SW = '-'; + +// ------------------------------------------------------------------------ + + +static int Verbose ; // Print some statistics +static char *cInProf; // Input profile +static char *cOutProf; // Output profile +static char *cProofing; // Softproofing profile + + +static int Intent; // Rendering Intent +static int ProofingIntent; // RI for proof + +static int PrecalcMode; // 0 = Not, 1=Normal, 2=Accurate, 3=Fast + +static cmsBool BlackPointCompensation; +static cmsBool lIsDeviceLink; +static cmsBool lMultiProfileChain; // Multiple profile chain + +static cmsHPROFILE hInput, hOutput, hProof; +static cmsHTRANSFORM hColorTransform; +static cmsHPROFILE hProfiles[255]; +static int nProfiles; + +static cmsColorSpaceSignature InputColorSpace, OutputColorSpace; +static int OutputChannels, InputChannels, nBytesDepth; + + +// Error. Print error message and abort + +static +cmsBool FatalError(const char *frm, ...) +{ + va_list args; + char Buffer[1024]; + + va_start(args, frm); + vsprintf(Buffer, frm, args); + mexErrMsgTxt(Buffer); + va_end(args); + + return FALSE; +} + +// This is the handler passed to lcms + +static +void MatLabErrorHandler(cmsContext ContextID, cmsUInt32Number ErrorCode, + const char *Text) +{ + mexErrMsgTxt(Text); +} +// +// Parse the command line options, System V style. +// + +static +void xoptinit() +{ + xoptind = 1; + xopterr = 0; + letP = NULL; +} + + +static +int xgetopt(int argc, char *argv[], char *optionS) +{ + unsigned char ch; + char *optP; + + if (SW == 0) { + SW = '/'; + } + + if (argc > xoptind) { + if (letP == NULL) { + if ((letP = argv[xoptind]) == NULL || + *(letP++) != SW) goto gopEOF; + if (*letP == SW) { + xoptind++; goto gopEOF; + } + } + if (0 == (ch = *(letP++))) { + xoptind++; goto gopEOF; + } + if (':' == ch || (optP = strchr(optionS, ch)) == NULL) + goto gopError; + if (':' == *(++optP)) { + xoptind++; + if (0 == *letP) { + if (argc <= xoptind) goto gopError; + letP = argv[xoptind++]; + } + xoptarg = letP; + letP = NULL; + } else { + if (0 == *letP) { + xoptind++; + letP = NULL; + } + xoptarg = NULL; + } + return ch; + } +gopEOF: + xoptarg = letP = NULL; + return EOF; + +gopError: + xoptarg = NULL; + if (xopterr) + FatalError ("get command line option"); + return ('?'); +} + + +// Return Mathlab type by depth + +static +size_t SizeOfArrayType(const mxArray *Array) +{ + + switch (mxGetClassID(Array)) { + + case mxINT8_CLASS: return 1; + case mxUINT8_CLASS: return 1; + case mxINT16_CLASS: return 2; + case mxUINT16_CLASS: return 2; + case mxSINGLE_CLASS: return 4; + case mxDOUBLE_CLASS: return 0; // Special case -- lcms handles double as size=0 + + + default: + FatalError("Unsupported data type"); + return 0; + } +} + + +// Get number of pixels of input array. Supported arrays are +// organized as NxMxD, being N and M the size of image and D the +// number of components. + +static +size_t GetNumberOfPixels(const mxArray* In) +{ + int nDimensions = mxGetNumberOfDimensions(In); + const int *Dimensions = mxGetDimensions(In); + + switch (nDimensions) { + + case 1: return 1; // It is just a spot color + case 2: return Dimensions[0]; // A scanline + case 3: return Dimensions[0]*Dimensions[1]; // A image + + default: + FatalError("Unsupported array of %d dimensions", nDimensions); + return 0; + } +} + + +// Allocates the output array. Copies the input array modifying the pixel +// definition to match "OutputChannels". + +static +mxArray* AllocateOutputArray(const mxArray* In, int OutputChannels) +{ + + mxArray* Out = mxDuplicateArray(In); // Make a "deep copy" of Input array + int nDimensions = mxGetNumberOfDimensions(In); + const int* Dimensions = mxGetDimensions(In); + int InputChannels = Dimensions[nDimensions-1]; + + + // Modify pixel size only if needed + + if (InputChannels != OutputChannels) { + + + int i, NewSize; + int *ModifiedDimensions = (int*) mxMalloc(nDimensions * sizeof(int)); + + + memmove(ModifiedDimensions, Dimensions, nDimensions * sizeof(int)); + ModifiedDimensions[nDimensions - 1] = OutputChannels; + + switch (mxGetClassID(In)) { + + case mxINT8_CLASS: NewSize = sizeof(char); break; + case mxUINT8_CLASS: NewSize = sizeof(unsigned char); break; + case mxINT16_CLASS: NewSize = sizeof(short); break; + case mxUINT16_CLASS: NewSize = sizeof(unsigned short); break; + + default: + case mxDOUBLE_CLASS: NewSize = sizeof(double); break; + } + + + // NewSize = 1; + for (i=0; i < nDimensions; i++) + NewSize *= ModifiedDimensions[i]; + + + mxSetDimensions(Out, ModifiedDimensions, nDimensions); + mxFree(ModifiedDimensions); + + mxSetPr(Out, mxRealloc(mxGetPr(Out), NewSize)); + + } + + + return Out; +} + + + +// Does create a format descriptor. "Bytes" is the sizeof type in bytes +// +// Bytes Meaning +// ------ -------- +// 0 Floating point (double) +// 1 8-bit samples +// 2 16-bit samples + +static +cmsUInt32Number MakeFormatDescriptor(cmsColorSpaceSignature ColorSpace, int Bytes) +{ + int IsFloat = (Bytes == 0 || Bytes == 4) ? 1 : 0; + int Channels = cmsChannelsOf(ColorSpace); + return FLOAT_SH(IsFloat)|COLORSPACE_SH(_cmsLCMScolorSpace(ColorSpace))|BYTES_SH(Bytes)|CHANNELS_SH(Channels)|PLANAR_SH(1); +} + + +// Opens a profile or proper built-in + +static +cmsHPROFILE OpenProfile(const char* File) +{ + + cmsContext ContextID = 0; + + if (!File) + return cmsCreate_sRGBProfileTHR(ContextID); + + if (cmsstrcasecmp(File, "*Lab2") == 0) + return cmsCreateLab2ProfileTHR(ContextID, NULL); + + if (cmsstrcasecmp(File, "*Lab4") == 0) + return cmsCreateLab4ProfileTHR(ContextID, NULL); + + if (cmsstrcasecmp(File, "*Lab") == 0) + return cmsCreateLab4ProfileTHR(ContextID, NULL); + + if (cmsstrcasecmp(File, "*LabD65") == 0) { + + cmsCIExyY D65xyY; + + cmsWhitePointFromTemp( &D65xyY, 6504); + return cmsCreateLab4ProfileTHR(ContextID, &D65xyY); + } + + if (cmsstrcasecmp(File, "*XYZ") == 0) + return cmsCreateXYZProfileTHR(ContextID); + + if (cmsstrcasecmp(File, "*Gray22") == 0) { + + cmsToneCurve* Curve = cmsBuildGamma(ContextID, 2.2); + cmsHPROFILE hProfile = cmsCreateGrayProfileTHR(ContextID, cmsD50_xyY(), Curve); + cmsFreeToneCurve(Curve); + return hProfile; + } + + if (cmsstrcasecmp(File, "*Gray30") == 0) { + + cmsToneCurve* Curve = cmsBuildGamma(ContextID, 3.0); + cmsHPROFILE hProfile = cmsCreateGrayProfileTHR(ContextID, cmsD50_xyY(), Curve); + cmsFreeToneCurve(Curve); + return hProfile; + } + + if (cmsstrcasecmp(File, "*srgb") == 0) + return cmsCreate_sRGBProfileTHR(ContextID); + + if (cmsstrcasecmp(File, "*null") == 0) + return cmsCreateNULLProfileTHR(ContextID); + + + if (cmsstrcasecmp(File, "*Lin2222") == 0) { + + cmsToneCurve* Gamma = cmsBuildGamma(0, 2.2); + cmsToneCurve* Gamma4[4]; + cmsHPROFILE hProfile; + + Gamma4[0] = Gamma4[1] = Gamma4[2] = Gamma4[3] = Gamma; + hProfile = cmsCreateLinearizationDeviceLink(cmsSigCmykData, Gamma4); + cmsFreeToneCurve(Gamma); + return hProfile; + } + + + return cmsOpenProfileFromFileTHR(ContextID, File, "r"); +} + + +static +cmsUInt32Number GetFlags() +{ + cmsUInt32Number dwFlags = 0; + + switch (PrecalcMode) { + + case 0: dwFlags = cmsFLAGS_NOOPTIMIZE; break; + case 2: dwFlags = cmsFLAGS_HIGHRESPRECALC; break; + case 3: dwFlags = cmsFLAGS_LOWRESPRECALC; break; + case 1: break; + + default: FatalError("Unknown precalculation mode '%d'", PrecalcMode); + } + + if (BlackPointCompensation) + dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; + + return dwFlags; +} + +// Create transforms + +static +void OpenTransforms(int argc, char *argv[]) +{ + + cmsUInt32Number dwIn, dwOut, dwFlags; + + + if (lMultiProfileChain) { + + int i; + cmsHTRANSFORM hTmp; + + + nProfiles = argc - xoptind; + for (i=0; i < nProfiles; i++) { + + hProfiles[i] = OpenProfile(argv[i+xoptind]); + } + + + // Create a temporary devicelink + + hTmp = cmsCreateMultiprofileTransform(hProfiles, nProfiles, + 0, 0, Intent, GetFlags()); + + hInput = cmsTransform2DeviceLink(hTmp, 4.2, 0); + hOutput = NULL; + cmsDeleteTransform(hTmp); + + InputColorSpace = cmsGetColorSpace(hInput); + OutputColorSpace = cmsGetPCS(hInput); + lIsDeviceLink = TRUE; + + } + else + if (lIsDeviceLink) { + + hInput = cmsOpenProfileFromFile(cInProf, "r"); + hOutput = NULL; + InputColorSpace = cmsGetColorSpace(hInput); + OutputColorSpace = cmsGetPCS(hInput); + + + } + else { + + hInput = OpenProfile(cInProf); + hOutput = OpenProfile(cOutProf); + + InputColorSpace = cmsGetColorSpace(hInput); + OutputColorSpace = cmsGetColorSpace(hOutput); + + if (cmsGetDeviceClass(hInput) == cmsSigLinkClass || + cmsGetDeviceClass(hOutput) == cmsSigLinkClass) + FatalError("Use %cl flag for devicelink profiles!\n", SW); + + } + + + /* + + if (Verbose) { + + mexPrintf("From: %s\n", cmsTakeProductName(hInput)); + if (hOutput) mexPrintf("To : %s\n\n", cmsTakeProductName(hOutput)); + + } + */ + + + OutputChannels = cmsChannelsOf(OutputColorSpace); + InputChannels = cmsChannelsOf(InputColorSpace); + + + dwIn = MakeFormatDescriptor(InputColorSpace, nBytesDepth); + dwOut = MakeFormatDescriptor(OutputColorSpace, nBytesDepth); + + + dwFlags = GetFlags(); + + if (cProofing != NULL) { + + hProof = OpenProfile(cProofing); + dwFlags |= cmsFLAGS_SOFTPROOFING; + } + + + + + hColorTransform = cmsCreateProofingTransform(hInput, dwIn, + hOutput, dwOut, + hProof, Intent, + ProofingIntent, + dwFlags); + +} + + + +static +void ApplyTransforms(const mxArray *In, mxArray *Out) +{ + double *Input = mxGetPr(In); + double *Output = mxGetPr(Out); + size_t nPixels = GetNumberOfPixels(In);; + + cmsDoTransform(hColorTransform, Input, Output, nPixels ); + +} + + +static +void CloseTransforms(void) +{ + int i; + + if (hColorTransform) cmsDeleteTransform(hColorTransform); + if (hInput) cmsCloseProfile(hInput); + if (hOutput) cmsCloseProfile(hOutput); + if (hProof) cmsCloseProfile(hProof); + + for (i=0; i < nProfiles; i++) + cmsCloseProfile(hProfiles[i]); + + hColorTransform = NULL; hInput = NULL; hOutput = NULL; hProof = NULL; +} + + +static +void HandleSwitches(int argc, char *argv[]) +{ + int s; + + xoptinit(); + + while ((s = xgetopt(argc, argv,"C:c:VvbBI:i:O:o:T:t:L:l:r:r:P:p:Mm")) != EOF) { + + + switch (s){ + + case 'b': + case 'B': + BlackPointCompensation = TRUE; + break; + + case 'c': + case 'C': + PrecalcMode = atoi(xoptarg); + if (PrecalcMode < 0 || PrecalcMode > 3) + FatalError("Unknown precalc mode '%d'", PrecalcMode); + break; + + case 'v': + case 'V': + Verbose = TRUE; + break; + + case 'i': + case 'I': + if (lIsDeviceLink) + FatalError("Device-link already specified"); + cInProf = xoptarg; + break; + + case 'o': + case 'O': + if (lIsDeviceLink) + FatalError("Device-link already specified"); + cOutProf = xoptarg; + break; + + case 't': + case 'T': + Intent = atoi(xoptarg); + // if (Intent > 3) Intent = 3; + if (Intent < 0) Intent = 0; + break; + + + case 'l': + case 'L': + cInProf = xoptarg; + lIsDeviceLink = TRUE; + break; + + case 'p': + case 'P': + cProofing = xoptarg; + break; + + + + case 'r': + case 'R': + ProofingIntent = atoi(xoptarg); + // if (ProofingIntent > 3) ProofingIntent = 3; + if (ProofingIntent < 0) ProofingIntent = 0; + break; + + + case 'm': + case 'M': + lMultiProfileChain = TRUE; + break; + + default: + FatalError("Unknown option."); + } + } + + // For multiprofile, need to specify -m + + if (xoptind < argc) { + + if (!lMultiProfileChain) + FatalError("Use %cm for multiprofile transforms", SW); + } + +} + + + +// -------------------------------------------------- Print some fancy help +static +void PrintHelp(void) +{ + mexPrintf("(MX) little cms ColorSpace conversion tool - v2.0\n\n"); + + mexPrintf("usage: icctrans (mVar, flags)\n\n"); + + mexPrintf("mVar : Matlab array.\n"); + mexPrintf("flags: a string containing one or more of following options.\n\n"); + mexPrintf("\t%cv - Verbose\n", SW); + mexPrintf("\t%ci - Input profile (defaults to sRGB)\n", SW); + mexPrintf("\t%co - Output profile (defaults to sRGB)\n", SW); + mexPrintf("\t%cl - Transform by device-link profile\n", SW); + mexPrintf("\t%cm - Apply multiprofile chain\n", SW); + + mexPrintf("\t%ct - Rendering intent\n", SW); + + mexPrintf("\t%cb - Black point compensation\n", SW); + mexPrintf("\t%cc<0,1,2,3> - Optimize transform (0=Off, 1=Normal, 2=Hi-res, 3=Lo-Res) [defaults to 1]\n", SW); + + mexPrintf("\t%cp - Soft proof profile\n", SW); + mexPrintf("\t%cr<0,1,2,3> - Soft proof intent\n", SW); + + mexPrintf("\nYou can use following built-ins as profiles:\n\n"); + + mexPrintf("\t*Lab2 -- D50-based v2 CIEL*a*b\n" + "\t*Lab4 -- D50-based v4 CIEL*a*b\n" + "\t*Lab -- D50-based v4 CIEL*a*b\n" + "\t*XYZ -- CIE XYZ (PCS)\n" + "\t*sRGB -- IEC6 1996-2.1 sRGB color space\n" + "\t*Gray22 - Monochrome of Gamma 2.2\n" + "\t*Gray30 - Monochrome of Gamma 3.0\n" + "\t*null - Monochrome black for all input\n" + "\t*Lin2222- CMYK linearization of gamma 2.2 on each channel\n\n"); + + mexPrintf("For suggestions, comments, bug reports etc. send mail to info@littlecms.com\n\n"); + +} + + + +// Main entry point + +void mexFunction( + int nlhs, // Number of left hand side (output) arguments + mxArray *plhs[], // Array of left hand side arguments + int nrhs, // Number of right hand side (input) arguments + const mxArray *prhs[] // Array of right hand side arguments +) +{ + + char CommandLine[4096+1]; + char *pt, *argv[128]; + int argc = 1; + + + if (nrhs != 2) { + + PrintHelp(); + return; + } + + + if(nlhs > 1) { + FatalError("Too many output arguments."); + } + + + // Setup error handler + + cmsSetLogErrorHandler(MatLabErrorHandler); + + // Defaults + + Verbose = 0; + cInProf = NULL; + cOutProf = NULL; + cProofing = NULL; + + lMultiProfileChain = FALSE; + nProfiles = 0; + + Intent = INTENT_PERCEPTUAL; + ProofingIntent = INTENT_ABSOLUTE_COLORIMETRIC; + PrecalcMode = 1; + BlackPointCompensation = FALSE; + lIsDeviceLink = FALSE; + + // Check types. Fist parameter is array of values, second parameter is command line + + if (!mxIsNumeric(prhs[0])) + FatalError("Type mismatch on argument 1 -- Must be numeric"); + + if (!mxIsChar(prhs[1])) + FatalError("Type mismatch on argument 2 -- Must be string"); + + + + + // Unpack string to command line buffer + + if (mxGetString(prhs[1], CommandLine, 4096)) + FatalError("Cannot unpack command string"); + + // Separate to argv[] convention + + argv[0] = NULL; + for (pt = strtok(CommandLine, " "); + pt; + pt = strtok(NULL, " ")) { + + argv[argc++] = pt; + } + + + + // Parse arguments + HandleSwitches(argc, argv); + + + nBytesDepth = SizeOfArrayType(prhs[0]); + + OpenTransforms(argc, argv); + + + plhs[0] = AllocateOutputArray(prhs[0], OutputChannels); + + + ApplyTransforms(prhs[0], plhs[0]); + + CloseTransforms(); + + // Done! +} + + diff --git a/utils/matlab/lcms_rsp b/utils/matlab/lcms_rsp new file mode 100755 index 0000000..c2b8c8d --- /dev/null +++ b/utils/matlab/lcms_rsp @@ -0,0 +1,27 @@ +-O +-I..\..\include +icctrans.c +..\..\src\cmscam02.c +..\..\src\cmscgats.c +..\..\src\cmscnvrt.c +..\..\src\cmserr.c +..\..\src\cmsgamma.c +..\..\src\cmsgmt.c +..\..\src\cmsintrp.c +..\..\src\cmsio0.c +..\..\src\cmsio1.c +..\..\src\cmslut.c +..\..\src\cmsmd5.c +..\..\src\cmsmtrx.c +..\..\src\cmsnamed.c +..\..\src\cmsopt.c +..\..\src\cmspack.c +..\..\src\cmspcs.c +..\..\src\cmsplugin.c +..\..\src\cmsps2.c +..\..\src\cmssamp.c +..\..\src\cmssm.c +..\..\src\cmstypes.c +..\..\src\cmsvirt.c +..\..\src\cmswtpnt.c +..\..\src\cmsxform.c diff --git a/utils/psicc/.deps/psicc.Po b/utils/psicc/.deps/psicc.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/psicc/.deps/psicc.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/psicc/.deps/vprf.Po b/utils/psicc/.deps/vprf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/psicc/.deps/vprf.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/psicc/.deps/xgetopt.Po b/utils/psicc/.deps/xgetopt.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/psicc/.deps/xgetopt.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/psicc/Makefile b/utils/psicc/Makefile new file mode 100644 index 0000000..c0581fe --- /dev/null +++ b/utils/psicc/Makefile @@ -0,0 +1,570 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# utils/psicc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# +# Makefile for building psicc +# Originally Written by Bob Friesenhahn, June 2003 +# Additions and bugs by Marti Maria + + +pkgdatadir = $(datadir)/lcms2 +pkgincludedir = $(includedir)/lcms2 +pkglibdir = $(libdir)/lcms2 +pkglibexecdir = $(libexecdir)/lcms2 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = arm-unknown-linux-gnueabi +host_triplet = arm-unknown-linux-gnueabi +bin_PROGRAMS = psicc$(EXEEXT) +subdir = utils/psicc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_psicc_OBJECTS = psicc.$(OBJEXT) xgetopt.$(OBJEXT) vprf.$(OBJEXT) +psicc_OBJECTS = $(am_psicc_OBJECTS) +psicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +psicc_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(psicc_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(psicc_SOURCES) +DIST_SOURCES = $(psicc_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoconf +AUTOHEADER = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoheader +AUTOMAKE = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall +CPP = gcc -std=gnu99 -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DPACKAGE_NAME=\"lcms2\" -DPACKAGE_TARNAME=\"lcms2\" -DPACKAGE_VERSION=\"2.3\" -DPACKAGE_STRING=\"lcms2\ 2.3\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHasJPEG=1 -DHasZLIB=1 -DHasTIFF=1 -DHAVE_TIFFCONF_H=1 +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JPEGICC_DEPLIBS = -ljpeg -lm +LCMS_LIB_DEPLIBS = -lm +LD = /usr/arm-linux-gnueabi/bin/ld +LDFLAGS = +LIBOBJS = +LIBRARY_AGE = 0 +LIBRARY_CURRENT = 2 +LIBRARY_REVISION = 3 +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltmain.sh +LIB_JPEG = -ljpeg +LIB_MATH = -lm +LIB_TIFF = -ltiff +LIB_ZLIB = -lz +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = lcms2 +PACKAGE_BUGREPORT = +PACKAGE_NAME = lcms2 +PACKAGE_STRING = lcms2 2.3 +PACKAGE_TARNAME = lcms2 +PACKAGE_URL = +PACKAGE_VERSION = 2.3 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TIFFICC_DEPLIBS = -ltiff -ljpeg -lz -lm +VERSION = 2.3 +abs_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/utils/psicc +abs_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/utils/psicc +abs_top_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +abs_top_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = arm-unknown-linux-gnueabi +build_alias = +build_cpu = arm +build_os = linux-gnueabi +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = arm-unknown-linux-gnueabi +host_alias = +host_cpu = arm +host_os = linux-gnueabi +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +inline = +install_sh = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +psicc_LDADD = $(top_builddir)/src/liblcms2.la +psicc_LDFLAGS = +psicc_SOURCES = psicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +psicc_MANS = psicc.1 +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/psicc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign utils/psicc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +psicc$(EXEEXT): $(psicc_OBJECTS) $(psicc_DEPENDENCIES) + @rm -f psicc$(EXEEXT) + $(psicc_LINK) $(psicc_OBJECTS) $(psicc_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/psicc.Po +include ./$(DEPDIR)/vprf.Po +include ./$(DEPDIR)/xgetopt.Po + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +xgetopt.o: ../common/xgetopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.o -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +# source='../common/xgetopt.c' object='xgetopt.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + +xgetopt.obj: ../common/xgetopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.obj -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +# source='../common/xgetopt.c' object='xgetopt.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + +vprf.o: ../common/vprf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.o -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +# source='../common/vprf.c' object='vprf.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + +vprf.obj: ../common/vprf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.obj -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +# source='../common/vprf.c' object='vprf.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/utils/psicc/Makefile.am b/utils/psicc/Makefile.am new file mode 100644 index 0000000..7c5171f --- /dev/null +++ b/utils/psicc/Makefile.am @@ -0,0 +1,19 @@ +# +# Makefile for building psicc +# Originally Written by Bob Friesenhahn, June 2003 +# Additions and bugs by Marti Maria + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign + +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +bin_PROGRAMS = psicc + +psicc_LDADD = $(top_builddir)/src/liblcms2.la +psicc_LDFLAGS = @LDFLAGS@ +psicc_SOURCES = psicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +psicc_MANS = psicc.1 + +EXTRA_DIST = $(man_MANS) diff --git a/utils/psicc/Makefile.in b/utils/psicc/Makefile.in new file mode 100644 index 0000000..c933bdc --- /dev/null +++ b/utils/psicc/Makefile.in @@ -0,0 +1,570 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Makefile for building psicc +# Originally Written by Bob Friesenhahn, June 2003 +# Additions and bugs by Marti Maria + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = psicc$(EXEEXT) +subdir = utils/psicc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_psicc_OBJECTS = psicc.$(OBJEXT) xgetopt.$(OBJEXT) vprf.$(OBJEXT) +psicc_OBJECTS = $(am_psicc_OBJECTS) +psicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +psicc_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(psicc_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(psicc_SOURCES) +DIST_SOURCES = $(psicc_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ +LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRARY_AGE = @LIBRARY_AGE@ +LIBRARY_CURRENT = @LIBRARY_CURRENT@ +LIBRARY_REVISION = @LIBRARY_REVISION@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIB_JPEG = @LIB_JPEG@ +LIB_MATH = @LIB_MATH@ +LIB_TIFF = @LIB_TIFF@ +LIB_ZLIB = @LIB_ZLIB@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +inline = @inline@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +psicc_LDADD = $(top_builddir)/src/liblcms2.la +psicc_LDFLAGS = @LDFLAGS@ +psicc_SOURCES = psicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +psicc_MANS = psicc.1 +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/psicc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign utils/psicc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +psicc$(EXEEXT): $(psicc_OBJECTS) $(psicc_DEPENDENCIES) + @rm -f psicc$(EXEEXT) + $(psicc_LINK) $(psicc_OBJECTS) $(psicc_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psicc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vprf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetopt.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +xgetopt.o: ../common/xgetopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.o -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/xgetopt.c' object='xgetopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + +xgetopt.obj: ../common/xgetopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.obj -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/xgetopt.c' object='xgetopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + +vprf.o: ../common/vprf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.o -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/vprf.c' object='vprf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + +vprf.obj: ../common/vprf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.obj -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/vprf.c' object='vprf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/utils/psicc/psicc.1 b/utils/psicc/psicc.1 new file mode 100644 index 0000000..9296553 --- /dev/null +++ b/utils/psicc/psicc.1 @@ -0,0 +1,41 @@ +.\"Shiju P. Nair September 30, 2004 +.TH ICC2PS 1 "September 30, 2004" +.SH NAME +icc2ps - little cms PostScript converter. +.SH SYNOPSIS +.B icc2ps +.RI [ options ] +.SH DESCRIPTION +lcms is a standalone CMM engine, which deals with the color management. +It implements a fast transformation between ICC profiles. +.B icc2ps +is little cms PostScript converter. +.SH OPTIONS +.TP +.B \-b +Black point compensation (CRD only). +.TP +.BI \-i\ profile +Input profile: Generates Color Space Array (CSA). +.TP +.BI \-o\ profile +.p +Output profile: Generates Color Rendering Dictionary(CRD). +.TP +.B \-t <0,1,2,3> +Intent (0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute). +.TP +.B \-u +Do NOT generate resource name on CRD. +.SH NOTES +For suggestions, comments, bug reports etc. send mail to +info@littlecms.com. +.SH SEE ALSO +.BR jpegicc (1), +.BR tifficc (1), +.BR icclink (1), +.BR icctrans (1), +.BR wtpt (1) +.SH AUTHOR +This manual page was written by Shiju p. Nair , +for the Debian project. diff --git a/utils/psicc/psicc.c b/utils/psicc/psicc.c new file mode 100644 index 0000000..b5a5b81 --- /dev/null +++ b/utils/psicc/psicc.c @@ -0,0 +1,228 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- + +#include "utils.h" + +// ------------------------------------------------------------------------ + +static char *cInProf = NULL; +static char *cOutProf = NULL; +static int Intent = INTENT_PERCEPTUAL; +static FILE* OutFile; +static int BlackPointCompensation = FALSE; +static int Undecorated = FALSE; +static int PrecalcMode = 1; +static int NumOfGridPoints = 0; + + +// The toggles stuff + +static +void HandleSwitches(int argc, char *argv[]) +{ + int s; + + while ((s = xgetopt(argc,argv,"uUbBI:i:O:o:T:t:c:C:n:N:")) != EOF) { + + switch (s){ + + + case 'i': + case 'I': + cInProf = xoptarg; + break; + + case 'o': + case 'O': + cOutProf = xoptarg; + break; + + case 'b': + case 'B': BlackPointCompensation =TRUE; + break; + + + case 't': + case 'T': + Intent = atoi(xoptarg); + if (Intent > 3) Intent = 3; + if (Intent < 0) Intent = 0; + break; + + case 'U': + case 'u': + Undecorated = TRUE; + break; + + case 'c': + case 'C': + PrecalcMode = atoi(xoptarg); + if (PrecalcMode < 0 || PrecalcMode > 2) + FatalError("ERROR: Unknown precalc mode '%d'", PrecalcMode); + break; + + + case 'n': + case 'N': + if (PrecalcMode != 1) + FatalError("Precalc mode already specified"); + NumOfGridPoints = atoi(xoptarg); + break; + + + default: + + FatalError("Unknown option - run without args to see valid ones.\n"); + } + } +} + +static +void Help(void) +{ + fprintf(stderr, "little cms ICC PostScript generator - v2.0 [LittleCMS %2.2f]\n", LCMS_VERSION / 1000.0); + + fprintf(stderr, "usage: psicc [flags]\n\n"); + + fprintf(stderr, "flags:\n\n"); + + fprintf(stderr, "%ci - Input profile: Generates Color Space Array (CSA)\n", SW); + fprintf(stderr, "%co - Output profile: Generates Color Rendering Dictionary(CRD)\n", SW); + + fprintf(stderr, "%ct<0,1,2,3> - Intent (0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute)\n", SW); + + fprintf(stderr, "%cb - Black point compensation (CRD only)\n", SW); + fprintf(stderr, "%cu - Do NOT generate resource name on CRD\n", SW); + fprintf(stderr, "%cc<0,1,2> - Precision (0=LowRes, 1=Normal (default), 2=Hi-res) (CRD only)\n", SW); + fprintf(stderr, "%cn - Alternate way to set precission, number of CLUT points (CRD only)\n", SW); + + fprintf(stderr, "\n"); + fprintf(stderr, "This program is intended to be a demo of the little cms\n" + "engine. Both lcms and this program are freeware. You can\n" + "obtain both in source code at http://www.littlecms.com\n" + "For suggestions, comments, bug reports etc. send mail to\n" + "info@littlecms.com\n\n"); + exit(0); +} + + +static +void GenerateCSA(void) +{ + cmsHPROFILE hProfile = OpenStockProfile(0, cInProf); + size_t n; + char* Buffer; + + if (hProfile == NULL) return; + + n = cmsGetPostScriptCSA(0, hProfile, Intent, 0, NULL, 0); + if (n == 0) return; + + Buffer = (char*) malloc(n + 1); + cmsGetPostScriptCSA(0, hProfile, Intent, 0, Buffer, n); + Buffer[n] = 0; + + fprintf(OutFile, "%s", Buffer); + + free(Buffer); + cmsCloseProfile(hProfile); +} + + +static +void GenerateCRD(void) +{ + cmsHPROFILE hProfile = OpenStockProfile(0, cOutProf); + size_t n; + char* Buffer; + cmsUInt32Number dwFlags = 0; + + if (hProfile == NULL) return; + + if (BlackPointCompensation) dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; + if (Undecorated) dwFlags |= cmsFLAGS_NODEFAULTRESOURCEDEF; + + switch (PrecalcMode) { + + case 0: dwFlags |= cmsFLAGS_LOWRESPRECALC; break; + case 2: dwFlags |= cmsFLAGS_HIGHRESPRECALC; break; + case 1: + if (NumOfGridPoints > 0) + dwFlags |= cmsFLAGS_GRIDPOINTS(NumOfGridPoints); + break; + + default: FatalError("ERROR: Unknown precalculation mode '%d'", PrecalcMode); + } + + n = cmsGetPostScriptCRD(0, hProfile, Intent, dwFlags, NULL, 0); + if (n == 0) return; + + Buffer = (char*) malloc(n + 1); + cmsGetPostScriptCRD(0, hProfile, Intent, dwFlags, Buffer, n); + Buffer[n] = 0; + + fprintf(OutFile, "%s", Buffer); + free(Buffer); + cmsCloseProfile(hProfile); +} + + +int main(int argc, char *argv[]) +{ + int nargs; + + // Initialize + InitUtils("psicc"); + + HandleSwitches(argc, argv); + + nargs = (argc - xoptind); + if (nargs != 0 && nargs != 1) + Help(); + + if (nargs == 0) + OutFile = stdout; + else + OutFile = fopen(argv[xoptind], "wt"); + + + if (cInProf == NULL && cOutProf == NULL) + Help(); + + + if (cInProf != NULL) + GenerateCSA(); + + if (cOutProf != NULL) + GenerateCRD(); + + if (nargs == 1) { + fclose(OutFile); + } + + return 0; +} + + diff --git a/utils/samples/Makefile.am b/utils/samples/Makefile.am new file mode 100644 index 0000000..e8a1fd9 --- /dev/null +++ b/utils/samples/Makefile.am @@ -0,0 +1,19 @@ +# +# Makefile for building lcms sample programs +# Originally Written by Bob Friesenhahn, June 2003 +# Additions and bugs by Marti Maria + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign + +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +bin_PROGRAMS = wtpt + +wtpt_LDADD = $(top_builddir)/src/liblcms2.la +wtpt_LDFLAGS = @LDFLAGS@ +wtpt_SOURCES = wtpt.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +wtpt_MANS = wtpt.1 + +EXTRA_DIST = $(man_MANS) roundtrip.c mktiff8.c mkgrayer.c mkcmy.c itufax.c diff --git a/utils/samples/Makefile.in b/utils/samples/Makefile.in new file mode 100644 index 0000000..da52ca5 --- /dev/null +++ b/utils/samples/Makefile.in @@ -0,0 +1,611 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Makefile for building lcms sample programs +# Originally Written by Bob Friesenhahn, June 2003 +# Additions and bugs by Marti Maria Oct 2004 + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +bin_PROGRAMS = icctrans$(EXEEXT) wtpt$(EXEEXT) icc2ps$(EXEEXT) \ + icclink$(EXEEXT) +subdir = samples +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) +am_icc2ps_OBJECTS = icc2ps.$(OBJEXT) xgetopt.$(OBJEXT) +icc2ps_OBJECTS = $(am_icc2ps_OBJECTS) +icc2ps_DEPENDENCIES = $(top_builddir)/src/liblcms.la +icc2ps_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(icc2ps_LDFLAGS) \ + $(LDFLAGS) -o $@ +am_icclink_OBJECTS = icclink.$(OBJEXT) xgetopt.$(OBJEXT) \ + vprf.$(OBJEXT) +icclink_OBJECTS = $(am_icclink_OBJECTS) +icclink_DEPENDENCIES = $(top_builddir)/src/liblcms.la +icclink_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(icclink_LDFLAGS) \ + $(LDFLAGS) -o $@ +am_icctrans_OBJECTS = icctrans.$(OBJEXT) xgetopt.$(OBJEXT) \ + vprf.$(OBJEXT) +icctrans_OBJECTS = $(am_icctrans_OBJECTS) +icctrans_DEPENDENCIES = $(top_builddir)/src/liblcms.la +icctrans_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(icctrans_LDFLAGS) \ + $(LDFLAGS) -o $@ +am_wtpt_OBJECTS = wtpt.$(OBJEXT) xgetopt.$(OBJEXT) +wtpt_OBJECTS = $(am_wtpt_OBJECTS) +wtpt_DEPENDENCIES = $(top_builddir)/src/liblcms.la +wtpt_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(wtpt_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(icc2ps_SOURCES) $(icclink_SOURCES) $(icctrans_SOURCES) \ + $(wtpt_SOURCES) +DIST_SOURCES = $(icc2ps_SOURCES) $(icclink_SOURCES) \ + $(icctrans_SOURCES) $(wtpt_SOURCES) +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT16_T = @INT16_T@ +INT32_T = @INT32_T@ +INT64_T = @INT64_T@ +INT8_T = @INT8_T@ +JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ +LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ +LCMS_PYEXECDIR = @LCMS_PYEXECDIR@ +LCMS_PYINCLUDE = @LCMS_PYINCLUDE@ +LCMS_PYLIB = @LCMS_PYLIB@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRARY_AGE = @LIBRARY_AGE@ +LIBRARY_CURRENT = @LIBRARY_CURRENT@ +LIBRARY_REVISION = @LIBRARY_REVISION@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIB_JPEG = @LIB_JPEG@ +LIB_MATH = @LIB_MATH@ +LIB_TIFF = @LIB_TIFF@ +LIB_ZLIB = @LIB_ZLIB@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ +UINT16_T = @UINT16_T@ +UINT32_T = @UINT32_T@ +UINT64_T = @UINT64_T@ +UINT8_T = @UINT8_T@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +inline = @inline@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include +icctrans_LDADD = $(top_builddir)/src/liblcms.la +icctrans_LDFLAGS = @LDFLAGS@ +icctrans_SOURCES = icctrans.c xgetopt.c vprf.c +icctrans_MANS = icctrans.1 +wtpt_LDADD = $(top_builddir)/src/liblcms.la +wtpt_LDFLAGS = @LDFLAGS@ +wtpt_SOURCES = wtpt.c xgetopt.c +icc2ps_LDADD = $(top_builddir)/src/liblcms.la +icc2ps_LDFLAGS = @LDFLAGS@ +icc2ps_SOURCES = icc2ps.c xgetopt.c +icclink_LDADD = $(top_builddir)/src/liblcms.la +icclink_LDFLAGS = @LDFLAGS@ +icclink_SOURCES = icclink.c xgetopt.c vprf.c +man_MANS = wtpt.1 icc2ps.1 icclink.1 +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign samples/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign samples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +icc2ps$(EXEEXT): $(icc2ps_OBJECTS) $(icc2ps_DEPENDENCIES) + @rm -f icc2ps$(EXEEXT) + $(icc2ps_LINK) $(icc2ps_OBJECTS) $(icc2ps_LDADD) $(LIBS) +icclink$(EXEEXT): $(icclink_OBJECTS) $(icclink_DEPENDENCIES) + @rm -f icclink$(EXEEXT) + $(icclink_LINK) $(icclink_OBJECTS) $(icclink_LDADD) $(LIBS) +icctrans$(EXEEXT): $(icctrans_OBJECTS) $(icctrans_DEPENDENCIES) + @rm -f icctrans$(EXEEXT) + $(icctrans_LINK) $(icctrans_OBJECTS) $(icctrans_LDADD) $(LIBS) +wtpt$(EXEEXT): $(wtpt_OBJECTS) $(wtpt_DEPENDENCIES) + @rm -f wtpt$(EXEEXT) + $(wtpt_LINK) $(wtpt_OBJECTS) $(wtpt_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icc2ps.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icclink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icctrans.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vprf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wtpt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetopt.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(man1_MANS) $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 1*) ;; \ + *) ext='1' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ + done +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 1*) ;; \ + *) ext='1' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ + rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-info: install-info-am + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/utils/samples/itufax.c b/utils/samples/itufax.c new file mode 100644 index 0000000..79c7c44 --- /dev/null +++ b/utils/samples/itufax.c @@ -0,0 +1,138 @@ +// +// Little cms +// Copyright (C) 1998-2003 Marti Maria +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +#include "lcms.h" + +// This is a sample on how to build a profile for decoding ITU T.42/Fax JPEG +// streams. The profile has an additional ability in the input direction of +// gamut compress values between 85 < a < -85 and -75 < b < 125. This conforms +// the default range for ITU/T.42 -- See RFC 2301, section 6.2.3 for details + + +// L* = [0, 100] +// a* = [–85, 85] +// b* = [–75, 125] + + +// These functions does convert the encoding of ITUFAX to floating point + +static +void ITU2Lab(WORD In[3], LPcmsCIELab Lab) +{ + Lab -> L = (double) In[0] / 655.35; + Lab -> a = (double) 170.* (In[1] - 32768.) / 65535.; + Lab -> b = (double) 200.* (In[2] - 24576.) / 65535.; +} + + +static +void Lab2ITU(LPcmsCIELab Lab, WORD Out[3]) +{ + Out[0] = (WORD) floor((double) (Lab -> L / 100.)* 65535. + 0.5); + Out[1] = (WORD) floor((double) (Lab -> a / 170.)* 65535. + 32768. + 0.5); + Out[2] = (WORD) floor((double) (Lab -> b / 200.)* 65535. + 24576. + 0.5); +} + + +// These are the samplers-- They are passed as callbacks to cmsSample3DGrid() +// then, cmsSample3DGrid() will sweel whole Lab gamut calling these functions +// once for each node. In[] will contain the Lab PCS value to convert to ITUFAX +// on InputDirection, or the ITUFAX value to convert to Lab in OutputDirection +// You can change the number of sample points if desired, the algorithm will +// remain same. 33 points gives good accurancy, but you can reduce to 22 or less +// is space is critical + +#define GRID_POINTS 33 + +static +int InputDirection(register WORD In[], register WORD Out[], register LPVOID Cargo) +{ + cmsCIELab Lab; + + cmsLabEncoded2Float(&Lab, In); + cmsClampLab(&Lab, 85, -85, 125, -75); // This function does the necessary gamut remapping + Lab2ITU(&Lab, Out); + + return TRUE; +} + + +static +int OutputDirection(register WORD In[], register WORD Out[], register LPVOID Cargo) +{ + + cmsCIELab Lab; + + ITU2Lab(In, &Lab); + cmsFloat2LabEncoded(Out, &Lab); + + return TRUE; +} + + +// The main entry point. Just create a profile an populate it with required tags. +// note that cmsOpenProfileFromFile("itufax.icm", "w") will NOT delete the file +// if already exists. This is for obvious safety reasons. + + +int main(int argc, char *argv[]) +{ + LPLUT AToB0, BToA0; + cmsHPROFILE hProfile; + + fprintf(stderr, "Creating itufax.icm..."); + + unlink("itufax.icm"); + hProfile = cmsOpenProfileFromFile("itufax.icm", "w"); + + AToB0 = cmsAllocLUT(); + BToA0 = cmsAllocLUT(); + + cmsAlloc3DGrid(AToB0, GRID_POINTS, 3, 3); + cmsAlloc3DGrid(BToA0, GRID_POINTS, 3, 3); + + cmsSample3DGrid(AToB0, InputDirection, NULL, 0); + cmsSample3DGrid(BToA0, OutputDirection, NULL, 0); + + cmsAddTag(hProfile, icSigAToB0Tag, AToB0); + cmsAddTag(hProfile, icSigBToA0Tag, BToA0); + + + cmsSetColorSpace(hProfile, icSigLabData); + cmsSetPCS(hProfile, icSigLabData); + cmsSetDeviceClass(hProfile, icSigColorSpaceClass); + + cmsAddTag(hProfile, icSigProfileDescriptionTag, "ITU T.42/Fax JPEG CIEL*a*b*"); + cmsAddTag(hProfile, icSigCopyrightTag, "No Copyright, use freely."); + cmsAddTag(hProfile, icSigDeviceMfgDescTag, "Little cms"); + cmsAddTag(hProfile, icSigDeviceModelDescTag, "ITU T.42/Fax JPEG CIEL*a*b*"); + + cmsCloseProfile(hProfile); + + cmsFreeLUT(AToB0); + cmsFreeLUT(BToA0); + + fprintf(stderr, "Done.\n"); + + return 0; +} diff --git a/utils/samples/mkcmy.c b/utils/samples/mkcmy.c new file mode 100644 index 0000000..1b0755f --- /dev/null +++ b/utils/samples/mkcmy.c @@ -0,0 +1,170 @@ +// +// Little cms +// Copyright (C) 1998-2003 Marti Maria +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THIS SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, +// EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY +// WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. +// +// IN NO EVENT SHALL MARTI MARIA BE LIABLE FOR ANY SPECIAL, INCIDENTAL, +// INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, +// OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +// WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF +// LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +// OF THIS SOFTWARE. +// +// Version 1.12 + + +#include "lcms.h" + + +typedef struct { + cmsHPROFILE hLab; + cmsHPROFILE hRGB; + cmsHTRANSFORM Lab2RGB; + cmsHTRANSFORM RGB2Lab; + + } CARGO, FAR* LPCARGO; + + + + + +// Our space will be CIE primaries plus a gamma of 4.5 + +static +int Forward(register WORD In[], register WORD Out[], register LPVOID Cargo) +{ + LPCARGO C = (LPCARGO) Cargo; + WORD RGB[3]; + cmsCIELab Lab; + + cmsLabEncoded2Float(&Lab, In); + + printf("%g %g %g\n", Lab.L, Lab.a, Lab.b); + + cmsDoTransform(C ->Lab2RGB, In, &RGB, 1); + + + Out[0] = 0xFFFF - RGB[0]; // Our CMY is negative of RGB + Out[1] = 0xFFFF - RGB[1]; + Out[2] = 0xFFFF - RGB[2]; + + + return TRUE; + +} + + +static +int Reverse(register WORD In[], register WORD Out[], register LPVOID Cargo) +{ + + LPCARGO C = (LPCARGO) Cargo; + WORD RGB[3]; + + RGB[0] = 0xFFFF - In[0]; + RGB[1] = 0xFFFF - In[1]; + RGB[2] = 0xFFFF - In[2]; + + cmsDoTransform(C ->RGB2Lab, &RGB, Out, 1); + + return TRUE; + +} + + + +static +void InitCargo(LPCARGO Cargo) +{ + + + Cargo -> hLab = cmsCreateLabProfile(NULL); + Cargo -> hRGB = cmsCreate_sRGBProfile(); + + Cargo->Lab2RGB = cmsCreateTransform(Cargo->hLab, TYPE_Lab_16, + Cargo ->hRGB, TYPE_RGB_16, + INTENT_RELATIVE_COLORIMETRIC, + cmsFLAGS_NOTPRECALC); + + Cargo->RGB2Lab = cmsCreateTransform(Cargo ->hRGB, TYPE_RGB_16, + Cargo ->hLab, TYPE_Lab_16, + INTENT_RELATIVE_COLORIMETRIC, + cmsFLAGS_NOTPRECALC); +} + + + + +static +void FreeCargo(LPCARGO Cargo) +{ + cmsDeleteTransform(Cargo ->Lab2RGB); + cmsDeleteTransform(Cargo ->RGB2Lab); + cmsCloseProfile(Cargo ->hLab); + cmsCloseProfile(Cargo ->hRGB); +} + + + + +int main(void) +{ + LPLUT AToB0, BToA0; + CARGO Cargo; + cmsHPROFILE hProfile; + + fprintf(stderr, "Creating lcmscmy.icm..."); + + InitCargo(&Cargo); + + hProfile = cmsCreateLabProfile(NULL); + + + AToB0 = cmsAllocLUT(); + BToA0 = cmsAllocLUT(); + + cmsAlloc3DGrid(AToB0, 25, 3, 3); + cmsAlloc3DGrid(BToA0, 25, 3, 3); + + + cmsSample3DGrid(AToB0, Reverse, &Cargo, 0); + cmsSample3DGrid(BToA0, Forward, &Cargo, 0); + + + cmsAddTag(hProfile, icSigAToB0Tag, AToB0); + cmsAddTag(hProfile, icSigBToA0Tag, BToA0); + + cmsSetColorSpace(hProfile, icSigCmyData); + cmsSetDeviceClass(hProfile, icSigOutputClass); + + cmsAddTag(hProfile, icSigProfileDescriptionTag, "CMY "); + cmsAddTag(hProfile, icSigCopyrightTag, "Copyright (c) HP, 2007. All rights reserved."); + cmsAddTag(hProfile, icSigDeviceMfgDescTag, "Little cms"); + cmsAddTag(hProfile, icSigDeviceModelDescTag, "CMY space"); + + _cmsSaveProfile(hProfile, "lcmscmy.icm"); + + + cmsFreeLUT(AToB0); + cmsFreeLUT(BToA0); + cmsCloseProfile(hProfile); + FreeCargo(&Cargo); + fprintf(stderr, "Done.\n"); + + + + return 0; +} diff --git a/utils/samples/mkgrayer.c b/utils/samples/mkgrayer.c new file mode 100644 index 0000000..46e9286 --- /dev/null +++ b/utils/samples/mkgrayer.c @@ -0,0 +1,93 @@ +// +// Little cms +// Copyright (C) 1998-2003 Marti Maria +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +#include "lcms.h" + + + +static +int Forward(register WORD In[], register WORD Out[], register LPVOID Cargo) +{ + cmsCIELab Lab; + + + cmsLabEncoded2Float(&Lab, In); + + if (fabs(Lab.a) < 3 && fabs(Lab.b) < 3) { + + double L_01 = Lab.L / 100.0; + WORD K; + + if (L_01 > 1) L_01 = 1; + K = (WORD) floor(L_01* 65535.0 + 0.5); + + Out[0] = Out[1] = Out[2] = K; + } + else { + Out[0] = 0xFFFF; Out[1] = 0; Out[2] = 0; + } + + return TRUE; +} + + + + + +int main(int argc, char *argv[]) +{ + LPLUT BToA0; + cmsHPROFILE hProfile; + + fprintf(stderr, "Creating interpol2.icc..."); + + unlink("interpol2.icc"); + hProfile = cmsOpenProfileFromFile("interpol2.icc", "w8"); + + + BToA0 = cmsAllocLUT(); + + cmsAlloc3DGrid(BToA0, 17, 3, 3); + + cmsSample3DGrid(BToA0, Forward, NULL, 0); + + cmsAddTag(hProfile, icSigBToA0Tag, BToA0); + + cmsSetColorSpace(hProfile, icSigRgbData); + cmsSetPCS(hProfile, icSigLabData); + cmsSetDeviceClass(hProfile, icSigOutputClass); + + cmsAddTag(hProfile, icSigProfileDescriptionTag, "Interpolation test"); + cmsAddTag(hProfile, icSigCopyrightTag, "Copyright (c) HP 2007. All rights reserved."); + cmsAddTag(hProfile, icSigDeviceMfgDescTag, "Little cms"); + cmsAddTag(hProfile, icSigDeviceModelDescTag, "Interpolation test profile"); + + + cmsCloseProfile(hProfile); + + cmsFreeLUT(BToA0); + + fprintf(stderr, "Done.\n"); + + return 0; +} diff --git a/utils/samples/mktiff8.c b/utils/samples/mktiff8.c new file mode 100644 index 0000000..ab0b66b --- /dev/null +++ b/utils/samples/mktiff8.c @@ -0,0 +1,150 @@ +// +// Little cms +// Copyright (C) 1998-2010 Marti Maria +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// Creates a devicelink that decodes TIFF8 Lab files + +#include "lcms2.h" +#include +#include + +static +double DecodeAbTIFF(double ab) +{ + if (ab <= 128.) + ab += 127.; + else + ab -= 127.; + + return ab; +} + +static +cmsToneCurve* CreateStep(void) +{ + cmsToneCurve* Gamma; + cmsUInt16Number* Table; + int i; + double a; + + Table = calloc(4096, sizeof(cmsUInt16Number)); + if (Table == NULL) return NULL; + + for (i=0; i < 4096; i++) { + + a = (double) i * 255. / 4095.; + + a = DecodeAbTIFF(a); + + Table[i] = (cmsUInt16Number) floor(a * 257. + 0.5); + } + + Gamma = cmsBuildTabulatedToneCurve16(0, 4096, Table); + free(Table); + + return Gamma; +} + + +static +cmsToneCurve* CreateLinear(void) +{ + cmsUInt16Number Linear[2] = { 0, 0xffff }; + + return cmsBuildTabulatedToneCurve16(0, 2, Linear); +} + + + +// Set the copyright and description +static +cmsBool SetTextTags(cmsHPROFILE hProfile) +{ + cmsMLU *DescriptionMLU, *CopyrightMLU; + cmsBool rc = FALSE; + + DescriptionMLU = cmsMLUalloc(0, 1); + CopyrightMLU = cmsMLUalloc(0, 1); + + if (DescriptionMLU == NULL || CopyrightMLU == NULL) goto Error; + + if (!cmsMLUsetASCII(DescriptionMLU, "en", "US", "Little cms Tiff8 CIELab")) goto Error; + if (!cmsMLUsetASCII(CopyrightMLU, "en", "US", "Copyright (c) Marti Maria, 2010. All rights reserved.")) goto Error; + + if (!cmsWriteTag(hProfile, cmsSigProfileDescriptionTag, DescriptionMLU)) goto Error; + if (!cmsWriteTag(hProfile, cmsSigCopyrightTag, CopyrightMLU)) goto Error; + + rc = TRUE; + +Error: + + if (DescriptionMLU) + cmsMLUfree(DescriptionMLU); + if (CopyrightMLU) + cmsMLUfree(CopyrightMLU); + return rc; +} + + +int main(int argc, char *argv[]) +{ + cmsHPROFILE hProfile; + cmsPipeline *AToB0; + cmsToneCurve* PreLinear[3]; + cmsToneCurve *Lin, *Step; + + fprintf(stderr, "Creating lcmstiff8.icm..."); + + remove("lcmstiff8.icm"); + hProfile = cmsOpenProfileFromFile("lcmstiff8.icm", "w"); + + // Create linearization + Lin = CreateLinear(); + Step = CreateStep(); + + PreLinear[0] = Lin; + PreLinear[1] = Step; + PreLinear[2] = Step; + + AToB0 = cmsPipelineAlloc(0, 3, 3); + + cmsPipelineInsertStage(AToB0, + cmsAT_BEGIN, cmsStageAllocToneCurves(0, 3, PreLinear)); + + cmsSetColorSpace(hProfile, cmsSigLabData); + cmsSetPCS(hProfile, cmsSigLabData); + cmsSetDeviceClass(hProfile, cmsSigLinkClass); + cmsSetProfileVersion(hProfile, 4.2); + + cmsWriteTag(hProfile, cmsSigAToB0Tag, AToB0); + + SetTextTags(hProfile); + + cmsCloseProfile(hProfile); + + cmsFreeToneCurve(Lin); + cmsFreeToneCurve(Step); + cmsPipelineFree(AToB0); + + fprintf(stderr, "Done.\n"); + + return 0; +} diff --git a/utils/samples/roundtrip.c b/utils/samples/roundtrip.c new file mode 100644 index 0000000..d957b60 --- /dev/null +++ b/utils/samples/roundtrip.c @@ -0,0 +1,88 @@ +// +// Little cms +// Copyright (C) 1998-2011 Marti Maria +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + +#include "lcms2.h" +#include + + + +static +double VecDist(cmsUInt8Number bin[3], cmsUInt8Number bout[3]) +{ + double rdist, gdist, bdist; + + rdist = fabs((double) bout[0] - bin[0]); + gdist = fabs((double) bout[1] - bin[1]); + bdist = fabs((double) bout[2] - bin[2]); + + return (sqrt((rdist*rdist + gdist*gdist + bdist*bdist))); +} + + +int main(int argc, char* argv[]) +{ + + int r, g, b; + cmsUInt8Number RGB[3], RGB_OUT[3]; + cmsHTRANSFORM xform; + cmsHPROFILE hProfile; + double err, SumX=0, SumX2=0, Peak = 0, n = 0; + + + if (argc != 2) { + printf("roundtrip \n"); + return 1; + } + + hProfile = cmsOpenProfileFromFile(argv[1], "r"); + xform = cmsCreateTransform(hProfile,TYPE_RGB_8, hProfile, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE); + + for (r=0; r< 256; r++) { + printf("%d \r", r); + for (g=0; g < 256; g++) { + for (b=0; b < 256; b++) { + + RGB[0] = r; + RGB[1] = g; + RGB[2] = b; + + cmsDoTransform(xform, RGB, RGB_OUT, 1); + + err = VecDist(RGB, RGB_OUT); + + SumX += err; + SumX2 += err * err; + n += 1.0; + if (err > Peak) + Peak = err; + + } + } + } + + printf("Average %g\n", SumX / n); + printf("Max %g\n", Peak); + printf("Std %g\n", sqrt((n*SumX2 - SumX * SumX) / (n*(n-1)))); + cmsCloseProfile(hProfile); + cmsDeleteTransform(xform); + + return 0; +} \ No newline at end of file diff --git a/utils/samples/vericc.c b/utils/samples/vericc.c new file mode 100755 index 0000000..9ac94a7 --- /dev/null +++ b/utils/samples/vericc.c @@ -0,0 +1,65 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "lcms2.h" +#include +#include + +static +int PrintUsage(void) +{ + fprintf(stderr, "Sets profile version\n\nUsage: vericc --r iccprofile.icc\n"); + return 0; +} + +int main(int argc, char *argv[]) +{ + cmsHPROFILE hProfile; + char* ptr; + cmsFloat64Number Version; + + if (argc != 3) return PrintUsage(); + + ptr = argv[1]; + if (strncmp(ptr, "--r", 3) != 0) return PrintUsage(); + ptr += 3; + if (!*ptr) { fprintf(stderr, "Wrong version number\n"); return 1; } + + Version = atof(ptr); + + hProfile = cmsOpenProfileFromFile(argv[2], "r"); + if (hProfile == NULL) { fprintf(stderr, "'%s': cannot open\n", argv[2]); return 1; } + + cmsSetProfileVersion(hProfile, Version); + cmsSaveProfileToFile(hProfile, "$$tmp.icc"); + cmsCloseProfile(hProfile); + + remove(argv[2]); + rename("$$tmp.icc", argv[2]); + return 0; + + +} diff --git a/utils/samples/wtpt.1 b/utils/samples/wtpt.1 new file mode 100644 index 0000000..fbd37ac --- /dev/null +++ b/utils/samples/wtpt.1 @@ -0,0 +1,28 @@ +.\"Shiju P. Nair September 30, 2004 +.TH WTPT 1 "September 30, 2004" +.SH NAME +wtpt - Show media white of profiles, identifying black body locus. +.SH SYNOPSIS +.B wtpt +.RI [ profile ] +.SH DESCRIPTION +lcms is a standalone CMM engine, which deals with the color management. +It implements a fast transformation between ICC profiles. +.B wtpt +shows media white of profiles, identifying black body locus. +.P +If no parameters are given, then this program will +ask for XYZ value of media white. If parameter given, it must be +the profile to inspect. +.SH NOTES +For suggestions, comments, bug reports etc. send mail to +info@littlecms.com +.SH SEE ALSO +.BR jpegicc (1), +.BR tifficc (1), +.BR icc2ps (1), +.BR icclink (1), +.BR icctrans (1) +.SH AUTHOR +This manual page was written by Shiju p. Nair , +for the Debian project. diff --git a/utils/samples/wtpt.c b/utils/samples/wtpt.c new file mode 100644 index 0000000..8c34433 --- /dev/null +++ b/utils/samples/wtpt.c @@ -0,0 +1,94 @@ +// +// Little cms +// Copyright (C) 1998-2000 Marti Maria +// +// THIS SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, +// EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY +// WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. +// +// IN NO EVENT SHALL MARTI MARIA BE LIABLE FOR ANY SPECIAL, INCIDENTAL, +// INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, +// OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +// WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF +// LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +// OF THIS SOFTWARE. +// +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +// Example: how to show white points of profiles + + +#include "lcms.h" + + + +static +void ShowWhitePoint(LPcmsCIEXYZ WtPt) +{ + cmsCIELab Lab; + cmsCIELCh LCh; + cmsCIExyY xyY; + char Buffer[1024]; + + + _cmsIdentifyWhitePoint(Buffer, WtPt); + printf("%s\n", Buffer); + + cmsXYZ2Lab(NULL, &Lab, WtPt); + cmsLab2LCh(&LCh, &Lab); + cmsXYZ2xyY(&xyY, WtPt); + + printf("XYZ=(%3.1f, %3.1f, %3.1f)\n", WtPt->X, WtPt->Y, WtPt->Z); + printf("Lab=(%3.3f, %3.3f, %3.3f)\n", Lab.L, Lab.a, Lab.b); + printf("(x,y)=(%3.3f, %3.3f)\n", xyY.x, xyY.y); + printf("Hue=%3.2f, Chroma=%3.2f\n", LCh.h, LCh.C); + printf("\n"); + +} + + +int main (int argc, char *argv[]) +{ + printf("Show media white of profiles, identifying black body locus. v2\n\n"); + + + if (argc == 2) { + cmsCIEXYZ WtPt; + cmsHPROFILE hProfile = cmsOpenProfileFromFile(argv[1], "r"); + + printf("%s\n", cmsTakeProductName(hProfile)); + cmsTakeMediaWhitePoint(&WtPt, hProfile); + ShowWhitePoint(&WtPt); + cmsCloseProfile(hProfile); + } + else + { + cmsCIEXYZ xyz; + + printf("usage:\n\nIf no parameters are given, then this program will\n"); + printf("ask for XYZ value of media white. If parameter given, it must be\n"); + printf("the profile to inspect.\n\n"); + + printf("X? "); scanf("%lf", &xyz.X); + printf("Y? "); scanf("%lf", &xyz.Y); + printf("Z? "); scanf("%lf", &xyz.Z); + + ShowWhitePoint(&xyz); + } + + return 0; +} + diff --git a/utils/tificc/.deps/tificc.Po b/utils/tificc/.deps/tificc.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/tificc/.deps/tificc.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/tificc/.deps/vprf.Po b/utils/tificc/.deps/vprf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/tificc/.deps/vprf.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/tificc/.deps/xgetopt.Po b/utils/tificc/.deps/xgetopt.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/tificc/.deps/xgetopt.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/tificc/Makefile b/utils/tificc/Makefile new file mode 100644 index 0000000..de67dca --- /dev/null +++ b/utils/tificc/Makefile @@ -0,0 +1,648 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# utils/tificc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# +# Makefile for building tificc +# Originally written by Bob Friesenhahn, June 2003 +# bugs introduced by Marti Maria + + +pkgdatadir = $(datadir)/lcms2 +pkgincludedir = $(includedir)/lcms2 +pkglibdir = $(libdir)/lcms2 +pkglibexecdir = $(libexecdir)/lcms2 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = arm-unknown-linux-gnueabi +host_triplet = arm-unknown-linux-gnueabi +bin_PROGRAMS = tificc$(EXEEXT) +subdir = utils/tificc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" +PROGRAMS = $(bin_PROGRAMS) +am_tificc_OBJECTS = tificc.$(OBJEXT) xgetopt.$(OBJEXT) vprf.$(OBJEXT) +tificc_OBJECTS = $(am_tificc_OBJECTS) +tificc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +tificc_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(tificc_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(tificc_SOURCES) +DIST_SOURCES = $(tificc_SOURCES) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoconf +AUTOHEADER = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoheader +AUTOMAKE = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall +CPP = gcc -std=gnu99 -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DPACKAGE_NAME=\"lcms2\" -DPACKAGE_TARNAME=\"lcms2\" -DPACKAGE_VERSION=\"2.3\" -DPACKAGE_STRING=\"lcms2\ 2.3\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHasJPEG=1 -DHasZLIB=1 -DHasTIFF=1 -DHAVE_TIFFCONF_H=1 +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JPEGICC_DEPLIBS = -ljpeg -lm +LCMS_LIB_DEPLIBS = -lm +LD = /usr/arm-linux-gnueabi/bin/ld +LDFLAGS = +LIBOBJS = +LIBRARY_AGE = 0 +LIBRARY_CURRENT = 2 +LIBRARY_REVISION = 3 +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltmain.sh +LIB_JPEG = -ljpeg +LIB_MATH = -lm +LIB_TIFF = -ltiff +LIB_ZLIB = -lz +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = lcms2 +PACKAGE_BUGREPORT = +PACKAGE_NAME = lcms2 +PACKAGE_STRING = lcms2 2.3 +PACKAGE_TARNAME = lcms2 +PACKAGE_URL = +PACKAGE_VERSION = 2.3 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TIFFICC_DEPLIBS = -ltiff -ljpeg -lz -lm +VERSION = 2.3 +abs_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/utils/tificc +abs_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/utils/tificc +abs_top_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +abs_top_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = arm-unknown-linux-gnueabi +build_alias = +build_cpu = arm +build_os = linux-gnueabi +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = arm-unknown-linux-gnueabi +host_alias = +host_cpu = arm +host_os = linux-gnueabi +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +inline = +install_sh = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +tificc_LDADD = $(top_builddir)/src/liblcms2.la -ltiff -ljpeg -lz -lm +tificc_LDFLAGS = +tificc_SOURCES = tificc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +man_MANS = tificc.1 +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/tificc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign utils/tificc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +tificc$(EXEEXT): $(tificc_OBJECTS) $(tificc_DEPENDENCIES) + @rm -f tificc$(EXEEXT) + $(tificc_LINK) $(tificc_OBJECTS) $(tificc_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/tificc.Po +include ./$(DEPDIR)/vprf.Po +include ./$(DEPDIR)/xgetopt.Po + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +xgetopt.o: ../common/xgetopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.o -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +# source='../common/xgetopt.c' object='xgetopt.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + +xgetopt.obj: ../common/xgetopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.obj -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +# source='../common/xgetopt.c' object='xgetopt.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + +vprf.o: ../common/vprf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.o -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +# source='../common/vprf.c' object='vprf.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + +vprf.obj: ../common/vprf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.obj -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +# source='../common/vprf.c' object='vprf.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/utils/tificc/Makefile.am b/utils/tificc/Makefile.am new file mode 100644 index 0000000..9ca83f8 --- /dev/null +++ b/utils/tificc/Makefile.am @@ -0,0 +1,25 @@ +# +# Makefile for building tificc +# Originally written by Bob Friesenhahn, June 2003 +# bugs introduced by Marti Maria + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign + +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + + +if HasTIFF +bin_PROGRAMS = tificc +else +bin_PROGRAMS = +endif + +tificc_LDADD = $(top_builddir)/src/liblcms2.la @TIFFICC_DEPLIBS@ +tificc_LDFLAGS = @LDFLAGS@ +tificc_SOURCES = tificc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +man_MANS = tificc.1 + + +EXTRA_DIST = $(man_MANS) diff --git a/utils/tificc/Makefile.in b/utils/tificc/Makefile.in new file mode 100644 index 0000000..15fe863 --- /dev/null +++ b/utils/tificc/Makefile.in @@ -0,0 +1,648 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Makefile for building tificc +# Originally written by Bob Friesenhahn, June 2003 +# bugs introduced by Marti Maria + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HasTIFF_TRUE@bin_PROGRAMS = tificc$(EXEEXT) +subdir = utils/tificc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" +PROGRAMS = $(bin_PROGRAMS) +am_tificc_OBJECTS = tificc.$(OBJEXT) xgetopt.$(OBJEXT) vprf.$(OBJEXT) +tificc_OBJECTS = $(am_tificc_OBJECTS) +tificc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +tificc_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(tificc_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(tificc_SOURCES) +DIST_SOURCES = $(tificc_SOURCES) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ +LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRARY_AGE = @LIBRARY_AGE@ +LIBRARY_CURRENT = @LIBRARY_CURRENT@ +LIBRARY_REVISION = @LIBRARY_REVISION@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIB_JPEG = @LIB_JPEG@ +LIB_MATH = @LIB_MATH@ +LIB_TIFF = @LIB_TIFF@ +LIB_ZLIB = @LIB_ZLIB@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +inline = @inline@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +tificc_LDADD = $(top_builddir)/src/liblcms2.la @TIFFICC_DEPLIBS@ +tificc_LDFLAGS = @LDFLAGS@ +tificc_SOURCES = tificc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +man_MANS = tificc.1 +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/tificc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign utils/tificc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +tificc$(EXEEXT): $(tificc_OBJECTS) $(tificc_DEPENDENCIES) + @rm -f tificc$(EXEEXT) + $(tificc_LINK) $(tificc_OBJECTS) $(tificc_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tificc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vprf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetopt.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +xgetopt.o: ../common/xgetopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.o -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/xgetopt.c' object='xgetopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + +xgetopt.obj: ../common/xgetopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.obj -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/xgetopt.c' object='xgetopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + +vprf.o: ../common/vprf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.o -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/vprf.c' object='vprf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + +vprf.obj: ../common/vprf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.obj -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/vprf.c' object='vprf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/utils/tificc/tifdiff.c b/utils/tificc/tifdiff.c new file mode 100644 index 0000000..8d4eaf2 --- /dev/null +++ b/utils/tificc/tifdiff.c @@ -0,0 +1,708 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "utils.h" +#include "tiffio.h" + + +// ------------------------------------------------------------------------ + +static TIFF *Tiff1, *Tiff2, *TiffDiff; +static const char* TiffDiffFilename; +static const char* CGATSout; + +typedef struct { + double n, x, x2; + double Min, Peak; + + } STAT, *LPSTAT; + + +static STAT ColorantStat[4]; +static STAT EuclideanStat; +static STAT ColorimetricStat; + +static uint16 Channels; + +static cmsHPROFILE hLab; + + +static +void ConsoleWarningHandler(const char* module, const char* fmt, va_list ap) +{ + char e[512] = { '\0' }; + if (module != NULL) + strcat(strcpy(e, module), ": "); + + vsprintf(e+strlen(e), fmt, ap); + strcat(e, "."); + if (Verbose) { + + fprintf(stderr, "\nWarning"); + fprintf(stderr, " %s\n", e); + fflush(stderr); + } +} + +static +void ConsoleErrorHandler(const char* module, const char* fmt, va_list ap) +{ + char e[512] = { '\0' }; + + if (module != NULL) + strcat(strcpy(e, module), ": "); + + vsprintf(e+strlen(e), fmt, ap); + strcat(e, "."); + fprintf(stderr, "\nError"); + fprintf(stderr, " %s\n", e); + fflush(stderr); +} + + + +static +void Help() +{ + fprintf(stderr, "Little cms TIFF compare utility. v1.0\n\n"); + + fprintf(stderr, "usage: tiffdiff [flags] input.tif output.tif\n"); + + fprintf(stderr, "\nflags:\n\n"); + + + fprintf(stderr, "%co - Output TIFF file\n", SW); + fprintf(stderr, "%cg - Output results in CGATS file\n", SW); + + fprintf(stderr, "\n"); + + fprintf(stderr, "%cv - Verbose (show warnings)\n", SW); + fprintf(stderr, "%ch - This help\n", SW); + + + fflush(stderr); + exit(0); +} + + + +// The toggles stuff + +static +void HandleSwitches(int argc, char *argv[]) +{ + int s; + + while ((s=xgetopt(argc,argv,"o:O:hHvVg:G:")) != EOF) { + + switch (s) { + + + case 'v': + case 'V': + Verbose = TRUE; + break; + + case 'o': + case 'O': + TiffDiffFilename = xoptarg; + break; + + + case 'H': + case 'h': + Help(); + break; + + case 'g': + case 'G': + CGATSout = xoptarg; + break; + + default: + + FatalError("Unknown option - run without args to see valid ones"); + } + } +} + + +static +void ClearStatistics(LPSTAT st) +{ + + st ->n = st ->x = st->x2 = st->Peak = 0; + st ->Min = 1E10; + +} + + +static +void AddOnePixel(LPSTAT st, double dE) +{ + + st-> x += dE; st ->x2 += (dE * dE); st->n += 1.0; + if (dE > st ->Peak) st ->Peak = dE; + if (dE < st ->Min) st ->Min= dE; +} + +static +double Std(LPSTAT st) +{ + return sqrt((st->n * st->x2 - st->x * st->x) / (st->n*(st->n-1))); +} + +static +double Mean(LPSTAT st) +{ + return st ->x/st ->n; +} + + +// Build up the pixeltype descriptor + +static +cmsUInt32Number GetInputPixelType(TIFF *Bank) +{ + uint16 Photometric, bps, spp, extra, PlanarConfig, *info; + uint16 Compression, reverse = 0; + int ColorChannels, IsPlanar = 0, pt = 0; + + TIFFGetField(Bank, TIFFTAG_PHOTOMETRIC, &Photometric); + TIFFGetFieldDefaulted(Bank, TIFFTAG_BITSPERSAMPLE, &bps); + + if (bps == 1) + FatalError("Sorry, bilevel TIFFs has nothig to do with ICC profiles"); + + if (bps != 8 && bps != 16) + FatalError("Sorry, 8 or 16 bits per sample only"); + + TIFFGetFieldDefaulted(Bank, TIFFTAG_SAMPLESPERPIXEL, &spp); + TIFFGetFieldDefaulted(Bank, TIFFTAG_PLANARCONFIG, &PlanarConfig); + + switch (PlanarConfig) + { + case PLANARCONFIG_CONTIG: IsPlanar = 0; break; + case PLANARCONFIG_SEPARATE: FatalError("Planar TIFF are not supported"); + default: + + FatalError("Unsupported planar configuration (=%d) ", (int) PlanarConfig); + } + + // If Samples per pixel == 1, PlanarConfiguration is irrelevant and need + // not to be included. + + if (spp == 1) IsPlanar = 0; + + + // Any alpha? + + TIFFGetFieldDefaulted(Bank, TIFFTAG_EXTRASAMPLES, &extra, &info); + + + ColorChannels = spp - extra; + + switch (Photometric) { + + case PHOTOMETRIC_MINISWHITE: + + reverse = 1; + + case PHOTOMETRIC_MINISBLACK: + + pt = PT_GRAY; + break; + + case PHOTOMETRIC_RGB: + + pt = PT_RGB; + break; + + + case PHOTOMETRIC_PALETTE: + + FatalError("Sorry, palette images not supported (at least on this version)"); + + case PHOTOMETRIC_SEPARATED: + pt = PixelTypeFromChanCount(ColorChannels); + break; + + case PHOTOMETRIC_YCBCR: + TIFFGetField(Bank, TIFFTAG_COMPRESSION, &Compression); + { + uint16 subx, suby; + + pt = PT_YCbCr; + TIFFGetFieldDefaulted(Bank, TIFFTAG_YCBCRSUBSAMPLING, &subx, &suby); + if (subx != 1 || suby != 1) + FatalError("Sorry, subsampled images not supported"); + + } + break; + + case 9: + case PHOTOMETRIC_CIELAB: + pt = PT_Lab; + break; + + + case PHOTOMETRIC_LOGLUV: /* CIE Log2(L) (u',v') */ + + TIFFSetField(Bank, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_16BIT); + pt = PT_YUV; // *ICCSpace = icSigLuvData; + bps = 16; // 16 bits forced by LibTiff + break; + + default: + FatalError("Unsupported TIFF color space (Photometric %d)", Photometric); + } + + // Convert bits per sample to bytes per sample + + bps >>= 3; + + return (COLORSPACE_SH(pt)|PLANAR_SH(IsPlanar)|EXTRA_SH(extra)|CHANNELS_SH(ColorChannels)|BYTES_SH(bps)|FLAVOR_SH(reverse)); +} + + + +static +cmsUInt32Number OpenEmbedded(TIFF* tiff, cmsHPROFILE* PtrProfile, cmsHTRANSFORM* PtrXform) +{ + + cmsUInt32Number EmbedLen, dwFormat = 0; + cmsUInt8Number* EmbedBuffer; + + *PtrProfile = NULL; + *PtrXform = NULL; + + if (TIFFGetField(tiff, TIFFTAG_ICCPROFILE, &EmbedLen, &EmbedBuffer)) { + + *PtrProfile = cmsOpenProfileFromMem(EmbedBuffer, EmbedLen); + + if (Verbose) { + + fprintf(stdout, "Embedded profile found:\n"); + PrintProfileInformation(*PtrProfile); + + } + + dwFormat = GetInputPixelType(tiff); + *PtrXform = cmsCreateTransform(*PtrProfile, dwFormat, + hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + + } + + return dwFormat; +} + + +static +size_t PixelSize(cmsUInt32Number dwFormat) +{ + return T_BYTES(dwFormat) * (T_CHANNELS(dwFormat) + T_EXTRA(dwFormat)); +} + + +static +int CmpImages(TIFF* tiff1, TIFF* tiff2, TIFF* diff) +{ + cmsUInt8Number* buf1, *buf2, *buf3=NULL; + int row, cols, imagewidth = 0, imagelength = 0; + uint16 Photometric; + double dE = 0; + double dR, dG, dB, dC, dM, dY, dK; + int rc = 0; + cmsHPROFILE hProfile1 = 0, hProfile2 = 0; + cmsHTRANSFORM xform1 = 0, xform2 = 0; + cmsUInt32Number dwFormat1, dwFormat2; + + + + TIFFGetField(tiff1, TIFFTAG_PHOTOMETRIC, &Photometric); + TIFFGetField(tiff1, TIFFTAG_IMAGEWIDTH, &imagewidth); + TIFFGetField(tiff1, TIFFTAG_IMAGELENGTH, &imagelength); + TIFFGetField(tiff1, TIFFTAG_SAMPLESPERPIXEL, &Channels); + + dwFormat1 = OpenEmbedded(tiff1, &hProfile1, &xform1); + dwFormat2 = OpenEmbedded(tiff2, &hProfile2, &xform2); + + + + buf1 = (cmsUInt8Number*)_TIFFmalloc(TIFFScanlineSize(tiff1)); + buf2 = (cmsUInt8Number*)_TIFFmalloc(TIFFScanlineSize(tiff2)); + + if (diff) { + + TIFFSetField(diff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); + TIFFSetField(diff, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + TIFFSetField(diff, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + + TIFFSetField(diff, TIFFTAG_IMAGEWIDTH, imagewidth); + TIFFSetField(diff, TIFFTAG_IMAGELENGTH, imagelength); + + TIFFSetField(diff, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(diff, TIFFTAG_BITSPERSAMPLE, 8); + + buf3 = (cmsUInt8Number*)_TIFFmalloc(TIFFScanlineSize(diff)); + } + + + + for (row = 0; row < imagelength; row++) { + + if (TIFFReadScanline(tiff1, buf1, row, 0) < 0) goto Error; + if (TIFFReadScanline(tiff2, buf2, row, 0) < 0) goto Error; + + + for (cols = 0; cols < imagewidth; cols++) { + + + switch (Photometric) { + + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + + dE = fabs(buf2[cols] - buf1[cols]); + + AddOnePixel(&ColorantStat[0], dE); + AddOnePixel(&EuclideanStat, dE); + break; + + case PHOTOMETRIC_RGB: + + { + int index = 3 * cols; + + dR = fabs(buf2[index+0] - buf1[index+0]); + dG = fabs(buf2[index+1] - buf1[index+1]); + dB = fabs(buf2[index+2] - buf1[index+2]); + + dE = sqrt(dR * dR + dG * dG + dB * dB) / sqrt(3.); + } + + AddOnePixel(&ColorantStat[0], dR); + AddOnePixel(&ColorantStat[1], dG); + AddOnePixel(&ColorantStat[2], dB); + AddOnePixel(&EuclideanStat, dE); + break; + + case PHOTOMETRIC_SEPARATED: + + { + int index = 4 * cols; + + dC = fabs(buf2[index+0] - buf1[index+0]); + dM = fabs(buf2[index+1] - buf1[index+1]); + dY = fabs(buf2[index+2] - buf1[index+2]); + dK = fabs(buf2[index+3] - buf1[index+3]); + + dE = sqrt(dC * dC + dM * dM + dY * dY + dK * dK) / 2.; + } + AddOnePixel(&ColorantStat[0], dC); + AddOnePixel(&ColorantStat[1], dM); + AddOnePixel(&ColorantStat[2], dY); + AddOnePixel(&ColorantStat[3], dK); + AddOnePixel(&EuclideanStat, dE); + break; + + default: + FatalError("Unsupported channels: %d", Channels); + } + + + if (xform1 && xform2) { + + + cmsCIELab Lab1, Lab2; + size_t index1 = cols * PixelSize(dwFormat1); + size_t index2 = cols * PixelSize(dwFormat2); + + cmsDoTransform(xform1, &buf1[index1], &Lab1, 1); + cmsDoTransform(xform2, &buf2[index2], &Lab2, 1); + + dE = cmsDeltaE(&Lab1, &Lab2); + AddOnePixel(&ColorimetricStat, dE); + } + + + if (diff) { + buf3[cols] = (cmsUInt8Number) floor(dE + 0.5); + } + + } + + if (diff) { + + if (TIFFWriteScanline(diff, buf3, row, 0) < 0) goto Error; + } + + + } + + rc = 1; + +Error: + + if (hProfile1) cmsCloseProfile(hProfile1); + if (hProfile2) cmsCloseProfile(hProfile2); + if (xform1) cmsDeleteTransform(xform1); + if (xform2) cmsDeleteTransform(xform2); + _TIFFfree(buf1); _TIFFfree(buf2); + if (diff) { + TIFFWriteDirectory(diff); + if (buf3 != NULL) _TIFFfree(buf3); + } + return rc; +} + + +static +void AssureShortTagIs(TIFF* tif1, TIFF* tiff2, int tag, int Val, const char* Error) +{ + uint16 v1; + + + if (!TIFFGetField(tif1, tag, &v1)) goto Err; + if (v1 != Val) goto Err; + + if (!TIFFGetField(tiff2, tag, &v1)) goto Err; + if (v1 != Val) goto Err; + + return; +Err: + FatalError("%s is not proper", Error); +} + + +static +int CmpShortTag(TIFF* tif1, TIFF* tif2, int tag) +{ + uint16 v1, v2; + + if (!TIFFGetField(tif1, tag, &v1)) return 0; + if (!TIFFGetField(tif2, tag, &v2)) return 0; + + return v1 == v2; +} + +static +int CmpLongTag(TIFF* tif1, TIFF* tif2, int tag) +{ + uint32 v1, v2; + + if (!TIFFGetField(tif1, tag, &v1)) return 0; + if (!TIFFGetField(tif2, tag, &v2)) return 0; + + return v1 == v2; +} + + +static +void EqualShortTag(TIFF* tif1, TIFF* tif2, int tag, const char* Error) +{ + if (!CmpShortTag(tif1, tif2, tag)) + FatalError("%s is different", Error); +} + + + +static +void EqualLongTag(TIFF* tif1, TIFF* tif2, int tag, const char* Error) +{ + if (!CmpLongTag(tif1, tif2, tag)) + FatalError("%s is different", Error); +} + + + +static +void AddOneCGATSRow(cmsHANDLE hIT8, char *Name, LPSTAT st) +{ + + double Per100 = 100.0 * ((255.0 - Mean(st)) / 255.0); + + cmsIT8SetData(hIT8, Name, "SAMPLE_ID", Name); + cmsIT8SetDataDbl(hIT8, Name, "PER100_EQUAL", Per100); + cmsIT8SetDataDbl(hIT8, Name, "MEAN_DE", Mean(st)); + cmsIT8SetDataDbl(hIT8, Name, "STDEV_DE", Std(st)); + cmsIT8SetDataDbl(hIT8, Name, "MIN_DE", st ->Min); + cmsIT8SetDataDbl(hIT8, Name, "MAX_DE", st ->Peak); + +} + + +static +void CreateCGATS(const char* TiffName1, const char* TiffName2) +{ + cmsHANDLE hIT8 = cmsIT8Alloc(0); + time_t ltime; + char Buffer[256]; + + cmsIT8SetSheetType(hIT8, "TIFFDIFF"); + + + sprintf(Buffer, "Differences between %s and %s", TiffName1, TiffName2); + + cmsIT8SetComment(hIT8, Buffer); + + cmsIT8SetPropertyStr(hIT8, "ORIGINATOR", "TIFFDIFF"); + time( <ime ); + strcpy(Buffer, ctime(<ime)); + Buffer[strlen(Buffer)-1] = 0; // Remove the nasty "\n" + + cmsIT8SetPropertyStr(hIT8, "CREATED", Buffer); + + cmsIT8SetComment(hIT8, " "); + + cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_FIELDS", 6); + + + cmsIT8SetDataFormat(hIT8, 0, "SAMPLE_ID"); + cmsIT8SetDataFormat(hIT8, 1, "PER100_EQUAL"); + cmsIT8SetDataFormat(hIT8, 2, "MEAN_DE"); + cmsIT8SetDataFormat(hIT8, 3, "STDEV_DE"); + cmsIT8SetDataFormat(hIT8, 4, "MIN_DE"); + cmsIT8SetDataFormat(hIT8, 5, "MAX_DE"); + + + switch (Channels) { + + case 1: + cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_SETS", 3); + AddOneCGATSRow(hIT8, "GRAY_PLANE", &ColorantStat[0]); + break; + + case 3: + cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_SETS", 5); + AddOneCGATSRow(hIT8, "R_PLANE", &ColorantStat[0]); + AddOneCGATSRow(hIT8, "G_PLANE", &ColorantStat[1]); + AddOneCGATSRow(hIT8, "B_PLANE", &ColorantStat[2]); + break; + + + case 4: + cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_SETS", 6); + AddOneCGATSRow(hIT8, "C_PLANE", &ColorantStat[0]); + AddOneCGATSRow(hIT8, "M_PLANE", &ColorantStat[1]); + AddOneCGATSRow(hIT8, "Y_PLANE", &ColorantStat[2]); + AddOneCGATSRow(hIT8, "K_PLANE", &ColorantStat[3]); + break; + + default: FatalError("Internal error: Bad ColorSpace"); + + } + + AddOneCGATSRow(hIT8, "EUCLIDEAN", &EuclideanStat); + AddOneCGATSRow(hIT8, "COLORIMETRIC", &ColorimetricStat); + + cmsIT8SaveToFile(hIT8, CGATSout); + cmsIT8Free(hIT8); +} + +int main(int argc, char* argv[]) +{ + int i; + + Tiff1 = Tiff2 = TiffDiff = NULL; + + InitUtils("tiffdiff"); + + HandleSwitches(argc, argv); + + if ((argc - xoptind) != 2) { + + Help(); + } + + TIFFSetErrorHandler(ConsoleErrorHandler); + TIFFSetWarningHandler(ConsoleWarningHandler); + + Tiff1 = TIFFOpen(argv[xoptind], "r"); + if (Tiff1 == NULL) FatalError("Unable to open '%s'", argv[xoptind]); + + Tiff2 = TIFFOpen(argv[xoptind+1], "r"); + if (Tiff2 == NULL) FatalError("Unable to open '%s'", argv[xoptind+1]); + + if (TiffDiffFilename) { + + TiffDiff = TIFFOpen(TiffDiffFilename, "w"); + if (TiffDiff == NULL) FatalError("Unable to create '%s'", TiffDiffFilename); + + } + + + AssureShortTagIs(Tiff1, Tiff2, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG, "Planar Config"); + AssureShortTagIs(Tiff1, Tiff2, TIFFTAG_BITSPERSAMPLE, 8, "8 bit per sample"); + + EqualLongTag(Tiff1, Tiff2, TIFFTAG_IMAGEWIDTH, "Image width"); + EqualLongTag(Tiff1, Tiff2, TIFFTAG_IMAGELENGTH, "Image length"); + + EqualShortTag(Tiff1, Tiff2, TIFFTAG_SAMPLESPERPIXEL, "Samples per pixel"); + + + hLab = cmsCreateLab4Profile(NULL); + + ClearStatistics(&EuclideanStat); + for (i=0; i < 4; i++) + ClearStatistics(&ColorantStat[i]); + + if (!CmpImages(Tiff1, Tiff2, TiffDiff)) + FatalError("Error comparing images"); + + if (CGATSout) { + CreateCGATS(argv[xoptind], argv[xoptind+1]); + } + else { + + double Per100 = 100.0 * ((255.0 - Mean(&EuclideanStat)) / 255.0); + + printf("Digital counts %g%% equal. mean %g, min %g, max %g, Std %g\n", Per100, Mean(&EuclideanStat), + EuclideanStat.Min, + EuclideanStat.Peak, + Std(&EuclideanStat)); + + if (ColorimetricStat.n > 0) { + + Per100 = 100.0 * ((255.0 - Mean(&ColorimetricStat)) / 255.0); + + printf("dE Colorimetric %g%% equal. mean %g, min %g, max %g, Std %g\n", Per100, Mean(&ColorimetricStat), + ColorimetricStat.Min, + ColorimetricStat.Peak, + Std(&ColorimetricStat)); + } + + } + + if (hLab) cmsCloseProfile(hLab); + if (Tiff1) TIFFClose(Tiff1); + if (Tiff2) TIFFClose(Tiff2); + if (TiffDiff) TIFFClose(TiffDiff); + + return 0; +} + + diff --git a/utils/tificc/tificc.1 b/utils/tificc/tificc.1 new file mode 100644 index 0000000..d03c1df --- /dev/null +++ b/utils/tificc/tificc.1 @@ -0,0 +1,100 @@ +.\"Shiju P. Nair September 30, 2004 +.TH TIFFICC 1 "October 23, 2004" +.SH NAME +tifficc - little cms ICC profile applier for TIFF. +.SH SYNOPSIS +.B tifficc +.RI [ options ] " input.tif output.tif" +.SH DESCRIPTION +lcms is a standalone CMM engine, which deals with the color management. +It implements a fast transformation between ICC profiles. +.B tifficc +is little cms ICC profile applier for TIFF. +.SH OPTIONS +.TP +.B \-a +Handle channels > 4 as alpha. +.TP +.B \-b +Black point compensation. +.TP +.B \-c <0,1,2,3> +Precalculates transform. (0=Off, 1=Normal, 2=Hi-res, 3=LoRes) [defaults to 1] +.TP +.B \-e +Embed destination profile. +.TP +.B \-g +Marks out-of-gamut colors on softproof. +.TP +.B \-h <0,1,2> +Show summary of options and examples. +.TP +.BI \-i\ profile +Input profile (defaults to sRGB). +.TP +.B -k <0..400> +Ink-limiting in % (CMYK only). +.TP +.BI \-l\ profile +Transform by device-link profile. +.TP +.B \-m <0,1,2,3> +SoftProof intent. +.TP +.B \-n +Ignore embedded profile on input. +.TP +.BI \-p\ profile +Soft proof profile. +.TP +.BI \-o\ profile +.p +Output profile (defaults to sRGB). +.TP +.BI \-s\ profile +Save embedded profile as +.TP +.B \-t <0,1,2,3> +Intent (0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute). +.TP +.B \-v +Verbose. +.TP +.B \-w +Wide output (generates 16 bps tiff). +.TP +You can also use following builtins +*Lab - CIE Lab D50 based +*XYZ - XYZ +*adobe1998RBB - AdobeRGB +*colormatchrgb - ColorMatch RGB +*applergb - Apple RGB +.SH EXAMPLES +.nf +To color correct from scanner to sRGB: + tifficc -iscanner.icm in.tif out.tif + +To convert from monitor1 to monitor2: + tifficc -imon1.icm -omon2.icm in.tif out.tif + +To make a CMYK separation: + tifficc -oprinter.icm inrgb.tif outcmyk.tif + +To recover sRGB from a CMYK separation: + tifficc -iprinter.icm incmyk.tif outrgb.tif + +To convert from CIELab TIFF to sRGB + tifficc -iTiffLab8Spac.icm in.tif out.tif +.fi +.SH NOTES +For suggestions, comments, bug reports etc. send mail to info@littlecms.com. +.SH SEE ALSO +.BR jpegicc (1), +.BR icc2ps (1), +.BR icclink (1), +.BR icctrans (1), +.BR wtpt (1) +.SH AUTHOR +This manual page was originally written by Shiju p. Nair , +for the Debian project. Modified by Marti Maria to reflect further changes. diff --git a/utils/tificc/tificc.c b/utils/tificc/tificc.c new file mode 100644 index 0000000..57e0b4d --- /dev/null +++ b/utils/tificc/tificc.c @@ -0,0 +1,1130 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2010 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- + +// This program does apply profiles to (some) TIFF files + +#include "lcms2_plugin.h" +#include "tiffio.h" +#include "utils.h" + + +// Flags + +static cmsBool BlackWhiteCompensation = FALSE; +static cmsBool IgnoreEmbedded = FALSE; +static cmsBool EmbedProfile = FALSE; +static int Width = 8; +static cmsBool GamutCheck = FALSE; +static cmsBool lIsDeviceLink = FALSE; +static cmsBool StoreAsAlpha = FALSE; +static cmsBool InputLabUsingICC = FALSE; + +static int Intent = INTENT_PERCEPTUAL; +static int ProofingIntent = INTENT_PERCEPTUAL; +static int PrecalcMode = 1; +static cmsFloat64Number InkLimit = 400; + +static cmsFloat64Number ObserverAdaptationState = 1.0; // According ICC 4.3 this is the default + +static const char *cInpProf = NULL; +static const char *cOutProf = NULL; +static const char *cProofing = NULL; + +static const char* SaveEmbedded = NULL; + +// Console error & warning +static +void ConsoleWarningHandler(const char* module, const char* fmt, va_list ap) +{ + char e[512] = { '\0' }; + if (module != NULL) + strcat(strcpy(e, module), ": "); + + vsprintf(e+strlen(e), fmt, ap); + strcat(e, "."); + if (Verbose) { + + fprintf(stderr, "\nWarning"); + fprintf(stderr, " %s\n", e); + fflush(stderr); + } +} + +static +void ConsoleErrorHandler(const char* module, const char* fmt, va_list ap) +{ + char e[512] = { '\0' }; + + if (module != NULL) { + if (strlen(module) < 500) + strcat(strcpy(e, module), ": "); + } + + vsprintf(e+strlen(e), fmt, ap); + strcat(e, "."); + fprintf(stderr, "\nError"); + fprintf(stderr, " %s\n", e); + fflush(stderr); +} + + +// Issue a warning +static +void Warning(const char *frm, ...) +{ + va_list args; + + va_start(args, frm); + ConsoleWarningHandler("[tificc]", frm, args); + va_end(args); +} + + + +// Out of mememory is a fatal error +static +void OutOfMem(cmsUInt32Number size) +{ + FatalError("Out of memory on allocating %d bytes.", size); +} + + +// ----------------------------------------------------------------------------------------------- + +// In TIFF, Lab is encoded in a different way, so let's use the plug-in +// capabilities of lcms2 to change the meaning of TYPE_Lab_8. + +// * 0xffff / 0xff00 = (255 * 257) / (255 * 256) = 257 / 256 +static int FromLabV2ToLabV4(int x) +{ + int a; + + a = ((x << 8) | x) >> 8; // * 257 / 256 + if ( a > 0xffff) return 0xffff; + return a; +} + +// * 0xf00 / 0xffff = * 256 / 257 +static int FromLabV4ToLabV2(int x) +{ + return ((x << 8) + 0x80) / 257; +} + + +// Formatter for 8bit Lab TIFF (photometric 8) +static +unsigned char* UnrollTIFFLab8(struct _cmstransform_struct* CMMcargo, + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) +{ + wIn[0] = (cmsUInt16Number) FromLabV2ToLabV4((accum[0]) << 8); + wIn[1] = (cmsUInt16Number) FromLabV2ToLabV4(((accum[1] > 127) ? (accum[1] - 128) : (accum[1] + 128)) << 8); + wIn[2] = (cmsUInt16Number) FromLabV2ToLabV4(((accum[2] > 127) ? (accum[2] - 128) : (accum[2] + 128)) << 8); + + return accum + 3; + + UTILS_UNUSED_PARAMETER(Stride); + UTILS_UNUSED_PARAMETER(CMMcargo); +} + +static +unsigned char* PackTIFFLab8(struct _cmstransform_struct* CMMcargo, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + int a, b; + + *output++ = (cmsUInt8Number) (FromLabV4ToLabV2(wOut[0] + 0x0080) >> 8); + + a = (FromLabV4ToLabV2(wOut[1]) + 0x0080) >> 8; + b = (FromLabV4ToLabV2(wOut[2]) + 0x0080) >> 8; + + *output++ = (cmsUInt8Number) ((a < 128) ? (a + 128) : (a - 128)); + *output++ = (cmsUInt8Number) ((b < 128) ? (b + 128) : (b - 128)); + + return output; + + UTILS_UNUSED_PARAMETER(Stride); + UTILS_UNUSED_PARAMETER(CMMcargo); +} + + +static +cmsFormatter TiffFormatterFactory(cmsUInt32Number Type, + cmsFormatterDirection Dir, + cmsUInt32Number dwFlags) +{ + cmsFormatter Result = { NULL }; + + if (Type == TYPE_Lab_8 && !(dwFlags & CMS_PACK_FLAGS_FLOAT)) { + + if (Dir == cmsFormatterInput) + Result.Fmt16 = UnrollTIFFLab8; + else + Result.Fmt16 = PackTIFFLab8; + } + + return Result; +} + +static cmsPluginFormatters TiffLabPlugin = { {cmsPluginMagicNumber, 2000, cmsPluginFormattersSig, NULL}, TiffFormatterFactory }; + + +// Build up the pixeltype descriptor +static +cmsUInt32Number GetInputPixelType(TIFF *Bank) +{ + uint16 Photometric, bps, spp, extra, PlanarConfig, *info; + uint16 Compression, reverse = 0; + int ColorChannels, IsPlanar = 0, pt = 0, IsFlt; + + TIFFGetField(Bank, TIFFTAG_PHOTOMETRIC, &Photometric); + TIFFGetFieldDefaulted(Bank, TIFFTAG_BITSPERSAMPLE, &bps); + + if (bps == 1) + FatalError("Sorry, bilevel TIFFs has nothig to do with ICC profiles"); + + if (bps != 8 && bps != 16 && bps != 32) + FatalError("Sorry, 8, 16 or 32 bits per sample only"); + + TIFFGetFieldDefaulted(Bank, TIFFTAG_SAMPLESPERPIXEL, &spp); + TIFFGetFieldDefaulted(Bank, TIFFTAG_PLANARCONFIG, &PlanarConfig); + + switch (PlanarConfig) { + + case PLANARCONFIG_CONTIG: IsPlanar = 0; break; + case PLANARCONFIG_SEPARATE: IsPlanar = 1; break; + default: + + FatalError("Unsupported planar configuration (=%d) ", (int) PlanarConfig); + } + + // If Samples per pixel == 1, PlanarConfiguration is irrelevant and need + // not to be included. + + if (spp == 1) IsPlanar = 0; + + // Any alpha? + + TIFFGetFieldDefaulted(Bank, TIFFTAG_EXTRASAMPLES, &extra, &info); + + // Read alpha channels as colorant + + if (StoreAsAlpha) { + + ColorChannels = spp; + extra = 0; + } + else + ColorChannels = spp - extra; + + switch (Photometric) { + + case PHOTOMETRIC_MINISWHITE: + + reverse = 1; + + // ... fall through ... + + case PHOTOMETRIC_MINISBLACK: + pt = PT_GRAY; + break; + + case PHOTOMETRIC_RGB: + pt = PT_RGB; + break; + + + case PHOTOMETRIC_PALETTE: + FatalError("Sorry, palette images not supported"); + break; + + case PHOTOMETRIC_SEPARATED: + + pt = PixelTypeFromChanCount(ColorChannels); + break; + + case PHOTOMETRIC_YCBCR: + TIFFGetField(Bank, TIFFTAG_COMPRESSION, &Compression); + { + uint16 subx, suby; + + pt = PT_YCbCr; + TIFFGetFieldDefaulted(Bank, TIFFTAG_YCBCRSUBSAMPLING, &subx, &suby); + if (subx != 1 || suby != 1) + FatalError("Sorry, subsampled images not supported"); + + } + break; + + case PHOTOMETRIC_ICCLAB: + pt = PT_Lab; + InputLabUsingICC = TRUE; + break; + + case PHOTOMETRIC_CIELAB: + pt = PT_Lab; + InputLabUsingICC = FALSE; + break; + + + case PHOTOMETRIC_LOGLUV: // CIE Log2(L) (u',v') + + TIFFSetField(Bank, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_16BIT); + pt = PT_YUV; // *ICCSpace = icSigLuvData; + bps = 16; // 16 bits forced by LibTiff + break; + + default: + FatalError("Unsupported TIFF color space (Photometric %d)", Photometric); + } + + // Convert bits per sample to bytes per sample + + bps >>= 3; + IsFlt = (bps == 0) || (bps == 4); + + return (FLOAT_SH(IsFlt)|COLORSPACE_SH(pt)|PLANAR_SH(IsPlanar)|EXTRA_SH(extra)|CHANNELS_SH(ColorChannels)|BYTES_SH(bps)|FLAVOR_SH(reverse)); +} + + + +// Rearrange pixel type to build output descriptor +static +cmsUInt32Number ComputeOutputFormatDescriptor(cmsUInt32Number dwInput, int OutColorSpace, int bps) +{ + int IsPlanar = T_PLANAR(dwInput); + int Channels = ChanCountFromPixelType(OutColorSpace); + int IsFlt = (bps == 0) || (bps == 4); + + return (FLOAT_SH(IsFlt)|COLORSPACE_SH(OutColorSpace)|PLANAR_SH(IsPlanar)|CHANNELS_SH(Channels)|BYTES_SH(bps)); +} + + + +// Tile based transforms +static +int TileBasedXform(cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes) +{ + tsize_t BufSizeIn = TIFFTileSize(in); + tsize_t BufSizeOut = TIFFTileSize(out); + unsigned char *BufferIn, *BufferOut; + ttile_t i, TileCount = TIFFNumberOfTiles(in) / nPlanes; + uint32 tw, tl; + int PixelCount, j; + + + TIFFGetFieldDefaulted(in, TIFFTAG_TILEWIDTH, &tw); + TIFFGetFieldDefaulted(in, TIFFTAG_TILELENGTH, &tl); + + PixelCount = (int) tw * tl; + + BufferIn = (unsigned char *) _TIFFmalloc(BufSizeIn * nPlanes); + if (!BufferIn) OutOfMem(BufSizeIn * nPlanes); + + BufferOut = (unsigned char *) _TIFFmalloc(BufSizeOut * nPlanes); + if (!BufferOut) OutOfMem(BufSizeOut * nPlanes); + + + for (i = 0; i < TileCount; i++) { + + for (j=0; j < nPlanes; j++) { + + if (TIFFReadEncodedTile(in, i + (j* TileCount), + BufferIn + (j*BufSizeIn), BufSizeIn) < 0) goto cleanup; + } + + cmsDoTransform(hXForm, BufferIn, BufferOut, PixelCount); + + for (j=0; j < nPlanes; j++) { + + if (TIFFWriteEncodedTile(out, i + (j*TileCount), + BufferOut + (j*BufSizeOut), BufSizeOut) < 0) goto cleanup; + } + + } + + _TIFFfree(BufferIn); + _TIFFfree(BufferOut); + return 1; + + +cleanup: + + _TIFFfree(BufferIn); + _TIFFfree(BufferOut); + return 0; +} + + +// Strip based transforms + +static +int StripBasedXform(cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes) +{ + tsize_t BufSizeIn = TIFFStripSize(in); + tsize_t BufSizeOut = TIFFStripSize(out); + unsigned char *BufferIn, *BufferOut; + ttile_t i, StripCount = TIFFNumberOfStrips(in) / nPlanes; + uint32 sw; + uint32 sl; + uint32 iml; + int j; + int PixelCount; + + TIFFGetFieldDefaulted(in, TIFFTAG_IMAGEWIDTH, &sw); + TIFFGetFieldDefaulted(in, TIFFTAG_ROWSPERSTRIP, &sl); + TIFFGetFieldDefaulted(in, TIFFTAG_IMAGELENGTH, &iml); + + // It is possible to get infinite rows per strip + if (sl == 0 || sl > iml) + sl = iml; // One strip for whole image + + BufferIn = (unsigned char *) _TIFFmalloc(BufSizeIn * nPlanes); + if (!BufferIn) OutOfMem(BufSizeIn * nPlanes); + + BufferOut = (unsigned char *) _TIFFmalloc(BufSizeOut * nPlanes); + if (!BufferOut) OutOfMem(BufSizeOut * nPlanes); + + + for (i = 0; i < StripCount; i++) { + + for (j=0; j < nPlanes; j++) { + + if (TIFFReadEncodedStrip(in, i + (j * StripCount), + BufferIn + (j * BufSizeIn), BufSizeIn) < 0) goto cleanup; + } + + PixelCount = (int) sw * (iml < sl ? iml : sl); + iml -= sl; + + cmsDoTransform(hXForm, BufferIn, BufferOut, PixelCount); + + for (j=0; j < nPlanes; j++) { + if (TIFFWriteEncodedStrip(out, i + (j * StripCount), + BufferOut + j * BufSizeOut, BufSizeOut) < 0) goto cleanup; + } + + } + + _TIFFfree(BufferIn); + _TIFFfree(BufferOut); + return 1; + +cleanup: + + _TIFFfree(BufferIn); + _TIFFfree(BufferOut); + return 0; +} + + +// Creates minimum required tags +static +void WriteOutputTags(TIFF *out, int Colorspace, int BytesPerSample) +{ + int BitsPerSample = (8 * BytesPerSample); + int nChannels = ChanCountFromPixelType(Colorspace); + + uint16 Extra[] = { EXTRASAMPLE_UNASSALPHA, + EXTRASAMPLE_UNASSALPHA, + EXTRASAMPLE_UNASSALPHA, + EXTRASAMPLE_UNASSALPHA, + EXTRASAMPLE_UNASSALPHA, + EXTRASAMPLE_UNASSALPHA, + EXTRASAMPLE_UNASSALPHA, + EXTRASAMPLE_UNASSALPHA, + EXTRASAMPLE_UNASSALPHA, + EXTRASAMPLE_UNASSALPHA, + EXTRASAMPLE_UNASSALPHA + }; + + + switch (Colorspace) { + + case PT_GRAY: + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); + break; + + case PT_RGB: + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 3); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); + break; + + case PT_CMY: + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_SEPARATED); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 3); + TIFFSetField(out, TIFFTAG_INKSET, 2); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); + break; + + case PT_CMYK: + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_SEPARATED); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 4); + TIFFSetField(out, TIFFTAG_INKSET, INKSET_CMYK); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); + break; + + case PT_Lab: + if (BitsPerSample == 16) + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, 9); + else + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_CIELAB); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 3); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); // Needed by TIFF Spec + break; + + + // Multi-ink separations + case PT_MCH2: + case PT_MCH3: + case PT_MCH4: + case PT_MCH5: + case PT_MCH6: + case PT_MCH7: + case PT_MCH8: + case PT_MCH9: + case PT_MCH10: + case PT_MCH11: + case PT_MCH12: + case PT_MCH13: + case PT_MCH14: + case PT_MCH15: + + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_SEPARATED); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, nChannels); + + if (StoreAsAlpha && nChannels >= 4) { + // CMYK plus extra alpha + TIFFSetField(out, TIFFTAG_EXTRASAMPLES, nChannels - 4, Extra); + TIFFSetField(out, TIFFTAG_INKSET, 1); + TIFFSetField(out, TIFFTAG_NUMBEROFINKS, 4); + } + else { + TIFFSetField(out, TIFFTAG_INKSET, 2); + TIFFSetField(out, TIFFTAG_NUMBEROFINKS, nChannels); + } + + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); + break; + + + default: + FatalError("Unsupported output colorspace"); + } + + if (Width == 32) + TIFFSetField(out, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP); +} + + +// Copies a bunch of tages + +static +void CopyOtherTags(TIFF* in, TIFF* out) +{ +#define CopyField(tag, v) \ + if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) + + + short shortv; + uint32 ow, ol; + cmsFloat32Number floatv; + char *stringv; + uint32 longv; + + CopyField(TIFFTAG_SUBFILETYPE, longv); + + TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &ow); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &ol); + + TIFFSetField(out, TIFFTAG_IMAGEWIDTH, ow); + TIFFSetField(out, TIFFTAG_IMAGELENGTH, ol); + + CopyField(TIFFTAG_PLANARCONFIG, shortv); + CopyField(TIFFTAG_COMPRESSION, shortv); + + if (Width != 32) + CopyField(TIFFTAG_PREDICTOR, shortv); + + CopyField(TIFFTAG_THRESHHOLDING, shortv); + CopyField(TIFFTAG_FILLORDER, shortv); + CopyField(TIFFTAG_ORIENTATION, shortv); + CopyField(TIFFTAG_MINSAMPLEVALUE, shortv); + CopyField(TIFFTAG_MAXSAMPLEVALUE, shortv); + CopyField(TIFFTAG_XRESOLUTION, floatv); + CopyField(TIFFTAG_YRESOLUTION, floatv); + CopyField(TIFFTAG_RESOLUTIONUNIT, shortv); + CopyField(TIFFTAG_ROWSPERSTRIP, longv); + CopyField(TIFFTAG_XPOSITION, floatv); + CopyField(TIFFTAG_YPOSITION, floatv); + CopyField(TIFFTAG_IMAGEDEPTH, longv); + CopyField(TIFFTAG_TILEDEPTH, longv); + + CopyField(TIFFTAG_TILEWIDTH, longv); + CopyField(TIFFTAG_TILELENGTH, longv); + + CopyField(TIFFTAG_ARTIST, stringv); + CopyField(TIFFTAG_IMAGEDESCRIPTION, stringv); + CopyField(TIFFTAG_MAKE, stringv); + CopyField(TIFFTAG_MODEL, stringv); + + CopyField(TIFFTAG_DATETIME, stringv); + CopyField(TIFFTAG_HOSTCOMPUTER, stringv); + CopyField(TIFFTAG_PAGENAME, stringv); + CopyField(TIFFTAG_DOCUMENTNAME, stringv); + +} + +// A replacement for (the nonstandard) filelenght + + +static +void DoEmbedProfile(TIFF* Out, const char* ProfileFile) +{ + FILE* f; + cmsUInt32Number size, EmbedLen; + cmsUInt8Number* EmbedBuffer; + + f = fopen(ProfileFile, "rb"); + if (f == NULL) return; + + size = cmsfilelength(f); + EmbedBuffer = (cmsUInt8Number*) malloc(size + 1); + if (EmbedBuffer == NULL) { + OutOfMem(size+1); + return; + } + + EmbedLen = fread(EmbedBuffer, 1, size, f); + + if (EmbedLen != size) + FatalError("Cannot read %ld bytes to %s", size, ProfileFile); + + fclose(f); + EmbedBuffer[EmbedLen] = 0; + + TIFFSetField(Out, TIFFTAG_ICCPROFILE, EmbedLen, EmbedBuffer); + free(EmbedBuffer); +} + + + +static +cmsHPROFILE GetTIFFProfile(TIFF* in) +{ + cmsCIExyYTRIPLE Primaries; + cmsFloat32Number* chr; + cmsCIExyY WhitePoint; + cmsFloat32Number* wp; + int i; + cmsToneCurve* Curve[3]; + cmsUInt16Number *gmr, *gmg, *gmb; + cmsHPROFILE hProfile; + cmsUInt32Number EmbedLen; + cmsUInt8Number* EmbedBuffer; + + if (IgnoreEmbedded) return NULL; + + if (TIFFGetField(in, TIFFTAG_ICCPROFILE, &EmbedLen, &EmbedBuffer)) { + + hProfile = cmsOpenProfileFromMem(EmbedBuffer, EmbedLen); + + // Print description found in the profile + if (Verbose) { + + fprintf(stdout, "\n[Embedded profile]\n"); + PrintProfileInformation(hProfile); + fflush(stdout); + } + + if (hProfile != NULL && SaveEmbedded != NULL) + SaveMemoryBlock(EmbedBuffer, EmbedLen, SaveEmbedded); + + if (hProfile) return hProfile; + } + + // Try to see if "colorimetric" tiff + + if (TIFFGetField(in, TIFFTAG_PRIMARYCHROMATICITIES, &chr)) { + + Primaries.Red.x = chr[0]; + Primaries.Red.y = chr[1]; + Primaries.Green.x = chr[2]; + Primaries.Green.y = chr[3]; + Primaries.Blue.x = chr[4]; + Primaries.Blue.y = chr[5]; + + Primaries.Red.Y = Primaries.Green.Y = Primaries.Blue.Y = 1.0; + + if (TIFFGetField(in, TIFFTAG_WHITEPOINT, &wp)) { + + WhitePoint.x = wp[0]; + WhitePoint.y = wp[1]; + WhitePoint.Y = 1.0; + + // Transferfunction is a bit harder.... + + TIFFGetFieldDefaulted(in, TIFFTAG_TRANSFERFUNCTION, + &gmr, + &gmg, + &gmb); + + Curve[0] = cmsBuildTabulatedToneCurve16(NULL, 256, gmr); + Curve[1] = cmsBuildTabulatedToneCurve16(NULL, 256, gmg); + Curve[2] = cmsBuildTabulatedToneCurve16(NULL, 256, gmb); + + hProfile = cmsCreateRGBProfileTHR(NULL, &WhitePoint, &Primaries, Curve); + + for (i=0; i < 3; i++) + cmsFreeToneCurve(Curve[i]); + + if (Verbose) { + fprintf(stdout, "\n[Colorimetric TIFF]\n"); + } + + + return hProfile; + } + } + + return NULL; +} + + +// Transform one image +static +int TransformImage(TIFF* in, TIFF* out, const char *cDefInpProf) +{ + cmsHPROFILE hIn, hOut, hProof, hInkLimit = NULL; + cmsHTRANSFORM xform; + cmsUInt32Number wInput, wOutput; + int OutputColorSpace; + int bps = Width / 8; + cmsUInt32Number dwFlags = 0; + int nPlanes; + + // Observer adaptation state (only meaningful on absolute colorimetric intent) + + cmsSetAdaptationState(ObserverAdaptationState); + + if (EmbedProfile && cOutProf) + DoEmbedProfile(out, cOutProf); + + if (BlackWhiteCompensation) + dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; + + + switch (PrecalcMode) { + + case 0: dwFlags |= cmsFLAGS_NOOPTIMIZE; break; + case 2: dwFlags |= cmsFLAGS_HIGHRESPRECALC; break; + case 3: dwFlags |= cmsFLAGS_LOWRESPRECALC; break; + case 1: break; + + default: FatalError("Unknown precalculation mode '%d'", PrecalcMode); + } + + + if (GamutCheck) + dwFlags |= cmsFLAGS_GAMUTCHECK; + + hProof = NULL; + hOut = NULL; + + if (lIsDeviceLink) { + + hIn = cmsOpenProfileFromFile(cDefInpProf, "r"); + } + else { + + hIn = GetTIFFProfile(in); + + if (hIn == NULL) + hIn = OpenStockProfile(NULL, cDefInpProf); + + hOut = OpenStockProfile(NULL, cOutProf); + + if (cProofing != NULL) { + + hProof = OpenStockProfile(NULL, cProofing); + dwFlags |= cmsFLAGS_SOFTPROOFING; + } + } + + // Take input color space + + wInput = GetInputPixelType(in); + + // Assure both, input profile and input TIFF are on same colorspace + + if (_cmsLCMScolorSpace(cmsGetColorSpace(hIn)) != (int) T_COLORSPACE(wInput)) + FatalError("Input profile is not operating in proper color space"); + + + if (!lIsDeviceLink) + OutputColorSpace = _cmsLCMScolorSpace(cmsGetColorSpace(hOut)); + else + OutputColorSpace = _cmsLCMScolorSpace(cmsGetPCS(hIn)); + + wOutput = ComputeOutputFormatDescriptor(wInput, OutputColorSpace, bps); + + WriteOutputTags(out, OutputColorSpace, bps); + CopyOtherTags(in, out); + + // Ink limit + if (InkLimit != 400.0 && + (OutputColorSpace == PT_CMYK || OutputColorSpace == PT_CMY)) { + + cmsHPROFILE hProfiles[10]; + int nProfiles = 0; + + + hInkLimit = cmsCreateInkLimitingDeviceLink(cmsGetColorSpace(hOut), InkLimit); + + hProfiles[nProfiles++] = hIn; + if (hProof) { + hProfiles[nProfiles++] = hProof; + hProfiles[nProfiles++] = hProof; + } + + hProfiles[nProfiles++] = hOut; + hProfiles[nProfiles++] = hInkLimit; + + xform = cmsCreateMultiprofileTransform(hProfiles, nProfiles, + wInput, wOutput, Intent, dwFlags); + + } + else { + + xform = cmsCreateProofingTransform(hIn, wInput, + hOut, wOutput, + hProof, Intent, + ProofingIntent, + dwFlags); + } + + cmsCloseProfile(hIn); + cmsCloseProfile(hOut); + + if (hInkLimit) + cmsCloseProfile(hInkLimit); + if (hProof) + cmsCloseProfile(hProof); + + if (xform == NULL) return 0; + + // Planar stuff + if (T_PLANAR(wInput)) + nPlanes = T_CHANNELS(wInput) + T_EXTRA(wInput); + else + nPlanes = 1; + + + // Handle tile by tile or strip by strip + if (TIFFIsTiled(in)) { + + TileBasedXform(xform, in, out, nPlanes); + } + else { + StripBasedXform(xform, in, out, nPlanes); + } + + + cmsDeleteTransform(xform); + + TIFFWriteDirectory(out); + + return 1; +} + + +// Print help +static +void Help(int level) +{ + fprintf(stderr, "little cms ICC profile applier for TIFF - v6.1 [LittleCMS %2.2f]\n\n", LCMS_VERSION / 1000.0); + fflush(stderr); + + switch(level) { + + default: + case 0: + + fprintf(stderr, "usage: tifficc [flags] input.tif output.tif\n"); + + fprintf(stderr, "\nflags:\n\n"); + fprintf(stderr, "%cv - Verbose\n", SW); + fprintf(stderr, "%ci - Input profile (defaults to sRGB)\n", SW); + fprintf(stderr, "%co - Output profile (defaults to sRGB)\n", SW); + fprintf(stderr, "%cl - Transform by device-link profile\n", SW); + + PrintRenderingIntents(); + + fprintf(stderr, "%cb - Black point compensation\n", SW); + fprintf(stderr, "%cd<0..1> - Observer adaptation state (abs.col. only)\n", SW); + + fprintf(stderr, "%cc<0,1,2,3> - Precalculates transform (0=Off, 1=Normal, 2=Hi-res, 3=LoRes)\n", SW); + fprintf(stderr, "\n"); + + fprintf(stderr, "%cw<8,16,32> - Output depth. Use 32 for floating-point\n\n", SW); + fprintf(stderr, "%ca - Handle channels > 4 as alpha\n", SW); + + fprintf(stderr, "%cn - Ignore embedded profile on input\n", SW); + fprintf(stderr, "%ce - Embed destination profile\n", SW); + fprintf(stderr, "%cs - Save embedded profile as \n", SW); + fprintf(stderr, "\n"); + + + fprintf(stderr, "%cp - Soft proof profile\n", SW); + fprintf(stderr, "%cm - Soft proof intent\n", SW); + fprintf(stderr, "%cg - Marks out-of-gamut colors on softproof\n", SW); + + fprintf(stderr, "\n"); + + fprintf(stderr, "%ck<0..400> - Ink-limiting in %% (CMYK only)\n", SW); + fprintf(stderr, "\n"); + fprintf(stderr, "%ch<0,1,2,3> - More help\n", SW); + break; + + case 1: + + fprintf(stderr, "Examples:\n\n" + "To color correct from scanner to sRGB:\n" + "\ttifficc %ciscanner.icm in.tif out.tif\n" + "To convert from monitor1 to monitor2:\n" + "\ttifficc %cimon1.icm %comon2.icm in.tif out.tif\n" + "To make a CMYK separation:\n" + "\ttifficc %coprinter.icm inrgb.tif outcmyk.tif\n" + "To recover sRGB from a CMYK separation:\n" + "\ttifficc %ciprinter.icm incmyk.tif outrgb.tif\n" + "To convert from CIELab TIFF to sRGB\n" + "\ttifficc %ci*Lab in.tif out.tif\n\n", + SW, SW, SW, SW, SW, SW); + break; + + case 2: + PrintBuiltins(); + break; + + case 3: + + fprintf(stderr, "This program is intended to be a demo of the little cms\n" + "engine. Both lcms and this program are freeware. You can\n" + "obtain both in source code at http://www.littlecms.com\n" + "For suggestions, comments, bug reports etc. send mail to\n" + "info@littlecms.com\n\n"); + + break; + } + + fflush(stderr); + exit(0); +} + + +// The toggles stuff + +static +void HandleSwitches(int argc, char *argv[]) +{ + int s; + + while ((s=xgetopt(argc,argv,"aAeEbBw:W:nNvVGgh:H:i:I:o:O:P:p:t:T:c:C:l:L:M:m:K:k:S:s:D:d:")) != EOF) { + + switch (s) { + + case 'a': + case 'A': + StoreAsAlpha = TRUE; + break; + case 'b': + case 'B': + BlackWhiteCompensation = TRUE; + break; + + case 'c': + case 'C': + PrecalcMode = atoi(xoptarg); + if (PrecalcMode < 0 || PrecalcMode > 3) + FatalError("Unknown precalc mode '%d'", PrecalcMode); + break; + + case 'd': + case 'D': ObserverAdaptationState = atof(xoptarg); + if (ObserverAdaptationState < 0 || + ObserverAdaptationState > 1.0) + Warning("Adaptation state should be 0..1"); + break; + + case 'e': + case 'E': + EmbedProfile = TRUE; + break; + + case 'g': + case 'G': + GamutCheck = TRUE; + break; + + case 'v': + case 'V': + Verbose = TRUE; + break; + + case 'i': + case 'I': + if (lIsDeviceLink) + FatalError("Device-link already specified"); + + cInpProf = xoptarg; + break; + + case 'o': + case 'O': + if (lIsDeviceLink) + FatalError("Device-link already specified"); + + cOutProf = xoptarg; + break; + + case 'l': + case 'L': + if (cInpProf != NULL || cOutProf != NULL) + FatalError("input/output profiles already specified"); + + cInpProf = xoptarg; + lIsDeviceLink = TRUE; + break; + + case 'p': + case 'P': + cProofing = xoptarg; + break; + + case 't': + case 'T': + Intent = atoi(xoptarg); + break; + + case 'm': + case 'M': + ProofingIntent = atoi(xoptarg); + break; + + case 'N': + case 'n': + IgnoreEmbedded = TRUE; + break; + + case 'W': + case 'w': + Width = atoi(xoptarg); + if (Width != 8 && Width != 16 && Width != 32) + FatalError("Only 8, 16 and 32 bps are supported"); + break; + + case 'k': + case 'K': + InkLimit = atof(xoptarg); + if (InkLimit < 0.0 || InkLimit > 400.0) + FatalError("Ink limit must be 0%%..400%%"); + break; + + + case 's': + case 'S': SaveEmbedded = xoptarg; + break; + + case 'H': + case 'h': { + + int a = atoi(xoptarg); + Help(a); + } + break; + + default: + + FatalError("Unknown option - run without args to see valid ones"); + } + + } +} + + +// The main sink + +int main(int argc, char* argv[]) +{ + TIFF *in, *out; + + cmsPlugin(&TiffLabPlugin); + + InitUtils("tifficc"); + + HandleSwitches(argc, argv); + + if ((argc - xoptind) != 2) { + + Help(0); + } + + + TIFFSetErrorHandler(ConsoleErrorHandler); + TIFFSetWarningHandler(ConsoleWarningHandler); + + in = TIFFOpen(argv[xoptind], "r"); + if (in == NULL) FatalError("Unable to open '%s'", argv[xoptind]); + + out = TIFFOpen(argv[xoptind+1], "w"); + + if (out == NULL) { + + TIFFClose(in); + FatalError("Unable to write '%s'", argv[xoptind+1]); + } + + do { + + TransformImage(in, out, cInpProf); + + + } while (TIFFReadDirectory(in)); + + + if (Verbose) { fprintf(stdout, "\n"); fflush(stdout); } + + TIFFClose(in); + TIFFClose(out); + + return 0; +} + diff --git a/utils/transicc/.deps/transicc.Po b/utils/transicc/.deps/transicc.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/transicc/.deps/transicc.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/transicc/.deps/vprf.Po b/utils/transicc/.deps/vprf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/transicc/.deps/vprf.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/transicc/.deps/xgetopt.Po b/utils/transicc/.deps/xgetopt.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/utils/transicc/.deps/xgetopt.Po @@ -0,0 +1 @@ +# dummy diff --git a/utils/transicc/Makefile b/utils/transicc/Makefile new file mode 100644 index 0000000..a0b25bf --- /dev/null +++ b/utils/transicc/Makefile @@ -0,0 +1,571 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# utils/transicc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# +# Makefile for building lcms sample programs +# Originally Written by Bob Friesenhahn, June 2003 +# Additions and bugs by Marti Maria + + +pkgdatadir = $(datadir)/lcms2 +pkgincludedir = $(includedir)/lcms2 +pkglibdir = $(libdir)/lcms2 +pkglibexecdir = $(libexecdir)/lcms2 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = arm-unknown-linux-gnueabi +host_triplet = arm-unknown-linux-gnueabi +bin_PROGRAMS = transicc$(EXEEXT) +subdir = utils/transicc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_transicc_OBJECTS = transicc.$(OBJEXT) xgetopt.$(OBJEXT) \ + vprf.$(OBJEXT) +transicc_OBJECTS = $(am_transicc_OBJECTS) +transicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +transicc_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(transicc_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(transicc_SOURCES) +DIST_SOURCES = $(transicc_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run aclocal-1.11 +AMTAR = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoconf +AUTOHEADER = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run autoheader +AUTOMAKE = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall +CPP = gcc -std=gnu99 -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DPACKAGE_NAME=\"lcms2\" -DPACKAGE_TARNAME=\"lcms2\" -DPACKAGE_VERSION=\"2.3\" -DPACKAGE_STRING=\"lcms2\ 2.3\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHasJPEG=1 -DHasZLIB=1 -DHasTIFF=1 -DHAVE_TIFFCONF_H=1 +DEPDIR = .deps +DLLTOOL = dlltool +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JPEGICC_DEPLIBS = -ljpeg -lm +LCMS_LIB_DEPLIBS = -lm +LD = /usr/arm-linux-gnueabi/bin/ld +LDFLAGS = +LIBOBJS = +LIBRARY_AGE = 0 +LIBRARY_CURRENT = 2 +LIBRARY_REVISION = 3 +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltmain.sh +LIB_JPEG = -ljpeg +LIB_MATH = -lm +LIB_TIFF = -ltiff +LIB_ZLIB = -lz +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/missing --run makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = lcms2 +PACKAGE_BUGREPORT = +PACKAGE_NAME = lcms2 +PACKAGE_STRING = lcms2 2.3 +PACKAGE_TARNAME = lcms2 +PACKAGE_URL = +PACKAGE_VERSION = 2.3 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TIFFICC_DEPLIBS = -ltiff -ljpeg -lz -lm +VERSION = 2.3 +abs_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/utils/transicc +abs_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/utils/transicc +abs_top_builddir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +abs_top_srcdir = /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = arm-unknown-linux-gnueabi +build_alias = +build_cpu = arm +build_os = linux-gnueabi +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = arm-unknown-linux-gnueabi +host_alias = +host_cpu = arm +host_os = linux-gnueabi +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +inline = +install_sh = ${SHELL} /home/gpeegpee/buildroot/slp/slp_print_upgrade/debian/lcms2-2.3/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +transicc_LDADD = $(top_builddir)/src/liblcms2.la +transicc_LDFLAGS = +transicc_SOURCES = transicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +transicc_MANS = transicc.1 +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/transicc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign utils/transicc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +transicc$(EXEEXT): $(transicc_OBJECTS) $(transicc_DEPENDENCIES) + @rm -f transicc$(EXEEXT) + $(transicc_LINK) $(transicc_OBJECTS) $(transicc_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/transicc.Po +include ./$(DEPDIR)/vprf.Po +include ./$(DEPDIR)/xgetopt.Po + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +xgetopt.o: ../common/xgetopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.o -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +# source='../common/xgetopt.c' object='xgetopt.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + +xgetopt.obj: ../common/xgetopt.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.obj -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +# source='../common/xgetopt.c' object='xgetopt.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + +vprf.o: ../common/vprf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.o -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +# source='../common/vprf.c' object='vprf.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + +vprf.obj: ../common/vprf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.obj -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +# source='../common/vprf.c' object='vprf.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/utils/transicc/Makefile.am b/utils/transicc/Makefile.am new file mode 100644 index 0000000..bc80a82 --- /dev/null +++ b/utils/transicc/Makefile.am @@ -0,0 +1,19 @@ +# +# Makefile for building lcms sample programs +# Originally Written by Bob Friesenhahn, June 2003 +# Additions and bugs by Marti Maria + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign + +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +bin_PROGRAMS = transicc + +transicc_LDADD = $(top_builddir)/src/liblcms2.la +transicc_LDFLAGS = @LDFLAGS@ +transicc_SOURCES = transicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +transicc_MANS = transicc.1 + +EXTRA_DIST = $(man_MANS) diff --git a/utils/transicc/Makefile.in b/utils/transicc/Makefile.in new file mode 100644 index 0000000..477a3c5 --- /dev/null +++ b/utils/transicc/Makefile.in @@ -0,0 +1,571 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Makefile for building lcms sample programs +# Originally Written by Bob Friesenhahn, June 2003 +# Additions and bugs by Marti Maria + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = transicc$(EXEEXT) +subdir = utils/transicc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_transicc_OBJECTS = transicc.$(OBJEXT) xgetopt.$(OBJEXT) \ + vprf.$(OBJEXT) +transicc_OBJECTS = $(am_transicc_OBJECTS) +transicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la +transicc_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(transicc_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(transicc_SOURCES) +DIST_SOURCES = $(transicc_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ +LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRARY_AGE = @LIBRARY_AGE@ +LIBRARY_CURRENT = @LIBRARY_CURRENT@ +LIBRARY_REVISION = @LIBRARY_REVISION@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIB_JPEG = @LIB_JPEG@ +LIB_MATH = @LIB_MATH@ +LIB_TIFF = @LIB_TIFF@ +LIB_ZLIB = @LIB_ZLIB@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +inline = @inline@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Don't require all the GNU mandated files +AUTOMAKE_OPTIONS = 1.7 foreign +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common + +transicc_LDADD = $(top_builddir)/src/liblcms2.la +transicc_LDFLAGS = @LDFLAGS@ +transicc_SOURCES = transicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h +transicc_MANS = transicc.1 +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/transicc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign utils/transicc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +transicc$(EXEEXT): $(transicc_OBJECTS) $(transicc_DEPENDENCIES) + @rm -f transicc$(EXEEXT) + $(transicc_LINK) $(transicc_OBJECTS) $(transicc_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transicc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vprf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetopt.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +xgetopt.o: ../common/xgetopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.o -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/xgetopt.c' object='xgetopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.o `test -f '../common/xgetopt.c' || echo '$(srcdir)/'`../common/xgetopt.c + +xgetopt.obj: ../common/xgetopt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xgetopt.obj -MD -MP -MF $(DEPDIR)/xgetopt.Tpo -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xgetopt.Tpo $(DEPDIR)/xgetopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/xgetopt.c' object='xgetopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xgetopt.obj `if test -f '../common/xgetopt.c'; then $(CYGPATH_W) '../common/xgetopt.c'; else $(CYGPATH_W) '$(srcdir)/../common/xgetopt.c'; fi` + +vprf.o: ../common/vprf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.o -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/vprf.c' object='vprf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.o `test -f '../common/vprf.c' || echo '$(srcdir)/'`../common/vprf.c + +vprf.obj: ../common/vprf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vprf.obj -MD -MP -MF $(DEPDIR)/vprf.Tpo -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vprf.Tpo $(DEPDIR)/vprf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/vprf.c' object='vprf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vprf.obj `if test -f '../common/vprf.c'; then $(CYGPATH_W) '../common/vprf.c'; else $(CYGPATH_W) '$(srcdir)/../common/vprf.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/utils/transicc/transicc.1 b/utils/transicc/transicc.1 new file mode 100644 index 0000000..d99eb25 --- /dev/null +++ b/utils/transicc/transicc.1 @@ -0,0 +1,61 @@ +.\"Shiju P. Nair September 30, 2004 +.TH ICCTRANS 1 "September 30, 2004" +.SH NAME +icctrans - little cms ColorSpace conversion calculator. +.SH SYNOPSIS +.B icctrans +.RI [ options ] +.SH DESCRIPTION +lcms is a standalone CMM engine, which deals with the color management. +It implements a fast transformation between ICC profiles. +.B icctrans +is lcms ColorSpace conversion calculator. +.SH OPTIONS +.TP +.B \-% +use percent % of ink. +.TP +.B \-b +Black point compensation. +.TP +.B \-c <0,1,2,3> +Precalculates transform. (0=Off, 1=Normal, 2=Hi-res, 3=LoRes) [defaults to 1] +.TP +.BI \-i\ profile +Input profile (defaults to sRGB). +.TP +.B \-l +Transform by device-link profile. +.TP +.B \-n +Terse output, intended for pipe usage. +.TP +.BI \-o\ profile +.p +Output profile (defaults to sRGB). +.TP +.B \-t <0,1,2,3> +Intent (0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute). +.TP +.B \-v +Verbose. +.TP +.B \-w +Use 16 bits. +.TP +.B \-x +Hexadecimal. +.TP +You can use '*Lab' and '*xyz' as built-in profiles. +.SH NOTES +For suggestions, comments, bug reports etc. send mail to +info@littlecms.com. +.SH SEE ALSO +.BR jpegicc (1), +.BR tifficc (1), +.BR icc2ps (1), +.BR icclink (1), +.BR wtpt (1) +.SH AUTHOR +This manual page was written by Shiju p. Nair , +for the Debian project. diff --git a/utils/transicc/transicc.c b/utils/transicc/transicc.c new file mode 100644 index 0000000..2181359 --- /dev/null +++ b/utils/transicc/transicc.c @@ -0,0 +1,1205 @@ +//--------------------------------------------------------------------------------- +// +// Little Color Management System +// Copyright (c) 1998-2011 Marti Maria Saguer +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//--------------------------------------------------------------------------------- +// + +#include "utils.h" + +#ifndef _MSC_VER +# include +#endif + +#ifdef CMS_IS_WINDOWS_ +# include +#endif + +#define MAX_INPUT_BUFFER 4096 + +// Global options + +static cmsBool InHexa = FALSE; +static cmsBool GamutCheck = FALSE; +static cmsBool Width16 = FALSE; +static cmsBool BlackPointCompensation = FALSE; +static cmsBool lIsDeviceLink = FALSE; +static cmsBool lQuantize = FALSE; +static cmsBool lIsFloat = TRUE; + +static cmsUInt32Number Intent = INTENT_PERCEPTUAL; +static cmsUInt32Number ProofingIntent = INTENT_PERCEPTUAL; + +static int PrecalcMode = 0; + +// -------------------------------------------------------------- + +static char *cInProf = NULL; +static char *cOutProf = NULL; +static char *cProofing = NULL; + +static char *IncludePart = NULL; + +static cmsHANDLE hIT8in = NULL; // CGATS input +static cmsHANDLE hIT8out = NULL; // CGATS output + +static char CGATSPatch[1024]; // Actual Patch Name +static char CGATSoutFilename[cmsMAX_PATH]; + +static int nMaxPatches; + +static cmsHTRANSFORM hTrans, hTransXYZ, hTransLab; +static cmsBool InputNamedColor = FALSE; + +static cmsColorSpaceSignature InputColorSpace, OutputColorSpace; + +static cmsNAMEDCOLORLIST* InputColorant = NULL; +static cmsNAMEDCOLORLIST* OutputColorant = NULL; + +static cmsFloat64Number InputRange, OutputRange; + + +// isatty replacement +#ifdef _MSC_VER +#define xisatty(x) _isatty( _fileno( (x) ) ) +#else +#define xisatty(x) isatty( fileno( (x) ) ) +#endif + +//--------------------------------------------------------------------------------------------------- + +// Print usage to stderr +static +void Help(void) +{ + + fprintf(stderr, "usage: transicc [flags] [CGATS input] [CGATS output]\n\n"); + + fprintf(stderr, "flags:\n\n"); + fprintf(stderr, "%cv<0..3> - Verbosity level\n", SW); + + fprintf(stderr, "%ce[op] - Encoded representation of numbers\n", SW); + fprintf(stderr, "\t%cw - use 16 bits\n", SW); + fprintf(stderr, "\t%cx - Hexadecimal\n", SW); + fprintf(stderr, "%cq - Quantize CGATS to 8 bits\n\n", SW); + + + fprintf(stderr, "%ci - Input profile (defaults to sRGB)\n", SW); + fprintf(stderr, "%co - Output profile (defaults to sRGB)\n", SW); + fprintf(stderr, "%cl - Transform by device-link profile\n", SW); + + fprintf(stderr, "\nYou can use '*Lab', '*xyz' and others as built-in profiles\n\n"); + + PrintRenderingIntents(); + + fprintf(stderr, "\n"); + + fprintf(stderr, "%cd<0..1> - Observer adaptation state (abs.col. only)\n\n", SW); + + fprintf(stderr, "%cb - Black point compensation\n", SW); + + fprintf(stderr, "%cc<0,1,2,3> Precalculates transform (0=Off, 1=Normal, 2=Hi-res, 3=LoRes)\n\n", SW); + fprintf(stderr, "%cn - Terse output, intended for pipe usage\n", SW); + + fprintf(stderr, "%cp - Soft proof profile\n", SW); + fprintf(stderr, "%cm<0,1,2,3> - Soft proof intent\n", SW); + fprintf(stderr, "%cg - Marks out-of-gamut colors on softproof\n\n", SW); + + + + fprintf(stderr, "This program is intended to be a demo of the little cms\n" + "engine. Both lcms and this program are freeware. You can\n" + "obtain both in source code at http://www.littlecms.com\n" + "For suggestions, comments, bug reports etc. send mail to\n" + "info@littlecms.com\n\n"); +} + + + +// The toggles stuff + +static +void HandleSwitches(int argc, char *argv[]) +{ + int s; + + while ((s = xgetopt(argc, argv, + "bBC:c:d:D:eEgGI:i:L:l:m:M:nNO:o:p:P:QqT:t:V:v:WwxX!:")) != EOF) { + + switch (s){ + + case '!': + IncludePart = xoptarg; + break; + + case 'b': + case 'B': + BlackPointCompensation = TRUE; + break; + + case 'c': + case 'C': + PrecalcMode = atoi(xoptarg); + if (PrecalcMode < 0 || PrecalcMode > 3) + FatalError("Unknown precalc mode '%d'", PrecalcMode); + break; + + case 'd': + case 'D': { + cmsFloat64Number ObserverAdaptationState = atof(xoptarg); + if (ObserverAdaptationState < 0 && + ObserverAdaptationState > 1.0) + FatalError("Adaptation states should be between 0 and 1"); + + cmsSetAdaptationState(ObserverAdaptationState); + } + break; + + case 'e': + case 'E': + lIsFloat = FALSE; + break; + + case 'g': + case 'G': + GamutCheck = TRUE; + break; + + case 'i': + case 'I': + if (lIsDeviceLink) + FatalError("icctrans: Device-link already specified"); + + cInProf = xoptarg; + break; + + case 'l': + case 'L': + cInProf = xoptarg; + lIsDeviceLink = TRUE; + break; + + // No extra intents for proofing + case 'm': + case 'M': + ProofingIntent = atoi(xoptarg); + if (ProofingIntent > 3) + FatalError("Unknown Proofing Intent '%d'", ProofingIntent); + break; + + // For compatibility + case 'n': + case 'N': + Verbose = 0; + break; + + // Output profile + case 'o': + case 'O': + if (lIsDeviceLink) + FatalError("icctrans: Device-link already specified"); + cOutProf = xoptarg; + break; + + // Proofing profile + case 'p': + case 'P': + cProofing = xoptarg; + break; + + // Quantize to 16 bits + case 'q': + case 'Q': + lQuantize = TRUE; + break; + + // The intent + case 't': + case 'T': + Intent = atoi(xoptarg); + break; + + // Verbosity level + case 'V': + case 'v': + Verbose = atoi(xoptarg); + if (Verbose < 0 || Verbose > 3) { + FatalError("Unknown verbosity level '%d'", Verbose); + } + break; + + // Wide (16 bits) + case 'W': + case 'w': + Width16 = TRUE; + break; + + // Hexadecimal + case 'x': + case 'X': + InHexa = TRUE; + break; + + default: + FatalError("Unknown option - run without args to see valid ones.\n"); + } + } + + + // If output CGATS involved, switch to float + if ((argc - xoptind) > 2) { + lIsFloat = TRUE; + } +} + + + +static +void SetRange(cmsFloat64Number range, cmsBool IsInput) +{ + if (IsInput) + InputRange = range; + else + OutputRange = range; +} + +// Populate a named color list with usual component names. +// I am using the first Colorant channel to store the range, but it works since +// this space is not used anyway. +static +cmsNAMEDCOLORLIST* ComponentNames(cmsColorSpaceSignature space, cmsBool IsInput) +{ + cmsNAMEDCOLORLIST* out; + int i, n; + char Buffer[cmsMAX_PATH]; + + out = cmsAllocNamedColorList(0, 12, cmsMAXCHANNELS, "", ""); + if (out == NULL) return NULL; + + switch (space) { + + case cmsSigXYZData: + SetRange(100, IsInput); + cmsAppendNamedColor(out, "X", NULL, NULL); + cmsAppendNamedColor(out, "Y", NULL, NULL); + cmsAppendNamedColor(out, "Z", NULL, NULL); + break; + + case cmsSigLabData: + SetRange(1, IsInput); + cmsAppendNamedColor(out, "L*", NULL, NULL); + cmsAppendNamedColor(out, "a*", NULL, NULL); + cmsAppendNamedColor(out, "b*", NULL, NULL); + break; + + case cmsSigLuvData: + SetRange(1, IsInput); + cmsAppendNamedColor(out, "L", NULL, NULL); + cmsAppendNamedColor(out, "u", NULL, NULL); + cmsAppendNamedColor(out, "v", NULL, NULL); + break; + + case cmsSigYCbCrData: + SetRange(255, IsInput); + cmsAppendNamedColor(out, "Y", NULL, NULL ); + cmsAppendNamedColor(out, "Cb", NULL, NULL); + cmsAppendNamedColor(out, "Cr", NULL, NULL); + break; + + + case cmsSigYxyData: + SetRange(1, IsInput); + cmsAppendNamedColor(out, "Y", NULL, NULL); + cmsAppendNamedColor(out, "x", NULL, NULL); + cmsAppendNamedColor(out, "y", NULL, NULL); + break; + + case cmsSigRgbData: + SetRange(255, IsInput); + cmsAppendNamedColor(out, "R", NULL, NULL); + cmsAppendNamedColor(out, "G", NULL, NULL); + cmsAppendNamedColor(out, "B", NULL, NULL); + break; + + case cmsSigGrayData: + SetRange(255, IsInput); + cmsAppendNamedColor(out, "G", NULL, NULL); + break; + + case cmsSigHsvData: + SetRange(255, IsInput); + cmsAppendNamedColor(out, "H", NULL, NULL); + cmsAppendNamedColor(out, "s", NULL, NULL); + cmsAppendNamedColor(out, "v", NULL, NULL); + break; + + case cmsSigHlsData: + SetRange(255, IsInput); + cmsAppendNamedColor(out, "H", NULL, NULL); + cmsAppendNamedColor(out, "l", NULL, NULL); + cmsAppendNamedColor(out, "s", NULL, NULL); + break; + + case cmsSigCmykData: + SetRange(1, IsInput); + cmsAppendNamedColor(out, "C", NULL, NULL); + cmsAppendNamedColor(out, "M", NULL, NULL); + cmsAppendNamedColor(out, "Y", NULL, NULL); + cmsAppendNamedColor(out, "K", NULL, NULL); + break; + + case cmsSigCmyData: + SetRange(1, IsInput); + cmsAppendNamedColor(out, "C", NULL, NULL); + cmsAppendNamedColor(out, "M", NULL, NULL); + cmsAppendNamedColor(out, "Y", NULL, NULL); + break; + + default: + + SetRange(1, IsInput); + + n = cmsChannelsOf(space); + + for (i=0; i < n; i++) { + + sprintf(Buffer, "Channel #%d", i + 1); + cmsAppendNamedColor(out, Buffer, NULL, NULL); + } + } + + return out; + +} + + +// Creates all needed color transforms +static +cmsBool OpenTransforms(void) +{ + cmsHPROFILE hInput, hOutput, hProof; + cmsUInt32Number dwIn, dwOut, dwFlags; + cmsNAMEDCOLORLIST* List; + int i; + + // We don't need cache + dwFlags = cmsFLAGS_NOCACHE; + + if (lIsDeviceLink) { + + hInput = OpenStockProfile(0, cInProf); + if (hInput == NULL) return FALSE; + hOutput = NULL; + hProof = NULL; + + if (cmsGetDeviceClass(hInput) == cmsSigNamedColorClass) { + OutputColorSpace = cmsGetColorSpace(hInput); + InputColorSpace = cmsGetPCS(hInput); + } + else { + InputColorSpace = cmsGetColorSpace(hInput); + OutputColorSpace = cmsGetPCS(hInput); + } + + // Read colorant tables if present + if (cmsIsTag(hInput, cmsSigColorantTableTag)) { + List = cmsReadTag(hInput, cmsSigColorantTableTag); + InputColorant = cmsDupNamedColorList(List); + InputRange = 1; + } + else InputColorant = ComponentNames(InputColorSpace, TRUE); + + if (cmsIsTag(hInput, cmsSigColorantTableOutTag)){ + + List = cmsReadTag(hInput, cmsSigColorantTableOutTag); + OutputColorant = cmsDupNamedColorList(List); + OutputRange = 1; + } + else OutputColorant = ComponentNames(OutputColorSpace, FALSE); + + } + else { + + hInput = OpenStockProfile(0, cInProf); + if (hInput == NULL) return FALSE; + + hOutput = OpenStockProfile(0, cOutProf); + if (hOutput == NULL) return FALSE; + hProof = NULL; + + + if (cmsGetDeviceClass(hInput) == cmsSigLinkClass || + cmsGetDeviceClass(hOutput) == cmsSigLinkClass) + FatalError("Use %cl flag for devicelink profiles!\n", SW); + + + InputColorSpace = cmsGetColorSpace(hInput); + OutputColorSpace = cmsGetColorSpace(hOutput); + + // Read colorant tables if present + if (cmsIsTag(hInput, cmsSigColorantTableTag)) { + List = cmsReadTag(hInput, cmsSigColorantTableTag); + InputColorant = cmsDupNamedColorList(List); + if (cmsNamedColorCount(InputColorant) <= 3) + SetRange(255, TRUE); + else + SetRange(1, TRUE); // Inks are already divided by 100 in the formatter + + } + else InputColorant = ComponentNames(InputColorSpace, TRUE); + + if (cmsIsTag(hOutput, cmsSigColorantTableTag)){ + + List = cmsReadTag(hInput, cmsSigColorantTableTag); + OutputColorant = cmsDupNamedColorList(List); + } + else OutputColorant = ComponentNames(OutputColorSpace, FALSE); + + + if (cProofing != NULL) { + + hProof = OpenStockProfile(0, cProofing); + if (hProof == NULL) return FALSE; + dwFlags |= cmsFLAGS_SOFTPROOFING; + } + } + + // Print information on profiles + if (Verbose > 2) { + + printf("Profile:\n"); + PrintProfileInformation(hInput); + + if (hOutput) { + + printf("Output profile:\n"); + PrintProfileInformation(hOutput); + } + + if (hProof != NULL) { + printf("Proofing profile:\n"); + PrintProfileInformation(hProof); + } + } + + + // Input is always in floating point + dwIn = cmsFormatterForColorspaceOfProfile(hInput, 0, TRUE); + + if (lIsDeviceLink) { + + dwOut = cmsFormatterForPCSOfProfile(hInput, lIsFloat ? 0 : 2, lIsFloat); + } + else { + + // 16 bits or floating point (only on output) + dwOut = cmsFormatterForColorspaceOfProfile(hOutput, lIsFloat ? 0 : 2, lIsFloat); + } + + // For named color, there is a specialized formatter + if (cmsGetDeviceClass(hInput) == cmsSigNamedColorClass) { + dwOut = dwIn; + dwIn = TYPE_NAMED_COLOR_INDEX; + InputNamedColor = TRUE; + } + + // Precision mode + switch (PrecalcMode) { + + case 0: dwFlags |= cmsFLAGS_NOOPTIMIZE; break; + case 2: dwFlags |= cmsFLAGS_HIGHRESPRECALC; break; + case 3: dwFlags |= cmsFLAGS_LOWRESPRECALC; break; + case 1: break; + + default: + FatalError("Unknown precalculation mode '%d'", PrecalcMode); + } + + + if (BlackPointCompensation) + dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; + + + if (GamutCheck) { + + cmsUInt16Number Alarm[cmsMAXCHANNELS]; + + if (hProof == NULL) + FatalError("I need proofing profile -p for gamut checking!"); + + for (i=0; i < cmsMAXCHANNELS; i++) + Alarm[i] = 0xFFFF; + + cmsSetAlarmCodes(Alarm); + dwFlags |= cmsFLAGS_GAMUTCHECK; + } + + + // The main transform + hTrans = cmsCreateProofingTransform(hInput, dwIn, hOutput, dwOut, hProof, Intent, ProofingIntent, dwFlags); + + if (hProof) cmsCloseProfile(hProof); + + if (hTrans == NULL) return FALSE; + + + // PCS Dump if requested + hTransXYZ = NULL; hTransLab = NULL; + + if (hOutput && Verbose > 1) { + + cmsHPROFILE hXYZ = cmsCreateXYZProfile(); + cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); + + hTransXYZ = cmsCreateTransform(hInput, dwIn, hXYZ, lIsFloat ? TYPE_XYZ_DBL : TYPE_XYZ_16, Intent, cmsFLAGS_NOCACHE); + if (hTransXYZ == NULL) return FALSE; + + hTransLab = cmsCreateTransform(hInput, dwIn, hLab, lIsFloat? TYPE_Lab_DBL : TYPE_Lab_16, Intent, cmsFLAGS_NOCACHE); + if (hTransLab == NULL) return FALSE; + + cmsCloseProfile(hXYZ); + cmsCloseProfile(hLab); + } + + if (hInput) cmsCloseProfile(hInput); + if (hOutput) cmsCloseProfile(hOutput); + + return TRUE; +} + + +// Free open resources +static +void CloseTransforms(void) +{ + if (InputColorant) cmsFreeNamedColorList(InputColorant); + if (OutputColorant) cmsFreeNamedColorList(OutputColorant); + + if (hTrans) cmsDeleteTransform(hTrans); + if (hTransLab) cmsDeleteTransform(hTransLab); + if (hTransXYZ) cmsDeleteTransform(hTransXYZ); + +} + +// --------------------------------------------------------------------------------------------------- + +// Get input from user +static +void GetLine(char* Buffer, const char* frm, ...) +{ + int res; + va_list args; + + va_start(args, frm); + + do { + if (xisatty(stdin)) + vfprintf(stderr, frm, args); + + res = scanf("%4095s", Buffer); + + if (res < 0 || toupper(Buffer[0]) == 'Q') { // Quit? + + CloseTransforms(); + + if (xisatty(stdin)) + fprintf(stderr, "Done.\n"); + + exit(0); + } + } while (res == 0); + + va_end(args); +} + + +// Print a value which is given in double floating point +static +void PrintFloatResults(cmsFloat64Number Value[]) +{ + cmsUInt32Number i, n; + char ChannelName[cmsMAX_PATH]; + cmsFloat64Number v; + + n = cmsChannelsOf(OutputColorSpace); + for (i=0; i < n; i++) { + + if (OutputColorant != NULL) { + + cmsNamedColorInfo(OutputColorant, i, ChannelName, NULL, NULL, NULL, NULL); + } + else { + OutputRange = 1; + sprintf(ChannelName, "Channel #%d", i + 1); + } + + v = (cmsFloat64Number) Value[i]* OutputRange; + + if (lQuantize) + v = floor(v + 0.5); + + if (Verbose <= 0) + printf("%.4f ", v); + else + printf("%s=%.4f ", ChannelName, v); + } + + printf("\n"); +} + + +// Get a named-color index +static +cmsUInt16Number GetIndex(void) +{ + char Buffer[4096], Name[40], Prefix[40], Suffix[40]; + int index, max; + const cmsNAMEDCOLORLIST* NamedColorList; + + NamedColorList = cmsGetNamedColorList(hTrans); + if (NamedColorList == NULL) return 0; + + max = cmsNamedColorCount(NamedColorList)-1; + + GetLine(Buffer, "Color index (0..%d)? ", max); + index = atoi(Buffer); + + if (index > max) + FatalError("Named color %d out of range!", index); + + cmsNamedColorInfo(NamedColorList, index, Name, Prefix, Suffix, NULL, NULL); + + printf("\n%s %s %s\n", Prefix, Name, Suffix); + + return (cmsUInt16Number) index; +} + +// Read values from a text file or terminal +static +void TakeFloatValues(cmsFloat64Number Float[]) +{ + cmsUInt32Number i, n; + char ChannelName[cmsMAX_PATH]; + char Buffer[cmsMAX_PATH]; + + if (xisatty(stdin)) + fprintf(stderr, "\nEnter values, 'q' to quit\n"); + + if (InputNamedColor) { + + // This is named color index, which is always cmsUInt16Number + cmsUInt16Number index = GetIndex(); + memcpy(Float, &index, sizeof(cmsUInt16Number)); + return; + } + + n = cmsChannelsOf(InputColorSpace); + for (i=0; i < n; i++) { + + if (InputColorant) { + cmsNamedColorInfo(InputColorant, i, ChannelName, NULL, NULL, NULL, NULL); + } + else { + InputRange = 1; + sprintf(ChannelName, "Channel #%d", i+1); + } + + GetLine(Buffer, "%s? ", ChannelName); + + Float[i] = (cmsFloat64Number) atof(Buffer) / InputRange; + } + + if (xisatty(stdin)) + fprintf(stderr, "\n"); +} + +static +void PrintPCSFloat(cmsFloat64Number Input[]) +{ + if (Verbose > 1 && hTransXYZ && hTransLab) { + + cmsCIEXYZ XYZ = { 0, 0, 0 }; + cmsCIELab Lab = { 0, 0, 0 }; + + if (hTransXYZ) cmsDoTransform(hTransXYZ, Input, &XYZ, 1); + if (hTransLab) cmsDoTransform(hTransLab, Input, &Lab, 1); + + printf("[PCS] Lab=(%.4f,%.4f,%.4f) XYZ=(%.4f,%.4f,%.4f)\n", Lab.L, Lab.a, Lab.b, + XYZ.X * 100.0, XYZ.Y * 100.0, XYZ.Z * 100.0); + + } +} + + + + +// ----------------------------------------------------------------------------------------------- + +static +void PrintEncodedResults(cmsUInt16Number Encoded[]) +{ + cmsUInt32Number i, n; + char ChannelName[cmsMAX_PATH]; + cmsUInt32Number v; + + n = cmsChannelsOf(OutputColorSpace); + for (i=0; i < n; i++) { + + if (OutputColorant != NULL) { + + cmsNamedColorInfo(OutputColorant, i, ChannelName, NULL, NULL, NULL, NULL); + } + else { + sprintf(ChannelName, "Channel #%d", i + 1); + } + + if (Verbose > 0) + printf("%s=", ChannelName); + + v = Encoded[i]; + + if (InHexa) { + + if (Width16) + printf("0x%04X ", (int) floor(v + .5)); + else + printf("0x%02X ", (int) floor(v / 257. + .5)); + + } else { + + if (Width16) + printf("%d ", (int) floor(v + .5)); + else + printf("%d ", (int) floor(v / 257. + .5)); + } + + } + + printf("\n"); +} + +// Print XYZ/Lab values on verbose mode + +static +void PrintPCSEncoded(cmsFloat64Number Input[]) +{ + if (Verbose > 1 && hTransXYZ && hTransLab) { + + cmsUInt16Number XYZ[3], Lab[3]; + + if (hTransXYZ) cmsDoTransform(hTransXYZ, Input, XYZ, 1); + if (hTransLab) cmsDoTransform(hTransLab, Input, Lab, 1); + + printf("[PCS] Lab=(0x%04X,0x%04X,0x%04X) XYZ=(0x%04X,0x%04X,0x%04X)\n", Lab[0], Lab[1], Lab[2], + XYZ[0], XYZ[1], XYZ[2]); + + } +} + + +// -------------------------------------------------------------------------------------- + + + +// Take a value from IT8 and scale it accordly to fill a cmsUInt16Number (0..FFFF) + +static +cmsFloat64Number GetIT8Val(const char* Name, cmsFloat64Number Max) +{ + const char* Val = cmsIT8GetData(hIT8in, CGATSPatch, Name); + + if (Val == NULL) + FatalError("Field '%s' not found", Name); + + return atof(Val) / Max; + +} + + +// Read input values from CGATS file. + +static +void TakeCGATSValues(int nPatch, cmsFloat64Number Float[]) +{ + + // At first take the name if SAMPLE_ID is present + if (cmsIT8GetPatchName(hIT8in, nPatch, CGATSPatch) == NULL) { + FatalError("Sorry, I need 'SAMPLE_ID' on input CGATS to operate."); + } + + + // Special handling for named color profiles. + // Lookup the name in the names database (the transform) + + if (InputNamedColor) { + + const cmsNAMEDCOLORLIST* NamedColorList; + int index; + + NamedColorList = cmsGetNamedColorList(hTrans); + if (NamedColorList == NULL) + FatalError("Malformed named color profile"); + + index = cmsNamedColorIndex(NamedColorList, CGATSPatch); + if (index < 0) + FatalError("Named color '%s' not found in the profile", CGATSPatch); + + Float[0] = index; + return; + } + + // Color is not a spot color, proceed. + + switch (InputColorSpace) { + + // Encoding should follow CGATS specification. + + case cmsSigXYZData: + Float[0] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "XYZ_X") / 100.0; + Float[1] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "XYZ_Y") / 100.0; + Float[2] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "XYZ_Z") / 100.0; + break; + + case cmsSigLabData: + Float[0] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "LAB_L"); + Float[1] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "LAB_A"); + Float[2] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "LAB_B"); + break; + + + case cmsSigRgbData: + Float[0] = GetIT8Val("RGB_R", 255.0); + Float[1] = GetIT8Val("RGB_G", 255.0); + Float[2] = GetIT8Val("RGB_B", 255.0); + break; + + case cmsSigGrayData: + Float[0] = GetIT8Val("GRAY", 255.0); + break; + + case cmsSigCmykData: + Float[0] = GetIT8Val("CMYK_C", 1.0); + Float[1] = GetIT8Val("CMYK_M", 1.0); + Float[2] = GetIT8Val("CMYK_Y", 1.0); + Float[3] = GetIT8Val("CMYK_K", 1.0); + break; + + case cmsSigCmyData: + Float[0] = GetIT8Val("CMY_C", 1.0); + Float[1] = GetIT8Val("CMY_M", 1.0); + Float[2] = GetIT8Val("CMY_Y", 1.0); + break; + + default: + { + cmsUInt32Number i, n; + + n = cmsChannelsOf(InputColorSpace); + for (i=0; i < n; i++) { + + char Buffer[255]; + + sprintf(Buffer, "CHAN_%d", i+1); + Float[i] = GetIT8Val(Buffer, 1.0); + } + + } + } + +} + +static +void SetCGATSfld(const char* Col, cmsFloat64Number Val) +{ + if (lQuantize) + Val = floor(Val + 0.5); + + if (!cmsIT8SetDataDbl(hIT8out, CGATSPatch, Col, Val)) { + FatalError("couldn't set '%s' on output cgats '%s'", Col, CGATSoutFilename); + } +} + + + +static +void PutCGATSValues(cmsFloat64Number Float[]) +{ + cmsIT8SetData(hIT8out, CGATSPatch, "SAMPLE_ID", CGATSPatch); + switch (OutputColorSpace) { + + + // Encoding should follow CGATS specification. + + case cmsSigXYZData: + + SetCGATSfld("XYZ_X", Float[0] * 100.0); + SetCGATSfld("XYZ_Y", Float[1] * 100.0); + SetCGATSfld("XYZ_Z", Float[2] * 100.0); + break; + + case cmsSigLabData: + + SetCGATSfld("LAB_L", Float[0]); + SetCGATSfld("LAB_A", Float[1]); + SetCGATSfld("LAB_B", Float[2]); + break; + + + case cmsSigRgbData: + SetCGATSfld("RGB_R", Float[0] * 255.0); + SetCGATSfld("RGB_G", Float[1] * 255.0); + SetCGATSfld("RGB_B", Float[2] * 255.0); + break; + + case cmsSigGrayData: + SetCGATSfld("GRAY", Float[0] * 255.0); + break; + + case cmsSigCmykData: + SetCGATSfld("CMYK_C", Float[0]); + SetCGATSfld("CMYK_M", Float[1]); + SetCGATSfld("CMYK_Y", Float[2]); + SetCGATSfld("CMYK_K", Float[3]); + break; + + case cmsSigCmyData: + SetCGATSfld("CMY_C", Float[0]); + SetCGATSfld("CMY_M", Float[1]); + SetCGATSfld("CMY_Y", Float[2]); + break; + + default: + { + + cmsUInt32Number i, n; + + n = cmsChannelsOf(InputColorSpace); + for (i=0; i < n; i++) { + + char Buffer[255]; + + sprintf(Buffer, "CHAN_%d", i+1); + + SetCGATSfld(Buffer, Float[i]); + } + } + } +} + + + +// Create data format +static +void SetOutputDataFormat(void) +{ + cmsIT8DefineDblFormat(hIT8out, "%.4g"); + cmsIT8SetPropertyStr(hIT8out, "ORIGINATOR", "icctrans"); + + if (IncludePart != NULL) + cmsIT8SetPropertyStr(hIT8out, ".INCLUDE", IncludePart); + + cmsIT8SetComment(hIT8out, "Data follows"); + cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_SETS", nMaxPatches); + + + switch (OutputColorSpace) { + + + // Encoding should follow CGATS specification. + + case cmsSigXYZData: + cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 4); + cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); + cmsIT8SetDataFormat(hIT8out, 1, "XYZ_X"); + cmsIT8SetDataFormat(hIT8out, 2, "XYZ_Y"); + cmsIT8SetDataFormat(hIT8out, 3, "XYZ_Z"); + break; + + case cmsSigLabData: + cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 4); + cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); + cmsIT8SetDataFormat(hIT8out, 1, "LAB_L"); + cmsIT8SetDataFormat(hIT8out, 2, "LAB_A"); + cmsIT8SetDataFormat(hIT8out, 3, "LAB_B"); + break; + + + case cmsSigRgbData: + cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 4); + cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); + cmsIT8SetDataFormat(hIT8out, 1, "RGB_R"); + cmsIT8SetDataFormat(hIT8out, 2, "RGB_G"); + cmsIT8SetDataFormat(hIT8out, 3, "RGB_B"); + break; + + case cmsSigGrayData: + cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 2); + cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); + cmsIT8SetDataFormat(hIT8out, 1, "GRAY"); + break; + + case cmsSigCmykData: + cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 5); + cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); + cmsIT8SetDataFormat(hIT8out, 1, "CMYK_C"); + cmsIT8SetDataFormat(hIT8out, 2, "CMYK_M"); + cmsIT8SetDataFormat(hIT8out, 3, "CMYK_Y"); + cmsIT8SetDataFormat(hIT8out, 4, "CMYK_K"); + break; + + case cmsSigCmyData: + cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 4); + cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); + cmsIT8SetDataFormat(hIT8out, 1, "CMY_C"); + cmsIT8SetDataFormat(hIT8out, 2, "CMY_M"); + cmsIT8SetDataFormat(hIT8out, 3, "CMY_Y"); + break; + + default: { + + int i, n; + char Buffer[255]; + + n = cmsChannelsOf(OutputColorSpace); + cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", n+1); + cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); + + for (i=1; i <= n; i++) { + sprintf(Buffer, "CHAN_%d", i); + cmsIT8SetDataFormat(hIT8out, i, Buffer); + } + } + } +} + +// Open CGATS if specified + +static +void OpenCGATSFiles(int argc, char *argv[]) +{ + int nParams = argc - xoptind; + + if (nParams >= 1) { + + hIT8in = cmsIT8LoadFromFile(0, argv[xoptind]); + + if (hIT8in == NULL) + FatalError("'%s' is not recognized as a CGATS file", argv[xoptind]); + + nMaxPatches = (int) cmsIT8GetPropertyDbl(hIT8in, "NUMBER_OF_SETS"); + } + + if (nParams == 2) { + + hIT8out = cmsIT8Alloc(NULL); + SetOutputDataFormat(); + strncpy(CGATSoutFilename, argv[xoptind+1], cmsMAX_PATH-1); + } + + if (nParams > 2) FatalError("Too many CGATS files"); +} + + + +// The main sink +int main(int argc, char *argv[]) +{ + cmsUInt16Number Output[cmsMAXCHANNELS]; + cmsFloat64Number OutputFloat[cmsMAXCHANNELS]; + cmsFloat64Number InputFloat[cmsMAXCHANNELS]; + + int nPatch = 0; + + fprintf(stderr, "LittleCMS ColorSpace conversion calculator - 4.1 [LittleCMS %2.2f]\n", LCMS_VERSION / 1000.0); + + InitUtils("transicc"); + + Verbose = 1; + + if (argc == 1) { + + Help(); + return 0; + } + + HandleSwitches(argc, argv); + + // Open profiles, create transforms + if (!OpenTransforms()) return 1; + + // Open CGATS input if specified + OpenCGATSFiles(argc, argv); + + // Main loop: read all values and convert them + for(;;) { + + if (hIT8in != NULL) { + + if (nPatch >= nMaxPatches) break; + TakeCGATSValues(nPatch++, InputFloat); + + } else { + + if (feof(stdin)) break; + TakeFloatValues(InputFloat); + + } + + if (lIsFloat) + cmsDoTransform(hTrans, InputFloat, OutputFloat, 1); + else + cmsDoTransform(hTrans, InputFloat, Output, 1); + + + if (hIT8out != NULL) { + + PutCGATSValues(OutputFloat); + } + else { + + if (lIsFloat) { + PrintFloatResults(OutputFloat); PrintPCSFloat(InputFloat); + } + else { + PrintEncodedResults(Output); PrintPCSEncoded(InputFloat); + } + + } + } + + + // Cleanup + CloseTransforms(); + + if (hIT8in) + cmsIT8Free(hIT8in); + + if (hIT8out) { + cmsIT8SaveToFile(hIT8out, CGATSoutFilename); + cmsIT8Free(hIT8out); + } + + // All is ok + return 0; +} + + -- 2.7.4

  2. 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

    A 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