rpms/argyllcms/F-8 argyllcms-0.70-19-color.fdi, NONE, 1.1 argyllcms-0.70-build.patch, NONE, 1.1 argyllcms-0.70-color-device-file.policy, NONE, 1.1 argyllcms-0.70-printf.patch, NONE, 1.1 argyllcms.spec, NONE, 1.1 .cvsignore, 1.1, 1.2 sources, 1.1, 1.2

Nicolas Mailhot (nim) fedora-extras-commits at redhat.com
Fri Feb 8 18:58:09 UTC 2008


Author: nim

Update of /cvs/extras/rpms/argyllcms/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv9957/F-8

Modified Files:
	.cvsignore sources 
Added Files:
	argyllcms-0.70-19-color.fdi argyllcms-0.70-build.patch 
	argyllcms-0.70-color-device-file.policy 
	argyllcms-0.70-printf.patch argyllcms.spec 
Log Message:
initial import


--- NEW FILE argyllcms-0.70-19-color.fdi ---
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
  <!-- Color meter devices known to Argyll CMS
       FDI creation: Nicolas Mailhot <nicolas.mailhot at laposte.net>
       with input from David Zeuthen and Frédéric Crozat -->
  <device>
    <!-- HCFR association -->
    <match key="usb_device.vendor_id" int="0x04DB">
      <!-- Display colorimeter -->
      <match key="usb_device.product_id" int="0x005B">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
    </match>
    <!-- MonacoOPTIX -->
    <match key="usb_device.vendor_id" int="0x0670">
      <!-- Eye-One Display 1 - display colorimeter -->
      <match key="usb_device.product_id" int="0x0001">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
    </match>
    <!-- X-Rite -->
    <match key="usb_device.vendor_id" int="0x0765">
      <!-- DTP20 "Pulse" - "swipe" type reflective spectrometer, that can be used un-tethered. -->
      <match key="usb_device.product_id" int="0xd020">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
      <!-- DTP92Q - CRT display colorimeter. (Not tested) -->
      <match key="usb_device.product_id" int="0xd092">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
      <!-- DTP94 "Optix XR" or "Optix XR2" - display colorimeter -->
      <match key="usb_device.product_id" int="0xd094">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
    </match>
    <!-- ColorVision -->
    <match key="usb_device.vendor_id" int="0x085C">
      <!-- Spyder 2 - display colorimeter -->
      <match key="usb_device.product_id" int="0x0200">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
    </match>
    <!-- Gretag-Macbeth -->
    <match key="usb_device.vendor_id" int="0x0971">
      <!-- Eye-One Pro - spot and "swipe" reflective/emissive spectrometer -->
      <match key="usb_device.product_id" int="0x2000">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
      <!-- Eye-One Display - display colorimeter -->
      <match key="usb_device.product_id" int="0x2003">
        <append key="info.capabilities" type="strlist">access_control</append>
        <merge key="access_control.type" type="string">color</merge>
        <merge key="access_control.file" type="copy_property">linux.device_file</merge>
      </match>
    </match>
    <!-- Huey - display colorimeter
     The Huey falsely declares itself as HID device -->
    <match key="@info.parent:usb_device.vendor_id" int="0x0971">
      <match key="info.capabilities" contains="usbraw">
        <match key="@info.parent:usb_device.product_id" int="0x2005">
          <append key="info.capabilities" type="strlist">access_control</append>
          <merge key="access_control.type" type="string">color</merge>
          <merge key="access_control.file" type="copy_property">linux.device_file</merge>
        </match>
      </match>
    </match>
  </device>
</deviceinfo>

argyllcms-0.70-build.patch:

--- NEW FILE argyllcms-0.70-build.patch ---
diff -uNr argyllcms-0.70.orig/cgats/Jamfile argyllcms-0.70/cgats/Jamfile
--- argyllcms-0.70.orig/cgats/Jamfile	2008-01-16 02:47:37.000000000 +0100
+++ argyllcms-0.70/cgats/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -3,7 +3,7 @@
 
 CCFLAGS 	+= $(CCOPTFLAG) ;		# Turn optimisation on
 #CCFLAGS	+= $(CCDEBUGFLAG) ;		# Debugging flags
-LINKFLAGS	+= $(LINKDEBUGFLAG) ;
+LINKFLAGS	+= -lm $(LINKDEBUGFLAG) ;
 
 #if stdio is not wanted in icclib:
 #CCFLAGS	+= $(DEFFLAG)SEPARATE_STD ;
diff -uNr argyllcms-0.70.orig/gamut/Jamfile argyllcms-0.70/gamut/Jamfile
--- argyllcms-0.70.orig/gamut/Jamfile	2008-01-16 02:47:39.000000000 +0100
+++ argyllcms-0.70/gamut/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -6,7 +6,7 @@
 CCFLAGS 	+= $(CCOPTFLAG) ;		# Turn optimisation on
 #CCFLAGS	+= $(CCDEBUGFLAG) ;		# Debugging flags
 #CCFLAGS		+= $(CCHEAPDEBUG) ;		# Heap Debugging flags
-LINKFLAGS	+= $(LINKDEBUGFLAG) ;      # Link with debug info
+LINKFLAGS	+= -lm $(LINKDEBUGFLAG) ;      # Link with debug info
 #CCFLAGS 	+= $(CCPROFFLAG) ;		# Profile flags
 #LINKFLAGS	+= $(LINKPROFFLAG) ;    # Profile flags
 
diff -uNr argyllcms-0.70.orig/imdi/Jamfile argyllcms-0.70/imdi/Jamfile
--- argyllcms-0.70.orig/imdi/Jamfile	2008-01-16 02:47:45.000000000 +0100
+++ argyllcms-0.70/imdi/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -5,14 +5,16 @@
 CCFLAGS 	+= $(CCOPTFLAG) ;		# Turn optimisation on
 #CCFLAGS	    += $(CCDEBUGFLAG) ;		# Debugging flags
 #CCFLAGS 	+= $(CCPROFFLAG) ;		# Profile flags
-LINKFLAGS	+= $(LINKDEBUGFLAG) ;	# Link debugging flags
+LINKFLAGS	+= -lm $(LINKDEBUGFLAG) ;	# Link debugging flags
 #LINKFLAGS	+= $(LINKPROFFLAG) ;    # Profile flags
 #CCFLAGS	+= $(CCHEAPDEBUG) ;		# Heap Debugging flags
 
 if $(HAVE_TIFF) {	# Alternate TIFF library
 	TIFFLIB = ;
 	TIFFINC = ;
-	LINKLIBS on cctiff$(SUFEXE) = -ltiff $(LINKLIBS) ;
+	LINKLIBS on cctiff$(SUFEXE)
+	            cctiffo$(SUFEXE)
+	            greytiff$(SUFEXE)	= -ltiff $(LINKLIBS) ;
 } else {
 	TIFFLIB = ../tiff/libtiff.lib ;
 	TIFFINC = ../tiff ;
diff -uNr argyllcms-0.70.orig/Jambase argyllcms-0.70/Jambase
--- argyllcms-0.70.orig/Jambase	2008-01-16 02:47:16.000000000 +0100
+++ argyllcms-0.70/Jambase	2008-02-07 20:51:37.000000000 +0100
@@ -259,7 +259,7 @@
 	FILEMODE		default = 644 ;
 	FORTRAN			default = f77 ;
 	FORTRANFLAGS	default = ;
-#   HAVE_TIFF		default = 1 ;
+	HAVE_TIFF		default = 1 ;
 	HDRS			default = ;
 	INSTALL			default = install -c ;
 	LEX				default = lex ;
diff -uNr argyllcms-0.70.orig/link/Jamfile argyllcms-0.70/link/Jamfile
--- argyllcms-0.70.orig/link/Jamfile	2008-01-16 02:47:49.000000000 +0100
+++ argyllcms-0.70/link/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -10,9 +10,9 @@
 LINKFLAGS	+= $(LINKDEBUGFLAG) ;	# Link debugging flags
 
 if $(UNIX) && $(OS) != MACOSX {
-	WinDir = /usr/X11R6 ;
+	WinDir = /usr ;
 	LibWinH = $(WinDir)/include/X11 ;
-	LibWinD = $(WinDir)/lib ;
+	LibWinD = ;
 	LibWin = ;
 	LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
 }
diff -uNr argyllcms-0.70.orig/numlib/Jamfile argyllcms-0.70/numlib/Jamfile
--- argyllcms-0.70.orig/numlib/Jamfile	2008-01-16 02:47:17.000000000 +0100
+++ argyllcms-0.70/numlib/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -3,7 +3,7 @@
 
 CCFLAGS 	+= $(CCOPTFLAG) ;		# Turn optimisation on
 #CCFLAGS	+= $(CCDEBUGFLAG) ;		# Debugging flags
-LINKFLAGS	+= $(LINKDEBUGFLAG) ;
+LINKFLAGS	+= -lm $(LINKDEBUGFLAG) ;
 #CCFLAGS 	+= $(CCPROFFLAG) ;		# Profile flags
 #LINKFLAGS	+= $(LINKPROFFLAG) ;    # Profile flags
 
diff -uNr argyllcms-0.70.orig/numlib/numsup.c argyllcms-0.70/numlib/numsup.c
--- argyllcms-0.70.orig/numlib/numsup.c	2008-01-16 02:47:17.000000000 +0100
+++ argyllcms-0.70/numlib/numsup.c	2008-02-07 20:51:37.000000000 +0100
@@ -5,6 +5,7 @@
 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
+#include <limits.h>
 #if defined (NT)
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
diff -uNr argyllcms-0.70.orig/plot/Jamfile argyllcms-0.70/plot/Jamfile
--- argyllcms-0.70.orig/plot/Jamfile	2008-01-16 02:47:35.000000000 +0100
+++ argyllcms-0.70/plot/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -6,11 +6,11 @@
 LINKFLAGS	+= $(LINKDEBUGFLAG) ;
 
 if $(UNIX) && $(OS) != MACOSX {
-	WinDir = /usr/X11R6 ;
+	WinDir = /usr ;
 	LibWinH = $(WinDir)/include ;
-	LibWinD = $(WinDir)/lib ;
+	LibWinD = ;
 	LibWin = ;
-	LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
+	LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp -lm ;
 }
 
 # PLOT library
diff -uNr argyllcms-0.70.orig/profile/Jamfile argyllcms-0.70/profile/Jamfile
--- argyllcms-0.70.orig/profile/Jamfile	2008-01-16 02:47:48.000000000 +0100
+++ argyllcms-0.70/profile/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -11,9 +11,9 @@
 	LINKFLAGS += -framework IOKit ;
 	LINKFLAGS += -framework CoreFoundation ;
   } else {
-	WinDir = /usr/X11R6 ;
+	WinDir = /usr ;
 	LibWinH = $(WinDir)/include/X11 ;
-	LibWinD = $(WinDir)/lib ;
+	LibWinD = ;
 	LibWin = ;
 	LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
   }
diff -uNr argyllcms-0.70.orig/render/Jamfile argyllcms-0.70/render/Jamfile
--- argyllcms-0.70.orig/render/Jamfile	2008-01-16 02:47:50.000000000 +0100
+++ argyllcms-0.70/render/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -10,6 +10,16 @@
 #CCFLAGS 	+= $(CCPROFFLAG) ;		# Profile flags
 #LINKFLAGS	+= $(LINKPROFFLAG) ;    # Profile flags
 
+if $(HAVE_TIFF) {	# Alternate TIFF library
+	TIFFLIB = ;
+	TIFFINC = ;
+	LINKLIBS on timage$(SUFEXE) = $(LINKLIBS) -ltiff ;
+
+} else {
+	TIFFLIB = ../tiff/libtiff.lib ;
+	TIFFINC = ../tiff ;
+}
+
 #Products
 Libraries = librender ;
 Executables = timage ;
@@ -22,11 +32,11 @@
 
 # 2D Rendering library
 Library librender.lib : render.c ;
-ObjectHdrs render$(SUFOBJ) : ../h ../numlib ../tiff ;
+ObjectHdrs render$(SUFOBJ) : ../h ../numlib $(TIFFINC) ;
 
 Main timage : timage.c ;
-ObjectHdrs timage$(SUFOBJ) : ../h ../numlib ../tiff ;
-LinkLibraries timage : librender.lib ../numlib/libnum.lib ../tiff/libtiff.lib ;
+ObjectHdrs timage$(SUFOBJ) : ../h ../numlib $(TIFFINC) ;
+LinkLibraries timage : librender.lib ../numlib/libnum.lib $(TIFFLIB) ;
 
 if $(BUILD_JUNK) {
 
diff -uNr argyllcms-0.70.orig/rspl/Jamfile argyllcms-0.70/rspl/Jamfile
--- argyllcms-0.70.orig/rspl/Jamfile	2008-01-16 02:47:38.000000000 +0100
+++ argyllcms-0.70/rspl/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -16,9 +16,9 @@
 	LINKFLAGS += -framework IOKit ;
 	LINKFLAGS += -framework CoreFoundation ;
   } else {
-	WinDir = /usr/X11R6 ;
+	WinDir = /usr ;
 	LibWinH = $(WinDir)/include/X11 ;
-	LibWinD = $(WinDir)/lib ;
+	LibWinD = ;
 	LibWin = ;
 	LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
   }
@@ -28,12 +28,13 @@
 
 if $(HAVE_TIFF) {	# Alternate TIFF library
 	TIFFLIB = ;
-	TIFFINC = ;
+	TIFFINC = /usr/include ;
 	LINKLIBS on c1$(SUFEXE)
 				c1df$(SUFEXE)
 				c1i$(SUFEXE)
 				t2d$(SUFEXE)
 				t2dfw$(SUFEXE)
+				t2ddf$(SUFEXE)
 				t3d$(SUFEXE)
 				t3ddf$(SUFEXE)
 				tnd$(SUFEXE)
diff -uNr argyllcms-0.70.orig/spectro/Jamfile argyllcms-0.70/spectro/Jamfile
--- argyllcms-0.70.orig/spectro/Jamfile	2008-01-16 02:47:42.000000000 +0100
+++ argyllcms-0.70/spectro/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -17,7 +17,7 @@
 
 if $(UNIX) {
 	IOFILE = unixio.c pollem.c ;
-	LIBUSB = ../libusb ;
+#	LIBUSB = ../libusb ;
 }
 
 if $(UNIX) {
@@ -25,11 +25,11 @@
 	LINKFLAGS += -framework IOKit ;
 	LINKFLAGS += -framework CoreFoundation ;
   } else {
-	WinDir = /usr/X11R6 ;
+	WinDir = /usr ;
 	LibWinH = $(WinDir)/include ;
-	LibWinD = $(WinDir)/lib ;
+	LibWinD =  ;
 	LibWin = ;
-	LINKFLAGS += -L$(LibWinD) -lX11 -lXext -lXxf86vm -lXinerama -lXau -lXdmcp -lXss -ldl ;
+	LINKFLAGS += -L$(LibWinD) -lX11 -lXext -lXxf86vm -lXinerama -lXau -lXdmcp -lXss -ldl -lm -lusb ;
   }
 }
 
diff -uNr argyllcms-0.70.orig/spectro/Jamfile.orig argyllcms-0.70/spectro/Jamfile.orig
--- argyllcms-0.70.orig/spectro/Jamfile.orig	1970-01-01 01:00:00.000000000 +0100
+++ argyllcms-0.70/spectro/Jamfile.orig	2008-01-16 02:47:42.000000000 +0100
@@ -0,0 +1,222 @@
+
+#SubDir TOP spectro ;
+
+CCFLAGS 	+= $(CCOPTFLAG) ;		# Turn optimisation on
+#CCFLAGS    += $(CCDEBUGFLAG) ;		# Debugging flags
+LINKFLAGS	+= $(LINKDEBUGFLAG) ;
+
+if $(NT) {
+	if $(DDK_INC_PATH) && $(DDK_LIB_PATH) {		# We can use HID access
+		CCFLAGS += $(DEFFLAG) ENABLE_NT_HID ;
+		HIDLIBS = $(DDK_LIB_PATH)\\hid.lib $(DDK_LIB_PATH)\\setupapi.lib ;
+		HDRS += $(STDHDRS) ;					# hack to force search of STDHDRS before DDK
+	}
+	IOFILE = ntio.c ;
+	LIBUSB = ../libusbw ;
+}
+
+if $(UNIX) {
+	IOFILE = unixio.c pollem.c ;
+	LIBUSB = ../libusb ;
+}
+
+if $(UNIX) {
+  if $(OS) = MACOSX {
+	LINKFLAGS += -framework IOKit ;
+	LINKFLAGS += -framework CoreFoundation ;
+  } else {
+	WinDir = /usr/X11R6 ;
+	LibWinH = $(WinDir)/include ;
+	LibWinD = $(WinDir)/lib ;
+	LibWin = ;
+	LINKFLAGS += -L$(LibWinD) -lX11 -lXext -lXxf86vm -lXinerama -lXau -lXdmcp -lXss -ldl ;
+  }
+}
+
+KEEPOBJS = true ;	# Jam has trouble with multiple users of .obj
+
+#Products
+Libraries = libinsttypes libinst ;
+Executables = dispwin displin dispread dispcal fakeread synthread chartread spotread spec2cie spyd2en ;
+Headers = inst.h ;
+Samples = ColorChecker.ti2 ECI2002R.ti2 FograStrip.ti2 i1_RGB_Scan_1.4.ti2 SOtele.sp ;
+
+#Install
+InstallBin $(DOTDOT)$(SLASH)bin : $(Executables)$(SUFEXE) ;
+InstallFile $(DOTDOT)$(SLASH)ref : $(Samples) ;
+#InstallFile $(DOTDOT)$(SLASH)h : $(Headers) ;
+#InstallLib $(DOTDOT)$(SLASH)lib : $(Libraries)$(SUFLIB) ;
+
+# Instrument access library library
+Library libinst.lib : inst.c insttypes.c dtp20.c dtp22.c dtp41.c dtp51.c dtp92.c i1disp.c i1pro.c i1pro_imp.c ss.c ss_imp.c hcfr.c spyd2.c huey.c $(IOFILE) usbio.c hidio.c ;
+ObjectHdrs inst insttypes dtp20 dtp22 dtp41 dtp51 dtp92 i1disp i1pro i1pro_imp ss ss_imp hcfr spyd2 huey $(IOFILE) usbio.c hidio.c : . ../h ../numlib ../icc ../rspl ../xicc ../plot $(DDK_INC_PATH) $(LIBUSB) ;
+
+# Instrument types utility functions library. Use this instead of libinst */
+# (hack to re-use insttypes.c in this library)
+Object insttypes_$(SUFOBJ) : insttypes.c ;
+ObjectHdrs insttypes_ : . ../h ../icc ../xicc ;
+LibraryFromObjects libinsttypes.lib : insttypes_$(SUFOBJ) ;
+
+# Support file
+Object alphix$(SUFOBJ) : ../target/alphix.c ;
+ObjectHdrs alphix$(SUFOBJ) : ../h ../numlib ;
+
+# General target reader program
+Object chartread$(SUFOBJ) : chartread.c ;
+ObjectHdrs chartread : . ../h ../cgats ../icc ../numlib ../xicc ../target $(LIBUSB) ;
+MainFromObjects chartread : chartread$(SUFOBJ) alphix$(SUFOBJ) dispsup$(SUFOBJ) dispwin$(SUFOBJ) ;
+LinkLibraries chartread : libinst.lib ../cgats/libcgats.lib
+                          ../rspl/librspl.lib
+                          ../xicc/libxicc.lib ../xicc/libxcolorants.lib
+                          ../numlib/libnum.lib ../icc/libicc.lib
+                          ../plot/libplot.lib $(LIBUSB)/libusb.lib
+                          $(HIDLIBS) ;
+
+# Printed target spot reader utility
+Object spotread$(SUFOBJ) : spotread.c ;
+ObjectHdrs spotread : . ../h ../cgats ../icc ../numlib ../rspl ../xicc ../gamut
+                      ../spectro ../plot $(LIBUSB) ;
+MainFromObjects spotread : spotread$(SUFOBJ) dispsup$(SUFOBJ) dispwin$(SUFOBJ) ;
+LinkLibraries spotread : libinst.lib
+                          ../rspl/librspl.lib ../xicc/libxicc.lib
+                          ../icc/libicc.lib ../gamut/libgamut.lib ../cgats/libcgats.lib
+                          ../plot/libplot.lib ../numlib/libnum.lib
+                          $(LIBUSB)/libusb.lib $(LibWin)
+                          $(HIDLIBS) ;
+
+# Gretag Spectroscan/T filmstrip reader
+#Object filmread$(SUFOBJ) : filmread.c ;
+#ObjectHdrs filmread : . ../h ../cgats ../icc ../numlib ../xicc $(LIBUSB) ;
+#MainFromObjects filmread : filmread$(SUFOBJ) dispsup$(SUFOBJ) dispwin$(SUFOBJ) ;
+#LinkLibraries filmread : libinst.lib ../cgats/libcgats.lib ../xicc/libxicc.lib
+#                          ../rspl/librspl.lib
+#                          ../numlib/libnum.lib ../icc/libicc ../plot/libplot.lib
+#                          $(LIBUSB)/libusb.lib
+#                          $(HIDLIBS) ;
+
+# Create linear .cal
+Main displin : displin.c ;
+ObjectHdrs displin : . ../h ../cgats ../numlib ;
+LinkLibraries displin : ../cgats/libcgats.lib ../numlib/libnum.lib ;
+
+# Display calibration program
+Object dispcal$(SUFOBJ) : dispcal.c ;
+ObjectHdrs dispcal dispwin dispsup ../target/ofps : . ../h ../cgats ../icc
+                           ../numlib ../rspl ../spectro ../xicc ../spectro ../gamut
+                           ../target ../plot $(LIBUSB) $(LibWinH) ;
+MainFromObjects dispcal : dispcal$(SUFOBJ) dispwin$(SUFOBJ) ../target/ofps$(SUFOBJ)
+                          dispsup$(SUFOBJ) ;
+LinkLibraries dispcal : libinst.lib ../cgats/libcgats.lib
+                          ../rspl/librspl.lib
+                          ../xicc/libxicc.lib  ../icc/libicc.lib
+                          ../rspl/librspl.lib ../numlib/libnum.lib  
+                          ../gamut/libgamut.lib ../plot/libplot.lib 
+                          $(LIBUSB)/libusb.lib $(LibWin)
+                          $(HIDLIBS) ;
+
+# Display tester program
+Main dispread : dispread.c dispwin.c dispsup.c ;
+ObjectHdrs dispread dispwin dispsup : . ../h ../cgats ../icc ../numlib ../xicc $(LIBUSB) $(LibWinH) ;
+LinkLibraries dispread : libinst.lib ../cgats/libcgats.lib
+                          ../rspl/librspl.lib
+                          ../xicc/libxicc.lib  ../icc/libicc.lib
+                          ../numlib/libnum.lib ../plot/libplot.lib
+                          $(LIBUSB)/libusb.lib $(LibWin)
+                          $(HIDLIBS) ;
+
+
+# ~~~999
+#display test window test/Lut loader utility
+Object sa_dispwin$(SUFOBJ) : dispwin.c ;
+ObjectHdrs sa_dispwin : . ../h ../numlib ../cgats ../icc $(LibWinH) ;
+MainFromObjects dispwin : sa_dispwin$(SUFOBJ) ;
+ObjectCcFlags sa_dispwin.c : -DSTANDALONE_TEST ;
+LinkLibraries dispwin : libinst.lib ../cgats/libcgats.lib
+                         ../xicc/libxicc.lib  ../icc/libicc.lib
+                         ../numlib/libnum.lib ../plot/libplot.lib
+                         $(LIBUSB)/libusb.lib $(LibWin)
+                         $(HIDLIBS) ;
+
+# Fake device print/read utility using ICC profile
+Main fakeread : fakeread.c ;
+ObjectHdrs fakeread : . ../h ../cgats ../xicc ../spectro ../rspl ../numlib ../gamut ../plot ../icc ;	
+LinkLibraries fakeread : libinsttypes.lib ../icc/libicc.lib
+                        ../xicc/libxicc.lib ../xicc/libxcolorants.lib
+						../gamut/libgamut.lib ../cgats/libcgats.lib
+                        ../rspl/librspl.lib ../numlib/libnum.lib
+                        ../plot/libplot.lib
+                        $(LIBUSB)/libusb.lib $(LibWin) ;
+
+# Synthetic device print/read utility
+Main synthread : synthread.c ;
+ObjectHdrs synthread : . ../h ../cgats ../xicc ../spectro ../rspl ../numlib ../gamut ../plot ../icc ;	
+LinkLibraries synthread : libinsttypes.lib ../icc/libicc.lib
+                        ../xicc/libxicc.lib ../xicc/libxcolorants.lib
+						../gamut/libgamut.lib ../cgats/libcgats.lib
+                        ../rspl/librspl.lib ../numlib/libnum.lib
+                        ../plot/libplot.lib
+                        $(LIBUSB)/libusb.lib $(LibWin) ;
+
+# Add CIE values to a spectral reading file
+Main spec2cie : spec2cie.c ;
+ObjectHdrs spec2cie : . ../h ../cgats ../xicc ../spectro ../rspl ../numlib ../gamut ../icc ../plot  $(LIBUSB) ;	
+LinkLibraries spec2cie : libinsttypes.lib ../icc/libicc.lib
+                        ../xicc/libxicc.lib ../xicc/libxcolorants.lib
+						../gamut/libgamut.lib ../numlib/libnum.lib
+                        ../cgats/libcgats.lib ../plot/libplot.lib 
+                        $(LIBUSB)/libusb.lib $(LibWin) ;
+
+# Utility to enable the Spyder 2 instrument */
+Main spyd2en : spyd2en.c vinflate.c ;
+ObjectHdrs spyd2en vinflate : . ../h ../numlib ;	
+LinkLibraries spyd2en : ../numlib/libnum.lib ;
+
+# Dumy ti3 file generator for testing
+#Main dumyti3 : dumyti3.c ;
+#ObjectHdrs dumyti3 : . ../h ../cgats ;
+#LinkLibraries dumyti3 : ../cgats/libcgats.lib ;
+
+# Test utility for XYZ matrix spectral correction
+#Main xyzfix : xyzfix.c ;
+#ObjectHdrs xyzfix : . ../h ../numlib ../icc ../cgats ;
+#LinkLibraries xyzfix : ../numlib/libnum.lib ../icc/libicc.lib ../cgats/libcgats.lib ;
+
+# Experimental RAMDAC loader
+# Main vgamma : vgamma.c ;
+
+# fp conversion code test
+#Main fp : fp.c ;
+
+# test code
+#Main tt : tt.c 
+#ObjectHdrs tt : . ../numlib ../plot ;
+#LinkLibraries tt : ../numlib/libnum.lib ../plot/libplot.lib ;
+
+if $(OLD_GRETAG) && $(UNIX) && $(OS) != MACOSX {
+
+	# test for parsing a VISE archive
+	Main visetest : visetest.c vinflate.c ;
+	ObjectHdrs visetest vinflate : . ../h ../numlib ;	
+	LinkLibraries visetest : ../numlib/libnum.lib ;
+
+	# Compute deconvolution filter for i1pro
+	#Main i1deconv : i1deconv.c ;
+	#ObjectHdrs i1deconv : . ../numlib ../rspl ../plot ;
+	#LinkLibraries i1deconv : ../numlib/libnum.lib ../rspl/librspl.lib ../plot/libplot.lib ;
+
+	# Compute stray light calibration for i1pro
+	#Main i1stray : i1stray.c ;
+	#ObjectHdrs i1stray : . ../numlib ../rspl ../plot ../icc ../xicc ;
+	#LinkLibraries i1stray : ../numlib/libnum.lib ../rspl/librspl.lib ../plot/libplot.lib ;
+
+	# test gretag interface
+	Object gt_gretag$(SUFOBJ) : gretag.c ;
+	ObjectCcFlags gt_gretag.c : -DSTANDALONE_TEST ;
+    ObjectHdrs gt_gretag.c : . ../h ../icc ../xicc ;
+	MainFromObjects gt_test : gt_gretag$(SUFOBJ) spm$(SUFOBJ) $(IOFILE:S=$(SUFOBJ)) ;
+	LinkLibraries gt_test : libinst.lib ../xicc/libxicc.lib ../cgats/libcgats.lib
+                            ../icc/libicc.lib $(LIBUSB)/libusb.lib $(LibWin) ;
+	LINKFLAGS on gt_test += -L$(LibWinD) ;
+	LINKLIBS on gt_test += -lglut -lGL -lGLU -lX11 -lXext -lXmu -lXi -lm ;
+}
+
diff -uNr argyllcms-0.70.orig/spectro/Jamfile.rej argyllcms-0.70/spectro/Jamfile.rej
--- argyllcms-0.70.orig/spectro/Jamfile.rej	1970-01-01 01:00:00.000000000 +0100
+++ argyllcms-0.70/spectro/Jamfile.rej	2008-02-07 20:51:37.000000000 +0100
@@ -0,0 +1,42 @@
+***************
+*** 37,43 ****
+  
+  #Products
+  Libraries = libinsttypes libinst ;
+- Executables = dispwin displin dispread dispcal fakeread synthread filmread printread spotread spec2cie spyd2en ;
+  Headers = inst.h ;
+  Samples = ColorChecker.ti2 ECI2002R.ti2 FograStrip.ti2 i1_RGB_Scan_1.4.ti2 SOtele.sp ;
+  
+--- 37,43 ----
+  
+  #Products
+  Libraries = libinsttypes libinst ;
++ Executables = dispwin displin dispread dispcal fakeread synthread printread spotread spec2cie spyd2en ;
+  Headers = inst.h ;
+  Samples = ColorChecker.ti2 ECI2002R.ti2 FograStrip.ti2 i1_RGB_Scan_1.4.ti2 SOtele.sp ;
+  
+***************
+*** 84,99 ****
+                            $(LIBUSB)/libusb.lib $(LibWin)
+                            $(HIDLIBS) ;
+  
+- # Gretag Spectroscan/T filmstrip reader
+- Object filmread$(SUFOBJ) : filmread.c ;
+- ObjectHdrs filmread : . ../h ../cgats ../icc ../numlib ../xicc $(LIBUSB) ;
+- MainFromObjects filmread : filmread$(SUFOBJ) dispsup$(SUFOBJ) dispwin$(SUFOBJ) ;
+- LinkLibraries filmread : libinst.lib ../cgats/libcgats.lib ../xicc/libxicc.lib
+-                           ../rspl/librspl.lib
+-                           ../numlib/libnum.lib ../icc/libicc ../plot/libplot.lib
+-                           $(LIBUSB)/libusb.lib
+-                           $(HIDLIBS) ;
+- 
+  # Create linear .cal
+  Main displin : displin.c ;
+  ObjectHdrs displin : . ../h ../cgats ../numlib ;
+--- 84,89 ----
+                            $(LIBUSB)/libusb.lib $(LibWin)
+                            $(HIDLIBS) ;
+  
+  # Create linear .cal
+  Main displin : displin.c ;
+  ObjectHdrs displin : . ../h ../cgats ../numlib ;
diff -uNr argyllcms-0.70.orig/target/Jamfile argyllcms-0.70/target/Jamfile
--- argyllcms-0.70.orig/target/Jamfile	2008-01-16 02:47:45.000000000 +0100
+++ argyllcms-0.70/target/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -14,9 +14,9 @@
 	LINKFLAGS += -framework IOKit ;
 	LINKFLAGS += -framework CoreFoundation ;
   } else {
-	WinDir = /usr/X11R6 ;
+	WinDir = /usr ;
 	LibWinH = $(WinDir)/include/X11 ;
-	LibWinD = $(WinDir)/lib ;
+	LibWinD = ;
 	LibWin = ;
 	LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
   }
diff -uNr argyllcms-0.70.orig/target/Jamfile.orig argyllcms-0.70/target/Jamfile.orig
--- argyllcms-0.70.orig/target/Jamfile.orig	1970-01-01 01:00:00.000000000 +0100
+++ argyllcms-0.70/target/Jamfile.orig	2008-01-16 02:47:45.000000000 +0100
@@ -0,0 +1,138 @@
+# Print Calibration Target Data File generator
+
+#SubDir TOP target ;
+
+CCFLAGS 	+= $(CCOPTFLAG) ;		# Turn optimisation on
+#CCFLAGS	+= $(CCDEBUGFLAG) ;		# Debugging flags
+#CCFLAGS 	+= $(CCPROFFLAG) ;		# Profile flags
+#LINKFLAGS	+= $(LINKPROFFLAG) ;    # Profile flags
+#CCFLAGS     += $(CCHEAPDEBUG) ;     # Heap Debugging flags
+LINKFLAGS	+= $(LINKDEBUGFLAG) ;	# Link debugging flags
+
+if $(UNIX) {
+  if $(OS) = MACOSX {
+	LINKFLAGS += -framework IOKit ;
+	LINKFLAGS += -framework CoreFoundation ;
+  } else {
+	WinDir = /usr/X11R6 ;
+	LibWinH = $(WinDir)/include/X11 ;
+	LibWinD = $(WinDir)/lib ;
+	LibWin = ;
+	LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
+  }
+}
+
+if $(HAVE_TIFF) {
+	TIFFLIB = ;
+	TIFFINC = ;
+	LINKLIBS on targen$(SUFEXE)
+				filmtarg$(SUFEXE) = -ltiff $(LINKLIBS) ;
+} else {
+	TIFFLIB = ../tiff/libtiff.lib ;
+	TIFFINC = ../tiff ;
+}
+
+#Products
+Executables = targen printtarg ;
+
+#Install
+InstallBin $(DOTDOT)$(SLASH)bin : $(Executables)$(SUFEXE) ;
+
+Object alphix$(SUFOBJ) : alphix.c ;
+ObjectHdrs alphix$(SUFOBJ) : ../h ../numlib ;
+
+Object randix$(SUFOBJ) : randix.c ;
+ObjectHdrs randix$(SUFOBJ) : ../h ../numlib ;
+
+#target generator
+Main targen : targen.c ppoint.c ofps.c ifarp.c simplat.c simdlat.c prand.c ;
+ObjectHdrs ppoint$(SUFOBJ) : ../h ../numlib ../plot ../icc ../rspl ../xicc ; 
+ObjectHdrs ofps$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ; 
+ObjectHdrs ifarp$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
+ObjectHdrs simplat$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
+ObjectHdrs simdlat$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
+ObjectHdrs prand$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ;
+ObjectHdrs targen$(SUFOBJ) : ../h ../numlib ../rspl ../cgats ../icc ../gamut ../xicc ../spectro ;
+LinkLibraries targen : ../rspl/librspl.lib ../cgats/libcgats.lib
+                       ../icc/libicc.lib ../plot/libplot.lib ../xicc/libxicc.lib
+                       ../xicc/libxcolorants.lib ../gamut/libgamut.lib
+                       ../numlib/libnum.lib ../spectro/libinsttypes.lib 
+                       $(LibWin) ;
+
+# Film Calibration Target File generator
+#MainFromObjects filmtarg : filmtarg$(SUFOBJ) alphix$(SUFOBJ) randix$(SUFOBJ) ;
+#Object filmtarg$(SUFOBJ) : filmtarg.c ;
+#ObjectHdrs filmtarg$(SUFOBJ) : ../h ../numlib ../cgats $(TIFFINC) ;
+#LinkLibraries filmtarg : ../cgats/libcgats.lib $(TIFFLIB) ;
+
+# Print Calibration Target Postscrip../numlib t File generator
+MainFromObjects printtarg : printtarg$(SUFOBJ) alphix$(SUFOBJ) randix$(SUFOBJ) ;
+Object printtarg$(SUFOBJ) : printtarg.c ;
+ObjectHdrs printtarg$(SUFOBJ) : ../h ../numlib ../cgats ../spectro ../rspl ../icc ../xicc
+                                ../gamut ;
+LinkLibraries printtarg : ../cgats/libcgats.lib ../xicc/libxicc.lib
+                          ../xicc/libxcolorants.lib ../icc/libicc.lib
+                          ../numlib/libnum.lib ../spectro/libinsttypes.lib
+                          ../plot/libplot.lib $(LibWin) ;
+
+# Individual stand alone test of sample point classes
+
+# Percepttual point distribution
+MainFromObjects ppoint : sa_ppoint$(SUFOBJ) ;
+Object sa_ppoint$(SUFOBJ) : ppoint.c ;
+ObjectCcFlags sa_ppoint$(SUFOBJ) : -DSTANDALONE_TEST ;
+ObjectHdrs sa_ppoint$(SUFOBJ) : ../h ../numlib ../plot ../icc ../rspl ../xicc ; 
+LinkLibraries ppoint : ../plot/libplot.lib ../rspl/librspl.lib ../numlib/libnum.lib $(LibWin) ;
+
+# Optimised farthest point sampling class
+MainFromObjects ofps : sa_ofps$(SUFOBJ) ;
+Object sa_ofps$(SUFOBJ) : ofps.c ;
+ObjectCcFlags sa_ofps$(SUFOBJ) : -DSTANDALONE_TEST ;
+ObjectHdrs sa_ofps$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ; 
+LinkLibraries ofps : ../numlib/libnum.lib ../plot/libplot.lib $(LibWin) ;
+
+# Incremental far point class
+MainFromObjects ifarp : sa_ifarp$(SUFOBJ) ;
+Object sa_ifarp$(SUFOBJ) : ifarp.c ;
+ObjectCcFlags sa_ifarp$(SUFOBJ) : -DSTANDALONE_TEST ;
+ObjectHdrs sa_ifarp$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ; 
+LinkLibraries ifarp : ../numlib/libnum.lib ../plot/libplot.lib
+                        ../xicc/libxcolorants.lib ../icc/libicc.lib $(LibWin) ;
+
+# Perceptual space simplex lattice
+MainFromObjects simplat : sa_simplat$(SUFOBJ) ;
+Object sa_simplat$(SUFOBJ) : simplat.c ;
+ObjectCcFlags sa_simplat$(SUFOBJ) : -DSTANDALONE_TEST ;
+ObjectHdrs sa_simplat$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ; 
+LinkLibraries simplat : ../numlib/libnum.lib ../plot/libplot.lib
+                        ../xicc/libxcolorants.lib ../icc/libicc.lib $(LibWin) ;
+
+# Device space simplex lattice
+MainFromObjects simdlat : sa_simdlat$(SUFOBJ) ;
+Object sa_simdlat$(SUFOBJ) : simdlat.c ;
+ObjectCcFlags sa_simdlat$(SUFOBJ) : -DSTANDALONE_TEST ;
+ObjectHdrs sa_simdlat$(SUFOBJ) : ../h ../numlib ../plot ../icc ../xicc ; 
+LinkLibraries simdlat : ../numlib/libnum.lib ../plot/libplot.lib
+                        ../xicc/libxcolorants.lib ../icc/libicc.lib $(LibWin) ;
+
+if $(BUILD_JUNK) {
+
+	# Test program
+	MainFromObjects test : test$(SUFOBJ) alphix$(SUFOBJ) ;
+	Object test$(SUFOBJ) : test.c ;
+	ObjectHdrs test$(SUFOBJ) : ../h ../numlib ; 
+	LinkLibraries test : ../numlib/libnum.lib ;
+
+	# Test program
+	MainFromObjects temp : temp$(SUFOBJ) ;
+	Object temp$(SUFOBJ) : temp.c ;
+	ObjectHdrs temp$(SUFOBJ) : ../h ../numlib ../plot ; 
+	LinkLibraries temp : ../numlib/libnum.lib ../plot/libplot.lib $(LibWin) ;
+
+	# Test lmean experiment
+	MainFromObjects lmean : lmean$(SUFOBJ) ;
+	Object lmean$(SUFOBJ) : lmean.c ;
+	ObjectHdrs lmean$(SUFOBJ) : ../h ../numlib ../plot ; 
+	LinkLibraries lmean : ../numlib/libnum.lib ../plot/libplot.lib $(LibWin) ;
+
+}
diff -uNr argyllcms-0.70.orig/xicc/Jamfile argyllcms-0.70/xicc/Jamfile
--- argyllcms-0.70.orig/xicc/Jamfile	2008-01-16 02:47:40.000000000 +0100
+++ argyllcms-0.70/xicc/Jamfile	2008-02-07 20:51:37.000000000 +0100
@@ -12,9 +12,9 @@
 	LINKFLAGS += -framework IOKit ;
 	LINKFLAGS += -framework CoreFoundation ;
   } else {
-	WinDir = /usr/X11R6 ;
+	WinDir = /usr ;
 	LibWinH = $(WinDir)/include/X11 ;
-	LibWinD = $(WinDir)/lib ;
+	LibWinD = ;
 	LibWin = ;
 	LINKFLAGS += -L$(LibWinD) -lX11 -lXau -lXdmcp ;
   }
@@ -23,7 +23,9 @@
 if $(HAVE_TIFF) {	# Alternate TIFF library
 	TIFFLIB = ;
 	TIFFINC = ;
-	LINKLIBS on tiffgamut$(SUFEXE) = $(LINKLIBS) -ltiff ;
+	LINKLIBS on tiffgamut$(SUFEXE)
+	            cam02plot$(SUFEXE) = $(LINKLIBS) -ltiff ;
+
 } else {
 	TIFFLIB = ../tiff/libtiff.lib ;
 	TIFFINC = ../tiff ;


--- NEW FILE argyllcms-0.70-color-device-file.policy ---
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
<policyconfig>
  <action id="org.freedesktop.hal.device-access.color">
    <description>Directly access color meter devices</description>
    <message>System policy prevents access to the color meter devices</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>
</policyconfig>

argyllcms-0.70-printf.patch:

--- NEW FILE argyllcms-0.70-printf.patch ---
diff -rud argyll_orig/cgats/cgats.c argyll/cgats/cgats.c
--- argyll_orig/cgats/cgats.c	2008-01-08 00:04:01.000000000 +0100
+++ argyll/cgats/cgats.c	2008-01-08 00:11:09.000000000 +0100
@@ -1285,33 +1285,33 @@
 		if (!t->sup_id)	/* If not suppressed */ {
 			switch(t->tt) {
 				case it8_7_1:
-					if (fp->printf(fp,"IT8.7/1\n\n") < 0)
+					if ((fp->printf)(fp,"IT8.7/1\n\n") < 0)
 						goto write_error;
 					break;
 				case it8_7_2:
-					if (fp->printf(fp,"IT8.7/2\n\n") < 0)
+					if ((fp->printf)(fp,"IT8.7/2\n\n") < 0)
 						goto write_error;
 					break;
 				case it8_7_3:
-					if (fp->printf(fp,"IT8.7/3\n\n") < 0)
+					if ((fp->printf)(fp,"IT8.7/3\n\n") < 0)
 						goto write_error;
 					break;
 				case it8_7_4:
-					if (fp->printf(fp,"IT8.7/4\n\n") < 0)
+					if ((fp->printf)(fp,"IT8.7/4\n\n") < 0)
 						goto write_error;
 					break;
 				case cgats_5:
-					if (fp->printf(fp,"CGATS.5\n\n") < 0)
+					if ((fp->printf)(fp,"CGATS.5\n\n") < 0)
 						goto write_error;
 					break;
 				case cgats_X:				/* variable CGATS type */
 					if (p->cgats_type == NULL)
 						goto write_error;
-					if (fp->printf(fp,"%s\n\n", p->cgats_type) < 0)
+					if ((fp->printf)(fp,"%s\n\n", p->cgats_type) < 0)
 						goto write_error;
 					break;
 				case tt_other:	/* User defined file identifier */
-					if (fp->printf(fp,"%s\n\n",p->others[t->oi]) < 0)
+					if ((fp->printf)(fp,"%s\n\n",p->others[t->oi]) < 0)
 						goto write_error;
 					break;
 				case tt_none:
@@ -1326,7 +1326,7 @@
 				al->free(al, sfield);
 				return err(p,-1,"cgats_write(), ID should not be suppressed when table %d type is not the same as previous table",table);
 			}
-			if (fp->printf(fp,"\n\n") < 0)
+			if ((fp->printf)(fp,"\n\n") < 0)
 				goto write_error;
 		}
 
@@ -1343,7 +1343,7 @@
 						al->free(al, sfield);
 						return err(p,-2,"quote_cs() malloc failed!");
 					}
-					if (fp->printf(fp,"KEYWORD %s\n",qs) < 0) {
+					if ((fp->printf)(fp,"KEYWORD %s\n",qs) < 0) {
 						al->free(al, qs);
 						goto write_error;
 					}
@@ -1354,7 +1354,7 @@
 					al->free(al, sfield);
 					return err(p,-2,"quote_cs() malloc failed!");
 				}
-				if (fp->printf(fp,"%s %s%s",t->ksym[i],qs,
+				if ((fp->printf)(fp,"%s %s%s",t->ksym[i],qs,
 				    t->kcom[i] == NULL ? "\n":"\t") < 0) {
 					al->free(al, qs);
 					goto write_error;
@@ -1363,7 +1363,7 @@
 			}
 			/* Comment if its present */
 			if (t->kcom[i] != NULL) {
-				if (fp->printf(fp,"# %s\n",t->kcom[i]) < 0) {
+				if ((fp->printf)(fp,"# %s\n",t->kcom[i]) < 0) {
 					al->free(al, qs);
 					goto write_error;
 				}
@@ -1372,7 +1372,7 @@
 
 		/* Then the field specification */
 		if (!t->sup_fields) {	/* If not suppressed */
-			if (fp->printf(fp,"\n") < 0)
+			if ((fp->printf)(fp,"\n") < 0)
 				goto write_error;
 	
 			/* Declare any non-standard fields */
@@ -1383,7 +1383,7 @@
 						al->free(al, sfield);
 						return err(p,-2,"quote_cs() malloc failed!");
 					}
-					if (fp->printf(fp,"KEYWORD %s\n",qs) < 0) {
+					if ((fp->printf)(fp,"KEYWORD %s\n",qs) < 0) {
 						al->free(al, qs);
 						goto write_error;
 					}
@@ -1391,16 +1391,16 @@
 				}
 			}
 	
-			if (fp->printf(fp,"NUMBER_OF_FIELDS %d\n",t->nfields) < 0)
+			if ((fp->printf)(fp,"NUMBER_OF_FIELDS %d\n",t->nfields) < 0)
 				goto write_error;
-			if (fp->printf(fp,"BEGIN_DATA_FORMAT\n") < 0)
+			if ((fp->printf)(fp,"BEGIN_DATA_FORMAT\n") < 0)
 				goto write_error;
 			for (field = 0; field < t->nfields; field ++) {
 				DBG((dbgo,"CGATS writing field %d\n",field));
-				if (fp->printf(fp,"%s ",t->fsym[field]) < 0)
+				if ((fp->printf)(fp,"%s ",t->fsym[field]) < 0)
 					goto write_error;
 			}
-			if (fp->printf(fp,"\nEND_DATA_FORMAT\n") < 0)
+			if ((fp->printf)(fp,"\nEND_DATA_FORMAT\n") < 0)
 				goto write_error;
 		} else { /* Check that it is safe to suppress fields */
 			cgats_table *pt = &p->t[table-1];
@@ -1421,9 +1421,9 @@
 		}
 
 		/* Then the actual data */
-		if (fp->printf(fp,"\nNUMBER_OF_SETS %d\n",t->nsets) < 0)
+		if ((fp->printf)(fp,"\nNUMBER_OF_SETS %d\n",t->nsets) < 0)
 			goto write_error;
-		if (fp->printf(fp,"BEGIN_DATA\n") < 0)
+		if ((fp->printf)(fp,"BEGIN_DATA\n") < 0)
 			goto write_error;
 		for (set = 0; set < t->nsets; set++) {
 			DBG((dbgo,"CGATS writing set %d\n",set));
@@ -1434,10 +1434,10 @@
 					double val = *((double *)t->fdata[set][field]);
 					real_format(val, REAL_SIGDIG, fmt);
  					strcat(fmt," ");
-					if (fp->printf(fp,fmt,val) < 0)
+					if ((fp->printf)(fp,fmt,val) < 0)
 						goto write_error;
 				} else if (t->ftype[field] == i_t) {
-					if (fp->printf(fp,"%d ",*((int *)t->fdata[set][field])) < 0)
+					if ((fp->printf)(fp,"%d ",*((int *)t->fdata[set][field])) < 0)
 						goto write_error;
 				} else if (t->ftype[field] == nqcs_t
 				      && !cs_has_ws((char *)t->fdata[set][field])
@@ -1446,7 +1446,7 @@
 					/* We can only print a non-quote string if it doesn't contain white space, */
 					/* quote or comment characters, and if it is a standard field or */
 					/* can't be mistaken for a number. */
-					if (fp->printf(fp,"%s ",(char *)t->fdata[set][field]) < 0)
+					if ((fp->printf)(fp,"%s ",(char *)t->fdata[set][field]) < 0)
 						goto write_error;
 				} else if (t->ftype[field] == nqcs_t
 				      || t->ftype[field] == cs_t) {
@@ -1455,7 +1455,7 @@
 						al->free(al, sfield);
 						return err(p,-2,"quote_cs() malloc failed!");
 					}
-					if (fp->printf(fp,"%s ",qs) < 0) {
+					if ((fp->printf)(fp,"%s ",qs) < 0) {
 						al->free(al, qs);
 						goto write_error;
 					}
@@ -1465,10 +1465,10 @@
 					return err(p,-1,"cgats_write(), illegal data type found");
 				}
 			}
-			if (fp->printf(fp,"\n") < 0)
+			if ((fp->printf)(fp,"\n") < 0)
 				goto write_error;
 		}
-		if (fp->printf(fp,"END_DATA\n") < 0)
+		if ((fp->printf)(fp,"END_DATA\n") < 0)
 			goto write_error;
 
 		if (sfield != NULL)
@@ -1849,60 +1849,60 @@
 cgats_dump(cgats *p, cgatsFile *fp) {
 	int tn;
 
-	fp->printf(fp,"Number of tables = %d\n",p->ntables);
+	(fp->printf)(fp,"Number of tables = %d\n",p->ntables);
 	for (tn = 0; tn < p->ntables; tn++) {
 		cgats_table *t;
 		int i,j;
 		t = &p->t[tn];
 
 	
-		fp->printf(fp,"\nTable %d:\n",tn);
+		(fp->printf)(fp,"\nTable %d:\n",tn);
 
 		switch(t->tt)	/* Table identifier */
 			{
 			case it8_7_1:
-				fp->printf(fp,"Identifier = 'IT8.7/1'\n");
+				(fp->printf)(fp,"Identifier = 'IT8.7/1'\n");
 				break;
 			case it8_7_2:
-				fp->printf(fp,"Identifier = 'IT8.7/2'\n");
+				(fp->printf)(fp,"Identifier = 'IT8.7/2'\n");
 				break;
 			case it8_7_3:
-				fp->printf(fp,"Identifier = 'IT8.7/3'\n");
+				(fp->printf)(fp,"Identifier = 'IT8.7/3'\n");
 				break;
 			case it8_7_4:
-				fp->printf(fp,"Identifier = 'IT8.7/4'\n");
+				(fp->printf)(fp,"Identifier = 'IT8.7/4'\n");
 				break;
 			case cgats_5:
-				fp->printf(fp,"Identifier = 'CGATS.5'\n");
+				(fp->printf)(fp,"Identifier = 'CGATS.5'\n");
 				break;
 			case cgats_X:
-				fp->printf(fp,"Identifier = '%s'\n",p->cgats_type);
+				(fp->printf)(fp,"Identifier = '%s'\n",p->cgats_type);
 				break;
 			case tt_other:	/* User defined file identifier */
-				fp->printf(fp,"Identifier = '%s'\n",p->others[t->oi]);
+				(fp->printf)(fp,"Identifier = '%s'\n",p->others[t->oi]);
 				break;
 			default:
-				fp->printf(fp,"**ILLEGAL**\n");
+				(fp->printf)(fp,"**ILLEGAL**\n");
 				break;
 			}
 
-		fp->printf(fp,"\nNumber of keywords = %d\n",t->nkwords);
+		(fp->printf)(fp,"\nNumber of keywords = %d\n",t->nkwords);
 		
 		/* Dump all the keyword symbols and values */
 		for (i = 0; i < t->nkwords; i++) {
 			if (t->ksym[i] != NULL && t->kdata[i] != NULL)
 				{
 				if (t->kcom[i] != NULL)
-					fp->printf(fp,"Keyword '%s' has value '%s' and comment '%s'\n",
+					(fp->printf)(fp,"Keyword '%s' has value '%s' and comment '%s'\n",
 					        t->ksym[i],t->kdata[i],t->kcom[i]);
 				else
-					fp->printf(fp,"Keyword '%s' has value '%s'\n",t->ksym[i],t->kdata[i]);
+					(fp->printf)(fp,"Keyword '%s' has value '%s'\n",t->ksym[i],t->kdata[i]);
 				}
 			if (t->kcom[i] != NULL)
-				fp->printf(fp,"Comment '%s'\n",t->kcom[i]);
+				(fp->printf)(fp,"Comment '%s'\n",t->kcom[i]);
 		}
 			
-		fp->printf(fp,"\nNumber of field defs = %d\n",t->nfields);
+		(fp->printf)(fp,"\nNumber of field defs = %d\n",t->nfields);
 
 		/* Dump all the field symbols */
 		for (i = 0; i < t->nfields; i++) {		
@@ -1924,10 +1924,10 @@
 					fname = "illegal";
 					break;
 			}
-			fp->printf(fp,"Field '%s' has type '%s'\n",t->fsym[i],fname);
+			(fp->printf)(fp,"Field '%s' has type '%s'\n",t->fsym[i],fname);
 		}
 
-		fp->printf(fp,"\nNumber of sets = %d\n",t->nsets);
+		(fp->printf)(fp,"\nNumber of sets = %d\n",t->nsets);
 
 		/* Dump all the set values */
 		for (j = 0; j < t->nsets; j++) {
@@ -1938,22 +1938,22 @@
 						double val = *((double *)t->fdata[j][i]);
 						fmt[0] = ' ';
 						real_format(val, REAL_SIGDIG, fmt+1);
-						fp->printf(fp,fmt,*((double *)t->fdata[j][i]));
+						(fp->printf)(fp,fmt,*((double *)t->fdata[j][i]));
 						break;
 					}
 					case i_t:
-						fp->printf(fp," %d",*((int *)t->fdata[j][i]));
+						(fp->printf)(fp," %d",*((int *)t->fdata[j][i]));
 						break;
 					case cs_t:
 					case nqcs_t:
-						fp->printf(fp," %s",((char *)t->fdata[j][i]));
+						(fp->printf)(fp," %s",((char *)t->fdata[j][i]));
 						break;
 					default:
-						fp->printf(fp," illegal");
+						(fp->printf)(fp," illegal");
 						break;
 				}
 			}
-			fp->printf(fp,"\n");
+			(fp->printf)(fp,"\n");
 		}
 	}
 }
diff -rud argyll_orig/icc/icc.c argyll/icc/icc.c
--- argyll_orig/icc/icc.c	2008-01-08 00:04:01.000000000 +0100
+++ argyll/icc/icc.c	2008-01-08 00:08:31.000000000 +0100
@@ -1741,8 +1741,8 @@
 	if (verb <= 1)
 		return;
 
-	op->printf(op,"Unknown:\n");
-	op->printf(op,"  Payload size in bytes = %u\n",p->size);
+	(op->printf)(op,"Unknown:\n");
+	(op->printf)(op,"  Payload size in bytes = %u\n",p->size);
 
 	/* Print one row of binary and ASCII interpretation if verb == 2, All if == 3 */
 	/* else print all of it. */
@@ -1752,35 +1752,35 @@
 
 		c = 1;
 		if (ph != 0) {	/* Print ASCII under binary */
-			op->printf(op,"           ");
+			(op->printf)(op,"           ");
 			i = ii;				/* Swap */
 			c += 11;
 		} else {
-			op->printf(op,"    0x%04lx: ",i);
+			(op->printf)(op,"    0x%04lx: ",i);
 			ii = i;				/* Swap */
 			c += 10;
 		}
 		while (i < p->size && c < 75) {
 			if (ph == 0) 
-				op->printf(op,"%02x ",p->data[i]);
+				(op->printf)(op,"%02x ",p->data[i]);
 			else {
 				if (isprint(p->data[i]))
-					op->printf(op," %c ",p->data[i]);
+					(op->printf)(op," %c ",p->data[i]);
 				else
-					op->printf(op,"   ",p->data[i]);
+					(op->printf)(op,"   ",p->data[i]);
 			}
 			c += 3;
 			i++;
 		}
 		if (ph == 0 || i < p->size)
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 
 		if (ph == 1 && i >= p->size) {
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 			break;
 		}
 		if (ph == 1 && r > 1 && verb < 3) {
-			op->printf(op,"    ...\n");
+			(op->printf)(op,"    ...\n");
 			break;			/* Print 1 row if not verbose */
 		}
 
@@ -1971,12 +1971,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"UInt8Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"UInt8Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  %u\n",i,p->data[i]);
+			(op->printf)(op,"    %lu:  %u\n",i,p->data[i]);
 	}
 }
 
@@ -2158,12 +2158,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"UInt16Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"UInt16Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  %u\n",i,p->data[i]);
+			(op->printf)(op,"    %lu:  %u\n",i,p->data[i]);
 	}
 }
 
@@ -2345,12 +2345,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"UInt32Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"UInt32Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  %u\n",i,p->data[i]);
+			(op->printf)(op,"    %lu:  %u\n",i,p->data[i]);
 	}
 }
 
@@ -2532,12 +2532,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"UInt64Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"UInt64Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  h=%lu, l=%lu\n",i,p->data[i].h,p->data[i].l);
+			(op->printf)(op,"    %lu:  h=%lu, l=%lu\n",i,p->data[i].h,p->data[i].l);
 	}
 }
 
@@ -2719,12 +2719,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"U16Fixed16Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"U16Fixed16Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  %f\n",i,p->data[i]);
+			(op->printf)(op,"    %lu:  %f\n",i,p->data[i]);
 	}
 }
 
@@ -2906,12 +2906,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"S15Fixed16Array:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"S15Fixed16Array:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++)
-			op->printf(op,"    %lu:  %f\n",i,p->data[i]);
+			(op->printf)(op,"    %lu:  %f\n",i,p->data[i]);
 	}
 }
 
@@ -3135,12 +3135,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"XYZArray:\n");
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"XYZArray:\n");
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->size; i++) {
-			op->printf(op,"    %lu:  %s\n",i,string_XYZNumber_and_Lab(&p->data[i]));
+			(op->printf)(op,"    %lu:  %s\n",i,string_XYZNumber_and_Lab(&p->data[i]));
 			
 		}
 	}
@@ -3609,18 +3609,18 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Curve:\n");
+	(op->printf)(op,"Curve:\n");
 
 	if (p->flag == icmCurveLin) {
-		op->printf(op,"  Curve is linear\n");
+		(op->printf)(op,"  Curve is linear\n");
 	} else if (p->flag == icmCurveGamma) {
-		op->printf(op,"  Curve is gamma of %f\n",p->data[0]);
+		(op->printf)(op,"  Curve is gamma of %f\n",p->data[0]);
 	} else {
-		op->printf(op,"  No. elements = %lu\n",p->size);
+		(op->printf)(op,"  No. elements = %lu\n",p->size);
 		if (verb >= 2) {
 			unsigned long i;
 			for (i = 0; i < p->size; i++)
-				op->printf(op,"    %3lu:  %f\n",i,p->data[i]);
+				(op->printf)(op,"    %3lu:  %f\n",i,p->data[i]);
 		}
 	}
 }
@@ -3861,68 +3861,68 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Data:\n");
+	(op->printf)(op,"Data:\n");
 	switch(p->flag) {
 		case icmDataASCII:
-			op->printf(op,"  ASCII data\n");
+			(op->printf)(op,"  ASCII data\n");
 			size = p->size > 0 ? p->size-1 : 0;
 			break;
 		case icmDataBin:
-			op->printf(op,"  Binary data\n");
+			(op->printf)(op,"  Binary data\n");
 			size = p->size;
 			break;
 		case icmDataUndef:
-			op->printf(op,"  Undefined data\n");
+			(op->printf)(op,"  Undefined data\n");
 			size = p->size;
 			break;
 	}
-	op->printf(op,"  No. elements = %lu\n",p->size);
+	(op->printf)(op,"  No. elements = %lu\n",p->size);
 
 	ii = i = 0;
 	for (r = 1;; r++) {		/* count rows */
 		if (i >= size) {
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 			break;
 		}
 		if (r > 1 && verb < 2) {
-			op->printf(op,"...\n");
+			(op->printf)(op,"...\n");
 			break;			/* Print 1 row if not verbose */
 		}
 
 		c = 1;
 		if (ph != 0) {	/* Print ASCII under binary */
-			op->printf(op,"           ");
+			(op->printf)(op,"           ");
 			i = ii;
 			c += 11;
 		} else {
-			op->printf(op,"    0x%04lx: ",i);
+			(op->printf)(op,"    0x%04lx: ",i);
 			ii = i;
 			c += 10;
 		}
 		while (i < size && c < 75) {
 			if (p->flag == icmDataASCII) {
 				if (isprint(p->data[i])) {
-					op->printf(op,"%c",p->data[i]);
+					(op->printf)(op,"%c",p->data[i]);
 					c++;
 				} else {
-					op->printf(op,"\\%03o",p->data[i]);
+					(op->printf)(op,"\\%03o",p->data[i]);
 					c += 4;
 				}
 			} else {
 				if (ph == 0) 
-					op->printf(op,"%02x ",p->data[i]);
+					(op->printf)(op,"%02x ",p->data[i]);
 				else {
 					if (isprint(p->data[i]))
-						op->printf(op," %c ",p->data[i]);
+						(op->printf)(op," %c ",p->data[i]);
 					else
-						op->printf(op,"   ",p->data[i]);
+						(op->printf)(op,"   ",p->data[i]);
 				}
 				c += 3;
 			}
 			i++;
 		}
 		if (i < size)
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 		if (verb > 2 && p->flag != icmDataASCII && ph == 0)
 			ph = 1;
 		else
@@ -4112,35 +4112,35 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Text:\n");
-	op->printf(op,"  No. chars = %lu\n",p->size);
+	(op->printf)(op,"Text:\n");
+	(op->printf)(op,"  No. chars = %lu\n",p->size);
 
 	size = p->size > 0 ? p->size-1 : 0;
 	i = 0;
 	for (r = 1;; r++) {		/* count rows */
 		if (i >= size) {
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 			break;
 		}
 		if (r > 1 && verb < 2) {
-			op->printf(op,"...\n");
+			(op->printf)(op,"...\n");
 			break;			/* Print 1 row if not verbose */
 		}
 		c = 1;
-		op->printf(op,"    0x%04lx: ",i);
+		(op->printf)(op,"    0x%04lx: ",i);
 		c += 10;
 		while (i < size && c < 75) {
 			if (isprint(p->data[i])) {
-				op->printf(op,"%c",p->data[i]);
+				(op->printf)(op,"%c",p->data[i]);
 				c++;
 			} else {
-				op->printf(op,"\\%03o",p->data[i]);
+				(op->printf)(op,"\\%03o",p->data[i]);
 				c += 4;
 			}
 			i++;
 		}
 		if (i < size)
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 	}
 }
 
@@ -4445,8 +4445,8 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"DateTimeNumber:\n");
-	op->printf(op,"  Date = %s\n", string_DateTimeNumber(p));
+	(op->printf)(op,"DateTimeNumber:\n");
+	(op->printf)(op,"  Date = %s\n", string_DateTimeNumber(p));
 }
 
 /* Allocate variable sized data elements */
@@ -5951,34 +5951,34 @@
 		return;
 
 	if (p->ttype == icSigLut8Type) {
-		op->printf(op,"Lut8:\n");
+		(op->printf)(op,"Lut8:\n");
 	} else {
-		op->printf(op,"Lut16:\n");
+		(op->printf)(op,"Lut16:\n");
 	}
-	op->printf(op,"  Input Channels = %u\n",p->inputChan);
-	op->printf(op,"  Output Channels = %u\n",p->outputChan);
-	op->printf(op,"  CLUT resolution = %u\n",p->clutPoints);
-	op->printf(op,"  Input Table entries = %u\n",p->inputEnt);
-	op->printf(op,"  Output Table entries = %u\n",p->outputEnt);
-	op->printf(op,"  XYZ matrix =  %f, %f, %f\n",p->e[0][0],p->e[0][1],p->e[0][2]);
-	op->printf(op,"                %f, %f, %f\n",p->e[1][0],p->e[1][1],p->e[1][2]);
-	op->printf(op,"                %f, %f, %f\n",p->e[2][0],p->e[2][1],p->e[2][2]);
+	(op->printf)(op,"  Input Channels = %u\n",p->inputChan);
+	(op->printf)(op,"  Output Channels = %u\n",p->outputChan);
+	(op->printf)(op,"  CLUT resolution = %u\n",p->clutPoints);
+	(op->printf)(op,"  Input Table entries = %u\n",p->inputEnt);
+	(op->printf)(op,"  Output Table entries = %u\n",p->outputEnt);
+	(op->printf)(op,"  XYZ matrix =  %f, %f, %f\n",p->e[0][0],p->e[0][1],p->e[0][2]);
+	(op->printf)(op,"                %f, %f, %f\n",p->e[1][0],p->e[1][1],p->e[1][2]);
+	(op->printf)(op,"                %f, %f, %f\n",p->e[2][0],p->e[2][1],p->e[2][2]);
 
 	if (verb >= 2) {
 		unsigned int i, j, size;
 		unsigned int ii[MAX_CHAN];	/* maximum no of input channels */
 
-		op->printf(op,"  Input table:\n");
+		(op->printf)(op,"  Input table:\n");
 		for (i = 0; i < p->inputEnt; i++) {
-			op->printf(op,"    %3u: ",i);
+			(op->printf)(op,"    %3u: ",i);
 			for (j = 0; j < p->inputChan; j++)
-				op->printf(op," %1.10f",p->inputTable[j * p->inputEnt + i]);
-			op->printf(op,"\n");
+				(op->printf)(op," %1.10f",p->inputTable[j * p->inputEnt + i]);
+			(op->printf)(op,"\n");
 		}
 
-		op->printf(op,"\n  CLUT table:\n");
+		(op->printf)(op,"\n  CLUT table:\n");
 		if (p->inputChan > MAX_CHAN) {
-			op->printf(op,"  !!Can't dump > %d input channel CLUT table!!\n",MAX_CHAN);
+			(op->printf)(op,"  !!Can't dump > %d input channel CLUT table!!\n",MAX_CHAN);
 		} else {
 			size = (p->outputChan * uipow(p->clutPoints,p->inputChan));
 			for (j = 0; j < p->inputChan; j++)
@@ -5986,14 +5986,14 @@
 			for (i = 0; i < size;) {
 				unsigned int k;
 				/* Print table entry index */
-				op->printf(op,"   ");
+				(op->printf)(op,"   ");
 				for (j = p->inputChan-1; j < p->inputChan; j--)
-					op->printf(op," %2u",ii[j]);
-				op->printf(op,":");
+					(op->printf)(op," %2u",ii[j]);
+				(op->printf)(op,":");
 				/* Print table entry contents */
 				for (k = 0; k < p->outputChan; k++, i++)
-					op->printf(op," %1.10f",p->clutTable[i]);
-				op->printf(op,"\n");
+					(op->printf)(op," %1.10f",p->clutTable[i]);
+				(op->printf)(op,"\n");
 			
 				for (j = 0; j < p->inputChan; j++) { /* Increment index */
 					ii[j]++;
@@ -6004,12 +6004,12 @@
 			}
 		}
 
-		op->printf(op,"\n  Output table:\n");
+		(op->printf)(op,"\n  Output table:\n");
 		for (i = 0; i < p->outputEnt; i++) {
-			op->printf(op,"    %3u: ",i);
+			(op->printf)(op,"    %3u: ",i);
 			for (j = 0; j < p->outputChan; j++)
-				op->printf(op," %1.10f",p->outputTable[j * p->outputEnt + i]);
-			op->printf(op,"\n");
+				(op->printf)(op," %1.10f",p->outputTable[j * p->outputEnt + i]);
+			(op->printf)(op,"\n");
 		}
 
 	}
@@ -6319,12 +6319,12 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Measurement:\n");
-	op->printf(op,"  Standard Observer = %s\n", string_StandardObserver(p->observer));
-	op->printf(op,"  XYZ for Measurement Backing = %s\n", string_XYZNumber_and_Lab(&p->backing));
-	op->printf(op,"  Measurement Geometry = %s\n", string_MeasurementGeometry(p->geometry));
-	op->printf(op,"  Measurement Flare = %5.1f%%\n", p->flare * 100.0);
-	op->printf(op,"  Standard Illuminant = %s\n", string_Illuminant(p->illuminant));
+	(op->printf)(op,"Measurement:\n");
+	(op->printf)(op,"  Standard Observer = %s\n", string_StandardObserver(p->observer));
+	(op->printf)(op,"  XYZ for Measurement Backing = %s\n", string_XYZNumber_and_Lab(&p->backing));
+	(op->printf)(op,"  Measurement Geometry = %s\n", string_MeasurementGeometry(p->geometry));
+	(op->printf)(op,"  Measurement Flare = %5.1f%%\n", p->flare * 100.0);
+	(op->printf)(op,"  Standard Illuminant = %s\n", string_Illuminant(p->illuminant));
 }
 
 /* Allocate variable sized data elements */
@@ -6802,45 +6802,45 @@
 		return;
 
 	if (p->ttype == icSigNamedColorType)
-		op->printf(op,"NamedColor:\n");
+		(op->printf)(op,"NamedColor:\n");
 	else
-		op->printf(op,"NamedColor2:\n");
-	op->printf(op,"  Vendor Flag = 0x%x\n",p->vendorFlag);
-	op->printf(op,"  No. colors  = %u\n",p->count);
-	op->printf(op,"  No. dev. coords = %u\n",p->nDeviceCoords);
-	op->printf(op,"  Name prefix = '%s'\n",p->prefix);
-	op->printf(op,"  Name suffix = '%s'\n",p->suffix);
+		(op->printf)(op,"NamedColor2:\n");
+	(op->printf)(op,"  Vendor Flag = 0x%x\n",p->vendorFlag);
+	(op->printf)(op,"  No. colors  = %u\n",p->count);
+	(op->printf)(op,"  No. dev. coords = %u\n",p->nDeviceCoords);
+	(op->printf)(op,"  Name prefix = '%s'\n",p->prefix);
+	(op->printf)(op,"  Name suffix = '%s'\n",p->suffix);
 	if (verb >= 2) {
 		unsigned long i, n;
 		icmNamedColorVal *vp;
 		for (i = 0; i < p->count; i++) {
 			vp = p->data + i;
-			op->printf(op,"    Color %lu:\n",i);
-			op->printf(op,"      Name root = '%s'\n",vp->root);
+			(op->printf)(op,"    Color %lu:\n",i);
+			(op->printf)(op,"      Name root = '%s'\n",vp->root);
 
 			if (p->ttype == icSigNamedColor2Type) {
 				switch(icp->header->pcs) {
 					case icSigXYZData:
-							op->printf(op,"      XYZ = %f, %f, %f\n",
+							(op->printf)(op,"      XYZ = %f, %f, %f\n",
 							        vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]);
 						break;
 			    	case icSigLabData:
-							op->printf(op,"      Lab = %f, %f, %f\n",
+							(op->printf)(op,"      Lab = %f, %f, %f\n",
 							        vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]);
 						break;
 					default:
-							op->printf(op,"      Unexpected PCS\n");
+							(op->printf)(op,"      Unexpected PCS\n");
 						break;
 				}
 			}
 			if (p->nDeviceCoords > 0) {
-				op->printf(op,"      Device Coords = ");
+				(op->printf)(op,"      Device Coords = ");
 				for (n = 0; n < p->nDeviceCoords; n++) {
 					if (n > 0)
-						op->printf(op,", ");
-					op->printf(op,"%f",vp->deviceCoords[n]);
+						(op->printf)(op,", ");
+					(op->printf)(op,"%f",vp->deviceCoords[n]);
 				}
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 			}
 		}
 	}
@@ -7140,28 +7140,28 @@
 		return;
 
 	if (p->ttype == icSigColorantTableType)
-		op->printf(op,"ColorantTable:\n");
-	op->printf(op,"  No. colorants  = %u\n",p->count);
+		(op->printf)(op,"ColorantTable:\n");
+	(op->printf)(op,"  No. colorants  = %u\n",p->count);
 	if (verb >= 2) {
 		unsigned long i;
 		icmColorantTableVal *vp;
 		for (i = 0; i < p->count; i++) {
 			vp = p->data + i;
-			op->printf(op,"    Colorant %lu:\n",i);
-			op->printf(op,"      Name = '%s'\n",vp->name);
+			(op->printf)(op,"    Colorant %lu:\n",i);
+			(op->printf)(op,"      Name = '%s'\n",vp->name);
 
 			if (p->ttype == icSigColorantTableType) {
 				switch(pcs) {
 					case icSigXYZData:
-							op->printf(op,"      XYZ = %f, %f, %f\n",
+							(op->printf)(op,"      XYZ = %f, %f, %f\n",
 							        vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]);
 						break;
 			    	case icSigLabData:
-							op->printf(op,"      Lab = %f, %f, %f\n",
+							(op->printf)(op,"      Lab = %f, %f, %f\n",
 							        vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]);
 						break;
 					default:
-							op->printf(op,"      Unexpected PCS\n");
+							(op->printf)(op,"      Unexpected PCS\n");
 						break;
 				}
 			}
@@ -7559,98 +7559,98 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"TextDescription:\n");
+	(op->printf)(op,"TextDescription:\n");
 
 	if (p->size > 0) {
 		unsigned long size = p->size > 0 ? p->size-1 : 0;
-		op->printf(op,"  ASCII data, length %lu chars:\n",p->size);
+		(op->printf)(op,"  ASCII data, length %lu chars:\n",p->size);
 
 		i = 0;
 		for (r = 1;; r++) {		/* count rows */
 			if (i >= size) {
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 				break;
 			}
 			if (r > 1 && verb < 2) {
-				op->printf(op,"...\n");
+				(op->printf)(op,"...\n");
 				break;			/* Print 1 row if not verbose */
 			}
 			c = 1;
-			op->printf(op,"    0x%04lx: ",i);
+			(op->printf)(op,"    0x%04lx: ",i);
 			c += 10;
 			while (i < size && c < 75) {
 				if (isprint(p->desc[i])) {
-					op->printf(op,"%c",p->desc[i]);
+					(op->printf)(op,"%c",p->desc[i]);
 					c++;
 				} else {
-					op->printf(op,"\\%03o",p->desc[i]);
+					(op->printf)(op,"\\%03o",p->desc[i]);
 					c += 4;
 				}
 				i++;
 			}
 			if (i < size)
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 		}
 	} else {
-		op->printf(op,"  No ASCII data\n");
+		(op->printf)(op,"  No ASCII data\n");
 	}
 
 	/* Can't dump Unicode or ScriptCode as text with portable code */
 	if (p->ucSize > 0) {
 		unsigned long size = p->ucSize;
-		op->printf(op,"  Unicode Data, Language code 0x%x, length %lu chars\n",
+		(op->printf)(op,"  Unicode Data, Language code 0x%x, length %lu chars\n",
 		        p->ucLangCode, p->ucSize);
 		i = 0;
 		for (r = 1;; r++) {		/* count rows */
 			if (i >= size) {
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 				break;
 			}
 			if (r > 1 && verb < 2) {
-				op->printf(op,"...\n");
+				(op->printf)(op,"...\n");
 				break;			/* Print 1 row if not verbose */
 			}
 			c = 1;
-			op->printf(op,"    0x%04lx: ",i);
+			(op->printf)(op,"    0x%04lx: ",i);
 			c += 10;
 			while (i < size && c < 75) {
-				op->printf(op,"%04x ",p->ucDesc[i]);
+				(op->printf)(op,"%04x ",p->ucDesc[i]);
 				c += 5;
 				i++;
 			}
 			if (i < size)
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 		}
 	} else {
-		op->printf(op,"  No Unicode data\n");
+		(op->printf)(op,"  No Unicode data\n");
 	}
 	if (p->scSize > 0) {
 		unsigned long size = p->scSize;
-		op->printf(op,"  ScriptCode Data, Code 0x%x, length %lu chars\n",
+		(op->printf)(op,"  ScriptCode Data, Code 0x%x, length %lu chars\n",
 		        p->scCode, p->scSize);
 		i = 0;
 		for (r = 1;; r++) {		/* count rows */
 			if (i >= size) {
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 				break;
 			}
 			if (r > 1 && verb < 2) {
-				op->printf(op,"...\n");
+				(op->printf)(op,"...\n");
 				break;			/* Print 1 row if not verbose */
 			}
 			c = 1;
-			op->printf(op,"    0x%04lx: ",i);
+			(op->printf)(op,"    0x%04lx: ",i);
 			c += 10;
 			while (i < size && c < 75) {
-				op->printf(op,"%02x ",p->scDesc[i]);
+				(op->printf)(op,"%02x ",p->scDesc[i]);
 				c += 3;
 				i++;
 			}
 			if (i < size)
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 		}
 	} else {
-		op->printf(op,"  No ScriptCode data\n");
+		(op->printf)(op,"  No ScriptCode data\n");
 	}
 }
 
@@ -7842,15 +7842,15 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"DescStruct %u:\n",index);
+	(op->printf)(op,"DescStruct %u:\n",index);
 	if (verb >= 1) {
-		op->printf(op,"  Dev. Mnfctr.    = %s\n",tag2str(p->deviceMfg));	/* ~~~ */
-		op->printf(op,"  Dev. Model      = %s\n",tag2str(p->deviceModel));	/* ~~~ */
-		op->printf(op,"  Dev. Attrbts    = %s\n", string_DeviceAttributes(p->attributes.l));
-		op->printf(op,"  Dev. Technology = %s\n", string_TechnologySignature(p->technology));
+		(op->printf)(op,"  Dev. Mnfctr.    = %s\n",tag2str(p->deviceMfg));	/* ~~~ */
+		(op->printf)(op,"  Dev. Model      = %s\n",tag2str(p->deviceModel));	/* ~~~ */
+		(op->printf)(op,"  Dev. Attrbts    = %s\n", string_DeviceAttributes(p->attributes.l));
+		(op->printf)(op,"  Dev. Technology = %s\n", string_TechnologySignature(p->technology));
 		p->device.dump((icmBase *)&p->device, op,verb);
 		p->model.dump((icmBase *)&p->model, op,verb);
-		op->printf(op,"\n");
+		(op->printf)(op,"\n");
 	}
 }
 
@@ -8031,8 +8031,8 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"ProfileSequenceDesc:\n");
-	op->printf(op,"  No. elements = %u\n",p->count);
+	(op->printf)(op,"ProfileSequenceDesc:\n");
+	(op->printf)(op,"  No. elements = %u\n",p->count);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->count; i++)
@@ -8212,8 +8212,8 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Signature\n");
-	op->printf(op,"  Technology = %s\n", string_TechnologySignature(p->sig));
+	(op->printf)(op,"Signature\n");
+	(op->printf)(op,"  Technology = %s\n", string_TechnologySignature(p->sig));
 }
 
 /* Allocate variable sized data elements */
@@ -8420,16 +8420,16 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Screening:\n");
-	op->printf(op,"  Flags = %s\n", string_ScreenEncodings(p->screeningFlag));
-	op->printf(op,"  No. channels = %u\n",p->channels);
+	(op->printf)(op,"Screening:\n");
+	(op->printf)(op,"  Flags = %s\n", string_ScreenEncodings(p->screeningFlag));
+	(op->printf)(op,"  No. channels = %u\n",p->channels);
 	if (verb >= 2) {
 		unsigned long i;
 		for (i = 0; i < p->channels; i++) {
-			op->printf(op,"    %lu:\n",i);
-			op->printf(op,"      Frequency:  %f\n",p->data[i].frequency);
-			op->printf(op,"      Angle:      %f\n",p->data[i].angle);
-			op->printf(op,"      Spot shape: %s\n", string_SpotShape(p->data[i].spotShape));
+			(op->printf)(op,"    %lu:\n",i);
+			(op->printf)(op,"      Frequency:  %f\n",p->data[i].frequency);
+			(op->printf)(op,"      Angle:      %f\n",p->data[i].angle);
+			(op->printf)(op,"      Spot shape: %s\n", string_SpotShape(p->data[i].spotShape));
 		}
 	}
 }
@@ -8720,64 +8720,64 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Undercolor Removal Curve & Black Generation:\n");
+	(op->printf)(op,"Undercolor Removal Curve & Black Generation:\n");
 
 	if (p->UCRcount == 0) {
-		op->printf(op,"  UCR: Not specified\n");
+		(op->printf)(op,"  UCR: Not specified\n");
 	} else if (p->UCRcount == 1) {
-		op->printf(op,"  UCR: %f%%\n",p->UCRcurve[0]);
+		(op->printf)(op,"  UCR: %f%%\n",p->UCRcurve[0]);
 	} else {
-		op->printf(op,"  UCR curve no. elements = %u\n",p->UCRcount);
+		(op->printf)(op,"  UCR curve no. elements = %u\n",p->UCRcount);
 		if (verb >= 2) {
 			unsigned long i;
 			for (i = 0; i < p->UCRcount; i++)
-				op->printf(op,"  %3lu:  %f\n",i,p->UCRcurve[i]);
+				(op->printf)(op,"  %3lu:  %f\n",i,p->UCRcurve[i]);
 		}
 	}
 	if (p->BGcount == 0) {
-		op->printf(op,"  BG: Not specified\n");
+		(op->printf)(op,"  BG: Not specified\n");
 	} else if (p->BGcount == 1) {
-		op->printf(op,"  BG: %f%%\n",p->BGcurve[0]);
+		(op->printf)(op,"  BG: %f%%\n",p->BGcurve[0]);
 	} else {
-		op->printf(op,"  BG curve no. elements = %u\n",p->BGcount);
+		(op->printf)(op,"  BG curve no. elements = %u\n",p->BGcount);
 		if (verb >= 2) {
 			unsigned long i;
 			for (i = 0; i < p->BGcount; i++)
-				op->printf(op,"  %3lu:  %f\n",i,p->BGcurve[i]);
+				(op->printf)(op,"  %3lu:  %f\n",i,p->BGcurve[i]);
 		}
 	}
 
 	{
 		unsigned long i, r, c, size;
-		op->printf(op,"  Description:\n");
-		op->printf(op,"    No. chars = %lu\n",p->size);
+		(op->printf)(op,"  Description:\n");
+		(op->printf)(op,"    No. chars = %lu\n",p->size);
 	
 		size = p->size > 0 ? p->size-1 : 0;
 		i = 0;
 		for (r = 1;; r++) {		/* count rows */
 			if (i >= size) {
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 				break;
 			}
 			if (r > 1 && verb < 2) {
-				op->printf(op,"...\n");
+				(op->printf)(op,"...\n");
 				break;			/* Print 1 row if not verbose */
 			}
 			c = 1;
-			op->printf(op,"      0x%04lx: ",i);
+			(op->printf)(op,"      0x%04lx: ",i);
 			c += 10;
 			while (i < size && c < 73) {
 				if (isprint(p->string[i])) {
-					op->printf(op,"%c",p->string[i]);
+					(op->printf)(op,"%c",p->string[i]);
 					c++;
 				} else {
-					op->printf(op,"\\%03o",p->string[i]);
+					(op->printf)(op,"\\%03o",p->string[i]);
 					c += 4;
 				}
 				i++;
 			}
 			if (i < size)
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 		}
 	}
 }
@@ -9134,37 +9134,37 @@
 		return;
 
 	if (p->tagType == icmVideoCardGammaTableType) {
-		op->printf(op,"VideoCardGammaTable:\n");
-		op->printf(op,"  channels  = %d\n", p->u.table.channels);
-		op->printf(op,"  entries   = %d\n", p->u.table.entryCount);
-		op->printf(op,"  entrysize = %d\n", p->u.table.entrySize);
+		(op->printf)(op,"VideoCardGammaTable:\n");
+		(op->printf)(op,"  channels  = %d\n", p->u.table.channels);
+		(op->printf)(op,"  entries   = %d\n", p->u.table.entryCount);
+		(op->printf)(op,"  entrysize = %d\n", p->u.table.entrySize);
 		if (verb >= 2) {
 			/* dump array contents also */
 			for (c=0; c<p->u.table.channels; c++) {
-				op->printf(op,"  channel #%d\n",c);
+				(op->printf)(op,"  channel #%d\n",c);
 				for (i=0; i<p->u.table.entryCount; i++) {
 					if (p->u.table.entrySize == 1) {
-						op->printf(op,"    %d: %d\n",i,((ORD8 *)p->u.table.data)[c*p->u.table.entryCount+i]);
+						(op->printf)(op,"    %d: %d\n",i,((ORD8 *)p->u.table.data)[c*p->u.table.entryCount+i]);
 					}
 					else if (p->u.table.entrySize == 2) {
-						op->printf(op,"    %d: %d\n",i,((ORD16 *)p->u.table.data)[c*p->u.table.entryCount+i]);
+						(op->printf)(op,"    %d: %d\n",i,((ORD16 *)p->u.table.data)[c*p->u.table.entryCount+i]);
 					}
 				}
 			}
 		}
 	} else if (p->tagType == icmVideoCardGammaFormulaType) {
-		op->printf(op,"VideoCardGammaFormula:\n");
-		op->printf(op,"  red gamma   = %f\n", p->u.formula.redGamma);
-		op->printf(op,"  red min     = %f\n", p->u.formula.redMin);
-		op->printf(op,"  red max     = %f\n", p->u.formula.redMax);
-		op->printf(op,"  green gamma = %f\n", p->u.formula.greenGamma);
-		op->printf(op,"  green min   = %f\n", p->u.formula.greenMin);
-		op->printf(op,"  green max   = %f\n", p->u.formula.greenMax);
-		op->printf(op,"  blue gamma  = %f\n", p->u.formula.blueGamma);
-		op->printf(op,"  blue min    = %f\n", p->u.formula.blueMin);
-		op->printf(op,"  blue max    = %f\n", p->u.formula.blueMax);
+		(op->printf)(op,"VideoCardGammaFormula:\n");
+		(op->printf)(op,"  red gamma   = %f\n", p->u.formula.redGamma);
+		(op->printf)(op,"  red min     = %f\n", p->u.formula.redMin);
+		(op->printf)(op,"  red max     = %f\n", p->u.formula.redMax);
+		(op->printf)(op,"  green gamma = %f\n", p->u.formula.greenGamma);
+		(op->printf)(op,"  green min   = %f\n", p->u.formula.greenMin);
+		(op->printf)(op,"  green max   = %f\n", p->u.formula.greenMax);
+		(op->printf)(op,"  blue gamma  = %f\n", p->u.formula.blueGamma);
+		(op->printf)(op,"  blue min    = %f\n", p->u.formula.blueMin);
+		(op->printf)(op,"  blue max    = %f\n", p->u.formula.blueMax);
 	} else {
-		op->printf(op,"  Unknown tag format\n");
+		(op->printf)(op,"  Unknown tag format\n");
 	}
 }
 
@@ -9447,10 +9447,10 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Viewing Conditions:\n");
-	op->printf(op,"  XYZ value of illuminant in cd/m^2 = %s\n", string_XYZNumber(&p->illuminant));
-	op->printf(op,"  XYZ value of surround in cd/m^2   = %s\n", string_XYZNumber(&p->surround));
-	op->printf(op,"  Illuminant type = %s\n", string_Illuminant(p->stdIlluminant));
+	(op->printf)(op,"Viewing Conditions:\n");
+	(op->printf)(op,"  XYZ value of illuminant in cd/m^2 = %s\n", string_XYZNumber(&p->illuminant));
+	(op->printf)(op,"  XYZ value of surround in cd/m^2   = %s\n", string_XYZNumber(&p->surround));
+	(op->printf)(op,"  Illuminant type = %s\n", string_Illuminant(p->stdIlluminant));
 }
 
 /* Allocate variable sized data elements */
@@ -9697,69 +9697,69 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"PostScript Product name and CRD names:\n");
+	(op->printf)(op,"PostScript Product name and CRD names:\n");
 
-	op->printf(op,"  Product name:\n");
-	op->printf(op,"    No. chars = %lu\n",p->ppsize);
+	(op->printf)(op,"  Product name:\n");
+	(op->printf)(op,"    No. chars = %lu\n",p->ppsize);
 	
 	size = p->ppsize > 0 ? p->ppsize-1 : 0;
 	i = 0;
 	for (r = 1;; r++) {		/* count rows */
 		if (i >= size) {
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 			break;
 		}
 		if (r > 1 && verb < 2) {
-			op->printf(op,"...\n");
+			(op->printf)(op,"...\n");
 			break;			/* Print 1 row if not verbose */
 		}
 		c = 1;
-		op->printf(op,"      0x%04lx: ",i);
+		(op->printf)(op,"      0x%04lx: ",i);
 		c += 10;
 		while (i < size && c < 73) {
 			if (isprint(p->ppname[i])) {
-				op->printf(op,"%c",p->ppname[i]);
+				(op->printf)(op,"%c",p->ppname[i]);
 				c++;
 			} else {
-				op->printf(op,"\\%03o",p->ppname[i]);
+				(op->printf)(op,"\\%03o",p->ppname[i]);
 				c += 4;
 			}
 			i++;
 		}
 		if (i < size)
-			op->printf(op,"\n");
+			(op->printf)(op,"\n");
 	}
 
 	for (t = 0; t < 4; t++) {	/* For all 4 intents */
-		op->printf(op,"  CRD%ld name:\n",t);
-		op->printf(op,"    No. chars = %lu\n",p->crdsize[t]);
+		(op->printf)(op,"  CRD%ld name:\n",t);
+		(op->printf)(op,"    No. chars = %lu\n",p->crdsize[t]);
 		
 		size = p->crdsize[t] > 0 ? p->crdsize[t]-1 : 0;
 		i = 0;
 		for (r = 1;; r++) {		/* count rows */
 			if (i >= size) {
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 				break;
 			}
 			if (r > 1 && verb < 2) {
-				op->printf(op,"...\n");
+				(op->printf)(op,"...\n");
 				break;			/* Print 1 row if not verbose */
 			}
 			c = 1;
-			op->printf(op,"      0x%04lx: ",i);
+			(op->printf)(op,"      0x%04lx: ",i);
 			c += 10;
 			while (i < size && c < 73) {
 				if (isprint(p->crdname[t][i])) {
-					op->printf(op,"%c",p->crdname[t][i]);
+					(op->printf)(op,"%c",p->crdname[t][i]);
 					c++;
 				} else {
-					op->printf(op,"\\%03o",p->crdname[t][i]);
+					(op->printf)(op,"\\%03o",p->crdname[t][i]);
 					c += 4;
 				}
 				i++;
 			}
 			if (i < size)
-				op->printf(op,"\n");
+				(op->printf)(op,"\n");
 		}
 	}
 }
@@ -10071,36 +10071,36 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"Header:\n");
-	op->printf(op,"  size         = %d bytes\n",p->size);
-	op->printf(op,"  CMM          = %s\n",tag2str(p->cmmId));
-	op->printf(op,"  Version      = %d.%d.%d\n",p->majv, p->minv, p->bfv);
-	op->printf(op,"  Device Class = %s\n", string_ProfileClassSignature(p->deviceClass));
-	op->printf(op,"  Color Space  = %s\n", string_ColorSpaceSignature(p->colorSpace));
-	op->printf(op,"  Conn. Space  = %s\n", string_ColorSpaceSignature(p->pcs));
-	op->printf(op,"  Date, Time   = %s\n", string_DateTimeNumber(&p->date));
-	op->printf(op,"  Platform     = %s\n", string_PlatformSignature(p->platform));
-	op->printf(op,"  Flags        = %s\n", string_ProfileHeaderFlags(p->flags));
-	op->printf(op,"  Dev. Mnfctr. = %s\n", tag2str(p->manufacturer));	/* ~~~ */
-	op->printf(op,"  Dev. Model   = %s\n", tag2str(p->model));	/* ~~~ */
-	op->printf(op,"  Dev. Attrbts = %s\n", string_DeviceAttributes(p->attributes.l));
-	op->printf(op,"  Rndrng Intnt = %s\n", string_RenderingIntent(p->renderingIntent));
-	op->printf(op,"  Illuminant   = %s\n", string_XYZNumber_and_Lab(&p->illuminant));
-	op->printf(op,"  Creator      = %s\n", tag2str(p->creator));	/* ~~~ */
+	(op->printf)(op,"Header:\n");
+	(op->printf)(op,"  size         = %d bytes\n",p->size);
+	(op->printf)(op,"  CMM          = %s\n",tag2str(p->cmmId));
+	(op->printf)(op,"  Version      = %d.%d.%d\n",p->majv, p->minv, p->bfv);
+	(op->printf)(op,"  Device Class = %s\n", string_ProfileClassSignature(p->deviceClass));
+	(op->printf)(op,"  Color Space  = %s\n", string_ColorSpaceSignature(p->colorSpace));
+	(op->printf)(op,"  Conn. Space  = %s\n", string_ColorSpaceSignature(p->pcs));
+	(op->printf)(op,"  Date, Time   = %s\n", string_DateTimeNumber(&p->date));
+	(op->printf)(op,"  Platform     = %s\n", string_PlatformSignature(p->platform));
+	(op->printf)(op,"  Flags        = %s\n", string_ProfileHeaderFlags(p->flags));
+	(op->printf)(op,"  Dev. Mnfctr. = %s\n", tag2str(p->manufacturer));	/* ~~~ */
+	(op->printf)(op,"  Dev. Model   = %s\n", tag2str(p->model));	/* ~~~ */
+	(op->printf)(op,"  Dev. Attrbts = %s\n", string_DeviceAttributes(p->attributes.l));
+	(op->printf)(op,"  Rndrng Intnt = %s\n", string_RenderingIntent(p->renderingIntent));
+	(op->printf)(op,"  Illuminant   = %s\n", string_XYZNumber_and_Lab(&p->illuminant));
+	(op->printf)(op,"  Creator      = %s\n", tag2str(p->creator));	/* ~~~ */
 	if (p->icp->ver) {	/* V4.0+ feature */
 		for (i = 0; i < 16; i++) {		/* Check if ID has been set */
 			if (p->id[i] != 0)
 				break;
 		}
 		if (i < 16)
-			op->printf(op,"  ID           = %02X%02X%02X%02X%02X%02X%02X%02X"
+			(op->printf)(op,"  ID           = %02X%02X%02X%02X%02X%02X%02X%02X"
 			                               "%02X%02X%02X%02X%02X%02X%02X%02X\n",
 				p->id[0], p->id[1], p->id[2], p->id[3], p->id[4], p->id[5], p->id[6], p->id[7],
 				p->id[8], p->id[9], p->id[10], p->id[11], p->id[12], p->id[13], p->id[14], p->id[15]);
 		else
-			op->printf(op,"  ID           = <Not set>\n");
+			(op->printf)(op,"  ID           = <Not set>\n");
 	}
-	op->printf(op,"\n");
+	(op->printf)(op,"\n");
 }
 
 static void icmHeader_delete(
@@ -11349,7 +11349,7 @@
 	if (verb <= 0)
 		return;
 
-	op->printf(op,"icc:\n");
+	(op->printf)(op,"icc:\n");
 
 	/* Dump the header */
 	if (p->header != NULL)
@@ -11359,21 +11359,21 @@
 	for (i = 0; i < p->count; i++) {	/* For all the tag element data */
 		icmBase *ob;
 		int tr;
-		op->printf(op,"tag %d:\n",i);
-		op->printf(op,"  sig      %s\n",tag2str(p->data[i].sig)); 
-		op->printf(op,"  type     %s\n",tag2str(p->data[i].ttype)); 
-		op->printf(op,"  offset   %d\n", p->data[i].offset);
-		op->printf(op,"  size     %d\n", p->data[i].size);
+		(op->printf)(op,"tag %d:\n",i);
+		(op->printf)(op,"  sig      %s\n",tag2str(p->data[i].sig)); 
+		(op->printf)(op,"  type     %s\n",tag2str(p->data[i].ttype)); 
+		(op->printf)(op,"  offset   %d\n", p->data[i].offset);
+		(op->printf)(op,"  size     %d\n", p->data[i].size);
 		tr = 0;
 		if ((ob = p->data[i].objp) == NULL) {
 			/* The object is not loaded, so load it then free it */
 			if ((ob = p->read_tag(p, p->data[i].sig)) == NULL) {
-				op->printf(op,"Unable to read: %d, %s\n",p->errc,p->err);
+				(op->printf)(op,"Unable to read: %d, %s\n",p->errc,p->err);
 			}
 			tr = 1;
 		}
 		if (ob != NULL) {
-			/* op->printf(op,"  refcount %d\n", ob->refcount); */
+			/* (op->printf)(op,"  refcount %d\n", ob->refcount); */
 			ob->dump(ob,op,verb-1);
 
 			if (tr != 0) {		/* Cleanup if temporary */
@@ -11382,7 +11382,7 @@
 				p->data[i].objp = NULL;
 			}
 		}
-		op->printf(op,"\n");
+		(op->printf)(op,"\n");
 	}
 }
 
diff -rud argyll_orig/icc/iccdump.c argyll/icc/iccdump.c
--- argyll_orig/icc/iccdump.c	2008-01-08 00:04:01.000000000 +0100
+++ argyll/icc/iccdump.c	2008-01-08 00:11:55.000000000 +0100
@@ -215,13 +215,13 @@
 					else if (rv == 2) {
 						icmHeader *p = icco->header;
 						printf("Id check fails:\n");
-						op->printf(op," ID is        = %02X%02X%02X%02X%02X%02X%02X%02X"
+						(op->printf)(op," ID is        = %02X%02X%02X%02X%02X%02X%02X%02X"
 						                              "%02X%02X%02X%02X%02X%02X%02X%02X\n",
 							p->id[0], p->id[1], p->id[2], p->id[3],
 							p->id[4], p->id[5], p->id[6], p->id[7],
 							p->id[8], p->id[9], p->id[10], p->id[11],
 							p->id[12], p->id[13], p->id[14], p->id[15]);
-						op->printf(op," ID should be = %02X%02X%02X%02X%02X%02X%02X%02X"
+						(op->printf)(op," ID should be = %02X%02X%02X%02X%02X%02X%02X%02X"
 						                              "%02X%02X%02X%02X%02X%02X%02X%02X\n",
 							id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7],
 							id[8], id[9], id[10], id[11], id[12], id[13], id[14], id[15]);


--- NEW FILE argyllcms.spec ---
%define alphaversion Beta8
%define alphatag    .%{alphaversion}
%define archivename argyllV%{version}%{?alphaversion}_src.zip

Name:    argyllcms
Version: 0.70
Release: 0.8%{?alphatag}%{?dist}
Summary: ICC compatible color management system

Group:   User Interface/X
License: GPLv3 and MIT
URL:     http://www.%{name}.com/

Source0: %{url}%{archivename}
Source1: %{name}-0.70-19-color.fdi
Source2: %{name}-0.70-color-device-file.policy
Patch0:  %{name}-0.70-build.patch
# Patch by Stefan Brüns, bz421921#c18
Patch1:  %{name}-0.70-printf.patch

BuildRoot:     %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: jam, libtiff-devel, libusb-devel
BuildRequires: libX11-devel, libXext-devel, libXxf86vm-devel, libXinerama-devel
BuildRequires: libXScrnSaver-devel

Requires: udev, PolicyKit

%description
The Argyll color management system supports accurate ICC profile creation for
scanners, CMYK printers, film recorders and calibration and profiling of
displays.

Spectral sample data is supported, allowing a selection of illuminants observer
types, and paper fluorescent whitener additive compensation. Profiles can also
incorporate source specific gamut mappings for perceptual and saturation
intents. Gamut mapping and profile linking uses the CIECAM02 appearance model,
a unique gamut mapping algorithm, and a wide selection of rendering intents. It
also includes code for the fastest portable 8 bit raster color conversion
engine available anywhere, as well as support for fast, fully accurate 16 bit
conversion. Device color gamuts can also be viewed and compared using a VRML
viewer.


%package doc
Summary: Argyll CMS documentation
Group:   User Interface/X
# Does not really make sense without Argyll CMS itself
Requires: %{name} = %{version}-%{release}

%description doc
The Argyll color management system supports accurate ICC profile creation for
scanners, CMYK printers, film recorders and calibration and profiling of
displays.

This package contains the Argyll color management system documentation.


%prep
%setup -q -c
# Remove useless bundled libs to make sure we don't accidentally include them
rm -fr tiff libusb libusbw
# Make argyllcms actually build on a modern Linux system
%patch0 -p1 -b .build
# Do not use printf as a function name
%patch1 -p1 -b .printf


%build
CCOPTFLAG="%{optflags}"
PATH=$PATH:.
export CCOPTFLAG PATH

%define jam jam -d x -f../Jambase %{?_smp_mflags}

# Patching and running makeall.ksh would be easier, but that would hide build
# errors from rpm. If the build process was a real DAG a single for loop would
# be sufficient

for dir in numlib plot icc cgats ; do
   pushd $dir
      %{jam}
   popd
done

pushd rspl
   %{jam} librspl.a
popd

pushd xicc
   %{jam} libxicc.a libxcolorants.a
popd

pushd gamut
   %{jam}
popd

pushd spectro
   %{jam} libinsttypes.a
popd

for dir in xicc imdi target scanin profile link tweak render spectro rspl ; do
   pushd $dir
      %{jam}
   popd
done


%install
rm -rf %{buildroot}

# Use upstream's install logic targetting a temp dir so files can be re-sorted
# sanely later

PATH=$PATH:.
DOTDOT=$PWD/tmp

export DOTDOT PATH

for dir in gamut icc imdi link profile render scanin spectro target tweak xicc
do
   pushd $dir
      %{jam} install
   popd
done

# No business in bin
rm $DOTDOT/bin/*.txt
mv $DOTDOT/bin/*.gam .

# Licensing madness
install -p -m 0644 icc/License.txt License-icc.txt
install -p -m 0644 cgats/License.txt License-cgats.txt

ln -s ArgyllDoc.html doc/index.html

# Little CMS conflict
mv $DOTDOT/bin/icclink $DOTDOT/bin/icclink-%{name}

# Actual install phase

install -d -m 0755 %{buildroot}%{_bindir}
install -p -m 0755 tmp/bin/* %{buildroot}%{_bindir}

install -d -m 0755 %{buildroot}%{_datadir}/%{name}
install -p -m 0644 ref/* scanin/QPcard_201.c* *.gam \
        %{buildroot}%{_datadir}/%{name}
rm %{buildroot}%{_datadir}/%{name}/afiles

# Do some device permission magic
install -d -m 0755 %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
install -p -m 0644 %{SOURCE1} \
        %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/19-color.fdi

install -d -m 0755 %{buildroot}%{_datadir}/PolicyKit/policy/
install -p -m 0644 %{SOURCE2} \
        %{buildroot}%{_datadir}/PolicyKit/policy/color-device-file.policy


%clean
rm -rf %{buildroot}


%files
%defattr(0644,root,root,0755)
%doc *.txt

%attr(0755,root,root) %{_bindir}/*
%dir %{_datadir}/%{name}
%{_datadir}/%{name}/*
%{_datadir}/hal/fdi/policy/10osvendor/19-color.fdi
%{_datadir}/PolicyKit/policy/color-device-file.policy


%files doc
%defattr(0644,root,root,0755)
%doc doc/*.html doc/*.jpg doc/*.txt


%changelog
* Thu Feb 8 2008 Nicolas Mailhot <nicolas.mailhot at laposte.net>
- 0.70-0.8.Beta8
✓ update to Stefan Brüns' latest safe-printf patch (bz421921#c18)

* Thu Feb 7 2008 Nicolas Mailhot <nicolas.mailhot at laposte.net>
- 0.70-0.7.Beta8
  Finally got around packaging beta8, I suck
✓ Fedora patches merged upstream, dropped from rpm
✓ Huey handling seems sanitized (needs testing by Huey users)
âš– Upstream relicensed icc and cgats library to plain MIT license (Thanks!)

* Thu Dec 14 2007 Nicolas Mailhot <nicolas.mailhot at laposte.net>
- 0.70-0.6.Beta7
☹ fix udev typo
- 0.70-0.5.Beta7
âš– Remove files that may be GPLv2-only according to upstream

* Thu Dec 13 2007 Nicolas Mailhot <nicolas.mailhot at laposte.net>
- 0.70-0.4.Beta7
✓ move to modern PolicyKit world (David Zeuthen, Frédéric Crozat, me)

* Wed Dec 12 2007 Nicolas Mailhot <nicolas.mailhot at laposte.net>
- 0.70-0.3.Beta7
✓ integrate review feedback
- 0.70-0.2.Beta7
✓ fix buffer overflows in dispread and iccdump (credits Daniel Berrangé)
- 0.70-0.1.Beta7
✓ 0.70 beta7
➤ initial laborious packaging
✌ Build system from hell untangling by Frédéric Crozat (Mandriva), and me
✌ device permission magic by me
☣ Massively under-tested package, please report problems


Index: .cvsignore
===================================================================
RCS file: /cvs/extras/rpms/argyllcms/F-8/.cvsignore,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- .cvsignore	8 Feb 2008 18:31:29 -0000	1.1
+++ .cvsignore	8 Feb 2008 18:57:34 -0000	1.2
@@ -0,0 +1 @@
+argyllV0.70Beta8_src.zip


Index: sources
===================================================================
RCS file: /cvs/extras/rpms/argyllcms/F-8/sources,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- sources	8 Feb 2008 18:31:29 -0000	1.1
+++ sources	8 Feb 2008 18:57:34 -0000	1.2
@@ -0,0 +1 @@
+5cdc5e6cbb794a06c97f484fd8f9053f  argyllV0.70Beta8_src.zip




More information about the fedora-extras-commits mailing list