media-suite_compile.sh 134 KB

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