]>
Commit | Line | Data |
---|---|---|
1e59de90 TL |
1 | cmake_minimum_required(VERSION 3.4) |
2 | ||
3 | include(GNUInstallDirs) | |
4 | ||
5 | project(FreeImage C CXX) | |
6 | ||
7 | if(MSVC) | |
8 | add_definitions("-D_CRT_SECURE_NO_WARNINGS") | |
9 | set(CMAKE_CXX_FLAGS "/wd4828 ${CMAKE_CXX_FLAGS}") | |
10 | endif() | |
11 | ||
12 | find_package(ZLIB REQUIRED) | |
13 | find_package(PNG REQUIRED) | |
14 | find_package(JPEG REQUIRED) | |
15 | find_package(TIFF REQUIRED) | |
16 | find_package(OpenJPEG REQUIRED) | |
17 | find_package(WebP REQUIRED) | |
18 | find_package(JXR REQUIRED) | |
19 | find_package(LibRaw REQUIRED) | |
20 | find_package(OpenEXR REQUIRED) | |
21 | ||
22 | option(BUILD_SHARED_LIBS "Build shared libraries" ON) | |
23 | option(INSTALL_HEADERS "Install the development headers" ON) | |
24 | ||
25 | set(REAL_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Source) | |
26 | ||
27 | # Add a debug postfix | |
28 | set(CMAKE_DEBUG_POSTFIX "d") | |
29 | ||
30 | # List the public header files | |
31 | set(PUBLIC_HEADERS ${REAL_SOURCE_DIR}/FreeImage.h) | |
32 | ||
33 | # List the private header files | |
34 | set(ROOT_PRIVATE_HEADERS ${REAL_SOURCE_DIR}/CacheFile.h | |
35 | ${REAL_SOURCE_DIR}/FreeImageIO.h | |
36 | ${REAL_SOURCE_DIR}/MapIntrospector.h | |
37 | ${REAL_SOURCE_DIR}/Plugin.h | |
38 | ${REAL_SOURCE_DIR}/Quantizers.h | |
39 | ${REAL_SOURCE_DIR}/ToneMapping.h | |
40 | ${REAL_SOURCE_DIR}/Utilities.h) | |
41 | ||
42 | file(GLOB FREEIMAGE_PRIVATE_HEADERS ${REAL_SOURCE_DIR}/FreeImage/*.h) | |
43 | file(GLOB FREEIMAGE_TOOLKIT_PRIVATE_HEADERS ${REAL_SOURCE_DIR}/FreeImageToolkit/*.h) | |
44 | file(GLOB METADATA_PRIVATE_HEADERS ${REAL_SOURCE_DIR}/Metadata/*.h) | |
45 | ||
46 | set(PRIVATE_HEADERS ${ROOT_PRIVATE_HEADERS} | |
47 | ${FREEIMAGE_PRIVATE_HEADERS} | |
48 | ${FREEIMAGE_TOOLKIT_PRIVATE_HEADERS} | |
49 | ${METADATA_PRIVATE_HEADERS}) | |
50 | ||
51 | # List the source files | |
52 | file(GLOB DEPRECATION_SRCS ${REAL_SOURCE_DIR}/DeprecationManager/*.cpp) | |
53 | file(GLOB FREEIMAGE_TOOLKIT_SRCS ${REAL_SOURCE_DIR}/FreeImageToolkit/*.cpp) | |
54 | file(GLOB FREEIMAGE_SRCS ${REAL_SOURCE_DIR}/FreeImage/*.cpp) | |
55 | file(GLOB METADATA_SRCS ${REAL_SOURCE_DIR}/Metadata/*.cpp) | |
56 | ||
57 | # The G3 plugin is disabled because it require the private copy of tiff | |
58 | list(REMOVE_ITEM FREEIMAGE_SRCS ${REAL_SOURCE_DIR}/FreeImage/PluginG3.cpp) | |
59 | ||
60 | # The JPEGTransform plugin is disable because it requires a private copy of jpeg | |
61 | list(REMOVE_ITEM FREEIMAGE_TOOLKIT_SRCS ${REAL_SOURCE_DIR}/FreeImageToolkit/JPEGTransform.cpp) | |
62 | ||
63 | ||
64 | set(SRCS ${DEPRECATION_SRCS} | |
65 | ${FREEIMAGE_SRCS} | |
66 | ${FREEIMAGE_TOOLKIT_SRCS} | |
67 | ${METADATA_SRCS} | |
68 | ) | |
69 | ||
70 | # If FreeImage is used as a static library, FREEIMAGE_LIB | |
71 | # needs to be defined (at the C preprocessor level) to correctly | |
72 | # define (to nothing instead of _declspec(dllimport) ) the DLL_API macro. | |
73 | # For this purpouse we include (depending on the BUILD_SHARED_LIBS ) | |
74 | # the appropriate FreeImageConfig.h . | |
75 | if(BUILD_SHARED_LIBS) | |
76 | configure_file(${CMAKE_CURRENT_SOURCE_DIR}/FreeImageConfig-dynamic.h ${CMAKE_CURRENT_BINARY_DIR}/FreeImageConfig.h) | |
77 | else() | |
78 | configure_file(${CMAKE_CURRENT_SOURCE_DIR}/FreeImageConfig-static.h ${CMAKE_CURRENT_BINARY_DIR}/FreeImageConfig.h) | |
79 | endif() | |
80 | list(APPEND PUBLIC_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/FreeImageConfig.h) | |
81 | ||
82 | add_library(FreeImage ${SRCS} ${PRIVATE_HEADERS} ${PUBLIC_HEADERS}) | |
83 | ||
84 | if(BUILD_SHARED_LIBS) | |
85 | target_compile_definitions(FreeImage PRIVATE -DFREEIMAGE_EXPORTS) | |
86 | else() | |
87 | target_compile_definitions(FreeImage PRIVATE -DFREEIMAGE_LIB) | |
88 | endif() | |
89 | ||
90 | target_include_directories(FreeImage PRIVATE ${REAL_SOURCE_DIR} | |
91 | ${ZLIB_INCLUDE_DIRS} | |
92 | ${JPEG_INCLUDE_DIRS} | |
93 | ${TIFF_INCLUDE_DIRS} | |
94 | ${PNG_INCLUDE_DIRS} | |
95 | ${OPENJPEG_INCLUDE_DIRS} | |
96 | ${WEBP_INCLUDE_DIRS} | |
97 | ${JXR_INCLUDE_DIRS} | |
98 | ${LibRaw_INCLUDE_DIRS} | |
99 | ${CMAKE_CURRENT_BINARY_DIR} | |
100 | PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) | |
101 | ||
102 | ||
103 | target_link_libraries(FreeImage ${ZLIB_LIBRARIES} | |
104 | ${JPEG_LIBRARIES} | |
105 | ${TIFF_LIBRARIES} | |
106 | ${PNG_LIBRARIES} | |
107 | ${OPENJPEG_LIBRARIES} | |
108 | ${WEBP_LIBRARIES} | |
109 | ${JXR_LIBRARIES} | |
110 | ${LibRaw_LIBRARIES} | |
111 | OpenEXR::IlmImf) | |
112 | ||
113 | target_compile_definitions(FreeImage PRIVATE ${PNG_DEFINITIONS}) | |
114 | ||
115 | # FreeImagePlus | |
116 | file(GLOB FREEIMAGEPLUS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Wrapper/FreeImagePlus/src/*.cpp) | |
117 | add_library(FreeImagePlus | |
118 | ${FREEIMAGEPLUS_SOURCES} | |
119 | ${CMAKE_CURRENT_SOURCE_DIR}/Wrapper/FreeImagePlus/FreeImagePlus.h | |
120 | ${CMAKE_CURRENT_SOURCE_DIR}/Wrapper/FreeImagePlus/FreeImagePlus.rc) | |
121 | ||
122 | if(BUILD_SHARED_LIBS) | |
123 | target_compile_definitions(FreeImagePlus PRIVATE -DFIP_EXPORTS) | |
124 | else() | |
125 | target_compile_definitions(FreeImagePlus PRIVATE -DFREEIMAGE_LIB) | |
126 | endif() | |
127 | ||
128 | target_include_directories(FreeImagePlus PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/Wrapper/FreeImagePlus | |
129 | ${CMAKE_CURRENT_BINARY_DIR} | |
130 | ${REAL_SOURCE_DIR} | |
131 | PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) | |
132 | ||
133 | target_link_libraries(FreeImagePlus PUBLIC FreeImage) | |
134 | ||
135 | list(APPEND PUBLIC_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/Wrapper/FreeImagePlus/FreeImagePlus.h) | |
136 | ||
137 | install(TARGETS FreeImage FreeImagePlus | |
138 | EXPORT freeimage-targets | |
139 | COMPONENT runtime | |
140 | RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" | |
141 | LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" | |
142 | ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") | |
143 | ||
144 | install(EXPORT freeimage-targets NAMESPACE freeimage:: DESTINATION share/freeimage) | |
145 | ||
146 | file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/freeimage-config.cmake" | |
147 | "include(CMakeFindDependencyMacro) | |
148 | find_dependency(ZLIB) | |
149 | find_dependency(PNG) | |
150 | find_dependency(JPEG) | |
151 | find_dependency(TIFF) | |
152 | find_dependency(OpenJPEG) | |
153 | find_dependency(WebP) | |
154 | find_dependency(JXR) | |
155 | find_dependency(LibRaw) | |
156 | find_dependency(OpenEXR) | |
157 | include(\"\${CMAKE_CURRENT_LIST_DIR}/freeimage-targets.cmake\") | |
158 | ") | |
159 | ||
160 | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freeimage-config.cmake DESTINATION share/freeimage) | |
161 | if(INSTALL_HEADERS) | |
162 | install(FILES ${PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) | |
163 | endif() |