From: Guy K. K. <g....@ma...> - 2008-11-03 01:42:06
|
To check it out I have created a little SConscript file to build lcms2 as a shared library (see the SConscript at end of mail). I don't know what other libraries are needed, but I just assumed for now the usual candidates that were also needed for versino 1.1.7 ['m', 'jpeg', 'tiff', 'z']. Unfortunately there seems to be either something wrong with the code, or the code is pretty platform dependent and only works on M$ VisualWhatever 2008 (as I am implying from the included project files for that platform). Any ideas? Guy ---- Console output of build attempt ---- $ scons scons: Reading SConscript files ... scons: done reading SConscript files. scons: Building targets ... gcc -o Debug/cmscam02.os -c -Wall -fmessage-length=0 -fPIC -DEFENCE -O0 -g3 - fPIC -I/usr/include -Iinclude -Isrc/include src/cmscam02.c In file included from include/lcms2_plugin.h:34, from src/lcms2_internal.h:29, from src/cmscam02.c:27: include/lcms2.h:112:22: warning: integer constant is so large that it is unsigned include/lcms2.h:114:24: warning: integer constant is so large that it is unsigned In file included from include/lcms2_plugin.h:34, from src/lcms2_internal.h:29, from src/cmscam02.c:27: include/lcms2.h:1094: warning: type defaults to 'int' in declaration of 'wchar_t' include/lcms2.h:1094: error: expected ';', ',' or ')' before '*' token include/lcms2.h:1097: error: expected declaration specifiers or '...' before 'wchar_t' include/lcms2.h:1203: warning: 'struct tm' declared inside parameter list include/lcms2.h:1203: warning: its scope is only this definition or declaration, which is probably not what you want In file included from src/cmscam02.c:27: src/lcms2_internal.h:396: warning: useless storage class specifier in empty declaration src/lcms2_internal.h:466: warning: 'struct _cmstransform_struct' declared inside parameter list scons: *** [Debug/cmscam02.os] Error 1 scons: building terminated because of errors. ---- SConscript (could/should work on Linux?) ---- import os import os.path # Get build mode and check if the user has been naughty: # only 'debug' or 'release' allowed build_mode = ARGUMENTS.get('mode', 'debug') #holds current mode build_mode = build_mode.lower() if not (build_mode in ['debug', 'release']): print "Error: expected 'debug' or 'release', found: " + build_mode Exit(1) ## Project settings: SHARED_OBJECT_NAME = 'lcms2' SOURCE_PATH_PREFIX = 'src' CODE_EXTENSIONS = ['.c'] DESTINATION_PATHS = {'debug': 'Debug', 'release': 'Release'} destination_path = DESTINATION_PATHS[build_mode] ## Library and code settings: LIBS = ['m', 'jpeg', 'tiff', 'z'] LIB_PATHS = ['/usr/lib'] INCLUDE_PATHS = ['/usr/include', 'include'] ## Compiler settings: CC_FLAGS = ['-Wall', '-fmessage-length=0', '-fPIC'] MODE_FLAGS = {'debug': ['-DEFENCE', '-O0', '-g3'], 'release': ['-O3']} LINKFLAGS = ['-Wl,-no-undefined'] #### Do the building: def get_source_files(): source_files = os.listdir(os.path.join(os.getcwd(), SOURCE_PATH_PREFIX)) source_files = [x for x in source_files \ if os.path.splitext(x)[1] in CODE_EXTENSIONS] source_files = [os.path.join(destination_path, x) for x in source_files] return source_files env = Environment() env.Repository(SOURCE_PATH_PREFIX) env.BuildDir(destination_path, SOURCE_PATH_PREFIX, duplicate=False) module = env.SharedLibrary(target=SHARED_OBJECT_NAME, source=get_source_files(), LIBS=LIBS, LIBPATH=LIB_PATHS, CPPPATH=INCLUDE_PATHS, CCFLAGS=CC_FLAGS + MODE_FLAGS[build_mode], SHLIBPREFIX='lib', SHLIBSUFFIX='.so', LINKFLAGS=LINKFLAGS) -- Guy K. Kloss Institute of Information and Mathematical Sciences Te Kura Putaiao o Mohiohio me Pangarau Room 2.63, Quad Block A Building Massey University, Auckland, Albany Private Bag 102 904, North Shore Mail Centre voice: +64 9 414-0800 ext. 9585 fax: +64 9 441-8181 eMail: G....@ma... http://iims.massey.ac.nz |
From: Kai-Uwe B. <ku...@gm...> - 2008-11-03 07:06:29
Attachments:
lcms-2.0preview-11-2-2008.diff
|
Hello, attached you will find a patch for basically compiling the library and tifficc. It consists of a trivial makefile and some fixes/hacks (take your pick;) to let the code run on Linux. hope this helps, Kai-Uwe Behrmann -- developing for colour management www.behrmann.name + www.oyranos.org Am 03.11.08, 14:42 +1300 schrieb Guy K. Kloss: > Unfortunately there seems to be either something wrong with the code, or the > Any ideas? |
From: Hal V. E. <hv...@as...> - 2008-11-03 23:36:30
|
On Monday 03 November 2008 00:21:35 Kai-Uwe Behrmann wrote: > Hello, > > attached you will find a patch for basically compiling the library and > tifficc. It consists of a trivial makefile and some fixes/hacks (take your > pick;) to let the code run on Linux. > > hope this helps, > Kai-Uwe Behrmann It also needs: #include <stddef.h> in lcms2.h to build. It also needs -fPIC added to the CFLAGS on amd64 systems. Hal |
From: Guy K. K. <g....@ma...> - 2008-11-04 21:58:45
|
Thanks to Kai-Uwe and Hal for the proposed fixes. I got further, but it still doesn't want to build :-/ On Mon, 03 Nov 2008 21:21:35 Kai-Uwe Behrmann wrote: > attached you will find a patch for basically compiling the library and > tifficc. It consists of a trivial makefile and some fixes/hacks (take your > pick;) to let the code run on Linux. I couldn't find a make file, just the diff for lcms2.h containing the added pre-processor macros. On Tue, 04 Nov 2008 12:36:16 Hal V. Engel wrote: > It also needs: > > #include <stddef.h> > > in lcms2.h to build. It also needs -fPIC added to the CFLAGS on amd64 > systems. And I needed apparently a -DNON_WINDOWS switch for gcc. Next to a bag full of warnings is now barfs at at cmscnvrt.c here: src/cmscnvrt.c:429: error: static declaration of '_cmsDefaultICCintents' follows non-static declaration src/cmscnvrt.c:45: error: previous declaration of '_cmsDefaultICCintents' was here scons: *** [Debug/cmscnvrt.os] Error 1 scons: building terminated because of errors. Just removing the keyword "static" from the implementation in line 428 doesn't help, as something still forks up somewhere else in cmsintrp.c then: src/cmsintrp.c:189: error: conflicting types for '_cmsComputeInterpParams' src/lcms2_internal.h:312: error: previous declaration of '_cmsComputeInterpParams' was here scons: *** [Debug/cmsintrp.os] Error 1 scons: building terminated because of errors. Any further input would be highly welcome. BTW, did it actually already compile for you (Kai-Uwe and Hal) on a non-Wintendo platform? Guy -- Guy K. Kloss Institute of Information and Mathematical Sciences Te Kura Putaiao o Mohiohio me Pangarau Room 2.63, Quad Block A Building Massey University, Auckland, Albany Private Bag 102 904, North Shore Mail Centre voice: +64 9 414-0800 ext. 9585 fax: +64 9 441-8181 eMail: G....@ma... http://iims.massey.ac.nz |
From: Hal V. E. <hv...@as...> - 2008-11-05 00:39:01
|
On Tuesday 04 November 2008 13:34:23 Guy K. Kloss wrote: > Thanks to Kai-Uwe and Hal for the proposed fixes. I got further, but it > still doesn't want to build :-/ > > On Mon, 03 Nov 2008 21:21:35 Kai-Uwe Behrmann wrote: > > attached you will find a patch for basically compiling the library and > > tifficc. It consists of a trivial makefile and some fixes/hacks (take > > your pick;) to let the code run on Linux. > > I couldn't find a make file, just the diff for lcms2.h containing the added > pre-processor macros. The patch has the makefile. I only had to add the include for stddef.h and add -fPIC to the CFLAGS line of the makefile that the patch created and it built. > > On Tue, 04 Nov 2008 12:36:16 Hal V. Engel wrote: > > It also needs: > > > > #include <stddef.h> > > > > in lcms2.h to build. It also needs -fPIC added to the CFLAGS on amd64 > > systems. > > And I needed apparently a -DNON_WINDOWS switch for gcc. I didn't need to do this. The only place NON_WINDOWS is used is in cmscgats.c and it is used to #include <sys/io.h>, define the directory seperator character and in a function that checks to see if the path is absolute. Adding this to my CFLAGS didn't seem to affect compilation at all on my system. Does cmscgats.c even need anything form sys/io.h? > > Next to a bag full of warnings is now barfs at at cmscnvrt.c here: > > src/cmscnvrt.c:429: error: static declaration of '_cmsDefaultICCintents' > follows non-static declaration > src/cmscnvrt.c:45: error: previous declaration of '_cmsDefaultICCintents' > was here > scons: *** [Debug/cmscnvrt.os] Error 1 > scons: building terminated because of errors. > > > Just removing the keyword "static" from the implementation in line 428 > doesn't help, as something still forks up somewhere else in cmsintrp.c > then: > > src/cmsintrp.c:189: error: conflicting types for '_cmsComputeInterpParams' > src/lcms2_internal.h:312: error: previous declaration of > '_cmsComputeInterpParams' was here > scons: *** [Debug/cmsintrp.os] Error 1 > scons: building terminated because of errors. > > > Any further input would be highly welcome. BTW, did it actually already > compile for you (Kai-Uwe and Hal) on a non-Wintendo platform? Yes but it appears that NON_WINDOWS does need to be defined to get the correct definition for the directory separator and to make the absolute path function work correctly. Hal |
From: Guy K. K. <g....@ma...> - 2008-11-05 01:19:06
Attachments:
SConstruct
|
On Wed, 05 Nov 2008 13:38:55 Hal V. Engel wrote: > The patch has the makefile. I only had to add the include for stddef.h and > add -fPIC to the CFLAGS line of the makefile that the patch created and it > built. Yes. My bad. Too dumb to use a GUI app (Kompare) that my mailer launched on the click onto the file ... :-/ > I didn't need to do this. The only place NON_WINDOWS is used is in > cmscgats.c and it is used to #include <sys/io.h>, define the directory > seperator character and in a function that checks to see if the path is > absolute. Adding this to my CFLAGS didn't seem to affect compilation at all > on my system. Does cmscgats.c even need anything form sys/io.h? Yepp, now it also works without that one, after applying Kai-Uwe's patch *properly*. And now I can also build it using my SConscript (attached, for whoever likes SCons better than make, like I do). Guy -- Guy K. Kloss Institute of Information and Mathematical Sciences Te Kura Putaiao o Mohiohio me Pangarau Room 2.63, Quad Block A Building Massey University, Auckland, Albany Private Bag 102 904, North Shore Mail Centre voice: +64 9 414-0800 ext. 9585 fax: +64 9 441-8181 eMail: G....@ma... http://iims.massey.ac.nz |
From: Hal V. E. <hv...@as...> - 2008-11-05 19:48:52
Attachments:
SConstruct
|
On Tuesday 04 November 2008 17:18:58 Guy K. Kloss wrote: > On Wed, 05 Nov 2008 13:38:55 Hal V. Engel wrote: > > The patch has the makefile. I only had to add the include for stddef.h > > and add -fPIC to the CFLAGS line of the makefile that the patch created > > and it built. > > Yes. My bad. Too dumb to use a GUI app (Kompare) that my mailer launched on > the click onto the file ... :-/ > > > I didn't need to do this. The only place NON_WINDOWS is used is in > > cmscgats.c and it is used to #include <sys/io.h>, define the directory > > seperator character and in a function that checks to see if the path is > > absolute. Adding this to my CFLAGS didn't seem to affect compilation at > > all on my system. Does cmscgats.c even need anything form sys/io.h? > > Yepp, now it also works without that one, after applying Kai-Uwe's patch > *properly*. And now I can also build it using my SConscript (attached, for > whoever likes SCons better than make, like I do). You still need to set -DNON_WINDOWS since this will be needed for the CGATS code to work correctly on non-Windows systems. Here is a modified SConstruct that will set this correctly based the OS of the build machine. Hal |