1 # Build scripts are adopted to OpenCV project
2 # Main CMakeLists.txt to build the OpenJPEG project using CMake (www.cmake.org)
3 # Written by Mathieu Malaterre
5 cmake_policy(SET CMP0003 NEW)
7 cmake_policy(SET CMP0042 NEW)
10 set(OPENJPEG_LIBRARY_NAME libopenjp2)
14 ocv_warnings_disable(CMAKE_C_FLAGS
15 -Wimplicit-const-int-float-conversion # clang
16 -Wunused-but-set-variable # clang15
19 #-----------------------------------------------------------------------------
20 # OPENJPEG version number, useful for packaging and doxygen doc:
21 set(OPENJPEG_VERSION_MAJOR 2)
22 set(OPENJPEG_VERSION_MINOR 4)
23 set(OPENJPEG_VERSION_BUILD 0)
25 "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}")
27 "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}")
29 # Because autotools does not support X.Y notation for SOVERSION, we have to use
30 # two numbering, one for the openjpeg version and one for openjpeg soversion
48 # above is the recommendation by the OPJ team. If you really need to override this default,
49 # you can specify your own OPENJPEG_SOVERSION at cmake configuration time:
50 # cmake -DOPENJPEG_SOVERSION:STRING=42 /path/to/openjpeg
51 if(NOT OPENJPEG_SOVERSION)
52 set(OPENJPEG_SOVERSION 7)
55 set(OPENJPEG_LIBRARY_PROPERTIES
56 VERSION "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}"
57 SOVERSION "${OPENJPEG_SOVERSION}"
60 set(OPENJPEG_BUILD "opencv-${OPENCV_VERSION}-openjp2-${OPENJPEG_VERSION}")
61 if(CMAKE_BUILD_TYPE STREQUAL "Debug")
62 set(OPENJPEG_BUILD "${OPENJPEG_BUILD}-debug")
65 message(STATUS "OpenJPEG: VERSION = ${OPENJPEG_VERSION}, BUILD = ${OPENJPEG_BUILD}")
67 # --------------------------------------------------------------------------
68 # On Visual Studio 8 MS deprecated C. This removes all 1.276E1265 security
74 if(NOT ITK_ENABLE_VISUAL_STUDIO_DEPRECATED_C_WARNINGS)
76 -D_CRT_FAR_MAPPINGS_NO_DEPRECATE
77 -D_CRT_IS_WCTYPE_NO_DEPRECATE
78 -D_CRT_MANAGED_FP_NO_DEPRECATE
79 -D_CRT_NONSTDC_NO_DEPRECATE
80 -D_CRT_SECURE_NO_DEPRECATE
81 -D_CRT_SECURE_NO_DEPRECATE_GLOBALS
82 -D_CRT_SETERRORMODE_BEEP_SLEEP_NO_DEPRECATE
83 -D_CRT_TIME_FUNCTIONS_NO_DEPRECATE
84 -D_CRT_VCCLRIT_NO_DEPRECATE
85 -D_SCL_SECURE_NO_DEPRECATE
93 #-----------------------------------------------------------------------------
95 include(TestBigEndian)
96 test_big_endian(OPJ_BIG_ENDIAN)
98 #-----------------------------------------------------------------------------
99 # opj_config.h generation (1/2)
101 # Check if some include files are provided by the system
102 # These files are mandatory, so if they are not provided OpenJPEG library can't be built
103 include(CheckIncludeFile)
104 macro(ensure_file_include INCLUDE_FILENAME VARIABLE_NAME MANDATORY_STATUS)
105 check_include_file(${INCLUDE_FILENAME} ${VARIABLE_NAME})
106 if(NOT ${VARIABLE_NAME})
107 if(${MANDATORY_STATUS})
108 message(STATUS "The file '${INCLUDE_FILENAME}' is mandatory for OpenJPEG build, but not found on your system")
111 message(STATUS "The file '${INCLUDE_FILENAME}' is optional for OpenJPEG build and not found on your system."
112 " Internal implementation will be used.")
117 ensure_file_include("string.h" HAVE_STRING_H YES)
118 ensure_file_include("memory.h" HAVE_MEMORY_H YES)
119 ensure_file_include("stdlib.h" HAVE_STDLIB_H YES)
120 ensure_file_include("stdio.h" HAVE_STDIO_H YES)
121 ensure_file_include("math.h" HAVE_MATH_H YES)
122 ensure_file_include("float.h" HAVE_FLOAT_H YES)
123 ensure_file_include("time.h" HAVE_TIME_H YES)
124 ensure_file_include("stdarg.h" HAVE_STDARG_H YES)
125 ensure_file_include("ctype.h" HAVE_CTYPE_H YES)
126 ensure_file_include("assert.h" HAVE_ASSERT_H YES)
128 # For the following files, we provide an alternative, they are not mandatory
129 ensure_file_include("stdint.h" OPJ_HAVE_STDINT_H NO)
130 ensure_file_include("inttypes.h" OPJ_HAVE_INTTYPES_H NO)
132 # why check this one ? for openjpip ?
133 CHECK_INCLUDE_FILE("strings.h" HAVE_STRINGS_H)
134 CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H)
135 CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H)
136 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
138 # Allocating Aligned Memory Blocks
139 include(CheckIncludeFiles)
140 check_include_files(malloc.h OPJ_HAVE_MALLOC_H)
141 include(CheckSymbolExists)
142 # _aligned_alloc https://msdn.microsoft.com/en-us/library/8z34s9c6.aspx
143 check_symbol_exists(_aligned_malloc malloc.h OPJ_HAVE__ALIGNED_MALLOC)
144 # posix_memalign (needs _POSIX_C_SOURCE >= 200112L on Linux)
145 set(_prev_CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS})
146 set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=200112L)
147 check_symbol_exists(posix_memalign stdlib.h OPJ_HAVE_POSIX_MEMALIGN)
148 set(CMAKE_REQUIRED_DEFINITIONS ${_prev_CMAKE_REQUIRED_DEFINITIONS})
149 unset(_prev_CMAKE_REQUIRED_DEFINITIONS)
150 # memalign (obsolete)
151 check_symbol_exists(memalign malloc.h OPJ_HAVE_MEMALIGN)
152 #-----------------------------------------------------------------------------
153 # opj_config.h generation (2/2)
155 ${CMAKE_CURRENT_LIST_DIR}/openjp2/opj_config.h.cmake.in
156 ${CMAKE_CURRENT_BINARY_DIR}/openjp2/opj_config.h
161 ${CMAKE_CURRENT_LIST_DIR}/openjp2/opj_config_private.h.cmake.in
162 ${CMAKE_CURRENT_BINARY_DIR}/openjp2/opj_config_private.h
166 add_subdirectory(openjp2)
168 set_target_properties(${OPENJPEG_LIBRARY_NAME}
170 OUTPUT_NAME ${OPENJPEG_LIBRARY_NAME}
171 DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
172 COMPILE_PDB_NAME ${OPENJPEG_LIBRARY_NAME}
173 COMPILE_PDB_NAME_DEBUG "${OPENJPEG_LIBRARY_NAME}${OPENCV_DEBUG_POSTFIX}"
174 ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH}
177 if(ENABLE_SOLUTION_FOLDERS)
178 set_target_properties(${OPENJPEG_LIBRARY_NAME}
184 ocv_install_3rdparty_licenses(${OPENJPEG_LIBRARY_NAME} README.md LICENSE)
186 # Setting all necessary variables
187 set(OPENJPEG_LIBRARIES ${OPENJPEG_LIBRARY_NAME} PARENT_SCOPE)
188 set(OPENJPEG_VERSION ${OPENJPEG_VERSION} PARENT_SCOPE)
189 set(OPENJPEG_MAJOR_VERSION ${OPENJPEG_VERSION_MAJOR} PARENT_SCOPE)
190 set(OPENJPEG_MINOR_VERSION ${OPENJPEG_VERSION_MINOR} PARENT_SCOPE)
191 set(OPENJPEG_BUILD_VERSION ${OPENJPEG_VERSION_BUILD} PARENT_SCOPE)
192 get_target_property(_openjpeg_include_dirs ${OPENJPEG_LIBRARY_NAME} INCLUDE_DIRECTORIES)
193 set(OPENJPEG_INCLUDE_DIRS ${_openjpeg_include_dirs} PARENT_SCOPE)
195 # OpenJPEG can't be built only if configuration script doesn't encounter any problem
196 if(NOT DEFINED OCV_CAN_BUILD_OPENJPEG)
197 # all prerequisites are fulfilled
198 set(OCV_CAN_BUILD_OPENJPEG TRUE PARENT_SCOPE)