media-suite_compile.sh 132 KB

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