| /* | |
| * MSCMS - Color Management System for Wine | |
| * | |
| * Copyright 2004, 2005 Hans Leidekker | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| #include "config.h" | |
| #include "wine/port.h" | |
| #include "wine/debug.h" | |
| #include "wine/library.h" | |
| #include <stdarg.h> | |
| #include "windef.h" | |
| #include "winbase.h" | |
| #include "wingdi.h" | |
| #include "winuser.h" | |
| #include "icm.h" | |
| #define LCMS_API_NO_REDEFINE | |
| #define LCMS_API_FUNCTION(f) typeof(f) * p##f; | |
| #include "lcms_api.h" | |
| #undef LCMS_API_FUNCTION | |
| WINE_DEFAULT_DEBUG_CHANNEL(mscms); | |
| #ifdef HAVE_LCMS_H | |
| #ifndef SONAME_LIBLCMS | |
| #define SONAME_LIBLCMS "liblcms.so" | |
| #endif | |
| static void *lcmshandle = NULL; | |
| #endif /* HAVE_LCMS_H */ | |
| static BOOL MSCMS_init_lcms() | |
| { | |
| #ifdef HAVE_LCMS_H | |
| /* dynamically load lcms if not yet loaded */ | |
| if (!lcmshandle) | |
| { | |
| lcmshandle = wine_dlopen( SONAME_LIBLCMS, RTLD_NOW, NULL, 0 ); | |
| /* We can't really do anything useful without liblcms */ | |
| if (!lcmshandle) | |
| { | |
| WINE_MESSAGE( | |
| "Wine cannot find the LittleCMS library. To enable Wine to use color\n" | |
| "management functions please install a version of LittleCMS greater\n" | |
| "than or equal to 1.13.\n" | |
| "http://www.littlecms.com\n" ); | |
| return FALSE; | |
| } | |
| } | |
| #define LOAD_FUNCPTR(f) \ | |
| if ((p##f = wine_dlsym( lcmshandle, #f, NULL, 0 )) == NULL) \ | |
| goto sym_not_found; | |
| LOAD_FUNCPTR(cmsCloseProfile); | |
| LOAD_FUNCPTR(cmsCreate_sRGBProfile); | |
| LOAD_FUNCPTR(cmsCreateMultiprofileTransform); | |
| LOAD_FUNCPTR(cmsCreateTransform); | |
| LOAD_FUNCPTR(cmsDeleteTransform); | |
| LOAD_FUNCPTR(cmsDoTransform); | |
| LOAD_FUNCPTR(cmsOpenProfileFromMem); | |
| #undef LOAD_FUNCPTR | |
| return TRUE; | |
| sym_not_found: | |
| WINE_MESSAGE( | |
| "Wine cannot find certain functions that it needs inside the LittleCMS\n" | |
| "library. To enable Wine to use LittleCMS for color management please\n" | |
| "upgrade liblcms to at least version 1.13.\n" | |
| "http://www.littlecms.com\n" ); | |
| wine_dlclose( lcmshandle, NULL, 0 ); | |
| lcmshandle = NULL; | |
| return FALSE; | |
| #endif /* HAVE_LCMS_H */ | |
| WINE_MESSAGE( | |
| "This version of Wine was compiled without support for color management\n" | |
| "functions. This means many color functions are empty stubs and you should\n" | |
| "expect your application to fail. To enable Wine to use LittleCMS for color\n" | |
| "management please install a liblcms development package version 1.13 or\n" | |
| "higher and rebuild Wine.\n" | |
| "http://www.littlecms.com\n" ); | |
| return TRUE; | |
| } | |
| static void MSCMS_deinit_lcms() | |
| { | |
| #ifdef HAVE_LCMS_H | |
| if (lcmshandle) | |
| { | |
| wine_dlclose( lcmshandle, NULL, 0 ); | |
| lcmshandle = NULL; | |
| } | |
| #endif /* HAVE_LCMS_H */ | |
| } | |
| BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved ) | |
| { | |
| TRACE( "(%p, 0x%08lx, %p)\n", hinst, reason, reserved ); | |
| switch (reason) | |
| { | |
| case DLL_PROCESS_ATTACH: | |
| DisableThreadLibraryCalls( hinst ); | |
| return MSCMS_init_lcms(); | |
| case DLL_PROCESS_DETACH: | |
| MSCMS_deinit_lcms(); | |
| break; | |
| } | |
| return TRUE; | |
| } |