]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/tools/vcpkg/ports/ffmpeg/portfile.cmake
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / tools / vcpkg / ports / ffmpeg / portfile.cmake
1 vcpkg_from_github(
2 OUT_SOURCE_PATH SOURCE_PATH
3 REPO ffmpeg/ffmpeg
4 REF n4.3.2
5 SHA512 95e6fdc5980d2940cac33be9015e3acc2e1ce5247ef92211889fcf120add1e6ef01089ca2b8d59c13f91761757ebfe9819dc87a24f690edcafa7e0626f06f64e
6 HEAD_REF master
7 PATCHES
8 0001-create-lib-libraries.patch
9 0003-fix-windowsinclude.patch
10 0004-fix-debug-build.patch
11 0006-fix-StaticFeatures.patch
12 0007-fix-lib-naming.patch
13 0008-Fix-wavpack-detection.patch
14 0009-Fix-fdk-detection.patch
15 0010-Fix-x264-detection.patch
16 0011-Fix-x265-detection.patch
17 0012-Fix-ssl-110-detection.patch
18 0013-define-WINVER.patch
19 0014-avfilter-dependency-fix.patch # http://ffmpeg.org/pipermail/ffmpeg-devel/2021-February/275819.html
20 0015-Fix-xml2-detection.patch
21 0016-configure-dnn-needs-avformat.patch # http://ffmpeg.org/pipermail/ffmpeg-devel/2021-May/279926.html
22 )
23
24 if (SOURCE_PATH MATCHES " ")
25 message(FATAL_ERROR "Error: ffmpeg will not build with spaces in the path. Please use a directory with no spaces")
26 endif()
27
28
29 if(${VCPKG_TARGET_ARCHITECTURE} STREQUAL x86)
30 # ffmpeg nasm build gives link error on x86, so fall back to yasm
31 vcpkg_find_acquire_program(YASM)
32 get_filename_component(YASM_EXE_PATH ${YASM} DIRECTORY)
33 vcpkg_add_to_path(${YASM_EXE_PATH})
34 else()
35 vcpkg_find_acquire_program(NASM)
36 get_filename_component(NASM_EXE_PATH ${NASM} DIRECTORY)
37 vcpkg_add_to_path(${NASM_EXE_PATH})
38 endif()
39
40 if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
41 #We're assuming that if we're building for Windows we're using MSVC
42 set(INCLUDE_VAR "INCLUDE")
43 set(LIB_PATH_VAR "LIB")
44 else()
45 set(INCLUDE_VAR "CPATH")
46 set(LIB_PATH_VAR "LIBRARY_PATH")
47 endif()
48
49 set(OPTIONS "--enable-pic --disable-doc --enable-debug --enable-runtime-cpudetect")
50
51 if(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
52 set(OPTIONS "${OPTIONS} --disable-asm --disable-x86asm")
53 endif()
54 if(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
55 set(OPTIONS "${OPTIONS} --enable-asm --disable-x86asm")
56 endif()
57 if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
58 set(OPTIONS "${OPTIONS} --enable-asm --enable-x86asm")
59 endif()
60
61 if(VCPKG_TARGET_IS_WINDOWS)
62 if(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
63 vcpkg_acquire_msys(MSYS_ROOT
64 DIRECT_PACKAGES
65 # Required for "cpp.exe" preprocessor
66 "https://repo.msys2.org/msys/x86_64/gcc-9.3.0-1-x86_64.pkg.tar.xz"
67 76af0192a092278e6b26814b2d92815a2c519902a3fec056b057faec19623b1770ac928a59a39402db23cfc23b0d7601b7f88b367b27269361748c69d08654b2
68 "https://repo.msys2.org/msys/x86_64/isl-0.22.1-1-x86_64.pkg.tar.xz"
69 f4db50d00bad0fa0abc6b9ad965b0262d936d437a9faa35308fa79a7ee500a474178120e487b2db2259caf51524320f619e18d92acf4f0b970b5cbe5cc0f63a2
70 "https://repo.msys2.org/msys/x86_64/zlib-1.2.11-1-x86_64.pkg.tar.xz"
71 b607da40d3388b440f2a09e154f21966cd55ad77e02d47805f78a9dee5de40226225bf0b8335fdfd4b83f25ead3098e9cb974d4f202f28827f8468e30e3b790d
72 "https://repo.msys2.org/msys/x86_64/mpc-1.1.0-1-x86_64.pkg.tar.xz"
73 7d0715c41c27fdbf91e6dcc73d6b8c02ee62c252e027f0a17fa4bfb974be8a74d8e3a327ef31c2460721902299ef69a7ef3c7fce52c8f02ce1cb47f0b6e073e9
74 "https://repo.msys2.org/msys/x86_64/mpfr-4.1.0-1-x86_64.pkg.tar.zst"
75 d64fa60e188124591d41fc097d7eb51d7ea4940bac05cdcf5eafde951ed1eaa174468f5ede03e61106e1633e3428964b34c96de76321ed8853b398fbe8c4d072
76 "https://repo.msys2.org/msys/x86_64/gmp-6.2.0-1-x86_64.pkg.tar.xz"
77 1389a443e775bb255d905665dd577bef7ed71d51a8c24d118097f8119c08c4dfe67505e88ddd1e9a3764dd1d50ed8b84fa34abefa797d257e90586f0cbf54de8
78 )
79 else()
80 vcpkg_acquire_msys(MSYS_ROOT)
81 endif()
82
83 set(SHELL ${MSYS_ROOT}/usr/bin/bash.exe)
84 if(VCPKG_TARGET_IS_MINGW)
85 if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
86 set(OPTIONS "--target-os=mingw32 ${OPTIONS}")
87 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
88 set(OPTIONS "--target-os=mingw64 ${OPTIONS}")
89 endif()
90 else()
91 set(OPTIONS "--toolchain=msvc ${OPTIONS}")
92 endif()
93 else()
94 set(SHELL /bin/sh)
95 endif()
96
97 set(ENV{${INCLUDE_VAR}} "${CURRENT_INSTALLED_DIR}/include${VCPKG_HOST_PATH_SEPARATOR}$ENV{${INCLUDE_VAR}}")
98
99 set(_csc_PROJECT_PATH ffmpeg)
100
101 file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
102
103 if("nonfree" IN_LIST FEATURES)
104 set(OPTIONS "${OPTIONS} --enable-nonfree")
105 endif()
106
107 if("gpl" IN_LIST FEATURES)
108 set(OPTIONS "${OPTIONS} --enable-gpl")
109 endif()
110
111 if("version3" IN_LIST FEATURES)
112 set(OPTIONS "${OPTIONS} --enable-version3")
113 endif()
114
115 if("ffmpeg" IN_LIST FEATURES)
116 set(OPTIONS "${OPTIONS} --enable-ffmpeg")
117 else()
118 set(OPTIONS "${OPTIONS} --disable-ffmpeg")
119 endif()
120
121 if("ffplay" IN_LIST FEATURES)
122 set(OPTIONS "${OPTIONS} --enable-ffplay")
123 else()
124 set(OPTIONS "${OPTIONS} --disable-ffplay")
125 endif()
126
127 if("ffprobe" IN_LIST FEATURES)
128 set(OPTIONS "${OPTIONS} --enable-ffprobe")
129 else()
130 set(OPTIONS "${OPTIONS} --disable-ffprobe")
131 endif()
132
133 if("avcodec" IN_LIST FEATURES)
134 set(OPTIONS "${OPTIONS} --enable-avcodec")
135 set(ENABLE_AVCODEC ON)
136 else()
137 set(OPTIONS "${OPTIONS} --disable-avcodec")
138 set(ENABLE_AVCODEC OFF)
139 endif()
140
141 if("avdevice" IN_LIST FEATURES)
142 set(OPTIONS "${OPTIONS} --enable-avdevice")
143 set(ENABLE_AVDEVICE ON)
144 else()
145 set(OPTIONS "${OPTIONS} --disable-avdevice")
146 set(ENABLE_AVDEVICE OFF)
147 endif()
148
149 if("avformat" IN_LIST FEATURES)
150 set(OPTIONS "${OPTIONS} --enable-avformat")
151 set(ENABLE_AVFORMAT ON)
152 else()
153 set(OPTIONS "${OPTIONS} --disable-avformat")
154 set(ENABLE_AVFORMAT OFF)
155 endif()
156
157 if("avfilter" IN_LIST FEATURES)
158 set(OPTIONS "${OPTIONS} --enable-avfilter")
159 set(ENABLE_AVFILTER ON)
160 else()
161 set(OPTIONS "${OPTIONS} --disable-avfilter")
162 set(ENABLE_AVFILTER OFF)
163 endif()
164
165 if("postproc" IN_LIST FEATURES)
166 set(OPTIONS "${OPTIONS} --enable-postproc")
167 set(ENABLE_POSTPROC ON)
168 else()
169 set(OPTIONS "${OPTIONS} --disable-postproc")
170 set(ENABLE_POSTPROC OFF)
171 endif()
172
173 if("swresample" IN_LIST FEATURES)
174 set(OPTIONS "${OPTIONS} --enable-swresample")
175 set(ENABLE_SWRESAMPLE ON)
176 else()
177 set(OPTIONS "${OPTIONS} --disable-swresample")
178 set(ENABLE_SWRESAMPLE OFF)
179 endif()
180
181 if("swscale" IN_LIST FEATURES)
182 set(OPTIONS "${OPTIONS} --enable-swscale")
183 set(ENABLE_SWSCALE ON)
184 else()
185 set(OPTIONS "${OPTIONS} --disable-swscale")
186 set(ENABLE_SWSCALE OFF)
187 endif()
188
189 set(ENABLE_AVRESAMPLE OFF)
190 if("avresample" IN_LIST FEATURES)
191 set(OPTIONS "${OPTIONS} --enable-avresample")
192 set(ENABLE_AVRESAMPLE ON)
193 endif()
194
195 set(STATIC_LINKAGE OFF)
196 if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
197 set(STATIC_LINKAGE ON)
198 endif()
199
200 set(ENABLE_ASS OFF)
201 if("ass" IN_LIST FEATURES)
202 set(OPTIONS "${OPTIONS} --enable-libass")
203 set(ENABLE_ASS ${STATIC_LINKAGE})
204 else()
205 set(OPTIONS "${OPTIONS} --disable-libass")
206 endif()
207
208 if("avisynthplus" IN_LIST FEATURES)
209 set(OPTIONS "${OPTIONS} --enable-avisynth")
210 else()
211 set(OPTIONS "${OPTIONS} --disable-avisynth")
212 endif()
213
214 set(ENABLE_BZIP2 OFF)
215 if("bzip2" IN_LIST FEATURES)
216 set(OPTIONS "${OPTIONS} --enable-bzlib")
217 set(ENABLE_BZIP2 ${STATIC_LINKAGE})
218 else()
219 set(OPTIONS "${OPTIONS} --disable-bzlib")
220 endif()
221
222 set(ENABLE_DAV1D OFF)
223 if("dav1d" IN_LIST FEATURES)
224 set(OPTIONS "${OPTIONS} --enable-libdav1d")
225 set(ENABLE_DAV1D ${STATIC_LINKAGE})
226 else()
227 set(OPTIONS "${OPTIONS} --disable-libdav1d")
228 endif()
229
230 set(ENABLE_ICONV OFF)
231 if("iconv" IN_LIST FEATURES)
232 set(OPTIONS "${OPTIONS} --enable-iconv")
233 set(ENABLE_ICONV ${STATIC_LINKAGE})
234 else()
235 set(OPTIONS "${OPTIONS} --disable-iconv")
236 endif()
237
238 set(ENABLE_ILBC OFF)
239 if("ilbc" IN_LIST FEATURES)
240 set(OPTIONS "${OPTIONS} --enable-libilbc")
241 set(ENABLE_ILBC ${STATIC_LINKAGE})
242 else()
243 set(OPTIONS "${OPTIONS} --disable-libilbc")
244 endif()
245
246 set(ENABLE_FDKAAC OFF)
247 if("fdk-aac" IN_LIST FEATURES)
248 set(OPTIONS "${OPTIONS} --enable-libfdk-aac")
249 set(ENABLE_FDKAAC ${STATIC_LINKAGE})
250 else()
251 set(OPTIONS "${OPTIONS} --disable-libfdk-aac")
252 endif()
253
254 set(ENABLE_FONTCONFIG OFF)
255 if("fontconfig" IN_LIST FEATURES)
256 set(OPTIONS "${OPTIONS} --enable-libfontconfig")
257 set(ENABLE_FONTCONFIG ${STATIC_LINKAGE})
258 else()
259 set(OPTIONS "${OPTIONS} --disable-libfontconfig")
260 endif()
261
262 set(ENABLE_FREETYPE OFF)
263 if("freetype" IN_LIST FEATURES)
264 set(OPTIONS "${OPTIONS} --enable-libfreetype")
265 set(ENABLE_FREETYPE ${STATIC_LINKAGE})
266 else()
267 set(OPTIONS "${OPTIONS} --disable-libfreetype")
268 endif()
269
270 set(ENABLE_FRIBIDI OFF)
271 if("fribidi" IN_LIST FEATURES)
272 set(OPTIONS "${OPTIONS} --enable-libfribidi")
273 set(ENABLE_FRIBIDI ${STATIC_LINKAGE})
274 else()
275 set(OPTIONS "${OPTIONS} --disable-libfribidi")
276 endif()
277
278 set(ENABLE_LZMA OFF)
279 if("lzma" IN_LIST FEATURES)
280 set(OPTIONS "${OPTIONS} --enable-lzma")
281 set(ENABLE_LZMA ${STATIC_LINKAGE})
282 else()
283 set(OPTIONS "${OPTIONS} --disable-lzma")
284 endif()
285
286 set(ENABLE_LAME OFF)
287 if("mp3lame" IN_LIST FEATURES)
288 set(OPTIONS "${OPTIONS} --enable-libmp3lame")
289 set(ENABLE_LAME ${STATIC_LINKAGE})
290 else()
291 set(OPTIONS "${OPTIONS} --disable-libmp3lame")
292 endif()
293
294 set(ENABLE_MODPLUG OFF)
295 if("modplug" IN_LIST FEATURES)
296 set(OPTIONS "${OPTIONS} --enable-libmodplug")
297 set(ENABLE_MODPLUG ${STATIC_LINKAGE})
298 else()
299 set(OPTIONS "${OPTIONS} --disable-libmodplug")
300 endif()
301
302 set(ENABLE_NVCODEC OFF)
303 if("nvcodec" IN_LIST FEATURES)
304 #Note: the --enable-cuda option does not actually require the cuda sdk or toolset port dependency as ffmpeg uses runtime detection and dynamic loading
305 set(ENABLE_NVCODEC ON)
306 set(OPTIONS "${OPTIONS} --enable-cuda --enable-nvenc --enable-nvdec --enable-cuvid --enable-ffnvcodec")
307 else()
308 set(OPTIONS "${OPTIONS} --disable-cuda --disable-nvenc --disable-nvdec --disable-cuvid --disable-ffnvcodec")
309 endif()
310
311 set(ENABLE_OPENCL OFF)
312 if("opencl" IN_LIST FEATURES)
313 set(OPTIONS "${OPTIONS} --enable-opencl")
314 set(ENABLE_OPENCL ${STATIC_LINKAGE})
315 else()
316 set(OPTIONS "${OPTIONS} --disable-opencl")
317 endif()
318
319 set(ENABLE_OPENGL OFF)
320 if("opengl" IN_LIST FEATURES)
321 set(OPTIONS "${OPTIONS} --enable-opengl")
322 set(ENABLE_OPENGL ${STATIC_LINKAGE})
323 else()
324 set(OPTIONS "${OPTIONS} --disable-opengl")
325 endif()
326
327 set(ENABLE_OPENH264 OFF)
328 if("openh264" IN_LIST FEATURES)
329 set(OPTIONS "${OPTIONS} --enable-libopenh264")
330 set(ENABLE_OPENH264 ${STATIC_LINKAGE})
331 else()
332 set(OPTIONS "${OPTIONS} --disable-libopenh264")
333 endif()
334
335 set(ENABLE_OPENJPEG OFF)
336 if("openjpeg" IN_LIST FEATURES)
337 set(OPTIONS "${OPTIONS} --enable-libopenjpeg")
338 set(ENABLE_OPENJPEG ${STATIC_LINKAGE})
339 else()
340 set(OPTIONS "${OPTIONS} --disable-libopenjpeg")
341 endif()
342
343 set(ENABLE_OPENSSL OFF)
344 if("openssl" IN_LIST FEATURES)
345 set(OPTIONS "${OPTIONS} --enable-openssl")
346 set(ENABLE_OPENSSL ${STATIC_LINKAGE})
347 else()
348 set(OPTIONS "${OPTIONS} --disable-openssl")
349 endif()
350
351 set(ENABLE_OPUS OFF)
352 if("opus" IN_LIST FEATURES)
353 set(OPTIONS "${OPTIONS} --enable-libopus")
354 set(ENABLE_OPUS ${STATIC_LINKAGE})
355 else()
356 set(OPTIONS "${OPTIONS} --disable-libopus")
357 endif()
358
359 set(ENABLE_SDL2 OFF)
360 if("sdl2" IN_LIST FEATURES)
361 set(OPTIONS "${OPTIONS} --enable-sdl2")
362 set(ENABLE_SDL2 ${STATIC_LINKAGE})
363 else()
364 set(OPTIONS "${OPTIONS} --disable-sdl2")
365 endif()
366
367 set(ENABLE_SNAPPY OFF)
368 if("snappy" IN_LIST FEATURES)
369 set(OPTIONS "${OPTIONS} --enable-libsnappy")
370 set(ENABLE_SNAPPY ${STATIC_LINKAGE})
371 else()
372 set(OPTIONS "${OPTIONS} --disable-libsnappy")
373 endif()
374
375 set(ENABLE_SOXR OFF)
376 if("soxr" IN_LIST FEATURES)
377 set(OPTIONS "${OPTIONS} --enable-libsoxr")
378 set(ENABLE_SOXR ${STATIC_LINKAGE})
379 else()
380 set(OPTIONS "${OPTIONS} --disable-libsoxr")
381 endif()
382
383 set(ENABLE_SPEEX OFF)
384 if("speex" IN_LIST FEATURES)
385 set(OPTIONS "${OPTIONS} --enable-libspeex")
386 set(ENABLE_SPEEX ${STATIC_LINKAGE})
387 else()
388 set(OPTIONS "${OPTIONS} --disable-libspeex")
389 endif()
390
391 set(ENABLE_SSH OFF)
392 if("ssh" IN_LIST FEATURES)
393 set(OPTIONS "${OPTIONS} --enable-libssh")
394 set(ENABLE_SSH ${STATIC_LINKAGE})
395 else()
396 set(OPTIONS "${OPTIONS} --disable-libssh")
397 endif()
398
399 set(ENABLE_TENSORFLOW OFF)
400 if("tensorflow" IN_LIST FEATURES)
401 set(OPTIONS "${OPTIONS} --enable-libtensorflow")
402 set(ENABLE_TENSORFLOW ${STATIC_LINKAGE})
403 else()
404 set(OPTIONS "${OPTIONS} --disable-libtensorflow")
405 endif()
406
407 set(ENABLE_TESSERACT OFF)
408 if("tesseract" IN_LIST FEATURES)
409 set(OPTIONS "${OPTIONS} --enable-libtesseract")
410 set(ENABLE_TESSERACT ${STATIC_LINKAGE})
411 else()
412 set(OPTIONS "${OPTIONS} --disable-libtesseract")
413 endif()
414
415 set(ENABLE_THEORA OFF)
416 if("theora" IN_LIST FEATURES)
417 set(OPTIONS "${OPTIONS} --enable-libtheora")
418 set(ENABLE_THEORA ${STATIC_LINKAGE})
419 else()
420 set(OPTIONS "${OPTIONS} --disable-libtheora")
421 endif()
422
423 set(ENABLE_VORBIS OFF)
424 if("vorbis" IN_LIST FEATURES)
425 set(OPTIONS "${OPTIONS} --enable-libvorbis")
426 set(ENABLE_VORBIS ${STATIC_LINKAGE})
427 else()
428 set(OPTIONS "${OPTIONS} --disable-libvorbis")
429 endif()
430
431 set(ENABLE_VPX OFF)
432 if("vpx" IN_LIST FEATURES)
433 set(OPTIONS "${OPTIONS} --enable-libvpx")
434 set(ENABLE_VPX ${STATIC_LINKAGE})
435 else()
436 set(OPTIONS "${OPTIONS} --disable-libvpx")
437 endif()
438
439 set(ENABLE_WAVPACK OFF)
440 if("wavpack" IN_LIST FEATURES)
441 set(OPTIONS "${OPTIONS} --enable-libwavpack")
442 set(ENABLE_WAVPACK ${STATIC_LINKAGE})
443 else()
444 set(OPTIONS "${OPTIONS} --disable-libwavpack")
445 endif()
446
447 set(ENABLE_WEBP OFF)
448 if("webp" IN_LIST FEATURES)
449 set(OPTIONS "${OPTIONS} --enable-libwebp")
450 set(ENABLE_WEBP ${STATIC_LINKAGE})
451 else()
452 set(OPTIONS "${OPTIONS} --disable-libwebp")
453 endif()
454
455 set(ENABLE_X264 OFF)
456 if("x264" IN_LIST FEATURES)
457 set(OPTIONS "${OPTIONS} --enable-libx264")
458 set(ENABLE_X264 ${STATIC_LINKAGE})
459 else()
460 set(OPTIONS "${OPTIONS} --disable-libx264")
461 endif()
462
463 set(ENABLE_X265 OFF)
464 if("x265" IN_LIST FEATURES)
465 set(OPTIONS "${OPTIONS} --enable-libx265")
466 set(ENABLE_X265 ${STATIC_LINKAGE})
467 else()
468 set(OPTIONS "${OPTIONS} --disable-libx265")
469 endif()
470
471 set(ENABLE_XML2 OFF)
472 if("xml2" IN_LIST FEATURES)
473 set(OPTIONS "${OPTIONS} --enable-libxml2")
474 set(ENABLE_XML2 ${STATIC_LINKAGE})
475 else()
476 set(OPTIONS "${OPTIONS} --disable-libxml2")
477 endif()
478
479 set(ENABLE_ZLIB OFF)
480 if("zlib" IN_LIST FEATURES)
481 set(OPTIONS "${OPTIONS} --enable-zlib")
482 set(ENABLE_ZLIB ${STATIC_LINKAGE})
483 else()
484 set(OPTIONS "${OPTIONS} --disable-zlib")
485 endif()
486
487 if (VCPKG_TARGET_IS_OSX)
488 set(OPTIONS "${OPTIONS} --disable-vdpau") # disable vdpau in OSX
489 endif()
490
491 set(OPTIONS_CROSS "")
492
493 if (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
494 if(VCPKG_TARGET_IS_WINDOWS)
495 set(OPTIONS_CROSS " --enable-cross-compile --target-os=win32 --arch=${VCPKG_TARGET_ARCHITECTURE}")
496 vcpkg_find_acquire_program(GASPREPROCESSOR)
497 foreach(GAS_PATH ${GASPREPROCESSOR})
498 get_filename_component(GAS_ITEM_PATH ${GAS_PATH} DIRECTORY)
499 set(ENV{PATH} "$ENV{PATH}${VCPKG_HOST_PATH_SEPARATOR}${GAS_ITEM_PATH}")
500 endforeach(GAS_PATH)
501 endif()
502 elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
503 elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
504 else()
505 message(FATAL_ERROR "Unsupported architecture")
506 endif()
507
508 if(VCPKG_TARGET_IS_UWP)
509 set(ENV{LIBPATH} "$ENV{LIBPATH};$ENV{_WKITS10}references\\windows.foundation.foundationcontract\\2.0.0.0\\;$ENV{_WKITS10}references\\windows.foundation.universalapicontract\\3.0.0.0\\")
510 set(OPTIONS "${OPTIONS} --disable-programs")
511 set(OPTIONS "${OPTIONS} --extra-cflags=-DWINAPI_FAMILY=WINAPI_FAMILY_APP --extra-cflags=-D_WIN32_WINNT=0x0A00")
512 set(OPTIONS_CROSS " --enable-cross-compile --target-os=win32 --arch=${VCPKG_TARGET_ARCHITECTURE}")
513 endif()
514
515 set(OPTIONS_DEBUG "--debug") # Note: --disable-optimizations can't be used due to http://ffmpeg.org/pipermail/libav-user/2013-March/003945.html
516 set(OPTIONS_RELEASE "")
517
518 set(OPTIONS "${OPTIONS} ${OPTIONS_CROSS}")
519
520 if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
521 set(OPTIONS "${OPTIONS} --disable-static --enable-shared")
522 if (VCPKG_TARGET_IS_UWP)
523 set(OPTIONS "${OPTIONS} --extra-ldflags=-APPCONTAINER --extra-ldflags=WindowsApp.lib")
524 endif()
525 endif()
526
527 if(VCPKG_TARGET_IS_MINGW)
528 set(OPTIONS "${OPTIONS} --extra_cflags=-D_WIN32_WINNT=0x0601")
529 elseif(VCPKG_TARGET_IS_WINDOWS)
530 set(OPTIONS "${OPTIONS} --extra-cflags=-DHAVE_UNISTD_H=0")
531 if(VCPKG_CRT_LINKAGE STREQUAL "dynamic")
532 set(OPTIONS_DEBUG "${OPTIONS_DEBUG} --extra-cflags=-MDd --extra-cxxflags=-MDd")
533 set(OPTIONS_RELEASE "${OPTIONS_RELEASE} --extra-cflags=-MD --extra-cxxflags=-MD")
534 else()
535 set(OPTIONS_DEBUG "${OPTIONS_DEBUG} --extra-cflags=-MTd --extra-cxxflags=-MTd")
536 set(OPTIONS_RELEASE "${OPTIONS_RELEASE} --extra-cflags=-MT --extra-cxxflags=-MT")
537 endif()
538 endif()
539
540 if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
541 set(OPTIONS "${OPTIONS} --pkg-config-flags=--static")
542 endif()
543
544 set(ENV_LIB_PATH "$ENV{${LIB_PATH_VAR}}")
545
546 message(STATUS "Building Options: ${OPTIONS}")
547
548 # Release build
549 if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL release)
550 message(STATUS "Building Release Options: ${OPTIONS_RELEASE}")
551 set(ENV{${LIB_PATH_VAR}} "${CURRENT_INSTALLED_DIR}/lib${VCPKG_HOST_PATH_SEPARATOR}${ENV_LIB_PATH}")
552 set(ENV{CFLAGS} "${VCPKG_C_FLAGS} ${VCPKG_C_FLAGS_RELEASE}")
553 set(ENV{LDFLAGS} "${VCPKG_LINKER_FLAGS}")
554 set(ENV{PKG_CONFIG_PATH} "${CURRENT_INSTALLED_DIR}/lib/pkgconfig")
555 message(STATUS "Building ${_csc_PROJECT_PATH} for Release")
556 file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
557
558 set(BUILD_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
559 set(CONFIGURE_OPTIONS "${OPTIONS} ${OPTIONS_RELEASE}")
560 set(INST_PREFIX "${CURRENT_PACKAGES_DIR}")
561
562 configure_file("${CMAKE_CURRENT_LIST_DIR}/build.sh.in" "${BUILD_DIR}/build.sh" @ONLY)
563
564 vcpkg_execute_required_process(
565 COMMAND ${SHELL} ./build.sh
566 WORKING_DIRECTORY ${BUILD_DIR}
567 LOGNAME build-${TARGET_TRIPLET}-rel
568 )
569 endif()
570
571 # Debug build
572 if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL debug)
573 message(STATUS "Building Debug Options: ${OPTIONS_DEBUG}")
574 set(ENV{${LIB_PATH_VAR}} "${CURRENT_INSTALLED_DIR}/debug/lib${VCPKG_HOST_PATH_SEPARATOR}${ENV_LIB_PATH}")
575 set(ENV{CFLAGS} "${VCPKG_C_FLAGS} ${VCPKG_C_FLAGS_DEBUG}")
576 set(ENV{LDFLAGS} "${VCPKG_LINKER_FLAGS}")
577 set(ENV{PKG_CONFIG_PATH} "${CURRENT_INSTALLED_DIR}/debug/lib/pkgconfig")
578 message(STATUS "Building ${_csc_PROJECT_PATH} for Debug")
579 file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
580
581 set(BUILD_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
582 set(CONFIGURE_OPTIONS "${OPTIONS} ${OPTIONS_DEBUG}")
583 set(INST_PREFIX "${CURRENT_PACKAGES_DIR}/debug")
584
585 configure_file("${CMAKE_CURRENT_LIST_DIR}/build.sh.in" "${BUILD_DIR}/build.sh" @ONLY)
586
587 vcpkg_execute_required_process(
588 COMMAND ${SHELL} ./build.sh
589 WORKING_DIRECTORY ${BUILD_DIR}
590 LOGNAME build-${TARGET_TRIPLET}-dbg
591 )
592 endif()
593
594 if(VCPKG_TARGET_IS_WINDOWS)
595 file(GLOB DEF_FILES ${CURRENT_PACKAGES_DIR}/lib/*.def ${CURRENT_PACKAGES_DIR}/debug/lib/*.def)
596
597 if(NOT VCPKG_TARGET_IS_MINGW)
598 if(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
599 set(LIB_MACHINE_ARG /machine:ARM)
600 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
601 set(LIB_MACHINE_ARG /machine:ARM64)
602 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
603 set(LIB_MACHINE_ARG /machine:x86)
604 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
605 set(LIB_MACHINE_ARG /machine:x64)
606 else()
607 message(FATAL_ERROR "Unsupported target architecture")
608 endif()
609
610 foreach(DEF_FILE ${DEF_FILES})
611 get_filename_component(DEF_FILE_DIR "${DEF_FILE}" DIRECTORY)
612 get_filename_component(DEF_FILE_NAME "${DEF_FILE}" NAME)
613 string(REGEX REPLACE "-[0-9]*\\.def" "${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}" OUT_FILE_NAME "${DEF_FILE_NAME}")
614 file(TO_NATIVE_PATH "${DEF_FILE}" DEF_FILE_NATIVE)
615 file(TO_NATIVE_PATH "${DEF_FILE_DIR}/${OUT_FILE_NAME}" OUT_FILE_NATIVE)
616 message(STATUS "Generating ${OUT_FILE_NATIVE}")
617 vcpkg_execute_required_process(
618 COMMAND lib.exe /def:${DEF_FILE_NATIVE} /out:${OUT_FILE_NATIVE} ${LIB_MACHINE_ARG}
619 WORKING_DIRECTORY ${CURRENT_PACKAGES_DIR}
620 LOGNAME libconvert-${TARGET_TRIPLET}
621 )
622 endforeach()
623 endif()
624
625 file(GLOB EXP_FILES ${CURRENT_PACKAGES_DIR}/lib/*.exp ${CURRENT_PACKAGES_DIR}/debug/lib/*.exp)
626 file(GLOB LIB_FILES ${CURRENT_PACKAGES_DIR}/bin/*${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX} ${CURRENT_PACKAGES_DIR}/debug/bin/*${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX})
627 if(VCPKG_TARGET_IS_MINGW)
628 file(GLOB LIB_FILES_2 ${CURRENT_PACKAGES_DIR}/bin/*.lib ${CURRENT_PACKAGES_DIR}/debug/bin/*.lib)
629 endif()
630 list(APPEND FILES_TO_REMOVE ${EXP_FILES} ${LIB_FILES} ${LIB_FILES_2} ${DEF_FILES})
631 if(FILES_TO_REMOVE)
632 file(REMOVE ${FILES_TO_REMOVE})
633 endif()
634 endif()
635
636 if("ffmpeg" IN_LIST FEATURES)
637 vcpkg_copy_tools(TOOL_NAMES ffmpeg AUTO_CLEAN)
638 endif()
639 if("ffprobe" IN_LIST FEATURES)
640 vcpkg_copy_tools(TOOL_NAMES ffprobe AUTO_CLEAN)
641 endif()
642 if("ffplay" IN_LIST FEATURES)
643 vcpkg_copy_tools(TOOL_NAMES ffplay AUTO_CLEAN)
644 endif()
645
646 file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include ${CURRENT_PACKAGES_DIR}/debug/share)
647
648 if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
649 file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/debug/bin)
650 endif()
651
652 vcpkg_copy_pdbs()
653
654 if (VCPKG_TARGET_IS_WINDOWS)
655 # Translate cygpath to local path
656 set(CYGPATH_CMD "${MSYS_ROOT}/usr/bin/cygpath.exe" -w)
657
658 foreach(PKGCONFIG_PATH "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig")
659 file(GLOB PKGCONFIG_FILES "${PKGCONFIG_PATH}/*.pc")
660 foreach(PKGCONFIG_FILE IN LISTS PKGCONFIG_FILES)
661 file(READ "${PKGCONFIG_FILE}" PKGCONFIG_CONTENT)
662 foreach(PATH_NAME prefix libdir includedir)
663 string(REGEX MATCH "${PATH_NAME}=[^\n]*\n" PATH_VALUE "${PKGCONFIG_CONTENT}")
664 string(REPLACE "${PATH_NAME}=" "" PATH_VALUE "${PATH_VALUE}")
665 string(REPLACE "\n" "" PATH_VALUE "${PATH_VALUE}")
666 set("${PATH_NAME}_cygpath" "${PATH_VALUE}")
667 endforeach()
668 execute_process(
669 COMMAND ${CYGPATH_CMD} "${prefix_cygpath}"
670 OUTPUT_VARIABLE FIXED_PREFIX_PATH
671 )
672 string(REPLACE "\n" "" FIXED_PREFIX_PATH "${FIXED_PREFIX_PATH}")
673 file(TO_CMAKE_PATH "${FIXED_PREFIX_PATH}" FIXED_PREFIX_PATH)
674 execute_process(
675 COMMAND ${CYGPATH_CMD} "${libdir_cygpath}"
676 OUTPUT_VARIABLE FIXED_LIBDIR_PATH
677 )
678 string(REPLACE "\n" "" FIXED_LIBDIR_PATH ${FIXED_LIBDIR_PATH})
679 file(TO_CMAKE_PATH ${FIXED_LIBDIR_PATH} FIXED_LIBDIR_PATH)
680 execute_process(
681 COMMAND ${CYGPATH_CMD} "${includedir_cygpath}"
682 OUTPUT_VARIABLE FIXED_INCLUDE_PATH
683 )
684 string(REPLACE "\n" "" FIXED_INCLUDE_PATH "${FIXED_INCLUDE_PATH}")
685 file(TO_CMAKE_PATH ${FIXED_INCLUDE_PATH} FIXED_INCLUDE_PATH)
686
687 vcpkg_replace_string("${PKGCONFIG_FILE}" "${prefix_cygpath}" "${FIXED_PREFIX_PATH}")
688 vcpkg_replace_string("${PKGCONFIG_FILE}" "${libdir_cygpath}" "${FIXED_LIBDIR_PATH}")
689 vcpkg_replace_string("${PKGCONFIG_FILE}" "${includedir_cygpath}" "${FIXED_INCLUDE_PATH}")
690 endforeach()
691 endforeach()
692 endif()
693
694 vcpkg_fixup_pkgconfig()
695
696 # Handle version strings
697
698 function(extract_regex_from_file out)
699 cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "FILE;REGEX" "")
700 file(READ "${arg_FILE}" contents)
701 if (contents MATCHES "${arg_REGEX}")
702 if(NOT CMAKE_MATCH_COUNT EQUAL 1)
703 message(FATAL_ERROR "Could not identify match group in regular expression \"${arg_REGEX}\"")
704 endif()
705 else()
706 message(FATAL_ERROR "Could not find line matching \"${arg_REGEX}\" in file \"${arg_FILE}\"")
707 endif()
708 set("${out}" "${CMAKE_MATCH_1}" PARENT_SCOPE)
709 endfunction()
710
711 function(extract_version_from_component out)
712 cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "COMPONENT" "")
713 string(TOLOWER "${arg_COMPONENT}" component_lower)
714 string(TOUPPER "${arg_COMPONENT}" component_upper)
715 extract_regex_from_file(major_version
716 FILE "${SOURCE_PATH}/${component_lower}/version.h"
717 REGEX "#define ${component_upper}_VERSION_MAJOR[ ]+([0-9]+)"
718 )
719 extract_regex_from_file(minor_version
720 FILE "${SOURCE_PATH}/${component_lower}/version.h"
721 REGEX "#define ${component_upper}_VERSION_MINOR[ ]+([0-9]+)"
722 )
723 extract_regex_from_file(micro_version
724 FILE "${SOURCE_PATH}/${component_lower}/version.h"
725 REGEX "#define ${component_upper}_VERSION_MICRO[ ]+([0-9]+)"
726 )
727 set("${out}" "${major_version}.${minor_version}.${micro_version}" PARENT_SCOPE)
728 endfunction()
729
730 extract_regex_from_file(FFMPEG_VERSION
731 FILE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/libavutil/ffversion.h"
732 REGEX "#define FFMPEG_VERSION[ ]+\"(.+)\""
733 )
734
735 extract_version_from_component(LIBAVUTIL_VERSION
736 COMPONENT libavutil)
737 extract_version_from_component(LIBAVCODEC_VERSION
738 COMPONENT libavcodec)
739 extract_version_from_component(LIBAVDEVICE_VERSION
740 COMPONENT libavdevice)
741 extract_version_from_component(LIBAVFILTER_VERSION
742 COMPONENT libavfilter)
743 extract_version_from_component( LIBAVFORMAT_VERSION
744 COMPONENT libavformat)
745 extract_version_from_component(LIBAVRESAMPLE_VERSION
746 COMPONENT libavresample)
747 extract_version_from_component(LIBSWRESAMPLE_VERSION
748 COMPONENT libswresample)
749 extract_version_from_component(LIBSWSCALE_VERSION
750 COMPONENT libswscale)
751
752 # Handle copyright
753 file(STRINGS ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-out.log LICENSE_STRING REGEX "License: .*" LIMIT_COUNT 1)
754 if(LICENSE_STRING STREQUAL "License: LGPL version 2.1 or later")
755 set(LICENSE_FILE "COPYING.LGPLv2.1")
756 elseif(LICENSE_STRING STREQUAL "License: LGPL version 3 or later")
757 set(LICENSE_FILE "COPYING.LGPLv3")
758 elseif(LICENSE_STRING STREQUAL "License: GPL version 2 or later")
759 set(LICENSE_FILE "COPYING.GPLv2")
760 elseif(LICENSE_STRING STREQUAL "License: GPL version 3 or later")
761 set(LICENSE_FILE "COPYING.GPLv3")
762 elseif(LICENSE_STRING STREQUAL "License: nonfree and unredistributable")
763 set(LICENSE_FILE "COPYING.NONFREE")
764 file(WRITE ${SOURCE_PATH}/${LICENSE_FILE} ${LICENSE_STRING})
765 else()
766 message(FATAL_ERROR "Failed to identify license (${LICENSE_STRING})")
767 endif()
768
769 configure_file(${CMAKE_CURRENT_LIST_DIR}/FindFFMPEG.cmake.in ${CURRENT_PACKAGES_DIR}/share/${PORT}/FindFFMPEG.cmake @ONLY)
770 file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT})
771 file(INSTALL ${SOURCE_PATH}/${LICENSE_FILE} DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)