media-suite_compile.sh 143 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342
  1. #!/bin/bash
  2. # shellcheck disable=SC2034,SC1090,SC1117,SC1091,SC2119
  3. shopt -s extglob
  4. if [[ -z $LOCALBUILDDIR ]]; then
  5. printf '%s\n' \
  6. "Something went wrong." \
  7. "MSYSTEM: $MSYSTEM" \
  8. "pwd: $(cygpath -w "$(pwd)")" \
  9. "fstab: " \
  10. "$(cat /etc/fstab)" \
  11. "Create a new issue and upload all logs you can find, especially compile.log"
  12. read -r -p "Enter to continue" ret
  13. exit 1
  14. fi
  15. FFMPEG_BASE_OPTS=("--pkg-config=pkgconf" --pkg-config-flags="--keep-system-libs --keep-system-cflags --static" "--cc=$CC" "--cxx=$CXX" "--ld=$CXX" "--extra-cxxflags=-fpermissive" "--extra-cflags=-Wno-int-conversion")
  16. printf '\nBuild start: %(%F %T %z)T\n' -1 >> "$LOCALBUILDDIR/newchangelog"
  17. printf '#!/bin/bash\nbash %s %s\n' "$LOCALBUILDDIR/media-suite_compile.sh" "$*" > "$LOCALBUILDDIR/last_run"
  18. while true; do
  19. case $1 in
  20. --cpuCount=* ) cpuCount=${1#*=} && shift ;;
  21. --build32=* ) build32=${1#*=} && shift ;;
  22. --build64=* ) build64=${1#*=} && shift ;;
  23. --mp4box=* ) mp4box=${1#*=} && shift ;;
  24. --rtmpdump=* ) rtmpdump=${1#*=} && shift ;;
  25. --vpx=* ) vpx=${1#*=} && shift ;;
  26. --x264=* ) x264=${1#*=} && shift ;;
  27. --x265=* ) x265=${1#*=} && shift ;;
  28. --other265=* ) other265=${1#*=} && shift ;;
  29. --flac=* ) flac=${1#*=} && shift ;;
  30. --fdkaac=* ) fdkaac=${1#*=} && shift ;;
  31. --mediainfo=* ) mediainfo=${1#*=} && shift ;;
  32. --sox=* ) sox=${1#*=} && shift ;;
  33. --ffmpeg=* ) ffmpeg=${1#*=} && shift ;;
  34. --ffmpegUpdate=* ) ffmpegUpdate=${1#*=} && shift ;;
  35. --ffmpegPath=* ) ffmpegPath="${1#*=}"; shift ;;
  36. --ffmpegChoice=* ) ffmpegChoice=${1#*=} && shift ;;
  37. --mplayer=* ) mplayer=${1#*=} && shift ;;
  38. --mpv=* ) mpv=${1#*=} && shift ;;
  39. --deleteSource=* ) deleteSource=${1#*=} && shift ;;
  40. --license=* ) license=${1#*=} && shift ;;
  41. --standalone=* ) standalone=${1#*=} && shift ;;
  42. --stripping* ) stripping=${1#*=} && shift ;;
  43. --packing* ) packing=${1#*=} && shift ;;
  44. --logging=* ) logging=${1#*=} && shift ;;
  45. --bmx=* ) bmx=${1#*=} && shift ;;
  46. --aom=* ) aom=${1#*=} && shift ;;
  47. --faac=* ) faac=${1#*=} && shift ;;
  48. --exhale=* ) exhale=${1#*=} && shift ;;
  49. --ffmbc=* ) ffmbc=${1#*=} && shift ;;
  50. --curl=* ) curl=${1#*=} && shift ;;
  51. --cyanrip=* ) cyanrip=${1#*=} && shift ;;
  52. --ripgrep=* ) ripgrep=${1#*=} && shift ;;
  53. --rav1e=* ) rav1e=${1#*=} && shift ;;
  54. --dav1d=* ) dav1d=${1#*=} && shift ;;
  55. --libavif=* ) libavif=${1#*=} && shift ;;
  56. --libheif=* ) libheif=${1#*=} && shift ;;
  57. --jpegxl=* ) jpegxl=${1#*=} && shift ;;
  58. --av1an=* ) av1an=${1#*=} && shift ;;
  59. --vvc=* ) vvc=${1#*=} && shift ;;
  60. --uvg266=* ) uvg266=${1#*=} && shift ;;
  61. --vvenc=* ) vvenc=${1#*=} && shift ;;
  62. --vvdec=* ) vvdec=${1#*=} && shift ;;
  63. --jq=* ) jq=${1#*=} && shift ;;
  64. --jo=* ) jo=${1#*=} && shift ;;
  65. --dssim=* ) dssim=${1#*=} && shift ;;
  66. --gifski=* ) gifski=${1#*=} && shift ;;
  67. --avs2=* ) avs2=${1#*=} && shift ;;
  68. --dovitool=* ) dovitool=${1#*=} && shift ;;
  69. --hdr10plustool=* ) hdr10plustool=${1#*=} && shift ;;
  70. --timeStamp=* ) timeStamp=${1#*=} && shift ;;
  71. --noMintty=* ) noMintty=${1#*=} && shift ;;
  72. --ccache=* ) ccache=${1#*=} && shift ;;
  73. --svthevc=* ) svthevc=${1#*=} && shift ;;
  74. --svtav1=* ) svtav1=${1#*=} && shift ;;
  75. --svtvp9=* ) svtvp9=${1#*=} && shift ;;
  76. --xvc=* ) xvc=${1#*=} && shift ;;
  77. --vlc=* ) vlc=${1#*=} && shift ;;
  78. --zlib=* ) zlib=${1#*=} && shift ;;
  79. --exitearly=* ) exitearly=${1#*=} && shift ;;
  80. # --autouploadlogs=* ) autouploadlogs=${1#*=} && shift ;;
  81. -- ) shift && break ;;
  82. -* ) echo "Error, unknown option: '$1'." && exit 1 ;;
  83. * ) break ;;
  84. esac
  85. done
  86. [[ $ccache != y ]] && export CCACHE_DISABLE=1
  87. # shellcheck source=media-suite_deps.sh
  88. source "$LOCALBUILDDIR"/media-suite_deps.sh
  89. # shellcheck source=media-suite_helper.sh
  90. source "$LOCALBUILDDIR"/media-suite_helper.sh
  91. if [[ $exitearly = EE1 ]]; then
  92. do_simple_print -p '\n\t'"${orange}Exit due to env var MABS_EXIT_EARLY set to EE1"
  93. exit 0
  94. fi
  95. do_simple_print -p "${orange}Warning: We will not accept any issues lacking any form of logs or logs.zip!$reset"
  96. buildProcess() {
  97. set_title
  98. do_simple_print -p '\n\t'"${orange}Starting $bits compilation of all tools$reset"
  99. [[ -f $HOME/custom_build_options ]] &&
  100. echo "Imported custom build options (unsupported)" &&
  101. source "$HOME"/custom_build_options
  102. cd_safe "$LOCALBUILDDIR"
  103. do_getFFmpegConfig "$license"
  104. declare -A MPV_OPTS="($(do_getMpvConfig))"
  105. do_fix_pkgconfig_abspaths
  106. do_clean_old_builds
  107. # In case a build was interrupted before reversing hide_conflicting_libs
  108. [[ -d $LOCALDESTDIR/opt/cyanffmpeg ]] &&
  109. hide_conflicting_libs -R "$LOCALDESTDIR/opt/cyanffmpeg"
  110. hide_conflicting_libs -R
  111. do_hide_all_sharedlibs
  112. create_ab_pkgconfig
  113. create_cmake_toolchain
  114. create_ab_ccache
  115. set_title "compiling global tools"
  116. do_simple_print -p '\n\t'"${orange}Starting $bits compilation of global tools${reset}"
  117. if [[ $bits = 32bit && $av1an != n ]]; then
  118. do_simple_print "${orange}Av1an cannot be compiled due to Vapoursynth being broken on 32-bit and will be disabled"'!'"${reset}"
  119. _reenable_av1an=$av1an # so that av1an can be built if both 32 bit and 64 bit targets are enabled
  120. av1an=n
  121. fi
  122. if [[ ! -z $_reenable_av1an ]] && [[ $bits = 64bit ]]; then
  123. av1an=$_reenable_av1an
  124. unset _reenable_av1an
  125. fi
  126. if [[ $packing = y &&
  127. ! "$(/opt/bin/upx -V 2> /dev/null | head -1)" = "upx 5.0.0" ]] &&
  128. do_wget -h 8c34b9cec2c225bf71f43cf2b788043d0d203d23edb54f649fbec16f34938d80 \
  129. "https://github.com/upx/upx/releases/download/v5.0.0/upx-5.0.0-win32.zip"; then
  130. do_install upx.exe /opt/bin/upx.exe
  131. fi
  132. if [[ "$ripgrep|$rav1e|$dssim|$libavif|$dovitool|$hdr10plustool" = *y* ]] ||
  133. [[ $av1an != n ]] || [[ $gifski != n ]] || [[ $zlib = rs ]] || enabled librav1e; then
  134. do_pacman_install rust
  135. [[ $CC =~ clang ]] && rust_target_suffix="llvm"
  136. fi
  137. if [[ $libavif = y ]] || [[ $dovitool = y ]] || [[ $zlib = rs ]] || enabled librav1e; then
  138. do_pacman_install cargo-c
  139. fi
  140. _check=(libz.a zlib.pc)
  141. _zlib_uninstall=(lib/cmake/{zlib,minizip} z{conf,lib,lib_name_mangling}.h include/minizip libminizip.{,l}a minizip.pc)
  142. if [[ $zlib = n ]]; then
  143. # uninstall existing zlib files, if the user switched from building zlib to using the msys2 package
  144. do_uninstall "${_check[@]}" "${_zlib_uninstall[@]}"
  145. zlib_dir="$MINGW_PREFIX"
  146. else
  147. zlib_dir="$LOCALDESTDIR"
  148. if [[ $zlib = y ]]; then
  149. [[ $standalone = y ]] && _check+=(bin-global/mini{,un}zip.exe)
  150. if do_vcs "$SOURCE_REPO_ZLIB"; then
  151. do_uninstall "${_check[@]}" "${_zlib_uninstall[@]}"
  152. sed -i 's; -L${sharedlibdir};;' zlib.pc.in
  153. do_cmakeinstall -DZLIB_BUILD_{TESTING,SHARED}=OFF -DZLIB_INSTALL_COMPAT_DLL=OFF
  154. if [[ $standalone = y ]]; then
  155. cd_safe ../contrib/minizip
  156. sed -i 's/Libs.private.*/& -lbz2/' minizip.pc.in
  157. do_autoreconf
  158. CFLAGS+=" -DHAVE_BZIP2" do_separate_confmakeinstall global --enable-demos LIBS="-lbz2"
  159. fi
  160. [[ -f "$LOCALDESTDIR"/lib/libzs.a ]] && mv -f "$LOCALDESTDIR"/lib/libz{s,}.a
  161. do_checkIfExist
  162. fi
  163. elif [[ $zlib = chromium ]]; then
  164. [[ $standalone = y ]] && _check+=(bin-global/mini{,g}zip.exe)
  165. if do_vcs "$SOURCE_REPO_ZLIBCHROMIUM"; then
  166. do_uninstall "${_check[@]}" "${_zlib_uninstall[@]}"
  167. extracommands=()
  168. [[ $standalone = y ]] && extracommands=(-DBUILD_MINIZIP_BIN=YES -DBUILD_MINIGZIP=YES)
  169. # these macros are for some reason not set, even though they should be according to CMakeLists.txt
  170. local zlib_macros="-DINFLATE_CHUNK_SIMD_SSE2 -DADLER32_SIMD_SSSE3 -DINFLATE_CHUNK_READ_64LE -DCRC32_SIMD_SSE42_PCLMUL -DDEFLATE_SLIDE_HASH_SSE2 -D_LARGEFILE64_SOURCE=1 -DX86_WINDOWS"
  171. sed -i 's; -L${sharedlibdir};;' zlib.pc.cmakein
  172. # add missing header and source files needed for compilation, and force all executables to link with static zlib
  173. sed -e 's;ioapi.h;ioapi.h contrib/minizip/iowin32.c contrib/minizip/iowin32.h;' \
  174. -e 's;zlib);zlibstatic);' -i CMakeLists.txt
  175. # the win32 dir is missing, so copy the folder from original zlib
  176. do_wget -c -r -q "https://github.com/madler/zlib/archive/refs/heads/develop.tar.gz"
  177. tar --strip-components=1 -xzf develop.tar.gz zlib-develop/win32
  178. do_cmakeinstall -DINSTALL_PKGCONFIG_DIR="${LOCALDESTDIR}/lib/pkgconfig" \
  179. -DUSE_ZLIB_RABIN_KARP_HASH=ON -DENABLE_SIMD_OPTIMIZATIONS=ON \
  180. -DCMAKE_C_FLAGS="${CFLAGS} ${zlib_macros} -msse4.2 -mpclmul" "${extracommands[@]}"
  181. [[ $standalone = y ]] && do_install minizip_bin.exe bin-global/minizip.exe &&
  182. do_install minigzip_bin.exe bin-global/minigzip.exe
  183. # there's no option to disable building the shared library, so delete them manually
  184. [[ -f "$LOCALDESTDIR"/lib/libz.dll.a ]] && rm -f "$LOCALDESTDIR"/lib/libz.dll.a
  185. [[ -f "$LOCALDESTDIR"/bin/libz.dll ]] && rm -f "$LOCALDESTDIR"/bin/libz.dll
  186. do_checkIfExist
  187. unset extracommands
  188. fi
  189. elif [[ $zlib = cloudflare ]]; then
  190. [[ $standalone = y ]] && _check+=(bin-global/minigzip.exe)
  191. if do_vcs "$SOURCE_REPO_ZLIBCLOUDFLARE"; then
  192. do_uninstall "${_check[@]}" "${_zlib_uninstall[@]}"
  193. extracommands=()
  194. [[ $standalone = y ]] && extracommands=(-DBUILD_EXAMPLES=YES)
  195. sed -i 's; -L${sharedlibdir};;' zlib.pc.in
  196. do_cmakeinstall -DCMAKE_POLICY_VERSION_MINIMUM=3.5 "${extracommands[@]}"
  197. [[ $standalone = y ]] && do_install minigzip.exe bin-global/
  198. do_checkIfExist
  199. unset extracommands
  200. fi
  201. if enabled zlib; then
  202. do_addOption --extra-cflags=-Wno-error=incompatible-pointer-types
  203. fi
  204. elif [[ $zlib = ng ]]; then
  205. [[ $standalone = y ]] && _check+=(bin-global/mini{,g}zip.exe)
  206. if do_vcs "$SOURCE_REPO_ZLIBNG"; then
  207. do_uninstall "${_check[@]}" "${_zlib_uninstall[@]}"
  208. do_cmakeinstall global -DZLIB_COMPAT=ON -DWITH_GTEST=OFF -DZLIB_ENABLE_TESTS=OFF
  209. if [[ $standalone = y ]] &&
  210. do_vcs "$SOURCE_REPO_MINIZIPNG"; then
  211. do_cmakeinstall global -DMZ_BUILD_TESTS=ON
  212. fi
  213. do_checkIfExist
  214. fi
  215. elif [[ $zlib = rs ]]; then
  216. if do_vcs "$SOURCE_REPO_ZLIBRS"; then
  217. do_uninstall "${_check[@]}" "${_zlib_uninstall[@]}"
  218. cd_safe libz-rs-sys-cdylib
  219. # edit package metadata and library name to match zlib
  220. sed -e 's;libz_rs;libz;' -e 's;z_rs;z;' -i Cargo.toml
  221. PKG_CONFIG="$LOCALDESTDIR/bin/ab-pkg-config-static.bat" \
  222. log "rust.capi" cargo capi build \
  223. --release --jobs "$cpuCount" --prefix="$LOCALDESTDIR"
  224. do_install "target/$CARCH-pc-windows-gnu$rust_target_suffix/release/libz.a" libz.a
  225. do_install "target/$CARCH-pc-windows-gnu$rust_target_suffix/release/libz.pc" zlib.pc
  226. do_checkIfExist
  227. fi
  228. fi
  229. fi
  230. unset _zlib_uninstall
  231. _check=(bin-global/rg.exe)
  232. if [[ $ripgrep = y ]] &&
  233. do_vcs "$SOURCE_REPO_RIPGREP"; then
  234. do_uninstall "${_check[@]}"
  235. do_rust
  236. do_install "target/$CARCH-pc-windows-gnu$rust_target_suffix/release/rg.exe" bin-global/
  237. do_checkIfExist
  238. fi
  239. _check=(bin-global/jo.exe)
  240. if [[ $jo = y ]] &&
  241. do_vcs "$SOURCE_REPO_JO"; then
  242. do_mesoninstall global
  243. do_checkIfExist
  244. fi
  245. _deps=("$MINGW_PREFIX"/lib/pkgconfig/oniguruma.pc)
  246. _check=(bin-global/jq.exe)
  247. if [[ $jq = y ]] &&
  248. do_vcs "$SOURCE_REPO_JQ"; then
  249. do_pacman_install -m bison flex
  250. do_pacman_install oniguruma
  251. do_uninstall "${_check[@]}"
  252. do_autoreconf
  253. CFLAGS+=' -D_POSIX_C_SOURCE' YFLAGS='--warnings=no-yacc' \
  254. do_separate_conf global --enable-{all-static,pthread-tls,maintainer-mode} --disable-docs
  255. do_make && do_install jq.exe bin-global/
  256. do_checkIfExist
  257. fi
  258. _check=(bin-global/dssim.exe)
  259. if [[ $dssim = y ]] &&
  260. do_vcs "$SOURCE_REPO_DSSIM"; then
  261. do_uninstall "${_check[@]}"
  262. CFLAGS+=" -fno-PIC" do_rust
  263. do_install "target/$CARCH-pc-windows-gnu$rust_target_suffix/release/dssim.exe" bin-global/
  264. do_checkIfExist
  265. fi
  266. if [[ $gifski != n ]]; then
  267. if [[ $gifski = video ]]; then
  268. _check=("$LOCALDESTDIR"/opt/gifskiffmpeg/lib/pkgconfig/lib{av{codec,device,filter,format,util},swscale}.pc)
  269. if flavor=gifski do_vcs "https://git.ffmpeg.org/ffmpeg.git#branch=release/6.1"; then
  270. do_uninstall "$LOCALDESTDIR"/opt/gifskiffmpeg
  271. [[ -f config.mak ]] && log "distclean" make distclean
  272. create_build_dir gifski
  273. mapfile -t audio_codecs < <(
  274. sed -n '/audio codecs/,/external libraries/p' ../libavcodec/allcodecs.c |
  275. sed -n 's/^[^#]*extern.* *ff_\([^ ]*\)_decoder;/\1/p')
  276. mapfile -t image_demuxers < <(
  277. sed -n '/image demuxers/,/external libraries/p' ../libavformat/allformats.c |
  278. sed -n 's/^[^#]*extern.* *ff_\([^ ]*\)_demuxer;/\1/p')
  279. config_path=.. do_configure "${FFMPEG_BASE_OPTS[@]}" \
  280. --prefix="$LOCALDESTDIR/opt/gifskiffmpeg" \
  281. --enable-static --disable-shared --disable-programs \
  282. --disable-autodetect --disable-everything \
  283. --disable-{debug,doc,network,protocols} \
  284. --enable-{decoders,demuxers} \
  285. --enable-filter=format,fps,scale --enable-protocol=file \
  286. --disable-bsf=evc_frame_merge,media100_to_mjpegb,vp9_superframe_split \
  287. --disable-decoder="$(IFS=, ; echo "${audio_codecs[*]}")" \
  288. --disable-demuxer="$(IFS=, ; echo "${image_demuxers[*]}"),image2pipe,yuv4mpegpipe"
  289. do_make && do_makeinstall
  290. files_exist "${_check[@]}" && touch ../"build_successful${bits}_gifski"
  291. unset audio_codecs image_demuxers gifski_ffmpeg_opts
  292. fi
  293. old_PKG_CONFIG_PATH=$PKG_CONFIG_PATH
  294. PKG_CONFIG_PATH=$LOCALDESTDIR/opt/gifskiffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH
  295. fi
  296. _check=(bin-global/gifski.exe)
  297. if do_vcs "$SOURCE_REPO_GIFSKI"; then
  298. do_uninstall "${_check[@]}"
  299. extracommands=()
  300. if [[ $gifski = video ]]; then
  301. extracommands=("--release" "--features=video-prebuilt-static")
  302. do_pacman_install clang
  303. fi
  304. PKG_CONFIG="$LOCALDESTDIR/bin/ab-pkg-config-static.bat" \
  305. do_rust "${extracommands[@]}"
  306. do_install "target/$CARCH-pc-windows-gnu$rust_target_suffix/release/gifski.exe" bin-global/
  307. do_checkIfExist
  308. unset extracommands
  309. fi
  310. if [[ $gifski = video ]]; then
  311. PKG_CONFIG_PATH=$old_PKG_CONFIG_PATH
  312. unset old_PKG_CONFIG_PATH
  313. fi
  314. fi
  315. _deps=("$zlib_dir"/lib/libz.a)
  316. _check=(libxml2.a libxml2/libxml/xmlIO.h libxml-2.0.pc)
  317. if { enabled_any libxml2 libbluray || [[ $cyanrip = y ]] || ! mpv_disabled libbluray; } &&
  318. do_vcs "$SOURCE_REPO_LIBXML2"; then
  319. do_uninstall include/libxml2/libxml "${_check[@]}"
  320. extracommands=("-DLIBXML2_WITH_PYTHON=OFF" "-DLIBXML2_WITH_TESTS=OFF")
  321. [[ $standalone = y ]] || extracommands+=("-DLIBXML2_WITH_PROGRAMS=OFF")
  322. do_cmakeinstall "${extracommands[@]}"
  323. do_checkIfExist
  324. unset extracommands
  325. fi
  326. # Fixes an issue with ordering with libbluray libxml2 and libz and liblzma
  327. # Probably caused by https://gitlab.gnome.org/GNOME/libxml2/-/commit/93e8bb2a402012858500b608b4146cd5c756e34d
  328. grep_or_sed Requires.private "$LOCALDESTDIR/lib/pkgconfig/libxml-2.0.pc" 's/Requires:/Requires.private:/'
  329. if [[ $ffmpeg != no ]] && enabled libaribb24; then
  330. _deps=("$zlib_dir"/lib/libz.a)
  331. _check=(libpng.{pc,{,l}a} libpng16.{pc,{,l}a} libpng16/png.h)
  332. if do_vcs "$SOURCE_REPO_LIBPNG"; then
  333. do_uninstall include/libpng16 "${_check[@]}"
  334. do_autoupdate
  335. do_separate_confmakeinstall --with-pic
  336. do_checkIfExist
  337. fi
  338. _deps=(libpng.{pc,a} libpng16.{pc,a})
  339. _check=(aribb24.pc libaribb24.{,l}a)
  340. if do_vcs "$SOURCE_REPO_ARRIB24"; then
  341. do_patch "https://raw.githubusercontent.com/BtbN/FFmpeg-Builds/master/patches/aribb24/12.patch"
  342. do_patch "https://raw.githubusercontent.com/BtbN/FFmpeg-Builds/master/patches/aribb24/13.patch"
  343. do_patch "https://raw.githubusercontent.com/BtbN/FFmpeg-Builds/master/patches/aribb24/17.patch"
  344. do_uninstall include/aribb24 "${_check[@]}"
  345. do_autoreconf
  346. do_separate_confmakeinstall --with-pic
  347. do_checkIfExist
  348. fi
  349. fi
  350. if [[ $mplayer = y || $mpv = y ]] ||
  351. { [[ $ffmpeg != no ]] && enabled_any libass libfreetype {lib,}fontconfig libfribidi; }; then
  352. do_pacman_remove freetype fontconfig harfbuzz fribidi
  353. _check=(libfreetype.a freetype2.pc)
  354. [[ $ffmpeg = sharedlibs ]] && _check+=(bin-video/libfreetype-6.dll libfreetype.dll.a)
  355. if do_vcs "$SOURCE_REPO_FREETYPE"; then
  356. do_uninstall include/freetype2 bin-global/freetype-config \
  357. bin{,-video,-global}/libfreetype-6.dll libfreetype.dll.a "${_check[@]}"
  358. extracommands=(-D{harfbuzz,png,bzip2,brotli,zlib,tests}"=disabled")
  359. [[ $ffmpeg = sharedlibs ]] && extracommands+=(--default-library=both)
  360. do_mesoninstall global "${extracommands[@]}"
  361. [[ $ffmpeg = sharedlibs ]] && do_install "$LOCALDESTDIR"/bin-global/libfreetype-6.dll bin-video/
  362. do_checkIfExist
  363. unset extracommands
  364. fi
  365. _deps=(libfreetype.a)
  366. _check=(libfontconfig.a fontconfig.pc)
  367. if [[ $ffmpeg = sharedlibs ]]; then
  368. enabled_any {lib,}fontconfig && do_removeOption "--enable-(lib|)fontconfig"
  369. _check+=(bin-global/libfontconfig-1.dll libfontconfig.dll.a)
  370. fi
  371. if enabled_any {lib,}fontconfig &&
  372. do_vcs "$SOURCE_REPO_FONTCONFIG"; then
  373. do_uninstall include/fontconfig "${_check[@]}"
  374. do_pacman_install gperf
  375. extracommands=()
  376. [[ $standalone = y ]] || extracommands+=(-Dtools=disabled)
  377. [[ $ffmpeg = sharedlibs ]] && extracommands+=(--default-both-libraries=both)
  378. do_mesoninstall global -D{doc,tests}=disabled -Diconv=enabled "${extracommands[@]}"
  379. do_checkIfExist
  380. unset extracommands
  381. fi
  382. # Prevents ffmpeg from trying to link to a broken libfontconfig.dll.a
  383. [[ $ffmpeg = sharedlibs ]] || do_uninstall bin-global/libfontconfig-1.dll libfontconfig.dll.a
  384. _deps=(libfreetype.a)
  385. _check=(libharfbuzz.a harfbuzz.pc)
  386. [[ $ffmpeg = sharedlibs ]] && _check+=(libharfbuzz.dll.a bin-video/libharfbuzz-{subset-,}0.dll)
  387. if do_vcs "$SOURCE_REPO_HARFBUZZ"; then
  388. do_pacman_install ragel
  389. do_uninstall include/harfbuzz "${_check[@]}" libharfbuzz{-subset,}.la
  390. extracommands=(-D{glib,gobject,cairo,icu,tests,introspection,docs,benchmark}"=disabled")
  391. [[ $ffmpeg = sharedlibs ]] && extracommands+=(--default-library=both)
  392. do_mesoninstall global "${extracommands[@]}"
  393. # directwrite shaper doesn't work with mingw headers, maybe too old
  394. [[ $ffmpeg = sharedlibs ]] && do_install "$LOCALDESTDIR"/bin-global/libharfbuzz-{subset-,}0.dll bin-video/
  395. do_checkIfExist
  396. unset extracommands
  397. fi
  398. _check=(libfribidi.a fribidi.pc)
  399. [[ $standalone = y ]] && _check+=(bin-video/fribidi.exe)
  400. [[ $ffmpeg = sharedlibs ]] && _check+=(bin-video/libfribidi-0.dll libfribidi.dll.a)
  401. if do_vcs "$SOURCE_REPO_FRIBIDI"; then
  402. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/fribidi/0001-bin-only-use-vendored-getopt-if-not-provided.patch" am
  403. extracommands=("-Ddocs=false" "-Dtests=false")
  404. [[ $standalone = n ]] && extracommands+=("-Dbin=false")
  405. [[ $ffmpeg = sharedlibs ]] && extracommands+=(--default-library=both)
  406. do_mesoninstall video "${extracommands[@]}"
  407. do_checkIfExist
  408. unset extracommands
  409. fi
  410. _check=(ass/ass{,_types}.h libass.{{,l}a,pc})
  411. _deps=(lib{freetype,fontconfig,harfbuzz,fribidi}.a)
  412. [[ $ffmpeg = sharedlibs ]] && _check+=(bin-video/libass-9.dll libass.dll.a)
  413. if do_vcs "$SOURCE_REPO_LIBASS"; then
  414. do_autoreconf
  415. do_uninstall bin{,-video}/libass-9.dll libass.dll.a include/ass "${_check[@]}"
  416. extracommands=()
  417. enabled_any {lib,}fontconfig || extracommands+=(--disable-fontconfig)
  418. [[ $ffmpeg = sharedlibs ]] && extracommands+=(--disable-fontconfig --enable-shared)
  419. do_separate_confmakeinstall video "${extracommands[@]}"
  420. [[ $ffmpeg = sharedlibs ]] && do_install "$LOCALDESTDIR"/bin/libass-9.dll bin-video/
  421. do_checkIfExist
  422. unset extracommands
  423. fi
  424. if [[ $ffmpeg != sharedlibs && $ffmpeg != shared ]]; then
  425. _libs=(lib{freetype,harfbuzz{-subset,},fribidi,ass}.dll.a
  426. libav{codec,device,filter,format,util,resample}.dll.a
  427. lib{sw{scale,resample},postproc}.dll.a)
  428. for _lib in "${_libs[@]}"; do
  429. rm -f "$LOCALDESTDIR/lib/$_lib"
  430. done
  431. unset _lib _libs
  432. fi
  433. fi
  434. [[ $ffmpeg != no ]] && enabled gcrypt && do_pacman_install libgcrypt
  435. if [[ $curl = y ]]; then
  436. enabled libtls && curl=libressl
  437. enabled openssl && curl=openssl
  438. enabled gnutls && curl=gnutls
  439. enabled mbedtls && curl=mbedtls
  440. [[ $curl = y ]] && curl=schannel
  441. fi
  442. if enabled_any gnutls librtmp || [[ $rtmpdump = y || $curl = gnutls ]]; then
  443. do_pacman_install nettle
  444. grep_and_sed '__declspec(__dllimport__)' "$MINGW_PREFIX"/include/gmp.h \
  445. 's|__declspec\(__dllimport__\)||g' "$MINGW_PREFIX"/include/gmp.h
  446. _check=(libgnutls.{,l}a gnutls.pc)
  447. _gnutls_ver=3.8.9
  448. _gnutls_hash=69e113d802d1670c4d5ac1b99040b1f2d5c7c05daec5003813c049b5184820ed
  449. if do_pkgConfig "gnutls = $_gnutls_ver" && do_wget -h $_gnutls_hash \
  450. "https://www.gnupg.org/ftp/gcrypt/gnutls/v${_gnutls_ver%.*}/gnutls-${_gnutls_ver}.tar.xz"; then
  451. do_uninstall include/gnutls "${_check[@]}"
  452. grep_or_sed crypt32 lib/gnutls.pc.in 's/Libs.private.*/& -lcrypt32/'
  453. grep_and_sed tests src/gl/Makefile.am 's|(SUBDIRS.*) tests|\1|'
  454. CFLAGS="-Wno-int-conversion" \
  455. do_separate_confmakeinstall \
  456. --disable-{cxx,doc,tools,tests,nls,rpath,libdane,guile,gcc-warnings} \
  457. --without-{p11-kit,idn,tpm} --enable-local-libopts \
  458. --with-included-unistring --disable-code-coverage \
  459. LDFLAGS="$LDFLAGS -L${LOCALDESTDIR}/lib -L${MINGW_PREFIX}/lib"
  460. do_checkIfExist
  461. fi
  462. fi
  463. if [[ $curl = openssl ]] || { [[ $ffmpeg != no ]] && enabled openssl; }; then
  464. do_pacman_install openssl
  465. fi
  466. hide_libressl -R
  467. if [[ $curl = libressl ]] || { [[ $ffmpeg != no ]] && enabled libtls; }; then
  468. _check=(tls.h lib{crypto,ssl,tls}.{pc,{,l}a} openssl.pc)
  469. [[ $standalone = y ]] && _check+=(bin-global/openssl.exe)
  470. if do_vcs "$SOURCE_REPO_LIBRESSL" libressl; then
  471. do_uninstall etc/ssl include/openssl "${_check[@]}"
  472. _sed="man"
  473. [[ $standalone = y ]] || _sed="apps tests $_sed"
  474. sed -ri "s;(^SUBDIRS .*) $_sed;\1;" Makefile.am
  475. do_autogen
  476. do_separate_confmakeinstall global
  477. do_checkIfExist
  478. unset _sed
  479. fi
  480. fi
  481. { enabled mbedtls || [[ $curl = mbedtls ]]; } && do_pacman_install mbedtls
  482. if [[ $mediainfo = y || $bmx = y || $curl != n ]]; then
  483. do_pacman_install libunistring
  484. grep_and_sed dllimport "$MINGW_PREFIX"/include/unistring/woe32dll.h \
  485. 's|__declspec \(dllimport\)||g' "$MINGW_PREFIX"/include/unistring/woe32dll.h
  486. _deps=("$MINGW_PREFIX/lib/libunistring.a")
  487. _check=(libidn2.{{,l}a,pc} idn2.h)
  488. [[ $standalone == y ]] && _check+=(bin-global/idn2.exe)
  489. if do_pkgConfig "libidn2 = 2.3.8" &&
  490. do_wget -h f557911bf6171621e1f72ff35f5b1825bb35b52ed45325dcdee931e5d3c0787a \
  491. "https://ftp.gnu.org/gnu/libidn/libidn2-2.3.8.tar.gz"; then
  492. do_uninstall "${_check[@]}"
  493. do_pacman_install gtk-doc
  494. [[ $standalone == y ]] || sed -ri 's|(bin_PROGRAMS = ).*|\1|g' src/Makefile.am
  495. # unistring also depends on iconv
  496. grep_or_sed '@LTLIBUNISTRING@ @LTLIBICONV@' libidn2.pc.in \
  497. 's|(@LTLIBICONV@) (@LTLIBUNISTRING@)|\2 \1|'
  498. AUTOPOINT=true do_autoreconf
  499. do_separate_confmakeinstall global --disable-{doc,rpath,nls}
  500. do_checkIfExist
  501. fi
  502. _deps=(libidn2.a)
  503. _check=(libpsl.{{,l}a,h,pc})
  504. [[ $standalone == y ]] && _check+=(bin-global/psl.exe)
  505. if do_pkgConfig "libpsl = 0.21.5" &&
  506. do_wget -h 1dcc9ceae8b128f3c0b3f654decd0e1e891afc6ff81098f227ef260449dae208 \
  507. "https://github.com/rockdaboot/libpsl/releases/download/0.21.5/libpsl-0.21.5.tar.gz"; then
  508. do_uninstall "${_check[@]}"
  509. [[ $standalone == y ]] || sed -ri 's|(bin_PROGRAMS = ).*|\1|g' tools/Makefile.in
  510. grep_or_sed "Requires.private" libpsl.pc.in "/Libs:/ i\Requires.private: libidn2"
  511. CFLAGS+=" -DPSL_STATIC" do_separate_confmakeinstall global --disable-{nls,rpath,gtk-doc-html,man,runtime}
  512. do_checkIfExist
  513. fi
  514. fi
  515. if [[ $mediainfo = y || $bmx = y || $curl != n || $cyanrip = y ]]; then
  516. do_pacman_install brotli nghttp2
  517. _check=(curl/curl.h libcurl.{{,l}a,pc})
  518. case $curl in
  519. libressl) _deps=(libssl.a) ;;
  520. openssl) _deps=("$MINGW_PREFIX/lib/libssl.a") ;;
  521. gnutls) _deps=(libgnutls.a) ;;
  522. mbedtls) _deps=("$MINGW_PREFIX/lib/libmbedtls.a") ;;
  523. *) _deps=() ;;
  524. esac
  525. [[ $standalone = y || $curl != n ]] && _check+=(bin-global/curl.exe)
  526. if do_vcs "$SOURCE_REPO_CURL"; then
  527. do_uninstall include/curl bin-global/curl-config "${_check[@]}"
  528. extra_opts=()
  529. case $curl in
  530. libressl|openssl)
  531. extra_opts+=(--with-{nghttp2,openssl} --without-{gnutls,mbedtls})
  532. ;;
  533. mbedtls) extra_opts+=(--with-{mbedtls,nghttp2} --without-openssl) ;;
  534. gnutls) extra_opts+=(--with-gnutls --without-{nghttp2,mbedtls,openssl}) ;;
  535. *) extra_opts+=(--with-{schannel,winidn,nghttp2} --without-{gnutls,mbedtls,openssl});;
  536. esac
  537. [[ ! -f configure || configure.ac -nt configure ]] &&
  538. do_autoreconf
  539. [[ $curl = openssl ]] && hide_libressl
  540. hide_conflicting_libs
  541. CPPFLAGS+=" -DGNUTLS_INTERNAL_BUILD -DNGHTTP2_STATICLIB -DPSL_STATIC" \
  542. do_separate_confmakeinstall global "${extra_opts[@]}" \
  543. --without-{libssh2,random,ca-bundle,ca-path,librtmp} \
  544. --with-brotli --enable-sspi --disable-debug
  545. hide_conflicting_libs -R
  546. [[ $curl = openssl ]] && hide_libressl -R
  547. if [[ $curl != schannel ]]; then
  548. _notrequired=true
  549. cd_safe "build-$bits"
  550. PATH=/usr/bin log ca-bundle make ca-bundle
  551. unset _notrequired
  552. [[ -f lib/ca-bundle.crt ]] &&
  553. cp -f lib/ca-bundle.crt "$LOCALDESTDIR"/bin-global/curl-ca-bundle.crt
  554. cd_safe ..
  555. fi
  556. do_checkIfExist
  557. fi
  558. fi
  559. if [[ $exitearly = EE2 ]]; then
  560. do_simple_print -p '\n\t'"${orange}Exit due to env var MABS_EXIT_EARLY set to EE2"
  561. return
  562. fi
  563. if { { [[ $ffmpeg != no || $standalone = y ]] && enabled libtesseract; } ||
  564. { [[ $standalone = y ]] && enabled libwebp; }; }; then
  565. _check=(libglut.a glut.pc)
  566. if do_vcs "$SOURCE_REPO_LIBGLUT" freeglut; then
  567. do_uninstall lib/cmake/FreeGLUT include/GL "${_check[@]}"
  568. do_cmakeinstall -D{UNIX,FREEGLUT_BUILD_DEMOS,FREEGLUT_BUILD_SHARED_LIBS}=OFF -DFREEGLUT_REPLACE_GLUT=ON
  569. do_checkIfExist
  570. fi
  571. do_pacman_install libjpeg-turbo xz zlib zstd libdeflate
  572. _deps=(libglut.a "$zlib_dir"/lib/libz.a)
  573. _check=(libtiff{.a,-4.pc})
  574. [[ $standalone = y ]] && _check+=(bin-global/tiff{cp,dump,info,set,split}.exe)
  575. if do_vcs "$SOURCE_REPO_LIBTIFF"; then
  576. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/libtiff/0001-tiffgt-Link-winmm-if-windows.patch" am
  577. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/libtiff/0002-tiffgt-link-gl-after-glut.patch" am
  578. do_uninstall lib/cmake/tiff "${_check[@]}"
  579. extracommands=("-Dtiff-tests=OFF" "-Dtiff-docs=OFF")
  580. if [[ $standalone = y ]]; then
  581. extracommands+=("-Dtiff-tools=ON")
  582. else
  583. extracommands+=("-Dtiff-tools=OFF")
  584. fi
  585. grep_or_sed 'Requires.private' libtiff-4.pc.in \
  586. '/Libs:/ a\Requires.private: libjpeg liblzma zlib libzstd glut'
  587. CFLAGS+=" -DFREEGLUT_STATIC" \
  588. do_cmakeinstall global -D{webp,jbig,lerc}=OFF "${extracommands[@]}"
  589. do_checkIfExist
  590. unset extracommands
  591. fi
  592. fi
  593. file_installed -s libtiff-4.pc &&
  594. grep_or_sed '-ldeflate' "$(file_installed libtiff-4.pc)" \
  595. 's/Libs.private:.*/& -ldeflate/'
  596. if [[ $ffmpeg != no || $standalone = y ]] && enabled libwebp; then
  597. do_pacman_install giflib
  598. _check=(libwebp{,mux}.{a,pc})
  599. [[ $standalone = y ]] && _check+=(libwebp{demux,decoder}.{a,pc}
  600. bin-global/{{c,d}webp,webpmux,img2webp}.exe)
  601. if do_vcs "$SOURCE_REPO_LIBWEBP"; then
  602. do_uninstall include/webp bin-global/gif2webp.exe "${_check[@]}"
  603. extracommands=("-DWEBP_BUILD_EXTRAS=OFF" "-DWEBP_BUILD_VWEBP=OFF")
  604. if [[ $standalone = y ]]; then
  605. extracommands+=(-DWEBP_BUILD_{{C,D,GIF2,IMG2}WEBP,ANIM_UTILS,WEBPMUX}"=ON")
  606. else
  607. extracommands+=(-DWEBP_BUILD_{{C,D,GIF2,IMG2,V}WEBP,ANIM_UTILS,WEBPMUX}"=OFF")
  608. fi
  609. CFLAGS+=" -DFREEGLUT_STATIC" \
  610. do_cmakeinstall global -DWEBP_ENABLE_SWAP_16BIT_CSP=ON "${extracommands[@]}"
  611. do_checkIfExist
  612. unset extracommands
  613. fi
  614. fi
  615. if [[ $jpegxl = y ]] || { [[ $ffmpeg != no ]] && enabled libjxl; }; then
  616. _check=(bin/gflags_completions.sh gflags.pc gflags/gflags.h libgflags{,_nothreads}.a)
  617. if do_vcs "$SOURCE_REPO_GFLAGS"; then
  618. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/gflags/0001-cmake-chop-off-.lib-extension-from-shlwapi.patch" am
  619. do_uninstall "${_check[@]}" lib/cmake/gflags include/gflags
  620. do_cmakeinstall -D{BUILD,INSTALL}_STATIC_LIBS=ON -DBUILD_gflags_LIB=ON -DINSTALL_HEADERS=ON \
  621. -DREGISTER_{BUILD_DIR,INSTALL_PREFIX}=OFF
  622. do_checkIfExist
  623. fi
  624. do_pacman_install brotli lcms2
  625. _deps=(libgflags.a)
  626. _check=(libjxl{{,_threads}.a,.pc} jxl/decode.h)
  627. [[ $jpegxl = y ]] && _check+=(bin-global/{{c,d}jxl,jxlinfo}.exe)
  628. if do_vcs "$SOURCE_REPO_LIBJXL"; then
  629. do_git_submodule
  630. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/libjxl/0001-brotli-link-enc-before-common.patch" am
  631. do_uninstall "${_check[@]}" include/jxl bin-global/cjpegli.exe bin-global/djpegli.exe
  632. do_pacman_install asciidoc
  633. extracommands=()
  634. [[ $jpegxl = y ]] || extracommands=("-DJPEGXL_ENABLE_TOOLS=OFF")
  635. CXXFLAGS+=" -DJXL_CMS_STATIC_DEFINE -DJXL_STATIC_DEFINE -DJXL_THREADS_STATIC_DEFINE" \
  636. do_cmakeinstall global -D{BUILD_TESTING,JPEGXL_ENABLE_{BENCHMARK,DOXYGEN,MANPAGES,OPENEXR,SKCMS,EXAMPLES,JPEGLI}}=OFF \
  637. -DJPEGXL_{FORCE_SYSTEM_{BROTLI,LCMS2},STATIC}=ON "${extracommands[@]}"
  638. do_checkIfExist
  639. unset extracommands
  640. fi
  641. fi
  642. if files_exist bin-video/OpenCL.dll; then
  643. opencldll=$LOCALDESTDIR/bin-video/OpenCL.dll
  644. else
  645. syspath=$(cygpath -S)
  646. [[ $bits = 32bit && -d $syspath/../SysWOW64 ]] && syspath+=/../SysWOW64
  647. opencldll=$syspath/OpenCL.dll
  648. unset syspath
  649. fi
  650. if [[ $ffmpeg != no && -f $opencldll ]] && enabled opencl; then
  651. do_simple_print "${orange}FFmpeg and related apps will depend on OpenCL.dll$reset"
  652. do_pacman_remove opencl-headers
  653. do_pacman_install tools-git
  654. _check=(CL/cl.h)
  655. if do_vcs "$SOURCE_REPO_OPENCLHEADERS"; then
  656. do_uninstall include/CL
  657. do_install CL/*.h include/CL/
  658. do_checkIfExist
  659. fi
  660. _check=(libOpenCL.a)
  661. if test_newer installed "$opencldll" "${_check[@]}"; then
  662. cd_safe "$LOCALBUILDDIR"
  663. [[ -d opencl ]] && rm -rf opencl
  664. mkdir -p opencl && cd_safe opencl
  665. create_build_dir
  666. gendef "$opencldll" >/dev/null 2>&1
  667. [[ -f OpenCL.def ]] && do_dlltool libOpenCL.a OpenCL.def
  668. [[ -f libOpenCL.a ]] && do_install libOpenCL.a
  669. do_checkIfExist
  670. fi
  671. else
  672. do_removeOption --enable-opencl
  673. fi
  674. unset opencldll
  675. if [[ $ffmpeg != no || $standalone = y ]] && enabled libtesseract; then
  676. do_pacman_remove tesseract-ocr
  677. _check=(libleptonica.{,l}a lept.pc)
  678. if do_vcs "$SOURCE_REPO_LEPT"; then
  679. do_uninstall include/leptonica "${_check[@]}"
  680. [[ -f configure ]] || do_autogen
  681. do_separate_confmakeinstall --disable-programs --without-{lib{openjpeg,webp},giflib}
  682. do_checkIfExist
  683. fi
  684. do_pacman_install libarchive pango asciidoc
  685. _check=(libtesseract.{,l}a tesseract.pc)
  686. if do_vcs "$SOURCE_REPO_TESSERACT"; then
  687. do_pacman_install docbook-xsl omp
  688. # Reverts a commit that breaks the pkgconfig file
  689. {
  690. git revert --no-edit b4a4f5c || git revert --abort
  691. } > /dev/null 2>&1
  692. do_autogen
  693. _check+=(bin-global/tesseract.exe)
  694. do_uninstall include/tesseract "${_check[@]}"
  695. sed -i 's|Requires.private.*|& libarchive iconv libtiff-4|' tesseract.pc.in
  696. grep_or_sed ws2_32 "$MINGW_PREFIX/lib/pkgconfig/libarchive.pc" 's;Libs.private:.*;& -lws2_32;g'
  697. case $CC in
  698. *clang) sed -i -e 's|Libs.private.*|& -fopenmp=libomp|' tesseract.pc.in ;;
  699. *) sed -i -e 's|Libs.private.*|& -fopenmp -lgomp|' tesseract.pc.in ;;
  700. esac
  701. do_separate_confmakeinstall global --disable-{graphics,tessdata-prefix} \
  702. --without-curl \
  703. LIBLEPT_HEADERSDIR="$LOCALDESTDIR/include" \
  704. LIBS="$($PKG_CONFIG --libs iconv lept libtiff-4)" --datadir="$LOCALDESTDIR/bin-global"
  705. if [[ ! -f $LOCALDESTDIR/bin-global/tessdata/eng.traineddata ]]; then
  706. do_pacman_install tesseract-data-eng
  707. mkdir -p "$LOCALDESTDIR"/bin-global/tessdata
  708. do_install "$MINGW_PREFIX/share/tessdata/eng.traineddata" bin-global/tessdata/
  709. printf '%s\n' \
  710. "You can get more language data here:" \
  711. "https://github.com/tesseract-ocr/tessdata" \
  712. "Just download <lang you want>.traineddata and copy it to this directory." \
  713. > "$LOCALDESTDIR"/bin-global/tessdata/need_more_languages.txt
  714. fi
  715. do_checkIfExist
  716. fi
  717. fi
  718. _check=(librubberband.a rubberband.pc rubberband/{rubberband-c,RubberBandStretcher}.h)
  719. if { { [[ $ffmpeg != no ]] && enabled librubberband; } ||
  720. ! mpv_disabled rubberband; } &&
  721. do_vcs "$SOURCE_REPO_RUBBERBAND"; then
  722. do_uninstall "${_check[@]}"
  723. log "distclean" make distclean
  724. do_make PREFIX="$LOCALDESTDIR" install-static
  725. do_checkIfExist
  726. fi
  727. _check=(zimg{.h,++.hpp} libzimg.{,l}a zimg.pc)
  728. if [[ $ffmpeg != no ]] && enabled libzimg &&
  729. do_vcs "$SOURCE_REPO_ZIMG"; then
  730. do_git_submodule
  731. do_uninstall "${_check[@]}"
  732. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/zimg/0001-libm_wrapper-define-__CRT__NO_INLINE-before-math.h.patch" am
  733. do_autoreconf
  734. do_separate_confmakeinstall
  735. do_checkIfExist
  736. fi
  737. if [[ $exitearly = EE3 ]]; then
  738. do_simple_print -p '\n\t'"${orange}Exit due to env var MABS_EXIT_EARLY set to EE3"
  739. return
  740. fi
  741. set_title "compiling audio tools"
  742. do_simple_print -p '\n\t'"${orange}Starting $bits compilation of audio tools${reset}"
  743. if [[ $ffmpeg != no || $sox = y ]]; then
  744. do_pacman_install wavpack
  745. enabled_any libopencore-amr{wb,nb} && do_pacman_install opencore-amr
  746. if enabled libtwolame; then
  747. do_pacman_install twolame
  748. do_addOption --extra-cflags=-DLIBTWOLAME_STATIC
  749. fi
  750. enabled libmp3lame && do_pacman_install lame
  751. fi
  752. _check=(ilbc.h libilbc.{a,pc})
  753. if [[ $ffmpeg != no ]] && enabled libilbc &&
  754. do_vcs "$SOURCE_REPO_LIBILBC"; then
  755. do_git_submodule
  756. do_uninstall "${_check[@]}"
  757. do_cmakeinstall -DUNIX=OFF
  758. do_checkIfExist
  759. fi
  760. _check=(libogg.{,l}a ogg/ogg.h ogg.pc)
  761. if { [[ $flac = y ]] || enabled libvorbis; } &&
  762. do_vcs "$SOURCE_REPO_LIBOGG"; then
  763. do_uninstall include/ogg "${_check[@]}"
  764. do_autogen
  765. do_separate_confmakeinstall audio
  766. do_checkIfExist
  767. fi
  768. _check=(libvorbis{,enc,file}.{,l}a vorbis{,enc,file}.pc vorbis/vorbisenc.h)
  769. if enabled libvorbis && do_vcs "$SOURCE_REPO_LIBVORBIS"; then
  770. do_uninstall include/vorbis "${_check[@]}"
  771. do_autogen
  772. do_separate_confmakeinstall audio --disable-docs
  773. do_checkIfExist
  774. fi
  775. _check=(libspeex.{,l}a speex.pc speex/speex.h)
  776. [[ $standalone = y ]] && _check+=(bin-audio/speex{enc,dec}.exe)
  777. if enabled libspeex && do_vcs "$SOURCE_REPO_SPEEX"; then
  778. do_pacman_remove speex
  779. do_uninstall include/speex "${_check[@]}"
  780. do_autogen
  781. extracommands=()
  782. [[ $standalone = y ]] || extracommands+=(--disable-binaries)
  783. do_separate_confmakeinstall audio --enable-vorbis-psy "${extracommands[@]}"
  784. do_checkIfExist
  785. unset extracommands
  786. fi
  787. _check=(libFLAC{,++}.a flac{,++}.pc)
  788. [[ $standalone = y ]] && _check+=(bin-audio/flac.exe)
  789. if [[ $flac = y ]]; then
  790. if do_vcs "$SOURCE_REPO_FLAC"; then
  791. if [[ $standalone = y ]]; then
  792. _check+=(bin-audio/metaflac.exe)
  793. fi
  794. do_uninstall include/FLAC{,++} share/aclocal/libFLAC{,++}.m4 "${_check[@]}"
  795. do_cmakeinstall audio -DBUILD_{DOCS,DOXYGEN,EXAMPLES,TESTING}=OFF -DINSTALL_MANPAGES=OFF
  796. do_checkIfExist
  797. fi
  798. elif [[ $sox = y ]] || { [[ $standalone = y ]] && enabled_any libvorbis libopus; }; then
  799. do_pacman_install flac
  800. grep_and_sed dllimport "$MINGW_PREFIX"/include/FLAC++/export.h \
  801. 's|__declspec\(dllimport\)||g' "$MINGW_PREFIX"/include/FLAC{,++}/export.h
  802. fi
  803. grep_and_sed dllimport "$LOCALDESTDIR"/include/FLAC++/export.h \
  804. 's|__declspec\(dllimport\)||g' "$LOCALDESTDIR"/include/FLAC{,++}/export.h
  805. grep_or_sed pthread "$LOCALDESTDIR/lib/pkgconfig/flac.pc" 's/Libs.private: /&-pthread /;s/Cflags: .*/& -pthread/'
  806. _check=(libvo-amrwbenc.{,l}a vo-amrwbenc.pc)
  807. if [[ $ffmpeg != no ]] && enabled libvo-amrwbenc &&
  808. do_pkgConfig "vo-amrwbenc = 0.1.3" &&
  809. do_wget_sf -h f63bb92bde0b1583cb3cb344c12922e0 \
  810. "opencore-amr/vo-amrwbenc/vo-amrwbenc-0.1.3.tar.gz"; then
  811. do_uninstall include/vo-amrwbenc "${_check[@]}"
  812. do_separate_confmakeinstall
  813. do_checkIfExist
  814. fi
  815. if { [[ $ffmpeg != no ]] && enabled libfdk-aac; } || [[ $fdkaac = y ]]; then
  816. _check=(libfdk-aac.{,l}a fdk-aac.pc)
  817. if do_vcs "$SOURCE_REPO_FDKAAC"; then
  818. do_autoreconf
  819. do_uninstall include/fdk-aac "${_check[@]}"
  820. CXXFLAGS+=" -fno-exceptions -fno-rtti" do_separate_confmakeinstall
  821. do_checkIfExist
  822. fi
  823. _check=(bin-audio/fdkaac.exe)
  824. _deps=(libfdk-aac.a)
  825. if [[ $standalone = y ]] &&
  826. do_vcs "$SOURCE_REPO_FDKAACEXE" bin-fdk-aac; then
  827. do_autoreconf
  828. do_uninstall "${_check[@]}"
  829. CFLAGS+=" $($PKG_CONFIG --cflags fdk-aac)" \
  830. LDFLAGS+=" $($PKG_CONFIG --cflags --libs fdk-aac)" \
  831. do_separate_confmakeinstall audio
  832. do_checkIfExist
  833. fi
  834. fi
  835. if [[ $faac = y ]]; then
  836. _check=(bin-audio/faac.exe)
  837. if ! [[ $standalone = y ]]; then
  838. do_pacman_install faac
  839. elif do_vcs "$SOURCE_REPO_FAAC"; then
  840. do_pacman_remove faac
  841. do_uninstall libfaac.a faac{,cfg}.h "${_check[@]}"
  842. log bootstrap ./bootstrap
  843. do_separate_confmakeinstall audio
  844. do_checkIfExist
  845. fi
  846. fi
  847. _check=(bin-audio/exhale.exe)
  848. if [[ $exhale = y ]] &&
  849. do_vcs "$SOURCE_REPO_EXHALE"; then
  850. do_uninstall "${_check[@]}"
  851. _notrequired=true
  852. do_cmakeinstall audio
  853. do_checkIfExist
  854. unset _notrequired
  855. fi
  856. _check=(bin-audio/ogg{enc,dec}.exe)
  857. _deps=(ogg.pc vorbis.pc)
  858. if [[ $standalone = y ]] && enabled libvorbis &&
  859. do_vcs "$SOURCE_REPO_VORBIS_TOOLS"; then
  860. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/vorbis-tools/0001-utf8-add-empty-convert_free_charset-for-Windows.patch" am
  861. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/vorbis-tools/0002-getopt-just-remove-it.patch" am
  862. do_autoreconf
  863. do_uninstall "${_check[@]}"
  864. extracommands=()
  865. enabled libspeex || extracommands+=(--without-speex)
  866. do_separate_conf --disable-{ogg123,vorbiscomment,vcut,ogginfo} \
  867. --with-lib{iconv,intl}-prefix="$MINGW_PREFIX" "${extracommands[@]}"
  868. do_make
  869. do_install oggenc/oggenc.exe oggdec/oggdec.exe bin-audio/
  870. do_checkIfExist
  871. unset extracommands
  872. fi
  873. _check=(libopus.{,l}a opus.pc opus/opus.h)
  874. if enabled libopus && do_vcs "$SOURCE_REPO_OPUS"; then
  875. do_pacman_remove opus
  876. do_uninstall include/opus "${_check[@]}"
  877. (
  878. sha=$(grep dnn/download_model.sh autogen.sh | awk -F'"' '{print $2}')
  879. model=opus_data-${sha}.tar.gz
  880. pushd . > /dev/null
  881. [ -f "/build/$model" ] || do_wget -r -q -n "https://media.xiph.org/opus/models/$model"
  882. popd > /dev/null || return 1
  883. ln -s "$LOCALBUILDDIR/$model" .
  884. )
  885. do_autogen
  886. do_separate_confmakeinstall --disable-{stack-protector,doc,extra-programs}
  887. do_checkIfExist
  888. fi
  889. if [[ $standalone = y ]] && enabled libopus; then
  890. do_pacman_install openssl
  891. hide_libressl
  892. do_pacman_remove opusfile
  893. _check=(opus/opusfile.h libopus{file,url}.{,l}a opus{file,url}.pc)
  894. _deps=(ogg.pc opus.pc "$MINGW_PREFIX"/lib/pkgconfig/libssl.pc)
  895. if do_vcs "$SOURCE_REPO_OPUSFILE"; then
  896. do_uninstall "${_check[@]}"
  897. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/opusfile/0001-Disable-cert-store-integration-if-OPENSSL_VERSION_NU.patch" am
  898. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/opusfile/0002-configure-Only-add-std-c89-if-not-mingw-because-of-c.patch" am
  899. do_autogen
  900. do_separate_confmakeinstall --disable-{examples,doc}
  901. do_checkIfExist
  902. fi
  903. _check=(opus/opusenc.h libopusenc.{pc,{,l}a})
  904. _deps=(opus.pc)
  905. if do_vcs "$SOURCE_REPO_LIBOPUSENC"; then
  906. do_uninstall "${_check[@]}"
  907. do_autogen
  908. do_separate_confmakeinstall --disable-{examples,doc}
  909. do_checkIfExist
  910. fi
  911. _check=(bin-audio/opusenc.exe)
  912. _deps=(opusfile.pc libopusenc.pc)
  913. if do_vcs "$SOURCE_REPO_OPUSEXE"; then
  914. _check+=(bin-audio/opus{dec,info}.exe)
  915. do_uninstall "${_check[@]}"
  916. do_autogen
  917. do_separate_confmakeinstall audio
  918. do_checkIfExist
  919. fi
  920. hide_libressl -R
  921. fi
  922. _check=(soxr.h libsoxr.a)
  923. if [[ $ffmpeg != no ]] && enabled libsoxr &&
  924. do_vcs "$SOURCE_REPO_LIBSOXR"; then
  925. do_uninstall "${_check[@]}"
  926. do_cmakeinstall -D{WITH_LSR_BINDINGS,BUILD_TESTS,WITH_OPENMP}=off
  927. do_checkIfExist
  928. fi
  929. _check=(libcodec2.a codec2.pc codec2/codec2.h)
  930. if [[ $ffmpeg != no ]] && enabled libcodec2; then
  931. if do_vcs "$SOURCE_REPO_CODEC2"; then
  932. do_uninstall all include/codec2 "${_check[@]}"
  933. sed -i 's|if(WIN32)|if(FALSE)|g' CMakeLists.txt
  934. if enabled libspeex; then
  935. # rename same-named symbols copied from speex
  936. grep -ERl "\b(lsp|lpc)_to_(lpc|lsp)" --include="*.[ch]" | \
  937. xargs -r sed -ri "s;((lsp|lpc)_to_(lpc|lsp));c2_\1;g"
  938. fi
  939. do_cmakeinstall -D{UNITTEST,INSTALL_EXAMPLES}=off \
  940. -DCMAKE_INSTALL_BINDIR="$(pwd)/build-$bits/_bin"
  941. do_checkIfExist
  942. fi
  943. fi
  944. if [[ $standalone = y ]] && enabled libmp3lame; then
  945. _check=(bin-audio/lame.exe)
  946. if files_exist "${_check[@]}" &&
  947. grep -q "3.100" "$LOCALDESTDIR/bin-audio/lame.exe"; then
  948. do_print_status "lame 3.100" "$green" "Up-to-date"
  949. elif do_wget_sf \
  950. -h ddfe36cab873794038ae2c1210557ad34857a4b6bdc515785d1da9e175b1da1e \
  951. "lame/lame/3.100/lame-3.100.tar.gz"; then
  952. do_uninstall include/lame libmp3lame.{,l}a "${_check[@]}"
  953. _mingw_patches_lame="https://raw.githubusercontent.com/Alexpux/MINGW-packages/master/mingw-w64-lame"
  954. do_patch "$_mingw_patches_lame/0005-no-gtk.all.patch"
  955. do_patch "$_mingw_patches_lame/0006-dont-use-outdated-symbol-list.patch"
  956. do_patch "$_mingw_patches_lame/0007-revert-posix-code.patch"
  957. do_patch "$_mingw_patches_lame/0008-skip-termcap.patch"
  958. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/lame/0001-libmp3lame-vector-Makefile.am-Add-msse-to-fix-i686-c.patch"
  959. do_autoreconf
  960. do_separate_conf --enable-nasm
  961. do_make
  962. do_install frontend/lame.exe bin-audio/
  963. do_checkIfExist
  964. unset _mingw_patches_lame
  965. fi
  966. fi
  967. _check=(libgme.{a,pc})
  968. if [[ $ffmpeg != no ]] && enabled libgme && do_pkgConfig "libgme = 0.6.3" &&
  969. do_wget -h aba34e53ef0ec6a34b58b84e28bf8cfbccee6585cebca25333604c35db3e051d \
  970. "https://bitbucket.org/mpyne/game-music-emu/downloads/game-music-emu-0.6.3.tar.xz"; then
  971. do_uninstall include/gme "${_check[@]}"
  972. do_cmakeinstall -DENABLE_UBSAN=OFF
  973. do_checkIfExist
  974. fi
  975. _check=(libbs2b.{{,l}a,pc})
  976. if [[ $ffmpeg != no ]] && enabled libbs2b && do_pkgConfig "libbs2b = 3.1.0" &&
  977. do_wget_sf -h c1486531d9e23cf34a1892ec8d8bfc06 "bs2b/libbs2b/3.1.0/libbs2b-3.1.0.tar.bz2"; then
  978. do_uninstall include/bs2b "${_check[@]}"
  979. # sndfile check is disabled since we don't compile binaries anyway
  980. grep -q sndfile configure && sed -i '20119,20133d' configure
  981. sed -i "s|bin_PROGRAMS = .*||" src/Makefile.in
  982. do_separate_confmakeinstall
  983. do_checkIfExist
  984. fi
  985. _check=(libsndfile.a sndfile.{h,pc})
  986. if [[ $sox = y ]] && do_vcs "$SOURCE_REPO_SNDFILE" sndfile; then
  987. do_uninstall include/sndfile.hh "${_check[@]}"
  988. do_cmakeinstall -DBUILD_EXAMPLES=off -DBUILD_TESTING=off -DBUILD_PROGRAMS=OFF
  989. do_checkIfExist
  990. fi
  991. _check=(bin-audio/sox.exe sox.pc)
  992. _deps=(libsndfile.a opus.pc "$MINGW_PREFIX"/lib/libmp3lame.a)
  993. if [[ $sox = y ]]; then
  994. do_pacman_install libmad
  995. extracommands=()
  996. if enabled libopus; then
  997. [[ $standalone = y ]] || do_pacman_install opusfile
  998. else
  999. extracommands+=(--without-opus)
  1000. fi
  1001. if do_vcs "$SOURCE_REPO_SOX" sox; then
  1002. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/sox/0001-sox_version-fold-function-into-sox_version_info.patch" am
  1003. do_patch "https://raw.githubusercontent.com/msys2/MINGW-packages/master/mingw-w64-sox/0001-ucrt-no-rewind-pipe.patch"
  1004. do_uninstall sox.{pc,h} bin-audio/{soxi,play,rec}.exe libsox.{,l}a "${_check[@]}"
  1005. do_autoreconf
  1006. extralibs=(-lshlwapi -lz)
  1007. enabled libmp3lame || extracommands+=(--without-lame)
  1008. enabled_any libopencore-amr{wb,nb} &&
  1009. extralibs+=(-lvo-amrwbenc) ||
  1010. extracommands+=(--without-amr{wb,nb})
  1011. enabled libtwolame &&
  1012. extracommands+=(CFLAGS="$CFLAGS -DLIBTWOLAME_STATIC") ||
  1013. extracommands+=(--without-twolame)
  1014. enabled libvorbis || extracommands+=(--without-oggvorbis)
  1015. hide_conflicting_libs
  1016. sed -i 's|found_libgsm=yes|found_libgsm=no|g' configure
  1017. do_separate_conf --disable-symlinks LIBS="-L$LOCALDESTDIR/lib ${extralibs[*]}" "${extracommands[@]}"
  1018. do_make
  1019. do_install src/sox.exe bin-audio/
  1020. do_install sox.pc
  1021. hide_conflicting_libs -R
  1022. do_checkIfExist
  1023. unset extralibs
  1024. fi
  1025. unset extracommands
  1026. fi
  1027. _check=(libopenmpt.{a,pc})
  1028. if [[ $ffmpeg != no ]] && enabled libopenmpt &&
  1029. do_vcs "$SOURCE_REPO_LIBOPENMPT"; then
  1030. do_uninstall include/libopenmpt "${_check[@]}"
  1031. mkdir bin 2> /dev/null
  1032. extracommands=("CONFIG=mingw64-win${bits%bit}" "AR=ar" "STATIC_LIB=1" "SHARED_LIB=0" "EXAMPLES=0" "OPENMPT123=0"
  1033. "TEST=0" "OS=" "CC=$CC" "CXX=$CXX" "MINGW_COMPILER=${CC##* }")
  1034. log clean make clean "${extracommands[@]}"
  1035. do_makeinstall PREFIX="$LOCALDESTDIR" "${extracommands[@]}"
  1036. sed -i 's/Libs.private.*/& -lrpcrt4/' "$LOCALDESTDIR/lib/pkgconfig/libopenmpt.pc"
  1037. do_checkIfExist
  1038. unset extracommands
  1039. fi
  1040. _check=(libmysofa.{a,pc} mysofa.h)
  1041. if [[ $ffmpeg != no ]] && enabled libmysofa &&
  1042. do_vcs "$SOURCE_REPO_LIBMYSOFA"; then
  1043. do_uninstall "${_check[@]}"
  1044. do_cmakeinstall -DBUILD_TESTS=no -DCODE_COVERAGE=OFF
  1045. do_checkIfExist
  1046. fi
  1047. _check=(libflite.a flite/flite.h)
  1048. if enabled libflite && do_vcs "$SOURCE_REPO_FLITE"; then
  1049. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/flite/0001-tools-find_sts_main.c-Include-windows.h-before-defin.patch" am
  1050. do_uninstall libflite_cmu_{grapheme,indic}_{lang,lex}.a \
  1051. libflite_cmu_us_{awb,kal,kal16,rms,slt}.a \
  1052. libflite_{cmulex,usenglish,cmu_time_awb}.a "${_check[@]}" include/flite
  1053. log clean make clean
  1054. do_configure --bindir="$LOCALDESTDIR"/bin-audio --disable-shared \
  1055. --with-audio=none
  1056. do_make && do_makeinstall
  1057. do_checkIfExist
  1058. fi
  1059. _check=(shine/layer3.h libshine.{,l}a shine.pc)
  1060. [[ $standalone = y ]] && _check+=(bin-audio/shineenc.exe)
  1061. if enabled libshine && do_vcs "$SOURCE_REPO_SHINE"; then
  1062. do_uninstall "${_check[@]}"
  1063. [[ $standalone = n ]] && sed -i '/bin_PROGRAMS/,+4d' Makefile.am
  1064. # fix out-of-root build
  1065. # shellcheck disable=SC2016
  1066. sed -ri -e 's;(libshine.sym)$;$(srcdir)/\1;' \
  1067. -e '/libshine_la_HEADERS/{s;(src/lib);$(srcdir)/\1;}' \
  1068. -e '/shineenc_CFLAGS/{s;(src/lib);$(srcdir)/\1;}' Makefile.am
  1069. rm configure
  1070. do_autoreconf
  1071. do_separate_confmakeinstall audio
  1072. do_checkIfExist
  1073. fi
  1074. _check=(openal.pc libopenal.a)
  1075. if { { [[ $ffmpeg != no ]] &&
  1076. enabled openal; } || mpv_enabled openal; } &&
  1077. do_vcs "$SOURCE_REPO_OPENAL"; then
  1078. do_uninstall "${_check[@]}"
  1079. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/openal-soft/0001-CMake-Fix-issues-for-mingw-w64.patch" am
  1080. CC=${CC/ccache /}.bat CXX=${CXX/ccache /}.bat \
  1081. do_cmakeinstall -DLIBTYPE=STATIC -DALSOFT_UTILS=OFF -DALSOFT_EXAMPLES=OFF
  1082. sed -i 's/Libs.private.*/& -luuid -lole32/' "$LOCALDESTDIR/lib/pkgconfig/openal.pc" # uuid is for FOLDERID_* stuff
  1083. do_checkIfExist
  1084. unset _mingw_patches
  1085. fi
  1086. _check=(liblc3.a lc3.pc)
  1087. if [[ $ffmpeg != no ]] && enabled liblc3 &&
  1088. do_vcs "$SOURCE_REPO_LIBLC3"; then
  1089. do_uninstall "${_check[@]}"
  1090. if [[ $standalone = y ]]; then
  1091. _check+=(bin-audio/{d,e}lc3.exe)
  1092. LDFLAGS+=" -lpthread" do_mesoninstall audio -Dtools=true
  1093. else
  1094. do_mesoninstall audio
  1095. fi
  1096. do_checkIfExist
  1097. fi
  1098. _check=(bin/atw_ldwrapper libAudioToolboxWrapper.a)
  1099. if [[ $ffmpeg != no ]] && enabled audiotoolbox; then
  1100. _qtfiles_url="https://github.com/AnimMouse/QTFiles/releases/download/v12.10.11"
  1101. _deps=(bin-video/{ASL,CoreAudioToolbox,CoreFoundation,icudt62,libdispatch,libicuin,libicuuc,objc}.dll)
  1102. if ! files_exist "${_deps[@]}"; then
  1103. if [[ $build64 = yes ]]; then
  1104. do_wget -r -q -h 32fcd058936410f7eabd3b55a8931bce5f45bb7892d6a2c65387820daca52f58 \
  1105. "${_qtfiles_url}/QTfiles64.7z"
  1106. do_install *.dll bin-video
  1107. rm -rf ../QTfiles64/
  1108. fi
  1109. if [[ $build32 = yes ]]; then
  1110. do_wget -r -q -h c6c582fe1af4e0c2b1eb7c141ad929a81f14d123aedd3b16df8226c104fb3028 \
  1111. "${_qtfiles_url}/QTfiles.7z"
  1112. do_install *.dll bin-video
  1113. rm -rf ../QTfiles/
  1114. fi
  1115. fi
  1116. if do_vcs "$SOURCE_REPO_AUDIOTOOLBOX"; then
  1117. do_uninstall "${_check[@]}"
  1118. do_cmakeinstall
  1119. do_checkIfExist
  1120. fi
  1121. unset _qtfiles_url
  1122. fi
  1123. if [[ $exitearly = EE4 ]]; then
  1124. do_simple_print -p '\n\t'"${orange}Exit due to env var MABS_EXIT_EARLY set to EE4"
  1125. return
  1126. fi
  1127. set_title "compiling video tools"
  1128. do_simple_print -p '\n\t'"${orange}Starting $bits compilation of video tools${reset}"
  1129. _deps=(gnutls.pc)
  1130. _check=(librtmp.{a,pc})
  1131. [[ $rtmpdump = y || $standalone = y ]] && _check+=(bin-video/rtmpdump.exe)
  1132. if { [[ $rtmpdump = y ]] ||
  1133. { [[ $ffmpeg != no ]] && enabled librtmp; }; } &&
  1134. do_vcs "$SOURCE_REPO_LIBRTMP" librtmp; then
  1135. [[ $rtmpdump = y || $standalone = y ]] && _check+=(bin-video/rtmp{suck,srv,gw}.exe)
  1136. do_uninstall include/librtmp "${_check[@]}"
  1137. [[ -f librtmp/librtmp.a ]] && log "clean" make clean
  1138. _rtmp_pkgver() {
  1139. printf '%s-%s-%s_%s-%s-static' \
  1140. "$(grep -oP "(?<=^VERSION=).+" Makefile)" \
  1141. "$(git log -1 --format=format:%cd-g%h --date=format:%Y%m%d)" \
  1142. "GnuTLS" \
  1143. "$($PKG_CONFIG --modversion gnutls)" \
  1144. "$CARCH"
  1145. }
  1146. do_makeinstall XCFLAGS="$CFLAGS -I$MINGW_PREFIX/include" XLDFLAGS="$LDFLAGS" SHARED= \
  1147. SYS=mingw prefix="$LOCALDESTDIR" bindir="$LOCALDESTDIR"/bin-video \
  1148. sbindir="$LOCALDESTDIR"/bin-video mandir="$LOCALDESTDIR"/share/man \
  1149. CRYPTO=GNUTLS LIB_GNUTLS="$($PKG_CONFIG --libs gnutls) -lz" \
  1150. VERSION="$(_rtmp_pkgver)"
  1151. do_checkIfExist
  1152. unset _rtmp_pkgver
  1153. fi
  1154. _check=(libvpx.a vpx.pc)
  1155. [[ $standalone = y || $av1an != n ]] && _check+=(bin-video/vpxenc.exe)
  1156. if { enabled libvpx || [[ $vpx = y ]]; } && do_vcs "$SOURCE_REPO_VPX" vpx; then
  1157. do_pacman_install yasm
  1158. extracommands=()
  1159. [[ -f config.mk ]] && log "distclean" make distclean
  1160. [[ $standalone = y || $av1an != n ]] && _check+=(bin-video/vpxdec.exe) ||
  1161. extracommands+=(--disable-{examples,webm-io,libyuv,postproc})
  1162. do_uninstall include/vpx "${_check[@]}"
  1163. # Work around for semaphore.h not having struct _timespec64 info
  1164. grep_or_sed sys/timeb.h vp8/common/threading.h \
  1165. '/<semaphore.h>/ i\#include <sys/timeb.h>'
  1166. create_build_dir
  1167. [[ $bits = 32bit ]] && arch=x86 || arch=x86_64
  1168. [[ $ffmpeg = sharedlibs ]] || extracommands+=(--enable-{vp9-postproc,vp9-highbitdepth})
  1169. get_external_opts extracommands
  1170. config_path=.. do_configure --target="${arch}-win${bits%bit}-gcc" \
  1171. --disable-{shared,unit-tests,docs,install-bins} \
  1172. "${extracommands[@]}"
  1173. sed -i 's;HAVE_GNU_STRIP=yes;HAVE_GNU_STRIP=no;' -- ./*.mk
  1174. do_make
  1175. do_makeinstall
  1176. [[ $standalone = y || $av1an != n ]] && do_install vpx{enc,dec}.exe bin-video/
  1177. do_checkIfExist
  1178. unset extracommands
  1179. else
  1180. pc_exists vpx || do_removeOption --enable-libvpx
  1181. fi
  1182. _check=(libvmaf.{a,pc} libvmaf/libvmaf.h)
  1183. if [[ $ffmpeg != no ]] && enabled libvmaf &&
  1184. do_vcs "$SOURCE_REPO_LIBVMAF"; then
  1185. do_uninstall share/model "${_check[@]}"
  1186. do_pacman_install -m vim # for built_in_models
  1187. cd_safe libvmaf
  1188. CFLAGS="-msse2 -mfpmath=sse -mstackrealign $CFLAGS" do_mesoninstall video \
  1189. -Denable_float=true -Dbuilt_in_models=true -Denable_tests=false
  1190. do_checkIfExist
  1191. fi
  1192. file_installed -s libvmaf.dll.a && rm "$(file_installed libvmaf.dll.a)"
  1193. _check=(libaom.a aom.pc)
  1194. [[ $aom = y || $standalone = y || $av1an != n ]] && _check+=(bin-video/aom{dec,enc}.exe)
  1195. if { [[ $aom = y ]] || [[ $libavif = y ]] || { [[ $ffmpeg != no ]] && enabled libaom; }; } &&
  1196. do_vcs "$SOURCE_REPO_LIBAOM"; then
  1197. do_pacman_install yasm
  1198. extracommands=()
  1199. if [[ $aom = y || $standalone = y || $av1an != n ]]; then
  1200. # fix google's shit
  1201. sed -ri 's;_PREFIX.+CMAKE_INSTALL_BINDIR;_FULL_BINDIR;' \
  1202. build/cmake/aom_install.cmake
  1203. else
  1204. extracommands+=("-DENABLE_EXAMPLES=off")
  1205. fi
  1206. do_uninstall include/aom "${_check[@]}"
  1207. get_external_opts extracommands
  1208. do_cmakeinstall video -DENABLE_{DOCS,TOOLS,TEST{S,DATA}}=off \
  1209. -DENABLE_NASM=on -DFORCE_HIGHBITDEPTH_DECODING=0 "${extracommands[@]}"
  1210. do_checkIfExist
  1211. unset extracommands
  1212. fi
  1213. _check=(dav1d/dav1d.h dav1d.pc libdav1d.a)
  1214. [[ $standalone = y ]] && _check+=(bin-video/dav1d.exe)
  1215. if { [[ $dav1d = y ]] || [[ $libavif = y ]] || { [[ $ffmpeg != no ]] && enabled libdav1d; }; } &&
  1216. do_vcs "$SOURCE_REPO_DAV1D"; then
  1217. do_uninstall include/dav1d "${_check[@]}"
  1218. extracommands=()
  1219. [[ $standalone = y ]] || extracommands=("-Denable_tools=false")
  1220. do_mesoninstall video -Denable_{tests,examples}=false "${extracommands[@]}"
  1221. do_checkIfExist
  1222. unset extracommands
  1223. fi
  1224. _check=()
  1225. { [[ $rav1e = y ]] || [[ $av1an != n ]] ||
  1226. { enabled librav1e && [[ $standalone = y ]]; } } &&
  1227. _check+=(bin-video/rav1e.exe)
  1228. { enabled librav1e || [[ $libavif = y ]]; } && _check+=(librav1e.a rav1e.pc rav1e/rav1e.h)
  1229. if { [[ $rav1e = y ]] || [[ $libavif = y ]] || enabled librav1e; } &&
  1230. do_vcs "$SOURCE_REPO_LIBRAV1E"; then
  1231. do_uninstall "${_check[@]}" include/rav1e
  1232. # We want to hide libgit2 unless we have a static library
  1233. _libgit2_pc="$MINGW_PREFIX/lib/pkgconfig/libgit2.pc"
  1234. if ! [[ -f $MINGW_PREFIX/lib/libgit2.a ]]; then
  1235. if [[ -f $_libgit2_pc ]]; then
  1236. mv -f "$_libgit2_pc"{,.dyn}
  1237. fi
  1238. else
  1239. if ! [[ -f $_libgit2_pc ]]; then
  1240. cp -f "$_libgit2_pc"{.dyn,}
  1241. fi
  1242. fi
  1243. unset _libgit2_pc
  1244. # standalone binary
  1245. if [[ $rav1e = y || $standalone = y || $av1an != n ]]; then
  1246. do_rust --profile release-no-lto
  1247. find "target/$CARCH-pc-windows-gnu$rust_target_suffix" -name "rav1e.exe" | while read -r f; do
  1248. do_install "$f" bin-video/
  1249. done
  1250. fi
  1251. # C lib
  1252. if [[ $libavif = y ]] || enabled librav1e; then
  1253. rm -f "$CARGO_HOME/config" 2> /dev/null
  1254. PKG_CONFIG="$LOCALDESTDIR/bin/ab-pkg-config-static.bat" \
  1255. log "install-rav1e-c" cargo capi install \
  1256. --release --jobs "$cpuCount" --prefix="$LOCALDESTDIR" \
  1257. --destdir="$PWD/install-$bits"
  1258. # do_install "install-$bits/bin/rav1e.dll" bin-video/
  1259. # do_install "install-$bits/lib/librav1e.dll.a" lib/
  1260. do_install "$(find "install-$bits/" -name "librav1e.a")" lib/
  1261. do_install "$(find "install-$bits/" -name "rav1e.pc")" lib/pkgconfig/
  1262. sed -i 's/\\/\//g' "$LOCALDESTDIR/lib/pkgconfig/rav1e.pc" >/dev/null 2>&1
  1263. do_install "$(find "install-$bits/" -name "rav1e")"/*.h include/rav1e/
  1264. fi
  1265. do_checkIfExist
  1266. fi
  1267. # add allow-multiple-definition to the .pc file to fix linking with other rust libraries
  1268. sed -i 's/Libs.private:.*/& -Wl,--allow-multiple-definition/' "$LOCALDESTDIR/lib/pkgconfig/rav1e.pc" >/dev/null 2>&1
  1269. _check=(bin-video/SvtAv1EncApp.exe
  1270. libSvtAv1Enc.a SvtAv1Enc.pc)
  1271. if [[ $bits = 32bit ]]; then
  1272. do_removeOption --enable-libsvtav1
  1273. elif { [[ $svtav1 = y ]] || enabled libsvtav1; } &&
  1274. do_vcs "$SOURCE_REPO_SVTAV1"; then
  1275. do_uninstall include/svt-av1 "${_check[@]}" include/svt-av1
  1276. do_cmakeinstall video -DUNIX=OFF -DENABLE_AVX512=ON
  1277. do_checkIfExist
  1278. fi
  1279. if [[ $libavif = y ]]; then
  1280. do_pacman_install libjpeg-turbo libyuv
  1281. _check=(libavif.{a,pc} avif/avif.h)
  1282. [[ $standalone = y ]] && _check+=(bin-video/avif{enc,dec}.exe)
  1283. if { pc_exists "aom" || pc_exists "dav1d" || pc_exists "rav1e" || pc_exists "SvtAv1Enc"; } &&
  1284. do_vcs "$SOURCE_REPO_LIBAVIF"; then
  1285. # chop off any .lib suffixes that is attached to a library name
  1286. grep_and_sed '\.lib' CMakeLists.txt 's|(\w)\.lib\b|\1|g'
  1287. do_uninstall "${_check[@]}"
  1288. extracommands=()
  1289. pc_exists "dav1d" && extracommands+=("-DAVIF_CODEC_DAV1D=SYSTEM")
  1290. pc_exists "rav1e" && extracommands+=("-DAVIF_CODEC_RAV1E=SYSTEM")
  1291. pc_exists "aom" && extracommands+=("-DAVIF_CODEC_AOM=SYSTEM")
  1292. pc_exists "SvtAv1Enc" && extracommands+=("-DAVIF_CODEC_SVT=SYSTEM")
  1293. case $standalone in
  1294. y) extracommands+=("-DAVIF_BUILD_APPS=ON") ;;
  1295. *) extracommands+=("-DAVIF_BUILD_APPS=OFF") ;;
  1296. esac
  1297. do_cmakeinstall video -DAVIF_ENABLE_WERROR=OFF "${extracommands[@]}"
  1298. do_checkIfExist
  1299. unset extracommands
  1300. fi
  1301. fi
  1302. _check=(libkvazaar.{,l}a kvazaar.pc kvazaar.h)
  1303. [[ $standalone = y ]] && _check+=(bin-video/kvazaar.exe)
  1304. if { [[ $other265 = y ]] || { [[ $ffmpeg != no ]] && enabled libkvazaar; }; } &&
  1305. do_vcs "$SOURCE_REPO_LIBKVAZAAR"; then
  1306. do_patch "https://github.com/m-ab-s/mabs-patches/raw/master/kvazaar/0001-Mingw-w64-Re-enable-avx2.patch" am
  1307. do_uninstall kvazaar_version.h "${_check[@]}"
  1308. do_autogen
  1309. [[ $standalone = y || $other265 = y ]] ||
  1310. sed -i "s|bin_PROGRAMS = .*||" src/Makefile.in
  1311. CFLAGS+=" -fno-asynchronous-unwind-tables -DKVZ_BIT_DEPTH=10" \
  1312. do_separate_confmakeinstall video
  1313. do_checkIfExist
  1314. fi
  1315. _check=(libSDL2{,_test,main}.a sdl2.pc SDL2/SDL.h)
  1316. if { { [[ $ffmpeg != no ]] &&
  1317. { enabled sdl2 || ! disabled_any sdl2 autodetect; }; } ||
  1318. mpv_enabled sdl2; } &&
  1319. do_vcs "$SOURCE_REPO_SDL2"; then
  1320. do_uninstall include/SDL2 lib/cmake/SDL2 bin/sdl2-config "${_check[@]}"
  1321. do_autogen
  1322. sed -i 's|__declspec(dllexport)||g' include/{begin_code,SDL_opengl}.h
  1323. do_separate_confmakeinstall
  1324. do_checkIfExist
  1325. fi
  1326. _check=(libdvdread.{,l}a dvdread.pc)
  1327. if { { [[ $ffmpeg != no ]] && enabled_any libdvdread libdvdnav; } ||
  1328. [[ $mplayer = y ]] || mpv_enabled dvdnav; } &&
  1329. do_vcs "$SOURCE_REPO_LIBDVDREAD" dvdread; then
  1330. do_autoreconf
  1331. do_uninstall include/dvdread "${_check[@]}"
  1332. do_separate_confmakeinstall
  1333. do_checkIfExist
  1334. fi
  1335. [[ -f $LOCALDESTDIR/lib/pkgconfig/dvdread.pc ]] &&
  1336. grep_or_sed "Libs.private" "$LOCALDESTDIR"/lib/pkgconfig/dvdread.pc \
  1337. "/Libs:/ a\Libs.private: -ldl -lpsapi"
  1338. _check=(libdvdnav.{,l}a dvdnav.pc)
  1339. _deps=(libdvdread.a)
  1340. if { { [[ $ffmpeg != no ]] && enabled libdvdnav; } ||
  1341. [[ $mplayer = y ]] || mpv_enabled dvdnav; } &&
  1342. do_vcs "$SOURCE_REPO_LIBDVDNAV" dvdnav; then
  1343. do_autoreconf
  1344. do_uninstall include/dvdnav "${_check[@]}"
  1345. do_separate_confmakeinstall
  1346. do_checkIfExist
  1347. fi
  1348. if { [[ $ffmpeg != no ]] && enabled_any gcrypt libbluray; } ||
  1349. ! mpv_disabled libbluray; then
  1350. do_pacman_install libgcrypt
  1351. grep_or_sed ws2_32 "$MINGW_PREFIX/bin/libgcrypt-config" 's;-lgpg-error;& -lws2_32;'
  1352. grep_or_sed ws2_32 "$MINGW_PREFIX/bin/gpg-error-config" 's;-lgpg-error;& -lws2_32;'
  1353. fi
  1354. if { [[ $ffmpeg != no ]] && enabled libbluray; } || ! mpv_disabled libbluray; then
  1355. _check=(bin-video/libaacs.dll libaacs.{{,l}a,pc} libaacs/aacs.h)
  1356. if do_vcs "$SOURCE_REPO_LIBAACS"; then
  1357. do_pacman_install -m bison flex
  1358. sed -ri 's;bin_PROGRAMS.*;bin_PROGRAMS = ;' Makefile.am
  1359. do_autoreconf
  1360. do_uninstall "${_check[@]}" include/libaacs
  1361. do_separate_confmakeinstall video --enable-shared --with-libgcrypt-prefix="$MINGW_PREFIX"
  1362. mv -f "$LOCALDESTDIR/bin/libaacs-0.dll" "$LOCALDESTDIR/bin-video/libaacs.dll"
  1363. rm -f "$LOCALDESTDIR/bin-video/${MINGW_CHOST}-aacs_info.exe"
  1364. do_checkIfExist
  1365. fi
  1366. _check=(bin-video/libbdplus.dll libbdplus.{{,l}a,pc} libbdplus/bdplus.h)
  1367. if do_vcs "$SOURCE_REPO_LIBBDPLUS"; then
  1368. sed -ri 's;noinst_PROGRAMS.*;noinst_PROGRAMS = ;' Makefile.am
  1369. do_autoreconf
  1370. do_uninstall "${_check[@]}" include/libbdplus
  1371. do_separate_confmakeinstall video --enable-shared
  1372. mv -f "$LOCALDESTDIR/bin/libbdplus-0.dll" "$LOCALDESTDIR/bin-video/libbdplus.dll"
  1373. do_checkIfExist
  1374. fi
  1375. fi
  1376. _check=(libbluray.{{,l}a,pc})
  1377. if { { [[ $ffmpeg != no ]] && enabled libbluray; } || ! mpv_disabled libbluray; } &&
  1378. do_vcs "$SOURCE_REPO_LIBBLURAY"; then
  1379. [[ -f contrib/libudfread/.git ]] || do_git_submodule
  1380. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/libbluray/0001-dec-prefix-with-libbluray-for-now.patch" am
  1381. do_autoreconf
  1382. do_uninstall include/libbluray share/java "${_check[@]}"
  1383. sed -i 's|__declspec(dllexport)||g' jni/win32/jni_md.h
  1384. extracommands=()
  1385. log javahome get_java_home
  1386. OLD_PATH=$PATH
  1387. if [[ -n $JAVA_HOME ]]; then
  1388. if [[ ! -f /opt/apache-ant/bin/ant ]] ; then
  1389. apache_ant_ver=$(clean_html_index "https://www.apache.org/dist/ant/binaries/")
  1390. apache_ant_ver=$(get_last_version "$apache_ant_ver" "apache-ant" "1\.\d+\.\d+")
  1391. if do_wget -r -c \
  1392. "https://www.apache.org/dist/ant/binaries/apache-ant-${apache_ant_ver:-1.10.6}-bin.zip" \
  1393. apache-ant.zip; then
  1394. rm -rf /opt/apache-ant
  1395. mv apache-ant /opt/apache-ant
  1396. fi
  1397. fi
  1398. PATH=/opt/apache-ant/bin:$JAVA_HOME/bin:$PATH
  1399. log ant-diagnostics ant -diagnostics
  1400. export JDK_HOME=''
  1401. export JAVA_HOME
  1402. else
  1403. extracommands+=(--disable-bdjava-jar)
  1404. fi
  1405. if enabled libxml2; then
  1406. sed -ri 's;(Cflags.*);\1 -DLIBXML_STATIC;' src/libbluray.pc.in
  1407. else
  1408. extracommands+=(--without-libxml2)
  1409. fi
  1410. CFLAGS+=" $(enabled libxml2 && echo "-DLIBXML_STATIC")" \
  1411. do_separate_confmakeinstall --disable-{examples,doxygen-doc} \
  1412. --without-{fontconfig,freetype} "${extracommands[@]}"
  1413. do_checkIfExist
  1414. PATH=$OLD_PATH
  1415. unset extracommands JDK_HOME JAVA_HOME OLD_PATH
  1416. fi
  1417. _check=(libxavs.a xavs.{h,pc})
  1418. if [[ $ffmpeg != no ]] && enabled libxavs && do_pkgConfig "xavs = 0.1." "0.1" &&
  1419. do_vcs "$SOURCE_REPO_XAVS"; then
  1420. do_pacman_install yasm
  1421. do_patch "https://github.com/Distrotech/xavs/pull/1.patch" am
  1422. [[ -f libxavs.a ]] && log "distclean" make distclean
  1423. do_uninstall "${_check[@]}"
  1424. sed -i 's|"NUL"|"/dev/null"|g' configure
  1425. do_configure
  1426. do_make libxavs.a
  1427. for _file in xavs.h libxavs.a xavs.pc; do do_install "$_file"; done
  1428. do_checkIfExist
  1429. unset _file
  1430. fi
  1431. _check=(libxavs2.a xavs2_config.h xavs2.{h,pc})
  1432. [[ $standalone = y ]] && _check+=(bin-video/xavs2.exe)
  1433. if [[ $bits = 32bit ]]; then
  1434. do_removeOption --enable-libxavs2
  1435. elif { [[ $avs2 = y ]] || { [[ $ffmpeg != no ]] && enabled libxavs2; }; } &&
  1436. do_vcs "$SOURCE_REPO_XAVS2"; then
  1437. do_patch "https://github.com/pkuvcl/xavs2/compare/master...1480c1:xavs2:gcc14/pointerconversion.patch" am
  1438. cd_safe build/linux
  1439. [[ -f config.mak ]] && log "distclean" make distclean
  1440. do_uninstall all "${_check[@]}"
  1441. do_configure --bindir="$LOCALDESTDIR"/bin-video --enable-static --enable-strip
  1442. do_makeinstall
  1443. do_checkIfExist
  1444. fi
  1445. _check=(libdavs2.a davs2_config.h davs2.{h,pc})
  1446. [[ $standalone = y ]] && _check+=(bin-video/davs2.exe)
  1447. if [[ $bits = 32bit ]]; then
  1448. do_removeOption --enable-libdavs2
  1449. elif { [[ $avs2 = y ]] || { [[ $ffmpeg != no ]] && enabled libdavs2; }; } &&
  1450. do_vcs "$SOURCE_REPO_DAVS"; then
  1451. cd_safe build/linux
  1452. [[ -f config.mak ]] && log "distclean" make distclean
  1453. do_uninstall all "${_check[@]}"
  1454. do_configure --bindir="$LOCALDESTDIR"/bin-video --enable-strip
  1455. do_makeinstall
  1456. do_checkIfExist
  1457. fi
  1458. _check=(libuavs3d.a uavs3d.{h,pc})
  1459. [[ $standalone = y ]] && _check+=(bin-video/uavs3dec.exe)
  1460. if [[ $ffmpeg != no ]] && enabled libuavs3d &&
  1461. do_vcs "$SOURCE_REPO_UAVS3D"; then
  1462. do_cmakeinstall
  1463. [[ $standalone = y ]] && do_install uavs3dec.exe bin-video/
  1464. do_checkIfExist
  1465. fi
  1466. _check=(libdovi.a libdovi/rpu_parser.h dovi.pc bin-video/dovi_tool.exe)
  1467. if [[ $dovitool = y ]] &&
  1468. do_vcs "$SOURCE_REPO_DOVI_TOOL"; then
  1469. do_uninstall "${_check[@]}" include/libdovi bin-video/dovi.dll dovi.def dovi.dll.a
  1470. do_rust
  1471. do_install "target/$CARCH-pc-windows-gnu$rust_target_suffix/release/dovi_tool.exe" bin-video/
  1472. cd_safe dolby_vision
  1473. do_rustcinstall --bindir="$LOCALDESTDIR"/bin-video/ --library-type=staticlib
  1474. do_checkIfExist
  1475. fi
  1476. _check=(bin-video/hdr10plus_tool.exe)
  1477. if [[ $hdr10plustool = y ]] &&
  1478. do_vcs "$SOURCE_REPO_HDR10PLUS_TOOL"; then
  1479. do_uninstall "${_check[@]}"
  1480. do_rust
  1481. do_install "target/$CARCH-pc-windows-gnu$rust_target_suffix/release/hdr10plus_tool.exe" bin-video/
  1482. do_checkIfExist
  1483. fi
  1484. if [[ $mediainfo = y ]]; then
  1485. [[ $curl = openssl ]] && hide_libressl
  1486. _check=(libzen.{a,pc})
  1487. if do_vcs "$SOURCE_REPO_LIBZEN" libzen; then
  1488. do_uninstall include/ZenLib bin-global/libzen-config \
  1489. "${_check[@]}" libzen.la lib/cmake/zenlib
  1490. do_cmakeinstall Project/CMake
  1491. do_checkIfExist
  1492. fi
  1493. fix_cmake_crap_exports "$LOCALDESTDIR/lib/cmake/zenlib"
  1494. sed -i 's;message(FATAL_ERROR "The imported target;message(WARNING "The imported target;' \
  1495. "$MINGW_PREFIX"/lib/cmake/CURL/CURLTargets.cmake
  1496. _check=(libmediainfo.{a,pc})
  1497. _deps=(lib{zen,curl}.a)
  1498. if do_vcs "$SOURCE_REPO_LIBMEDIAINFO" libmediainfo; then
  1499. do_uninstall include/MediaInfo{,DLL} bin-global/libmediainfo-config \
  1500. "${_check[@]}" libmediainfo.la lib/cmake/mediainfolib
  1501. CFLAGS+=" $($PKG_CONFIG --cflags libzen)" \
  1502. LDFLAGS+=" $($PKG_CONFIG --cflags --libs libzen)" \
  1503. do_cmakeinstall Project/CMake -DBUILD_ZLIB=off -DBUILD_ZENLIB=off
  1504. do_checkIfExist
  1505. fi
  1506. fix_cmake_crap_exports "$LOCALDESTDIR/lib/cmake/mediainfolib"
  1507. _check=(bin-video/mediainfo.exe)
  1508. _deps=(libmediainfo.a)
  1509. if do_vcs "$SOURCE_REPO_MEDIAINFO" mediainfo; then
  1510. cd_safe Project/GNU/CLI
  1511. do_autogen
  1512. do_uninstall "${_check[@]}"
  1513. [[ -f Makefile ]] && log distclean make distclean
  1514. do_configure --disable-shared --bindir="$LOCALDESTDIR/bin-video" \
  1515. --enable-staticlibs
  1516. do_makeinstall
  1517. do_checkIfExist
  1518. fi
  1519. [[ $curl = openssl ]] && hide_libressl -R
  1520. fi
  1521. if [[ $ffmpeg != no ]] && enabled libvidstab; then
  1522. do_pacman_install omp
  1523. _check=(libvidstab.a vidstab.pc)
  1524. if do_vcs "$SOURCE_REPO_VIDSTAB" vidstab; then
  1525. do_uninstall include/vid.stab "${_check[@]}"
  1526. do_cmakeinstall
  1527. do_checkIfExist
  1528. fi
  1529. fi
  1530. _check=(libzvbi.{h,{,l}a} zvbi-0.2.pc)
  1531. if [[ $ffmpeg != no ]] && enabled libzvbi &&
  1532. do_vcs "$SOURCE_REPO_ZVBI"; then
  1533. do_uninstall "${_check[@]}" zvbi-0.2.pc
  1534. do_autoreconf
  1535. do_separate_conf --disable-{dvb,bktr,examples,nls,proxy,tests} --without-doxygen
  1536. cd_safe src
  1537. do_makeinstall
  1538. cd_safe ..
  1539. log pkgconfig make SUBDIRS=. install
  1540. do_checkIfExist
  1541. unset _vlc_zvbi_patches
  1542. fi
  1543. if [[ $ffmpeg != no ]] && enabled_any frei0r ladspa; then
  1544. _check=(libdl.a dlfcn.h)
  1545. if do_vcs "$SOURCE_REPO_DLFCN"; then
  1546. do_uninstall "${_check[@]}"
  1547. do_cmakeinstall
  1548. do_checkIfExist
  1549. fi
  1550. _check=(frei0r.{h,pc})
  1551. if do_vcs "$SOURCE_REPO_FREI0R"; then
  1552. sed -i 's/find_package (Cairo)//' "CMakeLists.txt"
  1553. do_uninstall lib/frei0r-1 "${_check[@]}"
  1554. do_pacman_install gavl
  1555. do_cmakeinstall -DWITHOUT_OPENCV=on
  1556. do_checkIfExist
  1557. fi
  1558. fi
  1559. _check=(DeckLinkAPI.h DeckLinkAPIVersion.h DeckLinkAPI_i.c)
  1560. if [[ $ffmpeg != no ]] && enabled decklink &&
  1561. do_vcs "$SOURCE_REPO_DECKLINK"; then
  1562. do_makeinstall PREFIX="$LOCALDESTDIR"
  1563. do_checkIfExist
  1564. fi
  1565. _check=(libvpl.a vpl.pc)
  1566. if [[ $ffmpeg != no ]] && enabled libvpl; then
  1567. if enabled libmfx; then
  1568. do_removeOption --enable-libmfx
  1569. fi
  1570. if do_vcs "$SOURCE_REPO_LIBVPL" libvpl; then
  1571. if [[ $bits = 32bit ]]; then
  1572. do_patch https://raw.githubusercontent.com/msys2/MINGW-packages/master/mingw-w64-libvpl/0003-cmake-fix-32bit-install.patch
  1573. fi
  1574. do_uninstall include/vpl "${_check[@]}"
  1575. do_cmakeinstall -DUNIX=OFF
  1576. do_checkIfExist
  1577. fi
  1578. fi
  1579. _check=(libmfx.{{,l}a,pc})
  1580. if [[ $ffmpeg != no ]] && enabled libmfx &&
  1581. do_vcs "$SOURCE_REPO_LIBMFX" libmfx; then
  1582. do_autoreconf
  1583. do_uninstall include/mfx "${_check[@]}"
  1584. do_separate_confmakeinstall
  1585. do_checkIfExist
  1586. fi
  1587. _check=(AMF/core/Version.h)
  1588. if [[ $ffmpeg != no ]] && { enabled amf || ! disabled_any autodetect amf; } &&
  1589. do_vcs "$SOURCE_REPO_AMF"; then
  1590. do_uninstall include/AMF
  1591. cd_safe amf/public/include
  1592. install -D -p -t "$LOCALDESTDIR/include/AMF/core" core/*.h
  1593. install -D -p -t "$LOCALDESTDIR/include/AMF/components" components/*.h
  1594. do_checkIfExist
  1595. fi
  1596. _check=(libgpac_static.a bin-video/{MP4Box,gpac}.exe)
  1597. if [[ $mp4box = y ]] && do_vcs "$SOURCE_REPO_GPAC"; then
  1598. do_uninstall include/gpac "${_check[@]}"
  1599. git grep -PIl "\xC2\xA0" | xargs -r sed -i 's/\xC2\xA0/ /g'
  1600. # Disable passing rpath to the linker, as it's a no-op with ld, but an error with lld
  1601. find . -name "Makefile" -exec grep -q rpath {} \; -exec sed -i '/^LINKFLAGS.*-rpath/s/^/#/' {} +
  1602. LIBRARY_PATH="$(cygpath -pm "$LOCALDESTDIR/lib:$MINGW_PREFIX/lib")" \
  1603. do_separate_conf --static-bin --static-build --static-modules
  1604. do_make
  1605. log "install" make install-lib
  1606. do_install bin/gcc/MP4Box.exe bin/gcc/gpac.exe bin-video/
  1607. do_checkIfExist
  1608. fi
  1609. _check=(SvtHevcEnc.pc libSvtHevcEnc.a svt-hevc/EbApi.h
  1610. bin-video/SvtHevcEncApp.exe)
  1611. if [[ $bits = 32bit ]]; then
  1612. do_removeOption --enable-libsvthevc
  1613. elif { [[ $svthevc = y ]] || enabled libsvthevc; } &&
  1614. do_vcs "$SOURCE_REPO_SVTHEVC"; then
  1615. do_uninstall "${_check[@]}" include/svt-hevc
  1616. do_cmakeinstall video -DUNIX=OFF
  1617. do_checkIfExist
  1618. fi
  1619. _check=(bin-video/SvtVp9EncApp.exe
  1620. libSvtVp9Enc.a SvtVp9Enc.pc)
  1621. if [[ $bits = 32bit ]]; then
  1622. do_removeOption --enable-libsvtvp9
  1623. elif { [[ $svtvp9 = y ]] || enabled libsvtvp9; } &&
  1624. do_vcs "$SOURCE_REPO_SVTVP9"; then
  1625. do_uninstall include/svt-vp9 "${_check[@]}" include/svt-vp9
  1626. do_cmakeinstall video -DUNIX=OFF
  1627. do_checkIfExist
  1628. fi
  1629. _check=(xvc.pc xvc{enc,dec}.h libxvc{enc,dec}.a bin-video/xvc{enc,dec}.exe)
  1630. if [[ $xvc == y ]] &&
  1631. do_vcs "$SOURCE_REPO_XVC"; then
  1632. do_patch "https://github.com/divideon/xvc/compare/master...1480c1:xvc:stdint.patch" am
  1633. do_uninstall "${_check[@]}"
  1634. do_cmakeinstall video -DBUILD_TESTS=OFF -DENABLE_ASSERTIONS=OFF
  1635. do_checkIfExist
  1636. fi
  1637. if [[ $x264 != no ]] ||
  1638. { [[ $ffmpeg != no ]] && enabled libx264; }; then
  1639. _check=(x264{,_config}.h libx264.a x264.pc)
  1640. [[ $standalone = y || $av1an != n ]] && _check+=(bin-video/x264.exe)
  1641. _bitdepth=$(get_api_version x264_config.h BIT_DEPTH)
  1642. if do_vcs "$SOURCE_REPO_X264" ||
  1643. [[ $x264 = o8 && $_bitdepth =~ (0|10) ]] ||
  1644. [[ $x264 = high && $_bitdepth =~ (0|8) ]] ||
  1645. [[ $x264 =~ (yes|full|shared|fullv) && "$_bitdepth" != 0 ]]; then
  1646. extracommands=("--host=$MINGW_CHOST" "--prefix=$LOCALDESTDIR"
  1647. "--bindir=$LOCALDESTDIR/bin-video")
  1648. # light ffmpeg build
  1649. old_PKG_CONFIG_PATH=$PKG_CONFIG_PATH
  1650. PKG_CONFIG_PATH=$LOCALDESTDIR/opt/lightffmpeg/lib/pkgconfig:$MINGW_PREFIX/lib/pkgconfig
  1651. unset_extra_script
  1652. if [[ $standalone = y || $av1an != n ]] && [[ $x264 =~ (full|fullv) ]]; then
  1653. _check=("$LOCALDESTDIR"/opt/lightffmpeg/lib/pkgconfig/libav{codec,format}.pc)
  1654. do_vcs "$ffmpegPath"
  1655. do_uninstall "$LOCALDESTDIR"/opt/lightffmpeg
  1656. [[ -f config.mak ]] && log "distclean" make distclean
  1657. create_build_dir light
  1658. if [[ $x264 = fullv ]]; then
  1659. mapfile -t audio_codecs < <(
  1660. sed -n '/audio codecs/,/external libraries/p' ../libavcodec/allcodecs.c |
  1661. sed -n 's/^[^#]*extern.* *ff_\([^ ]*\)_decoder;/\1/p')
  1662. config_path=.. LDFLAGS+=" -L$MINGW_PREFIX/lib" \
  1663. do_configure "${FFMPEG_BASE_OPTS[@]}" \
  1664. --prefix="$LOCALDESTDIR/opt/lightffmpeg" \
  1665. --disable-{programs,devices,filters,encoders,muxers,debug,sdl2,network,protocols,doc} \
  1666. --enable-protocol=file,pipe \
  1667. --disable-decoder="$(IFS=, ; echo "${audio_codecs[*]}")" --enable-gpl \
  1668. --disable-bsf=aac_adtstoasc,text2movsub,noise,dca_core,mov2textsub,mp3_header_decompress \
  1669. --disable-autodetect --enable-{lzma,bzlib,zlib}
  1670. unset audio_codecs
  1671. else
  1672. config_path=.. LDFLAGS+=" -L$MINGW_PREFIX/lib" \
  1673. do_configure "${FFMPEG_BASE_OPTS[@]}" \
  1674. --prefix="$LOCALDESTDIR/opt/lightffmpeg" \
  1675. --disable-{programs,devices,filters,encoders,muxers,debug,sdl2,doc} --enable-gpl
  1676. fi
  1677. do_makeinstall
  1678. files_exist "${_check[@]}" && touch "build_successful${bits}_light"
  1679. unset_extra_script
  1680. _check=("$LOCALDESTDIR"/opt/lightffmpeg/lib/pkgconfig/ffms2.pc bin-video/ffmsindex.exe)
  1681. if do_vcs "$SOURCE_REPO_FFMS2"; then
  1682. do_uninstall "${_check[@]}"
  1683. sed -i 's/Cflags.*/& -DFFMS_STATIC/' ffms2.pc.in
  1684. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/ffms2/0001-ffmsindex-fix-linking-issues.patch" am
  1685. mkdir -p src/config
  1686. do_autoreconf
  1687. do_separate_confmakeinstall video --prefix="$LOCALDESTDIR/opt/lightffmpeg"
  1688. do_checkIfExist
  1689. fi
  1690. cd_safe "$LOCALBUILDDIR"/x264-git
  1691. else
  1692. extracommands+=(--disable-lavf --disable-ffms)
  1693. fi
  1694. if [[ $standalone = y || $av1an != n ]]; then
  1695. _check=("$LOCALDESTDIR/opt/lightffmpeg/lib/pkgconfig/liblsmash.pc")
  1696. if do_vcs "$SOURCE_REPO_LIBLSMASH" liblsmash; then
  1697. [[ -f config.mak ]] && log "distclean" make distclean
  1698. do_uninstall "${_check[@]}"
  1699. create_build_dir
  1700. log configure ../configure --prefix="$LOCALDESTDIR/opt/lightffmpeg"
  1701. do_make install-lib
  1702. do_checkIfExist
  1703. fi
  1704. cd_safe "$LOCALBUILDDIR"/x264-git
  1705. else
  1706. extracommands+=(--disable-cli)
  1707. fi
  1708. _check=(x264{,_config}.h x264.pc)
  1709. [[ $standalone = y || $av1an != n ]] && _check+=(bin-video/x264.exe)
  1710. [[ -f config.h ]] && log "distclean" make distclean
  1711. x264_build=$(grep ' X264_BUILD ' x264.h | cut -d' ' -f3)
  1712. if [[ $x264 = shared ]]; then
  1713. extracommands+=(--enable-shared)
  1714. _check+=(libx264.dll.a bin-video/libx264-"${x264_build}".dll)
  1715. else
  1716. extracommands+=(--enable-static)
  1717. _check+=(libx264.a)
  1718. fi
  1719. case $x264 in
  1720. high) extracommands+=("--bit-depth=10") ;;
  1721. o8) extracommands+=("--bit-depth=8") ;;
  1722. *) extracommands+=("--bit-depth=all") ;;
  1723. esac
  1724. do_uninstall "${_check[@]}"
  1725. check_custom_patches
  1726. create_build_dir
  1727. extra_script pre configure
  1728. PKGCONFIG="$PKG_CONFIG" CFLAGS="${CFLAGS// -O2 / }" \
  1729. log configure ../configure "${extracommands[@]}"
  1730. extra_script post configure
  1731. do_make
  1732. do_makeinstall
  1733. do_checkIfExist
  1734. PKG_CONFIG_PATH=$old_PKG_CONFIG_PATH
  1735. unset extracommands x264_build old_PKG_CONFIG_PATH
  1736. fi
  1737. unset _bitdepth
  1738. else
  1739. pc_exists x264 || do_removeOption --enable-libx264
  1740. fi
  1741. _check=(x265{,_config}.h libx265.a x265.pc)
  1742. [[ $standalone = y || $av1an != n ]] && _check+=(bin-video/x265.exe)
  1743. if [[ ! $x265 = n ]] && do_vcs "$SOURCE_REPO_X265"; then
  1744. grep_and_sed CMAKE_CXX_IMPLICIT_LINK_LIBRARIES source/CMakeLists.txt 's|\$\{CMAKE_CXX_IMPLICIT_LINK_LIBRARIES\}||g'
  1745. grep_or_sed cstdint source/dynamicHDR10/json11/json11.cpp "/cstdlib/ i\#include <cstdint>"
  1746. do_uninstall libx265{_main10,_main12}.a bin-video/libx265_main{10,12}.dll "${_check[@]}"
  1747. [[ $bits = 32bit ]] && assembly=-DENABLE_ASSEMBLY=OFF
  1748. [[ $x265 = d ]] && xpsupport=-DWINXP_SUPPORT=ON
  1749. build_x265() {
  1750. create_build_dir
  1751. local build_root=$PWD
  1752. mkdir -p {8,10,12}bit
  1753. do_x265_cmake() {
  1754. do_print_progress "Building $1" && shift 1
  1755. extra_script pre cmake
  1756. log "cmake" cmake "$(get_first_subdir -f)/source" -G Ninja \
  1757. -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
  1758. -DCMAKE_INSTALL_PREFIX="$LOCALDESTDIR" -DBIN_INSTALL_DIR="$LOCALDESTDIR/bin-video" \
  1759. -DENABLE_SHARED=OFF -DENABLE_CLI=OFF -DHIGH_BIT_DEPTH=ON \
  1760. -DENABLE_HDR10_PLUS=ON $xpsupport -DCMAKE_CXX_COMPILER="$LOCALDESTDIR/bin/${CXX#ccache }.bat" \
  1761. -DCMAKE_TOOLCHAIN_FILE="$LOCALDESTDIR/etc/toolchain.cmake" "$@"
  1762. extra_script post cmake
  1763. do_ninja
  1764. }
  1765. [[ $standalone = y || $av1an != n ]] && cli=-DENABLE_CLI=ON
  1766. if [[ $x265 =~ (o12|s|d|y) ]]; then
  1767. cd_safe "$build_root/12bit"
  1768. if [[ $x265 = s ]]; then
  1769. do_x265_cmake "shared 12-bit lib" $assembly -DENABLE_SHARED=ON -DMAIN12=ON
  1770. do_install libx265.dll bin-video/libx265_main12.dll
  1771. _check+=(bin-video/libx265_main12.dll)
  1772. elif [[ $x265 = o12 ]]; then
  1773. do_x265_cmake "12-bit lib/bin" $assembly $cli -DMAIN12=ON
  1774. else
  1775. do_x265_cmake "12-bit lib for multilib" $assembly -DEXPORT_C_API=OFF -DMAIN12=ON
  1776. cp libx265.a ../8bit/libx265_main12.a
  1777. fi
  1778. fi
  1779. if [[ $x265 =~ (o10|s|d|y) ]]; then
  1780. cd_safe "$build_root/10bit"
  1781. if [[ $x265 = s ]]; then
  1782. do_x265_cmake "shared 10-bit lib" $assembly -DENABLE_SHARED=ON
  1783. do_install libx265.dll bin-video/libx265_main10.dll
  1784. _check+=(bin-video/libx265_main10.dll)
  1785. elif [[ $x265 = o10 ]]; then
  1786. do_x265_cmake "10-bit lib/bin" $assembly $cli
  1787. else
  1788. do_x265_cmake "10-bit lib for multilib" $assembly -DEXPORT_C_API=OFF
  1789. cp libx265.a ../8bit/libx265_main10.a
  1790. fi
  1791. fi
  1792. if [[ $x265 =~ (o8|s|d|y) ]]; then
  1793. cd_safe "$build_root/8bit"
  1794. if [[ $x265 = s || $x265 = o8 ]]; then
  1795. do_x265_cmake "8-bit lib/bin" $cli -DHIGH_BIT_DEPTH=OFF
  1796. else
  1797. do_x265_cmake "multilib lib/bin" -DEXTRA_LIB="x265_main10.a;x265_main12.a" \
  1798. -DEXTRA_LINK_FLAGS=-L. $cli -DHIGH_BIT_DEPTH=OFF -DLINKED_{10,12}BIT=ON
  1799. mv libx265.a libx265_main.a
  1800. ar -M <<EOF
  1801. CREATE libx265.a
  1802. ADDLIB libx265_main.a
  1803. ADDLIB libx265_main10.a
  1804. ADDLIB libx265_main12.a
  1805. SAVE
  1806. END
  1807. EOF
  1808. fi
  1809. fi
  1810. }
  1811. build_x265
  1812. cpuCount=1 log "install" ninja install
  1813. if [[ $standalone = y || $av1an != n ]] && [[ $x265 = d ]]; then
  1814. cd_safe "$(get_first_subdir -f)"
  1815. do_uninstall bin-video/x265-numa.exe
  1816. do_print_progress "Building NUMA version of binary"
  1817. xpsupport="" build_x265
  1818. do_install x265.exe bin-video/x265-numa.exe
  1819. _check+=(bin-video/x265-numa.exe)
  1820. fi
  1821. do_checkIfExist
  1822. unset xpsupport assembly cli
  1823. else
  1824. pc_exists x265 || do_removeOption "--enable-libx265"
  1825. fi
  1826. pc_exists x265 && sed -i 's|-lmingwex||g' "$(file_installed x265.pc)"
  1827. _check=(xvid.h libxvidcore.a bin-video/xvid_encraw.exe)
  1828. if enabled libxvid && [[ $standalone = y ]] &&
  1829. do_vcs "$SOURCE_REPO_XVID"; then
  1830. do_pacman_install yasm
  1831. do_patch "https://github.com/m-ab-s/xvid/compare/lighde.patch" am
  1832. do_patch "https://github.com/m-ab-s/xvid/compare/mabs.patch" am
  1833. do_pacman_remove xvidcore
  1834. do_uninstall "${_check[@]}"
  1835. cd_safe xvidcore/build/generic
  1836. log "bootstrap" ./bootstrap.sh
  1837. do_configure
  1838. do_make
  1839. do_install ../../src/xvid.h include/
  1840. do_install '=build/libxvidcore.a' libxvidcore.a
  1841. do_install '=build/libxvidcore.dll' bin-video/
  1842. cd_safe ../../examples
  1843. do_make xvid_encraw
  1844. do_install xvid_encraw.exe bin-video/
  1845. do_checkIfExist
  1846. fi
  1847. _check=(ffnvcodec/nvEncodeAPI.h ffnvcodec.pc)
  1848. if [[ $ffmpeg != no ]] && { enabled ffnvcodec ||
  1849. ! disabled_any ffnvcodec autodetect || ! mpv_disabled cuda-hwaccel; } &&
  1850. do_vcs "$SOURCE_REPO_FFNVCODEC" ffnvcodec; then
  1851. do_makeinstall PREFIX="$LOCALDESTDIR"
  1852. do_checkIfExist
  1853. fi
  1854. if enabled libsrt; then
  1855. do_pacman_install openssl
  1856. _check=(libsrt.a srt.pc srt/srt.h)
  1857. [[ $standalone = y ]] && _check+=(bin-video/srt-live-transmit.exe)
  1858. if do_vcs "$SOURCE_REPO_SRT"; then
  1859. hide_libressl
  1860. do_cmakeinstall video -DENABLE_SHARED=off -DENABLE_SUFLIP=off \
  1861. -DENABLE_EXAMPLES=off -DUSE_OPENSSL_PC=on -DUSE_STATIC_LIBSTDCXX=ON
  1862. hide_libressl -R
  1863. do_checkIfExist
  1864. fi
  1865. fi
  1866. if enabled librist; then
  1867. do_pacman_install cjson
  1868. _check=(librist.{a,pc} librist/librist.h)
  1869. [[ $standalone = y ]] && _check+=(bin-global/rist{sender,receiver,2rist,srppasswd}.exe)
  1870. if do_vcs "$SOURCE_REPO_LIBRIST"; then
  1871. do_uninstall include/librist "${_check[@]}"
  1872. extracommands=("-Dbuiltin_cjson=false")
  1873. [[ $standalone = y ]] || extracommands+=("-Dbuilt_tools=false")
  1874. do_mesoninstall global -Dhave_mingw_pthreads=true -Dtest=false "${extracommands[@]}"
  1875. do_checkIfExist
  1876. unset extracommands
  1877. fi
  1878. fi
  1879. _vapoursynth_install() {
  1880. if [[ $bits = 32bit ]]; then
  1881. do_simple_print "${orange}Vapoursynth is known to be broken on 32-bit and will be disabled"'!'"${reset}"
  1882. return 1
  1883. fi
  1884. do_pacman_install tools-git
  1885. _python_ver=3.12.10
  1886. _python_lib=python312
  1887. _vsver=70
  1888. _check=("lib$_python_lib.a")
  1889. if files_exist "${_check[@]}"; then
  1890. do_print_status "python $_python_ver" "$green" "Up-to-date"
  1891. elif do_wget "https://www.python.org/ftp/python/$_python_ver/python-$_python_ver-embed-amd64.zip"; then
  1892. gendef "$_python_lib.dll" >/dev/null 2>&1
  1893. do_dlltool "lib$_python_lib.a" "$_python_lib.def"
  1894. [[ -f lib$_python_lib.a ]] && do_install "lib$_python_lib.a"
  1895. do_checkIfExist
  1896. fi
  1897. _check=(lib{vapoursynth,vsscript}.a vapoursynth{,-script}.pc vapoursynth/{VS{Helper,Script},VapourSynth}.h)
  1898. if pc_exists "vapoursynth = $_vsver" && files_exist "${_check[@]}"; then
  1899. do_print_status "vapoursynth R$_vsver" "$green" "Up-to-date"
  1900. elif do_wget "https://github.com/vapoursynth/vapoursynth/releases/download/R$_vsver/VapourSynth${bits%bit}-Portable-R$_vsver.zip"; then
  1901. do_uninstall {vapoursynth,vsscript}.lib include/vapoursynth "${_check[@]}"
  1902. do_install sdk/include/vapoursynth/*.h include/vapoursynth/
  1903. # Extract the .dll from the pip wheel
  1904. log "7z" 7z e -y -aoa wheel/VapourSynth-$_vsver-cp${_python_lib:6:3}-cp${_python_lib:6:3}-win_amd64.whl \
  1905. VapourSynth-$_vsver.data/data/Lib/site-packages/vapoursynth.dll
  1906. create_build_dir
  1907. declare -A _pc_vars=(
  1908. [vapoursynth-name]=vapoursynth
  1909. [vapoursynth-description]='A frameserver for the 21st century'
  1910. [vapoursynth-cflags]="-DVS_CORE_EXPORTS"
  1911. [vsscript-name]=vapoursynth-script
  1912. [vsscript-description]='Library for interfacing VapourSynth with Python'
  1913. [vsscript-private]="-l$_python_lib"
  1914. )
  1915. for _file in vapoursynth vsscript; do
  1916. gendef - "../$_file.dll" 2>/dev/null |
  1917. sed -E 's|^_||;s|@[1-9]+$||' > "${_file}.def"
  1918. do_dlltool "lib${_file}.a" "${_file}.def"
  1919. [[ -f lib${_file}.a ]] && do_install "lib${_file}.a"
  1920. # shellcheck disable=SC2016
  1921. printf '%s\n' \
  1922. "prefix=$LOCALDESTDIR" \
  1923. 'exec_prefix=${prefix}' \
  1924. 'libdir=${exec_prefix}/lib' \
  1925. 'includedir=${prefix}/include/vapoursynth' \
  1926. "Name: ${_pc_vars[${_file}-name]}" \
  1927. "Description: ${_pc_vars[${_file}-description]}" \
  1928. "Version: $_vsver" \
  1929. "Libs: -L\${libdir} -l${_file}" \
  1930. "Libs.private: ${_pc_vars[${_file}-private]}" \
  1931. "Cflags: -I\${includedir} ${_pc_vars[${_file}-cflags]}" \
  1932. > "${_pc_vars[${_file}-name]}.pc"
  1933. done
  1934. do_install vapoursynth{,-script}.pc lib/pkgconfig/
  1935. do_checkIfExist
  1936. fi
  1937. unset _file _python_lib _python_ver _vsver _pc_vars
  1938. return 0
  1939. }
  1940. if ! { { ! mpv_disabled vapoursynth || enabled vapoursynth || [[ $av1an != n ]]; } && _vapoursynth_install; }; then
  1941. mpv_disable vapoursynth
  1942. do_removeOption --enable-vapoursynth
  1943. fi
  1944. if [[ $av1an != n ]]; then
  1945. local av1an_bindir="bin-video"
  1946. local av1an_ffmpeg_prefix="opt/av1anffmpeg"
  1947. [[ $av1an = shared ]] && av1an_bindir="bin-video/av1an/bin" && av1an_ffmpeg_prefix="bin-video/av1an"
  1948. _check=("$LOCALDESTDIR"/"$av1an_ffmpeg_prefix"/lib/pkgconfig/lib{av{codec,device,filter,format,util},swscale}.pc)
  1949. if flavor=av1an do_vcs "https://git.ffmpeg.org/ffmpeg.git#branch=release/7.1"; then
  1950. do_uninstall "$LOCALDESTDIR"/"$av1an_ffmpeg_prefix"
  1951. [[ -f config.mak ]] && log "distclean" make distclean
  1952. local av1an_ffmpeg_opts=("--enable-static" "--disable-shared")
  1953. [[ $av1an = shared ]] && av1an_ffmpeg_opts=("--disable-static" "--enable-shared")
  1954. # compile ffmpeg executable if ffmpeg is disabled so av1an can function
  1955. if [[ $ffmpeg != no ]]; then
  1956. av1an_ffmpeg_opts+=("--disable-programs")
  1957. else
  1958. # enable filters too so they can be used with av1an
  1959. av1an_ffmpeg_opts+=("--disable-ffprobe" "--disable-ffplay" "--enable-filters")
  1960. fi
  1961. create_build_dir av1an
  1962. config_path=.. do_configure "${FFMPEG_BASE_OPTS[@]}" \
  1963. --prefix="$LOCALDESTDIR/$av1an_ffmpeg_prefix" \
  1964. --disable-autodetect --disable-everything \
  1965. --disable-{debug,doc,network} \
  1966. --enable-{decoders,demuxers,protocols} \
  1967. "${av1an_ffmpeg_opts[@]}"
  1968. do_make && do_makeinstall
  1969. # move static ffmpeg to a reasonable location if ffmpeg is disabled
  1970. [[ $av1an != shared ]] && [[ $ffmpeg = no ]] && [[ ! -f "$LOCALDESTDIR"/bin-video/ffmpeg.exe ]] &&
  1971. mv -f "$LOCALDESTDIR"/{"$av1an_ffmpeg_prefix"/bin,bin-video}/ffmpeg.exe
  1972. files_exist "${_check[@]}" && touch ../"build_successful${bits}_av1an"
  1973. unset av1an_ffmpeg_opts
  1974. fi
  1975. old_PKG_CONFIG_PATH=$PKG_CONFIG_PATH
  1976. PKG_CONFIG_PATH=$LOCALDESTDIR/$av1an_ffmpeg_prefix/lib/pkgconfig:$PKG_CONFIG_PATH
  1977. _check=("$av1an_bindir"/av1an.exe)
  1978. if do_vcs "$SOURCE_REPO_AV1AN"; then
  1979. do_uninstall "${_check[@]}"
  1980. do_pacman_install clang
  1981. PKG_CONFIG="$LOCALDESTDIR/bin/ab-pkg-config-static.bat" \
  1982. VAPOURSYNTH_LIB_DIR="$LOCALDESTDIR/lib" do_rust
  1983. do_install "target/$CARCH-pc-windows-gnu$rust_target_suffix/release/av1an.exe" $av1an_bindir/
  1984. do_checkIfExist
  1985. fi
  1986. PKG_CONFIG_PATH=$old_PKG_CONFIG_PATH
  1987. unset old_PKG_CONFIG_PATH av1an_{bindir,ffmpeg_prefix}
  1988. fi
  1989. if [[ $ffmpeg != no ]] && enabled liblensfun; then
  1990. do_pacman_install glib2
  1991. grep_or_sed liconv "$MINGW_PREFIX/lib/pkgconfig/glib-2.0.pc" 's;-lintl;& -liconv;g'
  1992. _check=(liblensfun.a lensfun.pc lensfun/lensfun.h)
  1993. if do_vcs "$SOURCE_REPO_LENSFUN"; then
  1994. do_patch "https://github.com/m-ab-s/mabs-patches/raw/master/lensfun/0001-CMake-exclude-mingw-w64-from-some-msvc-exclusive-thi.patch" am
  1995. do_patch "https://github.com/m-ab-s/mabs-patches/raw/master/lensfun/0002-CMake-don-t-add-glib2-s-includes-as-SYSTEM-dirs.patch" am
  1996. do_uninstall "bin-video/lensfun" "${_check[@]}"
  1997. CFLAGS+=" -DGLIB_STATIC_COMPILATION" CXXFLAGS+=" -DGLIB_STATIC_COMPILATION" \
  1998. do_cmakeinstall -DBUILD_STATIC=on -DBUILD_{TESTS,LENSTOOL,DOC}=off \
  1999. -DINSTALL_HELPER_SCRIPTS=off -DCMAKE_INSTALL_DATAROOTDIR="$LOCALDESTDIR/bin-video" \
  2000. -DINSTALL_PYTHON_MODULE=OFF
  2001. do_checkIfExist
  2002. fi
  2003. fi
  2004. _check=(bin-video/vvc/{Encoder,Decoder}App.exe)
  2005. if [[ $bits = 64bit && $vvc = y ]] &&
  2006. do_vcs "$SOURCE_REPO_VVC" vvc; then
  2007. do_uninstall bin-video/vvc
  2008. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/VVCSoftware_VTM/0001-BBuildEnc.cmake-Remove-Werror-for-gcc-and-clang.patch" am
  2009. # patch for easier install of apps
  2010. # probably not of upstream's interest because of how experimental the codec is
  2011. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/VVCSoftware_VTM/0002-cmake-allow-installing-apps.patch" am
  2012. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/VVCSoftware_VTM/0003-CMake-add-USE_CCACHE-variable-to-disable-using-found.patch" am
  2013. _notrequired=true
  2014. # install to own dir because the binaries' names are too generic
  2015. do_cmakeinstall -DCMAKE_INSTALL_BINDIR="$LOCALDESTDIR"/bin-video/vvc \
  2016. -DBUILD_STATIC=on -DSET_ENABLE_SPLIT_PARALLELISM=ON -DENABLE_SPLIT_PARALLELISM=OFF \
  2017. -DUSE_CCACHE=OFF
  2018. do_checkIfExist
  2019. unset _notrequired
  2020. fi
  2021. _check=(bin-video/uvg266.exe libuvg266.a uvg266.pc uvg266.h)
  2022. if [[ $bits = 64bit && $uvg266 = y ]] &&
  2023. do_vcs "$SOURCE_REPO_UVG266"; then
  2024. do_uninstall version.h "${_check[@]}"
  2025. do_cmakeinstall video -DBUILD_TESTING=OFF
  2026. do_checkIfExist
  2027. fi
  2028. _check=(bin-video/vvenc{,FF}app.exe
  2029. vvenc/vvenc.h
  2030. libvvenc.{a,pc}
  2031. lib/cmake/vvenc/vvencConfig.cmake)
  2032. if [[ $bits = 64bit && $vvenc = y ]] ||
  2033. { [[ $ffmpeg != no && $bits = 64bit ]] && enabled libvvenc; } &&
  2034. do_vcs "$SOURCE_REPO_LIBVVENC"; then
  2035. do_pacman_install nlohmann-json
  2036. do_uninstall include/vvenc lib/cmake/vvenc "${_check[@]}"
  2037. do_cmakeinstall video -DVVENC_ENABLE_LINK_TIME_OPT=OFF -DVVENC_INSTALL_FULLFEATURE_APP=ON -DVVENC_ENABLE_THIRDPARTY_JSON=SYSTEM
  2038. do_checkIfExist
  2039. else
  2040. pc_exists libvvenc || do_removeOption "--enable-libvvenc"
  2041. fi
  2042. _check=(bin-video/vvdecapp.exe
  2043. vvdec/vvdec.h
  2044. libvvdec.{a,pc}
  2045. lib/cmake/vvdec/vvdecConfig.cmake)
  2046. if [[ $bits = 64bit && $vvdec = y ]] ||
  2047. { [[ $ffmpeg != no && $bits = 64bit ]] && enabled libvvdec; } &&
  2048. do_vcs "$SOURCE_REPO_LIBVVDEC"; then
  2049. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/vvdec/0001-TypeDef-cast-mem-cpy-set-this-.-with-void-to-silence.patch" am
  2050. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/vvdec/0002-CodingStructure-cast-memset-with-void-to-silence-non.patch" am
  2051. do_uninstall include/vvdec lib/cmake/vvdec "${_check[@]}"
  2052. do_cmakeinstall video -DVVDEC_ENABLE_LINK_TIME_OPT=OFF -DVVDEC_INSTALL_VVDECAPP=ON
  2053. do_checkIfExist
  2054. else
  2055. pc_exists libvvdec || do_removeOption "--enable-libvvdec"
  2056. fi
  2057. _check=(bin-video/xeve_app.exe xeve/xeve{,_exports}.h xeve/libxeve.a xeve.pc)
  2058. if [[ $ffmpeg != no ]] && enabled libxeve &&
  2059. do_vcs "$SOURCE_REPO_XEVE"; then
  2060. do_uninstall bin-video/libxeve.dll lib/libxeve.dll.a.dyn "${_check[@]}"
  2061. sed -i 's/-Werror //' CMakeLists.txt
  2062. do_cmakeinstall video # no way to disable shared lib building in cmake
  2063. mv -f "$LOCALDESTDIR"/lib/libxeve.dll.a "$LOCALDESTDIR"/lib/libxeve.dll.a.dyn
  2064. # patch the lib path to actual subdirectory it installed to
  2065. sed -i 's|Libs: -L${libdir} -lxeve|Libs: -L${libdir}/xeve -lxeve|' "$LOCALDESTDIR"/lib/pkgconfig/xeve.pc
  2066. do_checkIfExist
  2067. fi
  2068. _check=(bin-video/xevd_app.exe xevd/xevd{,_exports}.h xevd/libxevd.a xevd.pc)
  2069. if [[ $ffmpeg != no ]] && enabled libxevd &&
  2070. do_vcs "$SOURCE_REPO_XEVD"; then
  2071. do_uninstall bin-video/libxevd.dll lib/libxevd.dll.a.dyn "${_check[@]}"
  2072. sed -i 's/-Werror //' CMakeLists.txt
  2073. do_cmakeinstall video # no way to disable shared lib building in cmake
  2074. mv -f "$LOCALDESTDIR"/lib/libxevd.dll.a "$LOCALDESTDIR"/lib/libxevd.dll.a.dyn
  2075. # patch the lib path to actual subdirectory it installed to
  2076. sed -i 's|Libs: -L${libdir} -lxevd|Libs: -L${libdir}/xevd -lxevd|' "$LOCALDESTDIR"/lib/pkgconfig/xevd.pc
  2077. do_checkIfExist
  2078. fi
  2079. _check=(bin-video/oapv_app_{enc,dec}.exe oapv/oapv.h oapv/liboapv.a oapv.pc)
  2080. if [[ $ffmpeg != no ]] && enabled liboapv &&
  2081. do_vcs "$SOURCE_REPO_OPENAPV"; then
  2082. do_uninstall "${_check[@]}"
  2083. do_cmakeinstall video -DOAPV_BUILD_SHARED_LIB=OFF
  2084. # patch the lib path to actual subdirectory it installed to
  2085. sed -i 's|Libs: -L${libdir} -loapv|Libs: -L${libdir}/oapv -loapv|' "$LOCALDESTDIR"/lib/pkgconfig/oapv.pc
  2086. do_checkIfExist
  2087. fi
  2088. _check=(avisynth/avisynth{,_c}.h
  2089. avisynth/avs/{alignment,arch,capi,config,cpuid,minmax,posix,types,win,version}.h)
  2090. if [[ $ffmpeg != no ]] && enabled avisynth &&
  2091. do_vcs "$SOURCE_REPO_AVISYNTH"; then
  2092. do_uninstall "${_check[@]}"
  2093. do_cmake -DHEADERS_ONLY=ON
  2094. do_ninja VersionGen
  2095. do_ninjainstall
  2096. do_checkIfExist
  2097. fi
  2098. _check=(libvulkan.a vulkan.pc vulkan/vulkan.h d3d{kmthk,ukmdt}.h)
  2099. if { { [[ $ffmpeg != no ]] && enabled_any vulkan libplacebo; } ||
  2100. { [[ $mpv != n ]] && ! mpv_disabled_any vulkan libplacebo; } } &&
  2101. do_vcs "$SOURCE_REPO_VULKANLOADER" vulkan-loader; then
  2102. _wine_mirror=https://raw.githubusercontent.com/wine-mirror/wine/master/include
  2103. _mabs=https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/vulkan-loader
  2104. do_pacman_install uasm
  2105. do_uninstall "${_check[@]}"
  2106. do_patch "$_mabs/0001-pc-remove-CMAKE_CXX_IMPLICIT_LINK_LIBRARIES.patch" am
  2107. do_patch "$_mabs/0002-loader-CMake-related-static-hacks.patch" am
  2108. do_patch "$_mabs/0003-loader-Re-add-private-libs-to-pc-file.patch" am
  2109. do_patch "$_mabs/0004-loader-Static-library-name-related-hacks.patch" am
  2110. do_patch "$_mabs/0005-loader-dllmain-related-hacks.patch" am
  2111. grep_and_sed VULKAN_LIB_SUFFIX loader/vulkan.pc.in \
  2112. 's/@VULKAN_LIB_SUFFIX@//'
  2113. create_build_dir
  2114. log dependencies "$MINGW_PREFIX"/bin/python ../scripts/update_deps.py --no-build
  2115. cd_safe Vulkan-Headers
  2116. do_print_progress "Installing Vulkan-Headers"
  2117. do_uninstall include/vulkan
  2118. # disable module header because clang-scan-deps can't understand `ccache clang++` as the "compiler."
  2119. do_cmakeinstall -DVULKAN_HEADERS_ENABLE_MODULE=OFF
  2120. do_wget -c -r -q "$_wine_mirror/ddk/d3dkmthk.h"
  2121. do_wget -c -r -q "$_wine_mirror/d3dukmdt.h"
  2122. do_install d3d{kmthk,ukmdt}.h include/
  2123. cd_safe "$(get_first_subdir -f)"
  2124. do_print_progress "Building Vulkan-Loader"
  2125. CC="${CC##ccache }" CXX="${CXX##ccache }" \
  2126. CFLAGS+=" -DSTRSAFE_NO_DEPRECATE" \
  2127. do_cmakeinstall -DBUILD_TESTS=OFF \
  2128. -DVULKAN_HEADERS_INSTALL_DIR="$LOCALDESTDIR" \
  2129. -DBUILD_STATIC_LOADER=ON -DUNIX=OFF
  2130. do_checkIfExist
  2131. unset _wine_mirror _mabs
  2132. fi
  2133. if [[ $exitearly = EE5 ]]; then
  2134. do_simple_print -p '\n\t'"${orange}Exit due to env var MABS_EXIT_EARLY set to EE5"
  2135. return
  2136. fi
  2137. _check=(spirv_cross/spirv_cross_c.h spirv-cross.pc libspirv-cross.a)
  2138. if { [[ $mpv != n ]] ||
  2139. { [[ $ffmpeg != no ]] && enabled libplacebo; } } &&
  2140. do_vcs "$SOURCE_REPO_SPIRV_CROSS"; then
  2141. do_uninstall include/spirv_cross "${_check[@]}" spirv-cross-c-shared.pc libspirv-cross-c-shared.a
  2142. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/SPIRV-Cross/0001-add-a-basic-Meson-build-system-for-use-as-a-subproje.patch" am
  2143. sed -i 's/0.13.0/0.48.0/' meson.build
  2144. do_mesoninstall
  2145. do_checkIfExist
  2146. fi
  2147. _check=(lib{glslang,OSDependent,SPVRemapper}.a
  2148. libSPIRV{,-Tools{,-opt,-link,-reduce}}.a glslang/SPIRV/GlslangToSpv.h)
  2149. if { [[ $mpv != n ]] ||
  2150. { [[ $ffmpeg != no ]] && enabled_any libplacebo libglslang; } } &&
  2151. do_vcs "$SOURCE_REPO_GLSLANG"; then
  2152. do_uninstall libHLSL.a "${_check[@]}"
  2153. log dependencies "$MINGW_PREFIX"/bin/python ./update_glslang_sources.py
  2154. do_cmakeinstall -DUNIX=OFF
  2155. do_checkIfExist
  2156. fi
  2157. _check=(shaderc/shaderc.h libshaderc_combined.a)
  2158. if { [[ $mpv != n ]] ||
  2159. { [[ $ffmpeg != no ]] && enabled libplacebo; } } ||
  2160. ! mpv_disabled shaderc &&
  2161. do_vcs "$SOURCE_REPO_SHADERC"; then
  2162. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/shaderc/0001-third_party-set-INSTALL-variables-as-cache.patch" am
  2163. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/shaderc/0002-shaderc_util-add-install.patch" am
  2164. do_uninstall "${_check[@]}" include/shaderc include/libshaderc_util
  2165. grep_and_sed d0e67c58134377f065a509845ca6b7d463f5b487 DEPS 's/d0e67c58134377f065a509845ca6b7d463f5b487/76cc41d26f6902de543773023611e40fbcdde58b/g'
  2166. log dependencies "$MINGW_PREFIX"/bin/python ./utils/git-sync-deps
  2167. # fix python indentation errors from non-existant code review
  2168. grep -ZRlP --include="*.py" '\t' third_party/spirv-tools/ | xargs -r -0 -n1 sed -i 's;\t; ;g'
  2169. do_cmakeinstall -GNinja -DSHADERC_SKIP_{TESTS,EXAMPLES}=ON -DSHADERC_ENABLE_WERROR_COMPILE=OFF -DSKIP_{GLSLANG,GOOGLETEST}_INSTALL=ON -DSPIRV_HEADERS_SKIP_{INSTALL,EXAMPLES}=ON
  2170. do_checkIfExist
  2171. unset add_third_party
  2172. fi
  2173. file_installed -s shaderc_static.pc &&
  2174. mv "$(file_installed shaderc_static.pc)" "$(file_installed shaderc.pc)"
  2175. _check=(libplacebo.{a,pc})
  2176. _deps=(lib{vulkan,shaderc_combined}.a spirv-cross.pc shaderc/shaderc.h)
  2177. if { [[ $mpv != n ]] ||
  2178. { [[ $ffmpeg != no ]] && enabled libplacebo; } } &&
  2179. do_vcs "$SOURCE_REPO_LIBPLACEBO"; then
  2180. do_git_submodule
  2181. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/libplacebo/0001-meson-use-shaderc_combined.patch" am
  2182. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/libplacebo/0002-spirv-cross-use-spirv-cross-instead-of-c-shared.patch" am
  2183. do_pacman_install python-{mako,setuptools}
  2184. do_uninstall "${_check[@]}"
  2185. do_mesoninstall -Dvulkan-registry="$LOCALDESTDIR/share/vulkan/registry/vk.xml" -Ddemos=false -Dd3d11=enabled
  2186. do_checkIfExist
  2187. fi
  2188. if [[ $exitearly = EE6 ]]; then
  2189. do_simple_print -p '\n\t'"${orange}Exit due to env var MABS_EXIT_EARLY set to EE6"
  2190. return
  2191. fi
  2192. enabled openssl && hide_libressl
  2193. if enabled libcdio || mpv_enabled cdda; then
  2194. do_pacman_install libcdio-paranoia
  2195. grep -ZlER -- "-R/mingw\S+" "$MINGW_PREFIX"/lib/pkgconfig/* | xargs -r -0 sed -ri 's;-R/mingw\S+;;g'
  2196. fi
  2197. if [[ $ffmpeg != no ]]; then
  2198. enabled libgsm && do_pacman_install gsm
  2199. enabled libsnappy && do_pacman_install snappy
  2200. if enabled libxvid && [[ $standalone = n ]]; then
  2201. do_pacman_install xvidcore
  2202. [[ -f $MINGW_PREFIX/lib/xvidcore.a ]] && mv -f "$MINGW_PREFIX"/lib/{,lib}xvidcore.a
  2203. [[ -f $MINGW_PREFIX/lib/xvidcore.dll.a ]] && mv -f "$MINGW_PREFIX"/lib/xvidcore.dll.a{,.dyn}
  2204. fi
  2205. if enabled libssh; then
  2206. do_pacman_install libssh
  2207. do_addOption --extra-cflags=-DLIBSSH_STATIC "--extra-ldflags=-Wl,--allow-multiple-definition"
  2208. grep_or_sed "Requires.private" "$MINGW_PREFIX"/lib/pkgconfig/libssh.pc \
  2209. "/Libs:/ i\Requires.private: zlib libssl"
  2210. fi
  2211. enabled libtheora && do_pacman_install libtheora
  2212. enabled libcaca && do_addOption --extra-cflags=-DCACA_STATIC && do_pacman_install libcaca
  2213. enabled libmodplug && do_addOption --extra-cflags=-DMODPLUG_STATIC && do_pacman_install libmodplug
  2214. enabled libopenjpeg && do_pacman_install openjpeg2
  2215. if enabled libopenh264; then
  2216. # We use msys2's package for the header and import library so we don't build it, for licensing reasons
  2217. do_pacman_install openh264
  2218. if [[ -f $MINGW_PREFIX/lib/libopenh264.dll.a.dyn ]]; then
  2219. # backup the static library
  2220. mv -f "$MINGW_PREFIX"/lib/libopenh264.a{,.bak}
  2221. # use the import library as a phony static library, as mpv doesn't look for .dll.a
  2222. mv -f "$MINGW_PREFIX"/lib/libopenh264.{dll.a.dyn,a}
  2223. fi
  2224. [[ -f $MINGW_PREFIX/lib/libopenh264.dll.a ]] && mv -f "$MINGW_PREFIX"/lib/libopenh264.{dll.,}a
  2225. _openh264_ver=2.6.0
  2226. _pacman_openh264_ver=$(pacman -Q "${MINGW_PACKAGE_PREFIX}-openh264" | awk '{print $2}')
  2227. if [[ $(vercmp.exe $_openh264_ver "$_pacman_openh264_ver") -ne 0 ]]; then
  2228. do_simple_print "${orange}Openh264 version differs from msys2's, current: $_openh264_ver, msys2: $_pacman_openh264_ver${reset}"
  2229. do_simple_print "${orange}Check if this is the latest suite and update if possible, else open an issue${reset}"
  2230. fi
  2231. if test_newer "$MINGW_PREFIX"/lib/libopenh264.dll.a "$LOCALDESTDIR/bin-video/libopenh264-7.dll" ||
  2232. ! get_dll_version "$LOCALDESTDIR/bin-video/libopenh264-7.dll" | grep -q "$_openh264_ver"; then
  2233. pushd "$LOCALDESTDIR/bin-video" >/dev/null || do_exit_prompt "Did you delete the bin-video folder?"
  2234. if [[ $bits = 64bit ]]; then
  2235. _sha256=dab5f2a872777f9a58b69bfa9fbcf20d9f82f2d6ec91383fd70bff49bd34ac9f
  2236. else
  2237. _sha256=a9445ed1fa2ce9665b22461a7ed0aeb52274add899aa55a93ef6278dbc17c90d
  2238. fi
  2239. do_wget -c -r -q -h $_sha256 \
  2240. "http://ciscobinary.openh264.org/openh264-${_openh264_ver}-win${bits%bit}.dll.bz2" \
  2241. libopenh264.dll.bz2
  2242. [[ -f libopenh264.dll.bz2 ]] && bunzip2 -f libopenh264.dll.bz2
  2243. mv -f libopenh264.dll libopenh264-7.dll
  2244. popd >/dev/null || do_exit_prompt "Did you delete the previous folder?"
  2245. fi
  2246. unset _sha256 _openh264_ver
  2247. fi
  2248. enabled chromaprint && do_addOption --extra-cflags=-DCHROMAPRINT_NODLL &&
  2249. { do_pacman_remove fftw; do_pacman_install chromaprint; }
  2250. if enabled libzmq; then
  2251. if [[ $bits = 64bit ]]; then
  2252. do_pacman_install zeromq
  2253. grep_or_sed ws2_32 "$MINGW_PREFIX"/lib/pkgconfig/libzmq.pc \
  2254. 's/-lpthread/& -lws2_32/'
  2255. do_addOption --extra-cflags=-DZMQ_STATIC
  2256. else
  2257. do_removeOption --enable-libzmq
  2258. do_simple_print "${orange}libzmq is not available for 32-bit, disabling${reset}"
  2259. fi
  2260. fi
  2261. enabled frei0r && do_addOption --extra-libs=-lpsapi
  2262. enabled libxml2 && do_addOption --extra-cflags=-DLIBXML_STATIC
  2263. enabled ladspa && do_pacman_install ladspa-sdk
  2264. if enabled vapoursynth && pc_exists "vapoursynth-script"; then
  2265. _ver=$($PKG_CONFIG --modversion vapoursynth-script)
  2266. do_simple_print "${green}Compiling FFmpeg with Vapoursynth R${_ver}${reset}"
  2267. do_simple_print "${orange}FFmpeg will need vapoursynth.dll and vsscript.dll to run using vapoursynth demuxers"'!'"${reset}"
  2268. unset _ver
  2269. fi
  2270. disabled autodetect && enabled iconv && do_addOption --extra-libs=-liconv
  2271. do_hide_all_sharedlibs
  2272. _check=(libavutil.pc)
  2273. disabled_any avfilter ffmpeg || _check+=(bin-video/ffmpeg.exe)
  2274. if [[ $ffmpeg =~ shared ]]; then
  2275. _check+=(libavutil.dll.a)
  2276. else
  2277. _check+=(libavutil.a)
  2278. [[ $ffmpeg =~ both ]] && _check+=(bin-video/ffmpegSHARED)
  2279. fi
  2280. # todo: make this more easily customizable
  2281. [[ $ffmpegUpdate = y ]] && enabled_any lib{aom,tesseract,vmaf,x265,vpx} &&
  2282. _deps=(lib{aom,tesseract,vmaf,x265,vpx}.a)
  2283. [[ $ffmpegUpdate = y ]] && enabled zlib &&
  2284. _deps+=("$zlib_dir"/lib/libz.a)
  2285. if do_vcs "$ffmpegPath"; then
  2286. ff_base_commit=$(git rev-parse HEAD)
  2287. do_changeFFmpegConfig "$license"
  2288. [[ -f ffmpeg_extra.sh ]] && source ffmpeg_extra.sh
  2289. if enabled libvvdec; then
  2290. do_patch "https://raw.githubusercontent.com/wiki/fraunhoferhhi/vvdec/data/patch/v6-0001-avcodec-add-external-dec-libvvdec-for-H266-VVC.patch" am ||
  2291. do_removeOptions --enable-libvvdec
  2292. fi
  2293. if enabled libsvthevc; then
  2294. do_patch "https://raw.githubusercontent.com/1480c1/SVT-HEVC/master/ffmpeg_plugin/master-0001-lavc-svt_hevc-add-libsvt-hevc-encoder-wrapper.patch" am ||
  2295. do_removeOption --enable-libsvthevc
  2296. fi
  2297. if enabled libsvtvp9; then
  2298. do_patch "https://raw.githubusercontent.com/OpenVisualCloud/SVT-VP9/master/ffmpeg_plugin/master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch" am ||
  2299. do_removeOption --enable-libsvtvp9
  2300. fi
  2301. if enabled libsvtav1; then
  2302. do_patch "https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/12.patch" am
  2303. fi
  2304. enabled libsvthevc || do_removeOption FFMPEG_OPTS_SHARED "--enable-libsvthevc"
  2305. enabled libsvtav1 || do_removeOption FFMPEG_OPTS_SHARED "--enable-libsvtav1"
  2306. enabled libsvtvp9 || do_removeOption FFMPEG_OPTS_SHARED "--enable-libsvtvp9"
  2307. enabled libvvdec && grep_and_sed FF_PROFILE libavcodec/libvvdec.c 's/FF_PROFILE/AV_PROFILE/g'
  2308. # Bypass ffmpeg check for audiotoolbox
  2309. enabled audiotoolbox && do_addOption --extra-libs=-lAudioToolboxWrapper && do_addOption --disable-outdev=audiotoolbox &&
  2310. sed -ri "s/check_apple_framework AudioToolbox/check_apple_framework/g" configure
  2311. if enabled openal &&
  2312. pc_exists "openal"; then
  2313. OPENAL_LIBS=$($PKG_CONFIG --libs openal)
  2314. export OPENAL_LIBS
  2315. do_addOption "--extra-cflags=-DAL_LIBTYPE_STATIC"
  2316. do_addOption FFMPEG_OPTS_SHARED "--extra-cflags=-DAL_LIBTYPE_STATIC"
  2317. for _openal_flag in $($PKG_CONFIG --cflags openal); do
  2318. do_addOption "--extra-cflags=$_openal_flag"
  2319. done
  2320. unset _openal_flag
  2321. fi
  2322. if enabled gmp; then
  2323. do_pacman_install gmp
  2324. grep_and_sed '__declspec(__dllimport__)' "$MINGW_PREFIX"/include/gmp.h \
  2325. 's|__declspec\(__dllimport__\)||g' "$MINGW_PREFIX"/include/gmp.h
  2326. fi
  2327. _patches=$(git rev-list $ff_base_commit.. --count)
  2328. if [[ $_patches -gt 0 ]]; then
  2329. do_addOption "--extra-version=g$(git rev-parse --short $ff_base_commit)+$_patches"
  2330. do_addOption FFMPEG_OPTS_SHARED "--extra-version=g$(git rev-parse --short $ff_base_commit)+$_patches"
  2331. fi
  2332. _uninstall=(include/libav{codec,device,filter,format,util,resample}
  2333. include/lib{sw{scale,resample},postproc}
  2334. libav{codec,device,filter,format,util,resample}.{dll.a,a,pc}
  2335. lib{sw{scale,resample},postproc}.{dll.a,a,pc}
  2336. "$LOCALDESTDIR"/lib/av{codec,device,filter,format,util}-*.def
  2337. "$LOCALDESTDIR"/lib/{sw{scale,resample},postproc}-*.def
  2338. "$LOCALDESTDIR"/bin-video/av{codec,device,filter,format,util}-*.dll
  2339. "$LOCALDESTDIR"/bin-video/{sw{scale,resample},postproc}-*.dll
  2340. "$LOCALDESTDIR"/bin-video/av{codec,device,filter,format,util}.lib
  2341. "$LOCALDESTDIR"/bin-video/{sw{scale,resample},postproc}.lib
  2342. )
  2343. _check=()
  2344. sedflags="prefix|bindir|extra-version|pkg-config-flags"
  2345. # --build-suffix handling
  2346. opt_exists FFMPEG_OPTS "^--build-suffix=[a-zA-Z0-9-]+$" &&
  2347. build_suffix=$(printf '%s\n' "${FFMPEG_OPTS[@]}" |
  2348. sed -rn '/build-suffix=/{s;.+=(.+);\1;p}') ||
  2349. build_suffix=""
  2350. if [[ $ffmpeg =~ both ]]; then
  2351. _check+=(bin-video/ffmpegSHARED/lib/"libavutil${build_suffix}.dll.a")
  2352. FFMPEG_OPTS_SHARED+=("--prefix=$LOCALDESTDIR/bin-video/ffmpegSHARED")
  2353. elif [[ $ffmpeg =~ shared ]]; then
  2354. _check+=("libavutil${build_suffix}".{dll.a,pc})
  2355. FFMPEG_OPTS_SHARED+=("--prefix=$LOCALDESTDIR"
  2356. "--bindir=$LOCALDESTDIR/bin-video"
  2357. "--shlibdir=$LOCALDESTDIR/bin-video")
  2358. fi
  2359. ! disabled_any debug "debug=gdb" &&
  2360. ffmpeg_cflags=$(sed -r 's/ (-O[1-3]|-mtune=\S+)//g' <<< "$CFLAGS")
  2361. # shared
  2362. if [[ $ffmpeg != static ]] && [[ ! -f build_successful${bits}_shared ]]; then
  2363. do_print_progress "Compiling ${bold}shared${reset} FFmpeg"
  2364. do_uninstall bin-video/ffmpegSHARED "${_uninstall[@]}"
  2365. [[ -f config.mak ]] && log "distclean" make distclean
  2366. create_build_dir shared
  2367. config_path=.. CFLAGS="${ffmpeg_cflags:-$CFLAGS}" \
  2368. LDFLAGS+=" -L$LOCALDESTDIR/lib -L$MINGW_PREFIX/lib" \
  2369. do_configure \
  2370. --disable-static --enable-shared "${FFMPEG_OPTS_SHARED[@]}"
  2371. # cosmetics
  2372. sed -ri "s/ ?--($sedflags)=(\S+[^\" ]|'[^']+')//g" config.h
  2373. do_make && do_makeinstall
  2374. cd_safe ..
  2375. files_exist "${_check[@]}" && touch "build_successful${bits}_shared"
  2376. fi
  2377. # static
  2378. if [[ ! $ffmpeg =~ shared ]] && _check=(libavutil.{a,pc}); then
  2379. do_print_progress "Compiling ${bold}static${reset} FFmpeg"
  2380. [[ -f config.mak ]] && log "distclean" make distclean
  2381. if ! disabled_any programs avcodec avformat; then
  2382. if ! disabled swresample; then
  2383. disabled_any avfilter ffmpeg || _check+=(bin-video/ffmpeg.exe)
  2384. if { disabled autodetect && enabled_any sdl2 ffplay; } ||
  2385. { ! disabled autodetect && ! disabled_any sdl2 ffplay; }; then
  2386. _check+=(bin-video/ffplay.exe)
  2387. fi
  2388. fi
  2389. disabled ffprobe || _check+=(bin-video/ffprobe.exe)
  2390. fi
  2391. do_uninstall bin-video/ff{mpeg,play,probe}.exe{,.debug} "${_uninstall[@]}"
  2392. create_build_dir static
  2393. config_path=.. CFLAGS="${ffmpeg_cflags:-$CFLAGS}" \
  2394. cc=$CC cxx=$CXX LDFLAGS+=" -L$LOCALDESTDIR/lib -L$MINGW_PREFIX/lib" \
  2395. do_configure \
  2396. --bindir="$LOCALDESTDIR/bin-video" "${FFMPEG_OPTS[@]}"
  2397. # cosmetics
  2398. sed -ri "s/ ?--($sedflags)=(\S+[^\" ]|'[^']+')//g" config.h
  2399. do_make && do_makeinstall
  2400. ! disabled_any debug "debug=gdb" &&
  2401. create_debug_link "$LOCALDESTDIR"/bin-video/ff{mpeg,probe,play}.exe
  2402. cd_safe ..
  2403. fi
  2404. do_checkIfExist
  2405. [[ -f $LOCALDESTDIR/bin-video/ffmpeg.exe ]] &&
  2406. create_winpty_exe ffmpeg "$LOCALDESTDIR"/bin-video/
  2407. unset ffmpeg_cflags build_suffix
  2408. fi
  2409. fi
  2410. _check=(libde265.a)
  2411. [[ $standalone = y ]] && _check+=(bin-video/dec265.exe)
  2412. if [[ $libheif != n ]] &&
  2413. do_vcs "$SOURCE_REPO_LIBDE265"; then
  2414. do_uninstall "${_check[@]}"
  2415. extracommands=()
  2416. [[ $standalone = n ]] && extracommands+=(-DENABLE_{DE,EN}CODER=OFF)
  2417. do_cmakeinstall video "${extracommands[@]}"
  2418. do_checkIfExist
  2419. fi
  2420. _check=(bin-video/heif-{dec,enc,info,thumbnailer}.exe)
  2421. [[ $libheif = shared ]] && _check+=(bin-video/libheif.dll)
  2422. if [[ $libheif != n ]] &&
  2423. do_vcs "$SOURCE_REPO_LIBHEIF"; then
  2424. do_uninstall bin-video/heif-view.exe "${_check[@]}"
  2425. do_pacman_install libjpeg-turbo
  2426. pc_exists "libpng" || do_pacman_install libpng
  2427. do_patch https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/libheif/0001-Edit-CMakeLists.patch
  2428. extracflags=()
  2429. extracommands=(-DWITH_HEADER_COMPRESSION=ON -DWITH_UNCOMPRESSED_CODEC=ON)
  2430. pc_exists "libde265" &&
  2431. extracommands+=(-DWITH_LIBDE265=ON -DWITH_LIBDE265_PLUGIN=OFF) &&
  2432. extracflags+=(-DLIBDE265_STATIC_BUILD=1)
  2433. pc_exists "kvazaar" &&
  2434. extracommands+=(-DWITH_KVAZAAR=ON -DWITH_KVAZAAR_PLUGIN=OFF) &&
  2435. extracflags+=(-DKVZ_STATIC_LIB=1)
  2436. pc_exists "uvg266" &&
  2437. extracommands+=(-DWITH_UVG266=ON -DWITH_UVG266_PLUGIN=OFF) &&
  2438. extracflags+=(-DUVG_STATIC_LIB=1)
  2439. pc_exists "x265" &&
  2440. extracommands+=(-DWITH_X265=ON -DWITH_X265_PLUGIN=OFF)
  2441. pc_exists "aom" &&
  2442. extracommands+=(-DWITH_AOM_{DE,EN}CODER=ON -DWITH_AOM_{DE,EN}CODER_PLUGIN=OFF)
  2443. pc_exists "dav1d" &&
  2444. extracommands+=(-DWITH_DAV1D=ON -DWITH_DAV1D_PLUGIN=OFF)
  2445. pc_exists "SvtAv1Enc" &&
  2446. extracommands+=(-DWITH_SvtEnc=ON -DWITH_SvtEnc_PLUGIN=OFF)
  2447. pc_exists "libvvenc" &&
  2448. extracommands+=(-DWITH_VVENC=ON -DWITH_VVENC_PLUGIN=OFF)
  2449. pc_exists "libvvdec" &&
  2450. extracommands+=(-DWITH_VVDEC=ON -DWITH_VVDEC_PLUGIN=OFF)
  2451. pacman -Q $MINGW_PACKAGE_PREFIX-libjpeg > /dev/null 2>&1 &&
  2452. extracommands+=(-DWITH_JPEG_{DE,EN}CODER=ON -DWITH_JPEG_{DE,EN}CODER_PLUGIN=OFF)
  2453. pacman -Q $MINGW_PACKAGE_PREFIX-openh264 > /dev/null 2>&1 &&
  2454. extracommands+=(-DWITH_OpenH264_DECODER=ON -DWITH_OpenH264_DECODER_PLUGIN=OFF)
  2455. # don't fail on .dll.a not found because we hide it
  2456. # still need to make it link to static lib as it still wants to link to .dll.a and fails
  2457. # pacman -Q $MINGW_PACKAGE_PREFIX-openjpeg2 > /dev/null 2>&1 &&
  2458. # sed -i 's/message(FATAL_ERROR "The imported target/message(WARNING "The imported target/' \
  2459. # "$MINGW_PREFIX"/lib/cmake/openjpeg-2.5/OpenJPEGTargets.cmake &&
  2460. # extracommands+=(-DWITH_OpenJPEG_{DE,EN}CODER=ON -DWITH_OpenJPEG_{DE,EN}CODER_PLUGIN=OFF)
  2461. # linking difficulties
  2462. pc_exists "rav1e" &&
  2463. extracommands+=(-DWITH_RAV1E=OFF -DWITH_RAV1E_PLUGIN=OFF)
  2464. pc_exists "libavcodec" "libavutil" &&
  2465. extracommands+=(-DWITH_FFMPEG_DECODER=OFF -DWITH_FFMPEG_DECODER_PLUGIN=OFF)
  2466. # this depends on CMake overrides -DBUILD_SHARED_LIBS=off in do_cmake, may break if that behavior changes.
  2467. [[ $libheif = shared ]] && extracommands+=(-DBUILD_SHARED_LIBS=ON)
  2468. CFLAGS+=" ${extracflags[@]}" CXXFLAGS+=" ${extracflags[@]}" \
  2469. do_cmakeinstall video -DBUILD_TESTING=OFF -DWITH_GDK_PIXBUF=OFF "${extracommands[@]}"
  2470. # this subfolder is for plugins and is empty since we didn't build any plugin so we delete it
  2471. rmdir "$LOCALDESTDIR/lib/libheif" > /dev/null 2>&1
  2472. do_checkIfExist
  2473. fi
  2474. # static do_vcs just for svn
  2475. check_mplayer_updates() {
  2476. cd_safe "$LOCALBUILDDIR"
  2477. if [[ ! -d mplayer-svn/.svn ]]; then
  2478. rm -rf mplayer-svn
  2479. do_print_progress " Running svn clone for mplayer"
  2480. svn_clone() (
  2481. set -x
  2482. svn --non-interactive checkout -r HEAD svn://svn.mplayerhq.hu/mplayer/trunk mplayer-svn &&
  2483. [[ -d mplayer-svn/.svn ]]
  2484. )
  2485. if svn --non-interactive ls svn://svn.mplayerhq.hu/mplayer/trunk > /dev/null 2>&1 &&
  2486. log -q "svn.clone" svn_clone; then
  2487. touch mplayer-svn/recently_{updated,checked}
  2488. else
  2489. echo "mplayer svn seems to be down"
  2490. echo "Try again later or <Enter> to continue"
  2491. do_prompt "if you're sure nothing depends on it."
  2492. return
  2493. fi
  2494. unset svn_clone
  2495. fi
  2496. cd_safe mplayer-svn
  2497. oldHead=$(svn info --show-item last-changed-revision .)
  2498. log -q "svn.reset" svn revert --recursive .
  2499. if ! [[ -f recently_checked && recently_checked -nt $LOCALBUILDDIR/last_run ]]; then
  2500. do_print_progress " Running svn update for mplayer"
  2501. log -q "svn.update" svn update -r HEAD
  2502. newHead=$(svn info --show-item last-changed-revision .)
  2503. touch recently_checked
  2504. else
  2505. newHead="$oldHead"
  2506. fi
  2507. rm -f custom_updated
  2508. check_custom_patches
  2509. if [[ $oldHead != "$newHead" || -f custom_updated ]]; then
  2510. touch recently_updated
  2511. rm -f ./build_successful{32,64}bit{,_*}
  2512. if [[ $build32$build64$bits == yesyes64bit ]]; then
  2513. new_updates="yes"
  2514. new_updates_packages="$new_updates_packages [mplayer]"
  2515. fi
  2516. printf 'mplayer\n' >> "$LOCALBUILDDIR"/newchangelog
  2517. do_print_status "┌ mplayer svn" "$orange" "Updates found"
  2518. elif [[ -f recently_updated && ! -f build_successful$bits ]]; then
  2519. do_print_status "┌ mplayer svn" "$orange" "Recently updated"
  2520. elif ! files_exist "${_check[@]}"; then
  2521. do_print_status "┌ mplayer svn" "$orange" "Files missing"
  2522. else
  2523. do_print_status "mplayer svn" "$green" "Up-to-date"
  2524. [[ ! -f recompile ]] &&
  2525. return 1
  2526. do_print_status "┌ mplayer svn" "$orange" "Forcing recompile"
  2527. do_print_status prefix "$bold├$reset " "Found recompile flag" "$orange" "Recompiling"
  2528. fi
  2529. return 0
  2530. }
  2531. _check=(bin-video/m{player,encoder}.exe)
  2532. if [[ $mplayer = y ]] && check_mplayer_updates; then
  2533. [[ $license != nonfree || $faac == n ]] && faac_opts=(--disable-faac)
  2534. do_uninstall "${_check[@]}"
  2535. [[ -f config.mak ]] && log "distclean" make distclean
  2536. if [[ ! -d ffmpeg ]] &&
  2537. ! { [[ -d $LOCALBUILDDIR/ffmpeg-git ]] &&
  2538. git clone -q "$LOCALBUILDDIR/ffmpeg-git" ffmpeg; } &&
  2539. ! git clone "$ffmpegPath" ffmpeg; then
  2540. rm -rf ffmpeg
  2541. printf '%s\n' \
  2542. "Failed to get a FFmpeg checkout" \
  2543. "Please try again or put FFmpeg source code copy into ffmpeg/ manually." \
  2544. "Nightly snapshot: http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2" \
  2545. "Either re-run the script or extract above to inside /build/mplayer-svn."
  2546. do_prompt "<Enter> to continue or <Ctrl+c> to exit the script"
  2547. fi
  2548. [[ ! -d ffmpeg ]] && compilation_fail "Finding valid ffmpeg dir"
  2549. [[ -d ffmpeg/.git ]] && {
  2550. git -C ffmpeg fetch -q origin
  2551. git -C ffmpeg checkout -qf --no-track -B master origin/HEAD
  2552. }
  2553. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/mplayer/0001-ae_lavc-fix-deprecated-warnings.patch"
  2554. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/mplayer/0002-configure-fix-cddb-on-mingw-w64.patch"
  2555. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/mplayer/0003-w32_common-add-casts-for-Wint-conversion.patch"
  2556. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/mplayer/0004-configure-add-checking-libass-from-pkg-config.patch"
  2557. # grep_or_sed windows libmpcodecs/ad_spdif.c '/#include "mp_msg.h/ a\#include <windows.h>'
  2558. # grep_or_sed gnu11 configure 's/c11/gnu11/g'
  2559. # shellcheck disable=SC2016
  2560. sed -i '/%\$(EXESUF):/{n; s/\$(CC)/\$(CXX)/g};/mencoder$(EXESUF)/{n; s/\$(CC)/\$(CXX)/g}' Makefile
  2561. _notrequired=true
  2562. # do_configure --bindir="$LOCALDESTDIR"/bin-video \
  2563. # --extra-cflags='-fpermissive -DPTW32_STATIC_LIB -O3 -DMODPLUG_STATIC -Wno-int-conversion -Wno-error=incompatible-function-pointer-types' \
  2564. # --extra-libs="-llzma -liconv -lws2_32 -lpthread -lwinpthread -lpng -lwinmm $($PKG_CONFIG --libs libilbc) \
  2565. # $(enabled vapoursynth && $PKG_CONFIG --libs vapoursynth-script)" \
  2566. # --extra-ldflags='-Wl,--allow-multiple-definition' --enable-{static,runtime-cpudetection} \
  2567. # --disable-{gif,cddb} "${faac_opts[@]}" --with-dvdread-config="$PKG_CONFIG dvdread" \
  2568. # --with-freetype-config="$PKG_CONFIG freetype2" --with-dvdnav-config="$PKG_CONFIG dvdnav" &&
  2569. # do_makeinstall CXX="$CXX" && do_checkIfExist
  2570. do_configure \
  2571. --bindir="$LOCALDESTDIR"/bin-video \
  2572. --enable-{static,runtime-cpudetection} \
  2573. --extra-cflags='-Wno-error=incompatible-pointer-types' \
  2574. "${faac_opts[@]}" &&
  2575. do_makeinstall CXX="$CXX" && do_checkIfExist
  2576. unset _notrequired faac_opts
  2577. fi
  2578. if [[ $mpv != n ]] && pc_exists libavcodec libavformat libswscale libavfilter; then
  2579. if [[ ${MPV_OPTS[lua]} == 5.1 ]]; then
  2580. do_pacman_install lua51
  2581. elif ! mpv_disabled lua &&
  2582. _check=(bin-global/luajit.exe libluajit-5.1.a luajit.pc luajit-2.1/lua.h) &&
  2583. do_vcs "$SOURCE_REPO_LUAJIT" luajit; then
  2584. do_pacman_remove luajit lua51
  2585. do_uninstall include/luajit-2.1 lib/lua "${_check[@]}"
  2586. [[ -f src/luajit.exe ]] && log "clean" make clean
  2587. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/LuaJIT/0001-Add-win32-UTF-8-filesystem-functions.patch" am
  2588. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/LuaJIT/0002-win32-UTF-8-Remove-va-arg-and-.-and-unused-functions.patch" am
  2589. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/LuaJIT/0003-make-don-t-override-user-provided-CC.patch" am
  2590. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/LuaJIT/0004-pkgconfig-fix-pkg-config-file-for-mingw64.patch" am
  2591. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/LuaJIT/0005-Undo-rolling-release-stuff-since-it-s-not-useful-to-.patch" am
  2592. sed -i "s|export PREFIX= /usr/local|export PREFIX=${LOCALDESTDIR}|g" Makefile
  2593. sed -i "s|^prefix=.*|prefix=$LOCALDESTDIR|" etc/luajit.pc
  2594. _luajit_args=("PREFIX=$LOCALDESTDIR" "INSTALL_BIN=$LOCALDESTDIR/bin-global" "INSTALL_TNAME=luajit.exe")
  2595. do_make amalg HOST_CC="$CC" BUILDMODE=static \
  2596. CFLAGS='-D_WIN32_WINNT=0x0602 -DUNICODE' \
  2597. XCFLAGS="-DLUAJIT_ENABLE_LUA52COMPAT$([[ $bits = 64bit ]] && echo " -DLUAJIT_ENABLE_GC64")" \
  2598. "${_luajit_args[@]}"
  2599. do_makeinstall "${_luajit_args[@]}"
  2600. do_checkIfExist
  2601. unset _luajit_args
  2602. fi
  2603. do_pacman_remove uchardet-git
  2604. ! mpv_disabled uchardet && do_pacman_install uchardet
  2605. ! mpv_disabled libarchive && do_pacman_install libarchive
  2606. ! mpv_disabled lcms2 && do_pacman_install lcms2
  2607. do_pacman_remove angleproject-git
  2608. _check=(EGL/egl.h)
  2609. if mpv_enabled egl-angle && do_vcs "$SOURCE_REPO_ANGLE"; then
  2610. do_simple_print "${orange}mpv will need libGLESv2.dll and libEGL.dll to use gpu-context=angle"'!'
  2611. do_simple_print "You can find these in your browser's installation directory, usually."
  2612. do_uninstall include/{EGL,GLES{2,3},KHR,platform} angle_gl.h \
  2613. lib{GLESv2,EGL}.a "${_check[@]}"
  2614. cp -rf include/{EGL,KHR} "$LOCALDESTDIR/include/"
  2615. do_checkIfExist
  2616. elif ! mpv_disabled egl-angle && ! files_exist "${_check[@]}"; then
  2617. mpv_disable egl-angle
  2618. fi
  2619. if ! mpv_disabled vapoursynth && pc_exists "vapoursynth-script"; then
  2620. _ver=$($PKG_CONFIG --modversion vapoursynth-script)
  2621. do_simple_print "${green}Compiling mpv with Vapoursynth R${_ver}${reset}"
  2622. do_simple_print "${orange}mpv will need vapoursynth.dll and vsscript.dll to use vapoursynth filter"'!'"${reset}"
  2623. unset _ver
  2624. fi
  2625. _check=(mujs.{h,pc} libmujs.a)
  2626. if ! mpv_disabled javascript &&
  2627. do_vcs "$SOURCE_REPO_MUJS"; then
  2628. do_patch "https://github.com/ccxvii/mujs/compare/master...1480c1:mujs:pkgconfig/prefix.patch" am
  2629. do_uninstall bin-global/mujs.exe "${_check[@]}"
  2630. log clean env -i PATH="$PATH" "$(command -v make)" clean
  2631. mujs_targets=(build/release/{mujs.pc,libmujs.a})
  2632. if [[ $standalone != n ]]; then
  2633. mujs_targets+=(build/release/mujs)
  2634. _check+=(bin-global/mujs.exe)
  2635. sed -i "s;-lreadline;$($PKG_CONFIG --libs readline);g" Makefile
  2636. fi
  2637. extra_script pre make
  2638. TEMP="${TEMP:-/tmp}" CPATH="${CPATH:-}" log "make" "$(command -v make)" \
  2639. "${mujs_targets[@]}" prefix="$LOCALDESTDIR" bindir="$LOCALDESTDIR/bin-global"
  2640. extra_script post make
  2641. extra_script pre install
  2642. [[ $standalone != n ]] && do_install build/release/mujs "$LOCALDESTDIR/bin-global"
  2643. do_install build/release/mujs.pc lib/pkgconfig/
  2644. do_install build/release/libmujs.a lib/
  2645. do_install mujs.h include/
  2646. extra_script post install
  2647. grep_or_sed "Requires.private:" "$LOCALDESTDIR/lib/pkgconfig/mujs.pc" \
  2648. 's;Version:.*;&\nRequires.private: readline;'
  2649. unset mujs_targets
  2650. do_checkIfExist
  2651. fi
  2652. _check=(libmpv.a mpv.pc)
  2653. ! mpv_disabled cplayer && _check+=(bin-video/mpv.{exe,com})
  2654. _deps=(lib{ass,avcodec,vapoursynth,shaderc_combined,spirv-cross,placebo}.a "$MINGW_PREFIX"/lib/libuchardet.a)
  2655. if do_vcs "$SOURCE_REPO_MPV"; then
  2656. do_patch "https://github.com/mpv-player/mpv/compare/master...1480c1:mpv:initguid.patch" am
  2657. do_uninstall share/man/man1/mpv.1 include/mpv share/doc/mpv etc/mpv "${_check[@]}"
  2658. hide_conflicting_libs
  2659. create_ab_pkgconfig
  2660. mpv_cflags=() mpv_ldflags=()
  2661. if ! mpv_disabled manpage-build || mpv_enabled html-build; then
  2662. do_pacman_install python-docutils
  2663. fi
  2664. if enabled libnpp && [[ -n "$CUDA_PATH" ]]; then
  2665. mpv_cflags+=("-I$(cygpath -sm "$CUDA_PATH")/include")
  2666. mpv_ldflags+=("-L$(cygpath -sm "$CUDA_PATH")/lib/x64")
  2667. fi
  2668. mpv_enabled pdf-build && do_pacman_install python-rst2pdf
  2669. [[ -f mpv_extra.sh ]] && source mpv_extra.sh
  2670. mapfile -t MPV_ARGS < <(mpv_build_args)
  2671. CFLAGS+=" ${mpv_cflags[*]}" LDFLAGS+=" ${mpv_ldflags[*]}" \
  2672. do_mesoninstall video "${MPV_ARGS[@]}"
  2673. unset MPV_ARGS mpv_cflags mpv_ldflags
  2674. hide_conflicting_libs -R
  2675. files_exist share/man/man1/mpv.1 && dos2unix -q "$LOCALDESTDIR"/share/man/man1/mpv.1
  2676. create_winpty_exe mpv "$LOCALDESTDIR"/bin-video/ "export _started_from_console=yes"
  2677. do_checkIfExist
  2678. fi
  2679. fi
  2680. if [[ $bmx = y ]]; then
  2681. _check=(bin-global/uriparse.exe liburiparser.a liburiparser.pc uriparser/Uri.h)
  2682. do_pacman_remove uriparser
  2683. if do_vcs "$SOURCE_REPO_URIPARSER"; then
  2684. do_uninstall include/uriparser "${_check[@]}"
  2685. do_cmakeinstall global -DURIPARSER_BUILD_{DOCS,TESTS}=OFF
  2686. do_checkIfExist
  2687. fi
  2688. # libMXF and libMXF++ were moved into bmx.
  2689. _check=(bin-video/{bmxtranswrap,{h264,mov,vc2}dump,mxf2raw,raw2bmx}.exe)
  2690. _deps=(liburiparser.a)
  2691. if do_vcs "$SOURCE_REPO_LIBBMX"; then
  2692. (
  2693. pushd deps/libMXF >/dev/null
  2694. do_patch "https://github.com/bbc/libMXF/commit/0a9d2129f2a883d600369b031e1ee29dc808a193.patch" am
  2695. popd >/dev/null
  2696. ) || do_exit_prompt "Did you delete the libMXF folder?"
  2697. do_uninstall libbmx-0.1.{{,l}a,pc} bin-video/bmxparse.exe \
  2698. include/bmx-0.1 "${_check[@]}"
  2699. do_cmakeinstall video -DUNIX=OFF -DBMX_BUILD_TESTING=OFF -DBMX_BUILD_WITH_LIBCURL=OFF -DLIBMXF_BUILD_TOOLS=OFF -DLIBMXF_BUILD_MXFDUMP=OFF
  2700. do_checkIfExist
  2701. fi
  2702. fi
  2703. enabled openssl && hide_libressl -R
  2704. if [[ $cyanrip = y ]]; then
  2705. do_pacman_install libcdio-paranoia jansson
  2706. sed -ri 's;-R[^ ]*;;g' "$MINGW_PREFIX/lib/pkgconfig/libcdio.pc"
  2707. _check=(neon/ne_utils.h libneon.a neon.pc)
  2708. if do_vcs "$SOURCE_REPO_NEON"; then
  2709. do_patch "https://github.com/notroj/neon/pull/69.patch" am
  2710. do_uninstall include/neon "${_check[@]}"
  2711. do_autogen
  2712. do_separate_confmakeinstall --disable-{nls,debug,webdav}
  2713. do_checkIfExist
  2714. fi
  2715. _deps=(libneon.a libxml2.a)
  2716. _check=(musicbrainz5/mb5_c.h libmusicbrainz5{,cc}.{a,pc})
  2717. if do_vcs "$SOURCE_REPO_LIBMUSICBRAINZ"; then
  2718. do_patch "https://github.com/metabrainz/libmusicbrainz/compare/master...wiiaboo:libmusicbrainz:master.patch" am
  2719. do_uninstall "${_check[@]}" include/musicbrainz5
  2720. CXXFLAGS+=" $($PKG_CONFIG --cflags libxml-2.0)" \
  2721. LDFLAGS+=" $($PKG_CONFIG --libs libxml-2.0)" \
  2722. do_cmakeinstall
  2723. do_checkIfExist
  2724. fi
  2725. _deps=(libmusicbrainz5.a libcurl.a)
  2726. _check=(bin-audio/cyanrip.exe)
  2727. if do_vcs "$SOURCE_REPO_CYANRIP"; then
  2728. old_PKG_CONFIG_PATH=$PKG_CONFIG_PATH
  2729. _check=("$LOCALDESTDIR"/opt/cyanffmpeg/lib/pkgconfig/libav{codec,format}.pc)
  2730. if flavor=cyan do_vcs "$ffmpegPath"; then
  2731. do_uninstall "$LOCALDESTDIR"/opt/cyanffmpeg
  2732. [[ -f config.mak ]] && log "distclean" make distclean
  2733. mapfile -t cyan_ffmpeg_opts < <(
  2734. enabled libmp3lame &&
  2735. printf '%s\n' "--enable-libmp3lame" "--enable-encoder=libmp3lame"
  2736. if enabled libvorbis; then
  2737. printf '%s\n' "--enable-libvorbis" "--enable-encoder=libvorbis"
  2738. else
  2739. echo "--enable-encoder=vorbis"
  2740. fi
  2741. if enabled libopus; then
  2742. printf '%s\n' "--enable-libopus" "--enable-encoder=libopus"
  2743. else
  2744. echo "--enable-encoder=opus"
  2745. fi
  2746. )
  2747. create_build_dir cyan
  2748. config_path=.. do_configure "${FFMPEG_BASE_OPTS[@]}" \
  2749. --prefix="$LOCALDESTDIR/opt/cyanffmpeg" \
  2750. --disable-{programs,devices,filters,decoders,hwaccels,encoders,muxers} \
  2751. --disable-{debug,protocols,demuxers,parsers,doc,swscale,network} \
  2752. --disable-{avdevice,autodetect} \
  2753. --disable-bsfs --enable-protocol=file,data \
  2754. --enable-encoder=flac,tta,aac,wavpack,alac,pcm_s16le,pcm_s32le \
  2755. --enable-muxer=flac,tta,ipod,wv,mp3,opus,ogg,wav,pcm_s16le,pcm_s32le,image2,singlejpeg \
  2756. --enable-parser=png,mjpeg --enable-decoder=mjpeg,png \
  2757. --enable-demuxer=image2,singlejpeg \
  2758. --enable-{bzlib,zlib,lzma,iconv} \
  2759. --enable-filter=hdcd \
  2760. "${cyan_ffmpeg_opts[@]}"
  2761. do_makeinstall
  2762. files_exist "${_check[@]}" && touch ../"build_successful${bits}_cyan"
  2763. fi
  2764. unset cyan_ffmpeg_opts
  2765. PKG_CONFIG_PATH=$LOCALDESTDIR/opt/cyanffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH
  2766. cd_safe "$LOCALBUILDDIR"/cyanrip-git
  2767. _check=(bin-audio/cyanrip.exe)
  2768. _extra_cflags=("$(cygpath -m "$LOCALDESTDIR/opt/cyanffmpeg/include")"
  2769. "$(cygpath -m "$LOCALDESTDIR/include")")
  2770. _extra_ldflags=("$(cygpath -m "$LOCALDESTDIR/opt/cyanffmpeg/lib")"
  2771. "$(cygpath -m "$LOCALDESTDIR/lib")")
  2772. hide_conflicting_libs "$LOCALDESTDIR/opt/cyanffmpeg"
  2773. CFLAGS+=" -DLIBXML_STATIC $(printf ' -I%s' "${_extra_cflags[@]}")" \
  2774. LDFLAGS+="$(printf ' -L%s' "${_extra_ldflags[@]}")" \
  2775. do_mesoninstall audio
  2776. hide_conflicting_libs -R "$LOCALDESTDIR/opt/cyanffmpeg"
  2777. do_checkIfExist
  2778. PKG_CONFIG_PATH=$old_PKG_CONFIG_PATH
  2779. unset old_PKG_CONFIG_PATH _extra_ldflags _extra_cflags
  2780. fi
  2781. fi
  2782. if [[ $vlc == y ]]; then
  2783. do_pacman_install lib{cddb,nfs,shout,samplerate,microdns,secret} \
  2784. a52dec taglib gtk3 lua perl
  2785. # Remove useless shell scripts file that causes errors when stdout is not a tty.
  2786. find "$MINGW_PREFIX/bin/" -name "luac" -delete
  2787. _check=("$DXSDK_DIR/fxc2.exe" "$DXSDK_DIR/d3dcompiler_47.dll")
  2788. if do_vcs "https://github.com/mozilla/fxc2.git"; then
  2789. do_uninstall "${_check[@]}"
  2790. do_patch "https://code.videolan.org/videolan/vlc/-/raw/master/contrib/src/fxc2/0001-make-Vn-argument-as-optional-and-provide-default-var.patch" am
  2791. do_patch "https://code.videolan.org/videolan/vlc/-/raw/master/contrib/src/fxc2/0002-accept-windows-style-flags-and-splitted-argument-val.patch" am
  2792. do_patch "https://code.videolan.org/videolan/vlc/-/raw/master/contrib/src/fxc2/0004-Revert-Fix-narrowing-conversion-from-int-to-BYTE.patch" am
  2793. $CXX $CFLAGS -static -static-libgcc -static-libstdc++ -o "$DXSDK_DIR/fxc2.exe" fxc2.cpp -ld3dcompiler $LDFLAGS
  2794. case $bits in
  2795. 32*) cp -f "dll/d3dcompiler_47_32.dll" "$DXSDK_DIR/d3dcompiler_47.dll" ;;
  2796. *) cp -f "dll/d3dcompiler_47.dll" "$DXSDK_DIR/d3dcompiler_47.dll" ;;
  2797. esac
  2798. do_checkIfExist
  2799. fi
  2800. # Taken from https://code.videolan.org/videolan/vlc/blob/master/contrib/src/qt/AddStaticLink.sh
  2801. _add_static_link() {
  2802. local PRL_SOURCE=$LOCALDESTDIR/$2/lib$3.prl LIBS
  2803. [[ -f $PRL_SOURCE ]] || PRL_SOURCE=$LOCALDESTDIR/$2/$3.prl
  2804. [[ ! -f $PRL_SOURCE ]] && return 1
  2805. LIBS=$(sed -e "
  2806. /QMAKE_PRL_LIBS =/ {
  2807. s@QMAKE_PRL_LIBS =@@
  2808. s@$LOCALDESTDIR/lib@\${libdir}@g
  2809. s@\$\$\[QT_INSTALL_LIBS\]@\${libdir}@g
  2810. p
  2811. }
  2812. d" "$PRL_SOURCE" | grep -v QMAKE_PRL_LIBS_FOR_CMAKE)
  2813. sed -i.bak "
  2814. s# -l$1# -l$3 -l$1#
  2815. s#Libs.private:.*#& $LIBS -L\${prefix}/$2#
  2816. " "$LOCALDESTDIR/lib/pkgconfig/$1.pc"
  2817. }
  2818. _qt_version=5.15 # Version that vlc uses
  2819. # $PKG_CONFIG --exists Qt5{Core,Widgets,Gui,Quick{,Widgets,Controls2},Svg}
  2820. # Qt compilation takes ages.
  2821. export QMAKE_CXX=$CXX QMAKE_CC=$CC
  2822. export MSYS2_ARG_CONV_EXCL="--foreign-types="
  2823. _check=(bin/qmake.exe Qt5Core.pc Qt5Gui.pc Qt5Widgets.pc)
  2824. if do_vcs "https://github.com/qt/qtbase.git#branch=${_qt_version:=5.15}"; then
  2825. do_uninstall include/QtCore share/mkspecs "${_check[@]}"
  2826. # Enable ccache on !unix and use cygpath to fix certain issues
  2827. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/qtbase/0001-qtbase-mabs.patch" am
  2828. do_patch "https://code.videolan.org/videolan/vlc/-/raw/master/contrib/src/qt/0003-allow-cross-compilation-of-angle-with-wine.patch" am
  2829. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/qtbase/0003-Remove-wine-prefix-before-fxc2.patch" am
  2830. do_patch "https://code.videolan.org/videolan/vlc/-/raw/master/contrib/src/qt/0006-ANGLE-don-t-use-msvc-intrinsics-when-crosscompiling-.patch" am
  2831. do_patch "https://code.videolan.org/videolan/vlc/-/raw/master/contrib/src/qt/0009-Add-KHRONOS_STATIC-to-allow-static-linking-on-Windows.patch" am
  2832. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/qtbase/0006-qt_module.prf-don-t-create-libtool-if-not-unix.patch" am
  2833. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/qtbase/0007-qmake-Patch-win32-g-for-static-builds.patch" am
  2834. cp -f src/3rdparty/angle/src/libANGLE/{,libANGLE}Debug.cpp
  2835. grep_and_sed "src/libANGLE/Debug.cpp" src/angle/src/common/gles_common.pri \
  2836. "s#src/libANGLE/Debug.cpp#src/libANGLE/libANGLEDebug.cpp#g"
  2837. QT5Base_config=(
  2838. -prefix "$LOCALDESTDIR"
  2839. -datadir "$LOCALDESTDIR"
  2840. -archdatadir "$LOCALDESTDIR"
  2841. -opensource
  2842. -confirm-license
  2843. -release
  2844. -static
  2845. -platform "$(
  2846. case $CC in
  2847. *clang) echo win32-clang-g++ ;;
  2848. *) echo win32-g++ ;;
  2849. esac
  2850. )"
  2851. -make-tool make
  2852. -qt-{libjpeg,freetype,zlib}
  2853. -angle
  2854. -no-{shared,fontconfig,pkg-config,sql-sqlite,gif,openssl,dbus,vulkan,sql-odbc,pch,compile-examples,glib,direct2d,feature-testlib}
  2855. -skip qtsql
  2856. -nomake examples
  2857. -nomake tests
  2858. )
  2859. if [[ $strip == y ]]; then
  2860. QT5Base_config+=(-strip)
  2861. fi
  2862. if [[ $ccache == y ]]; then
  2863. QT5Base_config+=(-ccache)
  2864. fi
  2865. # can't use regular do_configure since their configure doesn't follow
  2866. # standard and uses single dash args
  2867. log "configure" ./configure "${QT5Base_config[@]}"
  2868. do_make
  2869. do_makeinstall
  2870. _add_static_link Qt5Gui plugins/imageformats qjpeg
  2871. grep_or_sed "QtGui/$(qmake -query QT_VERSION)/QtGui" "$LOCALDESTDIR/lib/pkgconfig/Qt5Gui.pc" \
  2872. "s;Cflags:.*;& -I\${includedir}/QtGui/$(qmake -query QT_VERSION)/QtGui;"
  2873. _add_static_link Qt5Gui plugins/platforms qwindows
  2874. _add_static_link Qt5Widgets plugins/styles qwindowsvistastyle
  2875. cat >> "$LOCALDESTDIR/mkspecs/win32-g++/qmake.conf" <<'EOF'
  2876. CONFIG += static
  2877. EOF
  2878. do_checkIfExist
  2879. fi
  2880. _deps=(Qt5Core.pc)
  2881. _check=(Qt5Quick.pc Qt5Qml.pc)
  2882. if do_vcs "https://github.com/qt/qtdeclarative.git#branch=$_qt_version"; then
  2883. do_uninstall "${_check[@]}"
  2884. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/qtdeclarative/0001-features-hlsl_bytecode_header.prf-Use-DXSDK_DIR-for-.patch" am
  2885. git cherry-pick 0b9fcb829313d0eaf2b496bf3ad44e5628fa43b2 > /dev/null 2>&1 ||
  2886. git cherry-pick --abort
  2887. do_qmake
  2888. do_makeinstall
  2889. _add_static_link Qt5Quick qml/QtQuick.2 qtquick2plugin
  2890. _add_static_link Qt5Quick qml/QtQuick/Layouts qquicklayoutsplugin
  2891. _add_static_link Qt5Quick qml/QtQuick/Window.2 windowplugin
  2892. _add_static_link Qt5Qml qml/QtQml/Models.2 modelsplugin
  2893. do_checkIfExist
  2894. fi
  2895. _deps=(Qt5Core.pc)
  2896. _check=(Qt5Svg.pc)
  2897. if do_vcs "https://github.com/qt/qtsvg.git#branch=$_qt_version"; then
  2898. do_uninstall "${_check[@]}"
  2899. do_qmake
  2900. do_makeinstall
  2901. _add_static_link Qt5Svg plugins/iconengines qsvgicon
  2902. _add_static_link Qt5Svg plugins/imageformats qsvg
  2903. do_checkIfExist
  2904. fi
  2905. _deps=(Qt5Core.pc Qt5Quick.pc Qt5Qml.pc)
  2906. _check=("$LOCALDESTDIR/qml/QtGraphicalEffects/libqtgraphicaleffectsplugin.a")
  2907. if do_vcs "https://github.com/qt/qtgraphicaleffects.git#branch=$_qt_version"; then
  2908. do_uninstall "${_check[@]}"
  2909. do_qmake
  2910. do_makeinstall
  2911. _add_static_link Qt5QuickWidgets qml/QtGraphicalEffects qtgraphicaleffectsplugin
  2912. _add_static_link Qt5QuickWidgets qml/QtGraphicalEffects/private qtgraphicaleffectsprivate
  2913. do_checkIfExist
  2914. fi
  2915. _deps=(Qt5Core.pc Qt5Quick.pc Qt5Qml.pc)
  2916. _check=(Qt5QuickControls2.pc)
  2917. if do_vcs "https://github.com/qt/qtquickcontrols2.git#branch=$_qt_version"; then
  2918. do_uninstall "${_check[@]}"
  2919. do_qmake
  2920. do_makeinstall
  2921. _add_static_link Qt5QuickControls2 qml/QtQuick/Controls.2 qtquickcontrols2plugin
  2922. _add_static_link Qt5QuickControls2 qml/QtQuick/Templates.2 qtquicktemplates2plugin
  2923. do_checkIfExist
  2924. fi
  2925. _check=(libspatialaudio.a spatialaudio/Ambisonics.h spatialaudio.pc)
  2926. if do_vcs "https://github.com/videolabs/libspatialaudio.git"; then
  2927. do_uninstall include/spatialaudio "${_check[@]}"
  2928. do_cmakeinstall
  2929. do_checkIfExist
  2930. fi
  2931. _check=(libshout.{,l}a shout.pc shout/shout.h)
  2932. if do_vcs "https://gitlab.xiph.org/xiph/icecast-libshout.git" libshout; then
  2933. do_git_submodule
  2934. do_uninstall "${_check[@]}"
  2935. do_autoreconf
  2936. CFLAGS+=" -include ws2tcpip.h" do_separate_confmakeinstall --disable-examples LIBS="$($PKG_CONFIG --libs openssl)"
  2937. do_checkIfExist
  2938. fi
  2939. _check=(bin/protoc.exe libprotobuf-lite.{,l}a libprotobuf.{,l}a protobuf{,-lite}.pc)
  2940. if do_vcs "https://github.com/protocolbuffers/protobuf.git"; then
  2941. do_uninstall include/google/protobuf "${_check[@]}"
  2942. do_autogen
  2943. do_separate_confmakeinstall
  2944. do_checkIfExist
  2945. fi
  2946. _check=(pixman-1.pc libpixman-1.a pixman-1/pixman.h)
  2947. if do_vcs "https://gitlab.freedesktop.org/pixman/pixman.git"; then
  2948. do_uninstall include/pixman-1 "${_check[@]}"
  2949. do_patch "https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/pixman/0001-pixman-pixman-mmx-fix-redefinition-of-_mm_mulhi_pu16.patch" am
  2950. NOCONFIGURE=y do_autogen
  2951. CFLAGS="-msse2 -mfpmath=sse -mstackrealign $CFLAGS" \
  2952. do_separate_confmakeinstall
  2953. do_checkIfExist
  2954. fi
  2955. _check=(libmedialibrary.a medialibrary.pc medialibrary/IAlbum.h)
  2956. if do_vcs "https://code.videolan.org/videolan/medialibrary.git"; then
  2957. do_uninstall include/medialibrary "${_check[@]}"
  2958. do_mesoninstall -Dtests=disabled -Dlibvlc=disabled
  2959. do_checkIfExist
  2960. fi
  2961. _check=(libthai.pc libthai.{,l}a thai/thailib.h)
  2962. if do_vcs "https://github.com/tlwg/libthai.git"; then
  2963. do_uninstall include/thai "${_check[@]}"
  2964. do_autogen
  2965. do_separate_confmakeinstall
  2966. do_checkIfExist
  2967. fi
  2968. _check=(libebml.a ebml/ebml_export.h libebml.pc lib/cmake/EBML/EBMLTargets.cmake)
  2969. if do_vcs "https://github.com/Matroska-Org/libebml.git"; then
  2970. do_uninstall include/ebml lib/cmake/EBML "${_check[@]}"
  2971. do_cmakeinstall
  2972. do_checkIfExist
  2973. fi
  2974. _check=(libmatroska.a libmatroska.pc matroska/KaxTypes.h lib/cmake/Matroska/MatroskaTargets.cmake)
  2975. if do_vcs "https://github.com/Matroska-Org/libmatroska.git"; then
  2976. do_uninstall include/matroska lib/cmake/Matroska "${_check[@]}"
  2977. do_cmakeinstall
  2978. do_checkIfExist
  2979. fi
  2980. _check=("$LOCALDESTDIR"/vlc/bin/{{c,r}vlc,vlc.exe,libvlc.dll}
  2981. "$LOCALDESTDIR"/vlc/libexec/vlc/vlc-cache-gen.exe
  2982. "$LOCALDESTDIR"/vlc/lib/pkgconfig/libvlc.pc
  2983. "$LOCALDESTDIR"/vlc/include/vlc/libvlc_version.h)
  2984. if do_vcs "https://code.videolan.org/videolan/vlc.git"; then
  2985. do_uninstall bin/plugins lib/vlc "${_check[@]}"
  2986. _mabs_vlc=https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/vlc
  2987. do_patch "https://code.videolan.org/videolan/vlc/-/merge_requests/155.patch" am
  2988. do_patch "$_mabs_vlc/0001-modules-access-srt-Use-srt_create_socket-instead-of-.patch" am
  2989. do_patch "$_mabs_vlc/0002-modules-codec-libass-Use-ass_set_pixel_aspect-instea.patch" am
  2990. do_patch "$_mabs_vlc/0003-Use-libdir-for-plugins-on-msys2.patch" am
  2991. do_patch "$_mabs_vlc/0004-include-vlc_fixups.h-fix-iovec-is-redefined-errors.patch" am
  2992. do_patch "$_mabs_vlc/0005-include-vlc_common.h-fix-snprintf-and-vsnprintf-rede.patch" am
  2993. do_patch "$_mabs_vlc/0006-configure.ac-check-if-_WIN32_IE-is-already-defined.patch" am
  2994. do_patch "$_mabs_vlc/0007-modules-stream_out-rtp-don-t-redefine-E-defines.patch" am
  2995. do_patch "$_mabs_vlc/0008-include-vlc_codecs.h-don-t-redefine-WAVE_FORMAT_PCM.patch" am
  2996. do_patch "$_mabs_vlc/0009-modules-audio_filter-channel_mixer-spatialaudio-add-.patch" am
  2997. do_patch "$_mabs_vlc/0010-modules-access_output-don-t-put-lgpg-error-for-liveh.patch" am
  2998. do_autoreconf
  2999. # All of the disabled are because of multiple issues both on the installed libs and on vlc's side.
  3000. # Maybe set up vlc_options.txt
  3001. # Can't disable shared since vlc will error out. I don't think enabling static will really do anything for us other than breaking builds.
  3002. create_build_dir
  3003. config_path=".." do_configure \
  3004. --prefix="$LOCALDESTDIR/vlc" \
  3005. --sysconfdir="$LOCALDESTDIR/vlc/etc" \
  3006. --{build,host,target}="$MINGW_CHOST" \
  3007. --enable-{shared,avcodec,merge-ffmpeg,qt,nls} \
  3008. --disable-{static,dbus,fluidsynth,svgdec,aom,mod,ncurses,mpg123,notify,svg,secret,telx,ssp,lua,gst-decode,nvdec} \
  3009. --with-binary-version="MABS" BUILDCC="$CC" \
  3010. CFLAGS="$CFLAGS -DGLIB_STATIC_COMPILATION -DQT_STATIC -DGNUTLS_INTERNAL_BUILD -DLIBXML_STATIC -DLIBXML_CATALOG_ENABLED" \
  3011. LIBS="$($PKG_CONFIG --libs libcddb regex iconv) -lwsock32 -lws2_32 -lpthread -liphlpapi"
  3012. do_makeinstall
  3013. do_checkIfExist
  3014. PATH="$LOCALDESTDIR/vlc/bin:$PATH" "$LOCALDESTDIR/vlc/libexec/vlc/vlc-cache-gen" "$LOCALDESTDIR/vlc/lib/plugins"
  3015. fi
  3016. fi
  3017. _check=(bin-video/ffmbc.exe)
  3018. if [[ $ffmbc = y ]] && do_vcs "$SOURCE_REPO_FFMBC"; then
  3019. _notrequired=true
  3020. create_build_dir
  3021. # Too many errors with GCC 15 due to really old code.
  3022. CFLAGS+=" -Wno-error=incompatible-pointer-types" \
  3023. log configure ../configure --target-os=mingw32 --enable-gpl \
  3024. --disable-{dxva2,ffprobe} --extra-cflags=-DNO_DSHOW_STRSAFE \
  3025. --cc="$CC" --ld="$CXX"
  3026. do_make
  3027. do_install ffmbc.exe bin-video/
  3028. do_checkIfExist
  3029. unset _notrequired
  3030. fi
  3031. do_simple_print -p "${orange}Finished $bits compilation of all tools${reset}"
  3032. }
  3033. run_builds() {
  3034. new_updates=no
  3035. new_updates_packages=""
  3036. if [[ $build32 = yes ]]; then
  3037. source /local32/etc/profile2.local
  3038. buildProcess
  3039. fi
  3040. if [[ $build64 = yes ]]; then
  3041. source /local64/etc/profile2.local
  3042. buildProcess
  3043. fi
  3044. }
  3045. cd_safe "$LOCALBUILDDIR"
  3046. run_builds
  3047. if [[ $exitearly = EE2 || $exitearly = EE3 || $exitearly = EE4 || $exitearly = EE5 || $exitearly = EE6 ]]; then
  3048. exit 0
  3049. fi
  3050. while [[ $new_updates = yes ]]; do
  3051. ret=no
  3052. printf '%s\n' \
  3053. "-------------------------------------------------------------------------------" \
  3054. "There were new updates while compiling." \
  3055. "Updated:$new_updates_packages" \
  3056. "Would you like to run compilation again to get those updates? Default: no"
  3057. do_prompt "y/[n] "
  3058. echo "-------------------------------------------------------------------------------"
  3059. if [[ $ret = y || $ret = Y || $ret = yes ]]; then
  3060. run_builds
  3061. else
  3062. break
  3063. fi
  3064. done
  3065. clean_suite
  3066. if [[ -f $LOCALBUILDDIR/post_suite.sh ]]; then
  3067. do_simple_print -p "${green}Executing post_suite.sh${reset}"
  3068. source "$LOCALBUILDDIR"/post_suite.sh || true
  3069. fi
  3070. do_simple_print -p "${green}Compilation successful.${reset}"
  3071. do_simple_print -p "${green}This window will close automatically in 5 seconds.${reset}"
  3072. sleep 5