Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
405 results
Show changes
Commits on Source (3219)
Showing with 868 additions and 320 deletions
......@@ -926,6 +926,7 @@ Haakon Meland Eriksen - Norwegian
Han HoJoong - Korean
Hardik Kishorpuri Goswami - Gujarati
Hemanta Nandi - Bengali (India)
Hugo Carvalho - Portuguese
Huw Waters - Welsh
H.Shalitha Vikum - Sinhala
Ibrahima Sarr - Fulah
......
[workspace]
members = [
"src/rust/vlcrs-core",
"src/rust/vlcrs-macros",
"src/rust/vlcrs-messages",
"src/rust/vlcrs-utils",
"modules/logger/telegraf-rs/"
]
resolver = "2"
[workspace.package]
version = "4.0.0"
license = "LGPL-2.1-or-later"
[workspace.dependencies]
vlcrs-core = { path = "src/rust/vlcrs-core" }
vlcrs-macros = { path = "src/rust/vlcrs-macros" }
......@@ -29,12 +29,11 @@ SUFFIXES =
AM_DISTCHECK_CONFIGURE_FLAGS = \
--enable-fast-install \
--disable-a52 \
--disable-alsa \
--disable-avcodec --disable-avformat \
--disable-postproc --disable-swscale \
--disable-dbus \
--disable-mad --disable-libmpeg2 \
--disable-mad \
--disable-faad --disable-skins2 \
--disable-live555 \
--disable-lua \
......@@ -66,10 +65,9 @@ EXTRA_DIST += \
extras/tools/automake-clang.patch \
extras/tools/cmake-enable-ALPN-support-on-macOS-10.14.patch \
extras/tools/libtool-2.4.7-bitcode.patch \
extras/tools/libtool-2.4.7-clang-libs.patch \
extras/tools/libtool-2.4.7-response-files.patch \
extras/tools/libtool-2.5.4-clang-libs.patch \
extras/tools/libtool-2.4.7-lpthread.patch \
extras/tools/libtool-2.4.7-embed-bitcode.patch
extras/tools/libtool-2.5.4-embed-bitcode.patch
###############################################################################
# Various utilities ( editor syntax files, D-Bus controller ... )
......
......@@ -32,12 +32,14 @@ Core:
* Support of HTML help (via the vlc_plugin.h:set_help_html macro)
Audio output:
* PipeWire (native) audio output support
* ALSA: HDMI passthrough support.
Use --alsa-passthrough to configure S/PDIF or HDMI passthrough.
* Remove the DirectSound plugin (API obsolete after Windows 7)
Demuxer:
* Support for HEIF image and grid image formats
* Support for Farbfeld images
* Support for DASH WebM
* Support for DVBSUB in mkv
* Support for DAV video files
......
......@@ -30,6 +30,7 @@
#include <memory>
#include <map>
#include <string>
#include <sstream>
using google_breakpad::ExceptionHandler;
......@@ -47,10 +48,10 @@ extern "C"
void CheckCrashDump( const wchar_t* path )
{
wchar_t pattern[MAX_PATH];
std::wstringstream pattern;
WIN32_FIND_DATAW data;
_snwprintf( pattern, MAX_PATH, L"%s/*.dmp", path );
HANDLE h = FindFirstFileW( pattern, &data );
pattern << path << L"/*.dmp";
HANDLE h = FindFirstFileW( pattern.str().c_str(), &data );
if (h == INVALID_HANDLE_VALUE)
return;
int answer = MessageBoxW( NULL, L"Ooops: VLC media player just crashed.\n" \
......@@ -61,17 +62,17 @@ void CheckCrashDump( const wchar_t* path )
params[L"ver"] = WIDEN(PACKAGE_VERSION);
do
{
wchar_t fullPath[MAX_PATH];
_snwprintf( fullPath, MAX_PATH, L"%s/%s", path, data.cFileName );
std::wstringstream fullPath;
fullPath << path << L'/' << data.cFileName;
if( answer == IDYES )
{
std::map<std::wstring, std::wstring> files;
files[L"upload_file_minidump"] = fullPath;
files[L"upload_file_minidump"] = fullPath.str();
google_breakpad::HTTPUpload::SendRequest(
WIDEN( BREAKPAD_URL "/reports" ), params, files,
NULL, NULL, NULL );
}
DeleteFileW( fullPath );
DeleteFileW( fullPath.str().c_str() );
} while ( FindNextFileW( h, &data ) );
FindClose(h);
}
......
......@@ -228,7 +228,10 @@ int main(int i_argc, const char *ppsz_argv[])
/* Handle parameters */
const char *argv[i_argc + 2];
const char **argv = calloc(i_argc + 2, sizeof (argv[0]));
if (argv == NULL)
exit(1);
int argc = 0;
argv[argc++] = "--no-ignore-config";
......@@ -264,22 +267,38 @@ int main(int i_argc, const char *ppsz_argv[])
argc += i_argc;
argv[argc] = NULL;
/* Initialize libvlc */
libvlc_instance_t *vlc = libvlc_new(argc, argv);
if (vlc == NULL)
return 1;
dispatch_queue_t intf_queue = dispatch_queue_create("org.videolan.vlc", NULL);
__block bool intf_started = true;
__block libvlc_instance_t *vlc = NULL;
int ret = 1;
libvlc_SetExitHandler(vlc->p_libvlc_int, vlc_terminate, NULL);
libvlc_set_app_id(vlc, "org.VideoLAN.VLC", PACKAGE_VERSION, PACKAGE_NAME);
libvlc_set_user_agent(vlc, "VLC media player", "VLC/"PACKAGE_VERSION);
dispatch_async(intf_queue, ^{
/* Initialize libvlc */
vlc = libvlc_new(argc, argv);
if (vlc == NULL)
{
dispatch_sync(dispatch_get_main_queue(), ^{
intf_started = false;
CFRunLoopStop(CFRunLoopGetMain());
});
return;
}
if (libvlc_InternalAddIntf(vlc->p_libvlc_int, NULL)) {
fprintf(stderr, "VLC cannot start any interface. Exiting.\n");
goto out;
}
libvlc_SetExitHandler(vlc->p_libvlc_int, vlc_terminate, NULL);
libvlc_set_app_id(vlc, "org.VideoLAN.VLC", PACKAGE_VERSION, PACKAGE_NAME);
libvlc_set_user_agent(vlc, "VLC media player", "VLC/"PACKAGE_VERSION);
if (libvlc_InternalAddIntf(vlc->p_libvlc_int, NULL)) {
fprintf(stderr, "VLC cannot start any interface. Exiting.\n");
dispatch_sync(dispatch_get_main_queue(), ^{
intf_started = false;
CFRunLoopStop(CFRunLoopGetMain());
});
return;
}
libvlc_InternalPlay(vlc->p_libvlc_int);
libvlc_InternalPlay(vlc->p_libvlc_int);
});
/*
* Run the main loop. If the mac interface is not initialized, only the CoreFoundation
......@@ -287,22 +306,24 @@ int main(int i_argc, const char *ppsz_argv[])
* before actually starting the loop.
*/
@autoreleasepool {
if(NSApp == nil) {
CFRunLoopRun();
} else {
[NSApp run];
}
CFRunLoopRun();
}
if (!intf_started)
goto out;
ret = 0;
/* Cleanup */
out:
dispatch_release(intf_queue);
free(argv);
dispatch_release(sigIntSource);
dispatch_release(sigTermSource);
dispatch_release(sigChldSource);
libvlc_release(vlc);
if (vlc)
libvlc_release(vlc);
#ifdef HAVE_BREAKPAD
if (breakpad)
......
# Do we build the main VLC binary?
build_vlc = get_option('vlc')
if build_vlc and (host_system != 'darwin' or have_osx)
if build_vlc and (host_system != 'darwin' or have_osx) and not have_win_store and host_system != 'android'
vlc_sources = []
vlc_deps = [m_lib, dl_lib, threads_dep]
......@@ -16,6 +16,9 @@ if build_vlc and (host_system != 'darwin' or have_osx)
vlc_sources += ['winvlc.c']
else
vlc_sources += ['vlc.c', 'override.c']
if x11_dep.found()
vlc_deps += [x11_dep]
endif
endif
executable('vlc',
......@@ -52,7 +55,7 @@ if build_vlc and (host_system != 'darwin' or have_osx)
command: [vlc_cache_gen_dep, meson.global_build_root() / 'modules'],
# ninja command will be `ninja bin/plugins.dat`
output: 'plugins.dat',
build_by_default: true,
build_by_default: not meson.is_cross_build(),
)
endif
......@@ -59,41 +59,8 @@ static char *FromWide (const wchar_t *wide)
return out;
}
#if (_WIN32_WINNT < _WIN32_WINNT_WIN8)
static BOOL SetDefaultDllDirectories_(DWORD flags)
{
HMODULE h = GetModuleHandle(TEXT("kernel32.dll"));
if (h == NULL)
return FALSE;
BOOL (WINAPI * SetDefaultDllDirectoriesReal)(DWORD);
SetDefaultDllDirectoriesReal = (BOOL (WINAPI *)(DWORD))
GetProcAddress(h, "SetDefaultDllDirectories");
if (SetDefaultDllDirectoriesReal == NULL)
return FALSE;
return SetDefaultDllDirectoriesReal(flags);
}
# define SetDefaultDllDirectories SetDefaultDllDirectories_
#endif
static void PrioritizeSystem32(void)
{
#ifndef HAVE_PROCESS_MITIGATION_IMAGE_LOAD_POLICY
typedef struct _PROCESS_MITIGATION_IMAGE_LOAD_POLICY {
union {
DWORD Flags;
struct {
DWORD NoRemoteImages :1;
DWORD NoLowMandatoryLabelImages :1;
DWORD PreferSystem32Images :1;
DWORD ReservedFlags :29;
};
};
} PROCESS_MITIGATION_IMAGE_LOAD_POLICY;
#endif
#if _WIN32_WINNT < _WIN32_WINNT_WIN8
BOOL (WINAPI *SetProcessMitigationPolicy)(PROCESS_MITIGATION_POLICY, PVOID, SIZE_T);
HINSTANCE h_Kernel32 = GetModuleHandle(TEXT("kernel32.dll"));
......
#!/usr/bin/env python3
# SPDX-License-Identifier: LGPL-2.1-or-later
# Copyright (C) 2022 Loïc Branstett <loic@videolabs.io>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
# This is a wrapper/interceptor script for Cargo (the Rust package manager) that adds
# the ability to specify an output directory for the final compiler artifact
# (archive lib, depfile).
#
# Usage: ./buildsystem/cargo-output.py --output=out/ --depfile NORMAL_CARGO_INVOCATION
# Usage: ./buildsystem/cargo-output.py --output=out/ --depfile /usr/bin/cargo
# --target=x86_64-unknown-linux-gnu rustc --crate-type=staticlib
#
# The resulting static library will be put in the output directory as well as its depfile
# if asked (--depfile) and available
import os, sys, json, pathlib, shutil, subprocess, argparse
def dir_path(string):
if os.path.isdir(string):
return string
else:
raise NotADirectoryError(string)
parser = argparse.ArgumentParser()
parser.add_argument("--depfile", action="store_true")
parser.add_argument("-o", "--output", type=dir_path)
parser.add_argument("cargo_cmds", nargs=argparse.REMAINDER)
args = parser.parse_args()
cargo_argv = args.cargo_cmds
# Insert Cargo argument `--message-format=json-render-diagnostics`
# before a `--` (if there are any) to still be in Cargo arguments
# and not in the inner thing (rustc, ...)
cargo_argv.insert(
cargo_argv.index('--') if '--' in cargo_argv else len(cargo_argv),
"--message-format=json-render-diagnostics"
)
# Execute the cargo build and redirect stdout (and not stderr)
cargo_r = subprocess.run(cargo_argv, stdout=subprocess.PIPE)
# We don't use `check=True` in the above `run` method call because it
# raise an execption and outputing a python traceback isn't useful at all
if cargo_r.returncode != 0:
sys.exit(cargo_r.returncode)
# Get the jsons output
cargo_stdout = cargo_r.stdout.decode('utf-8')
cargo_jsons = [json.loads(line) for line in cargo_stdout.splitlines()]
# We are only interrested in the final artifact (ie the output, not it's deps)
last_compiler_artifact = next(
j for j in reversed(cargo_jsons) if j["reason"] == "compiler-artifact")
# We only take the first one, because the other one are just aliases and thus
# are not relevant for us
first_compiler_artifact_filename = last_compiler_artifact["filenames"][0]
for filename in [first_compiler_artifact_filename]:
shutil.copy2(filename, args.output)
if args.depfile:
shutil.copy2(pathlib.Path(filename).with_suffix(".d"), args.output)
#!/usr/bin/env python3
# SPDX-License-Identifier: LGPL-2.1-or-later
# Copyright (C) 2022 Loïc Branstett <loic@videolabs.io>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
# This script is meant to find the required native libs of an empty Rust crate
# compiled as a static lib.
#
# Usage: ./buildsystem/cargo-rustc-static-libs.py /usr/bin/cargo
# Usage: ./buildsystem/cargo-rustc-static-libs.py /usr/bin/cargo --target=x86_64-unknown-linux-gnu
#
# The result is then printed to the standard output.
import os, sys, json, subprocess, tempfile, argparse
NATIVE_STATIC_LIBS="native-static-libs"
parser = argparse.ArgumentParser()
parser.add_argument("cargo_cmds", nargs=argparse.REMAINDER)
args = parser.parse_args()
cargo_argv = args.cargo_cmds
cargo_argv.append("rustc")
cargo_argv.append("--message-format=json")
cargo_argv.append("--crate-type=staticlib")
cargo_argv.append("--quiet")
cargo_argv.append("--")
cargo_argv.append("--print=native-static-libs")
with tempfile.TemporaryDirectory() as tmpdir:
os.chdir(tmpdir)
with open("Cargo.toml", "w") as cargo_toml:
cargo_toml.write("""
[package]
name = "native-static-libs"
version = "0.0.0"
[lib]
path = "lib.rs"
""")
with open("lib.rs", "w") as lib_rs:
lib_rs.write("#![allow(dead_code)] fn main(){}")
# Execute the cargo build and redirect stdout (and not stderr)
cargo_r = subprocess.run(cargo_argv, stdout=subprocess.PIPE)
# We don't use `check=True in run because it raise an execption
# and outputing a python traceback isn't useful at all.
#
# We also exit here so that the output o tmp dir is not cleared when
# there is an error.
if cargo_r.returncode != 0:
print("command: {cargo_argv}", file=sys.stderr)
print("cwd: {tmpdir}", file=sys.stderr)
sys.exit(cargo_r.returncode)
# Get the jsons output
cargo_stdout = cargo_r.stdout.decode('utf-8')
cargo_jsons = [json.loads(line) for line in cargo_stdout.splitlines()]
# Print the last message with a `NATIVE_STATIC_LIBS` message
for j in reversed(cargo_jsons):
if j["reason"] == "compiler-message":
msg = j["message"]["message"]
if msg.startswith(NATIVE_STATIC_LIBS):
print(msg[len(NATIVE_STATIC_LIBS + ": "):])
# SIMD checks
enable_sse = false
enable_avx = false
if host_machine.cpu_family().startswith('x86')
enable_sse = get_option('sse').allowed()
enable_avx = get_option('avx').allowed()
endif
# Check for fully workin SSE2 intrinsics
have_sse2_intrinsics = cc.compiles('''
have_sse2_intrinsics = enable_sse and cc.compiles('''
#include <emmintrin.h>
#include <stdint.h>
uint64_t frobzor;
......@@ -18,69 +25,83 @@ have_sse2_intrinsics = cc.compiles('''
frobzor = (uint64_t)_mm_movepi64_pi64(a);
}
''', args: ['-msse2'], name: 'SSE2 intrinsics check')
cdata.set('HAVE_SSE2_INTRINSICS', have_sse2_intrinsics)
if have_sse2_intrinsics
cdata.set('HAVE_SSE2_INTRINSICS', 1)
endif
# Check for SSE2 inline assembly support
can_compile_sse2 = cc.compiles('''
can_compile_sse2 = enable_sse and cc.compiles('''
void f() {
void *p;
asm volatile("punpckhqdq %%xmm1,%%xmm2"::"r"(p):"xmm1", "xmm2");
}
''', args: ['-msse'], name: 'SSE2 inline asm check')
cdata.set('CAN_COMPILE_SSE2', can_compile_sse2)
if can_compile_sse2
cdata.set('CAN_COMPILE_SSE2', 1)
endif
have_sse2 = can_compile_sse2
# Check for SSE3 inline assembly support
can_compile_sse3 = cc.compiles('''
can_compile_sse3 = enable_sse and cc.compiles('''
void f() {
void *p;
asm volatile("movsldup %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
}
''', args: ['-msse'], name: 'SSE3 inline asm check')
cdata.set('CAN_COMPILE_SSE3', can_compile_sse3)
if can_compile_sse3
cdata.set('CAN_COMPILE_SSE3', 1)
endif
# Check for SSSE3 inline assembly support
can_compile_2_sse3 = cc.compiles('''
can_compile_2_sse3 = enable_sse and cc.compiles('''
void f() {
void *p;
asm volatile("pabsw %%xmm0,%%xmm0"::"r"(p):"xmm0");
}
''', args: ['-msse'], name: 'SSSE3 inline asm check')
cdata.set('CAN_COMPILE_SSSE3', can_compile_2_sse3)
if can_compile_2_sse3
cdata.set('CAN_COMPILE_SSSE3', 1)
endif
have_sse3 = can_compile_sse3 and can_compile_2_sse3
# Check for SSE4.1 inline assembly support
can_compile_sse4_1 = cc.compiles('''
can_compile_sse4_1 = enable_sse and cc.compiles('''
void f() {
void *p;
asm volatile("pmaxsb %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
}
''', args: ['-msse'], name: 'SSE4.1 inline asm check')
cdata.set('CAN_COMPILE_SSE4_1', can_compile_sse4_1)
if can_compile_sse4_1
cdata.set('CAN_COMPILE_SSE4_1', 1)
endif
have_sse4_1 = can_compile_sse4_1
# Check for SSE4.2 inline assembly support
can_compile_sse4_2 = cc.compiles('''
can_compile_sse4_2 = enable_sse and cc.compiles('''
void f() {
void *p;
asm volatile("pcmpgtq %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
}
''', args: ['-msse'], name: 'SSE4.2 inline asm check')
cdata.set('CAN_COMPILE_SSE4_2', can_compile_sse4_2)
if can_compile_sse4_2
cdata.set('CAN_COMPILE_SSE4_2', 1)
endif
have_sse4_2 = can_compile_sse4_2
# Check for SSE4A inline assembly support
can_compile_sse4A = cc.compiles('''
can_compile_sse4A = enable_sse and cc.compiles('''
void f() {
void *p;
asm volatile("insertq %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
}
''', args: ['-msse'], name: 'SSE4A inline asm check')
cdata.set('CAN_COMPILE_SSE4A', can_compile_sse4A)
if can_compile_sse4A
cdata.set('CAN_COMPILE_SSE4A', 1)
endif
have_sse4A = can_compile_sse4A
# Check for fully workin AVX2 intrinsics
have_avx2_intrinsics = cc.compiles('''
have_avx2_intrinsics = enable_avx and cc.compiles('''
#include <immintrin.h>
#include <stdint.h>
uint64_t frobzor;
......@@ -97,26 +118,32 @@ have_avx2_intrinsics = cc.compiles('''
frobzor = (uint64_t)_mm256_extract_epi64(a, 0);
}
''', args: ['-mavx2'], name: 'AVX2 intrinsics check')
cdata.set('HAVE_AVX2_INTRINSICS', have_avx2_intrinsics)
if have_avx2_intrinsics
cdata.set('HAVE_AVX2_INTRINSICS', 1)
endif
# Check for AVX inline assembly support
can_compile_avx = cc.compiles('''
can_compile_avx = enable_avx and cc.compiles('''
void f() {
void *p;
asm volatile("vxorps %%ymm1,%%ymm2,%%ymm3"::"r"(p):"ymm1", "ymm2", "ymm3");
}
''', args: ['-mavx'], name: 'AVX inline asm check')
cdata.set('CAN_COMPILE_AVX', can_compile_avx)
if can_compile_avx
cdata.set('CAN_COMPILE_AVX', 1)
endif
have_avx = can_compile_avx
# Check for AVX2 inline assembly support
can_compile_avx2 = cc.compiles('''
can_compile_avx2 = enable_avx and cc.compiles('''
void f() {
void *p;
asm volatile("vpunpckhqdq %%ymm1,%%ymm2,%%ymm3"::"r"(p):"ymm1", "ymm2", "ymm3");
}
''', args: ['-mavx'], name: 'AVX2 inline asm check')
cdata.set('CAN_COMPILE_AVX2', can_compile_avx2)
if can_compile_avx2
cdata.set('CAN_COMPILE_AVX2', 1)
endif
have_avx2 = can_compile_avx2
# TODO: ARM Neon checks and SVE checks
......
......@@ -13,7 +13,11 @@ dummy.c:
check_PROGRAMS = \
test_heap \
test_strnstr
test_strnstr \
test_ckd_ckd \
test_ckd_builtin \
test_ckd_compat \
$(NULL)
AM_TESTS_ENVIRONMENT = ASAN_OPTIONS="allocator_may_return_null=1"
......@@ -22,6 +26,16 @@ test_heap_LDADD = libcompat.la
test_strnstr_SOURCES = test/strnstr.c
test_strnstr_LDADD = libcompat.la
test_ckd_ckd_SOURCES = test/ckd.c
test_ckd_ckd_CFLAGS = -DTEST_CKD
if HAVE_STDCKDINT
test_ckd_ckd_CFLAGS += -DHAVE_CKD
endif
test_ckd_builtin_SOURCES = $(test_ckd_ckd_SOURCES)
test_ckd_builtin_CFLAGS = -DTEST_BUILTIN
test_ckd_compat_SOURCES = $(test_ckd_ckd_SOURCES)
test_ckd_compat_CFLAGS = -DTEST_COMPAT
if HAVE_DARWIN
check_PROGRAMS += test_clock_nanosleep
......
......@@ -28,7 +28,7 @@
#include <assert.h>
#include <pthread.h>
#include <sys/errno.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/sysctl.h>
......
......@@ -11,3 +11,49 @@ if libcompat_sources.length() > 0
install_dir: get_option('libdir') / 'vlc'
)
endif
heap_alloc_env = environment({'ASAN_OPTIONS': 'allocator_may_return_null=1'})
vlc_tests += {
'name': 'heap',
'sources': files('test/heap.c'),
'suite': ['compat'],
'link_with': [vlc_libcompat],
'env': heap_alloc_env,
}
vlc_tests += {
'name': 'strnstr',
'sources': files('test/strnstr.c'),
'suite': ['compat'],
'link_with': [vlc_libcompat],
}
vlc_tests += {
'name': 'ckd_ckd',
'sources': files('test/ckd.c'),
'c_args': ['-DTEST_CKD'],
'suite': ['compat'],
'link_with': [vlc_libcompat],
}
ckd_builtin_cargs = ['-DTEST_BUILTIN']
if cdata.has('HAVE_STDCKDINT_H')
ckd_builtin_cargs += '-DHAVE_CKD'
endif
vlc_tests += {
'name': 'ckd_builtin',
'sources': files('test/ckd.c'),
'c_args': ckd_builtin_cargs,
'suite': ['compat'],
'link_with': [vlc_libcompat],
}
vlc_tests += {
'name': 'ckd_compat',
'sources': files('test/ckd.c'),
'c_args': ['-DTEST_COMPAT'],
'suite': ['compat'],
'link_with': [vlc_libcompat],
}
#TODO: add clock_nanosleep test for Darwin
......@@ -178,6 +178,8 @@ static inline unsigned int __stdc_trailing_zeros(unsigned long long value,
{
unsigned int zeros = size * CHAR_BIT;
value <<= (sizeof (value) * CHAR_BIT) - zeros;
while (value != 0) {
value <<= 1;
zeros--;
......
......@@ -45,8 +45,72 @@ static inline _Bool __ckd_mul_##suffix(type *r, type a, type b) \
return b > 0 && a > (MAX / b); \
}
# define __ckd_signed_common(suffix, type, MIN, MAX) \
static inline _Bool __ckd_add_##suffix(type *r, type a, type b) \
{ \
union suffix ua = { .v = a }; \
union suffix ub = { .v = b }; \
union suffix ur = { .uv = ua.uv + ub.uv }; \
*r = ur.v; \
if ((b > 0 && a > (MAX - b)) || (b < 0 && a < (MIN - b))) \
return 1; \
return 0; \
} \
\
static inline _Bool __ckd_sub_##suffix(type *r, type a, type b) \
{ \
union suffix ua = { .v = a }; \
union suffix ub = { .v = b }; \
union suffix ur = { .uv = ua.uv - ub.uv }; \
*r = ur.v; \
if ((b < 0 && a > (MAX + b)) || (b > 0 && a < (MIN + b))) \
return 1; \
return 0; \
} \
\
static inline _Bool __ckd_mul_##suffix(type *r, type a, type b) \
{ \
union suffix ua = { .v = a }; \
union suffix ub = { .v = b }; \
union suffix ur = { .uv = ua.uv * ub.uv }; \
*r = ur.v; \
if (a > 0) { \
if (b > 0) { \
if (a > (MAX / b)) return 1; \
} else if (b < 0) { \
if (b < (MIN / a)) return 1; \
} \
} else if (a < 0) { \
if (b > 0) { \
if (a < (MIN / b)) return 1; \
} else if (b < 0) { \
if (b < (MAX / a)) return 1; \
} \
} \
return 0; \
}
# define __ckd_signed(suffix, type, MIN, MAX) \
union suffix { \
unsigned type uv; \
type v; \
}; \
__ckd_signed_common(suffix, type, MIN, MAX)
# define __ckd_signed_forced(suffix, type, MIN, MAX) \
union suffix { \
unsigned type uv; \
signed type v; \
}; \
__ckd_signed_common(suffix, signed type, MIN, MAX)
# define __ckd_func(op, r, a, b) \
_Generic (*(r), \
signed char: __ckd_##op##_sc((signed char *)(r), a, b), \
short: __ckd_##op##_ss((short *)(r), a, b), \
int: __ckd_##op##_si((int *)(r), a, b), \
long: __ckd_##op##_sl((long *)(r), a, b), \
long long: __ckd_##op##_sll((long long *)(r), a, b), \
unsigned char: __ckd_##op##_uc((unsigned char *)(r), a, b), \
unsigned short: __ckd_##op##_us((unsigned short *)(r), a, b), \
unsigned int: __ckd_##op##_ui((unsigned int *)(r), a, b), \
......@@ -59,6 +123,12 @@ __ckd_unsigned(ui, unsigned int, UINT_MAX)
__ckd_unsigned(ul, unsigned long, ULONG_MAX)
__ckd_unsigned(ull, unsigned long long, ULLONG_MAX)
__ckd_signed_forced(sc, char, SCHAR_MIN, SCHAR_MAX)
__ckd_signed(ss, short, SHRT_MIN, SHRT_MAX)
__ckd_signed(si, int, INT_MIN, INT_MAX)
__ckd_signed(sl, long, LONG_MIN, LONG_MAX)
__ckd_signed(sll, long long, LLONG_MIN, LLONG_MAX)
# define ckd_add(r, a, b) __ckd_func(add, r, a, b)
# define ckd_sub(r, a, b) __ckd_func(sub, r, a, b)
# define ckd_mul(r, a, b) __ckd_func(mul, r, a, b)
......
/*****************************************************************************
* stdckdint.h test case
*****************************************************************************
* Copyright © 2025 VideoLabs, VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <limits.h>
#undef NDEBUG
#include <assert.h>
#if defined (TEST_CKD)
# ifdef HAVE_CKD
# include "../include/stdckdint.h" /* Force include on the compiler path */
# else
# define SKIP /* can't test it */
# endif
#elif defined (TEST_BUILTIN)
# if defined(__GNUC__) || defined(__clang__)
# undef __STDC_VERSION_STDCKDINT_H__
# include "../stdckdint/stdckdint.h" /* Force include on the compat path */
# else
# define SKIP /* can't test it */
# endif
#elif defined (TEST_COMPAT)
# undef __STDC_VERSION_STDCKDINT_H__
# undef __GNUC__
# undef __clang__
# include "../stdckdint/stdckdint.h"
#else
# error TEST_ not defined
#endif
int main(void)
{
#ifdef SKIP
return 77;
#else
unsigned long long ures;
long long res;
/* multiplication */
/* zero */
assert(!ckd_mul(&ures, 0, 0) && ures == 0);
assert(!ckd_mul(&ures, 0, 1) && ures == 0);
assert(!ckd_mul(&ures, 1, 0) && ures == 0);
/* small cases */
assert(!ckd_mul(&ures, 2, 3) && ures == 6);
assert(!ckd_mul(&res, -3, 3) && res == -9);
assert(!ckd_mul(&res, -3, -3) && res == 9);
/* near positive overflow */
assert(!ckd_mul(&res, LLONG_MAX, 1) && res == LLONG_MAX);
assert(!ckd_mul(&res, LLONG_MAX / 2, 2) && res == LLONG_MAX / 2 * 2);
assert(ckd_mul(&res, LLONG_MAX, 2) && res == -2);
assert(!ckd_mul(&res, LLONG_MAX, -1) && res == -LLONG_MAX);
/* near negative overflow */
assert(!ckd_mul(&res, LLONG_MIN, 1) && res == LLONG_MIN);
assert(ckd_mul(&res, LLONG_MIN, -1) && res == LLONG_MIN);
/* additions */
/* small cases */
assert(!ckd_add(&ures, 0, 0) && ures == 0);
assert(!ckd_add(&ures, 0, 1) && ures == 1);
assert(!ckd_add(&ures, 1, 0) && ures == 1);
assert(!ckd_add(&ures, 1, 1) && ures == 2);
/* big edge cases */
assert(!ckd_add(&ures, ULLONG_MAX, 0ULL) && ures == ULLONG_MAX);
assert(!ckd_add(&ures, ULLONG_MAX - 1ULL, 1ULL) && ures == ULLONG_MAX);
assert(ckd_add(&ures, ULLONG_MAX, 1ULL) && ures == 0);
assert(ckd_add(&res, LLONG_MAX, 1ULL) && res == LLONG_MIN);
/* subtractions */
/* small cases */
assert(!ckd_sub(&ures, 0, 0) && ures == 0);
assert(!ckd_sub(&ures, 1, 0) && ures == 1);
assert(!ckd_sub(&ures, 1, 1) && ures == 0);
/* 0 - 1 */
assert(ckd_sub(&ures, 0, 1) && ures == ULLONG_MAX);
assert(!ckd_sub(&res, 0, 1) && res == -1);
/* edge cases: */
assert(!ckd_sub(&ures, ULLONG_MAX, 0) && ures == ULLONG_MAX);
assert(!ckd_sub(&ures, ULLONG_MAX, 1) && ures == ULLONG_MAX - 1ULL);
assert(ckd_sub(&ures, 0ULL, ULLONG_MAX) && ures == 1);
assert(ckd_sub(&ures, 2, 3) && ures == ULLONG_MAX);
assert(ckd_sub(&res, LLONG_MIN, 1) && res == LLONG_MAX);
return 0;
#endif
}
......@@ -3,6 +3,12 @@
/* Define to 1 to allow running VLC as root (uid 0). */
#mesondefine ALLOW_RUN_AS_ROOT
/* Define to 1 if AVX inline assembly is available. */
#mesondefine CAN_COMPILE_AVX
/* Define to 1 if AVX2 inline assembly is available. */
#mesondefine CAN_COMPILE_AVX2
/* Define to 1 if SSE2 inline assembly is available. */
#mesondefine CAN_COMPILE_SSE2
......@@ -61,6 +67,9 @@
/* Define to 1 if you have the `aligned_alloc' function. */
#mesondefine HAVE_ALIGNED_ALLOC
/* AMD HQScaler supported */
#mesondefine HAVE_AMF_SCALER
/* Define to 1 if you have the <arpa/inet.h> header file. */
#mesondefine HAVE_ARPA_INET_H
......@@ -76,6 +85,9 @@
/* Support for __attribute__((packed)) for structs */
#mesondefine HAVE_ATTRIBUTE_PACKED
/* Define to 1 if AVX2 intrinsics are available. */
#mesondefine HAVE_AVX2_INTRINSICS
/* Define to 1 if you have the `backtrace' function. */
#mesondefine HAVE_BACKTRACE
......@@ -83,6 +95,9 @@
standard. */
#mesondefine HAVE_BROKEN_QSORT_R
/* Define if CSS engine is built */
#mesondefine HAVE_CSS
/* Define to 1 if C++ headers define locale_t */
#mesondefine HAVE_CXX_LOCALE_T
......@@ -95,6 +110,9 @@
/* Define to 1 if you have the `dup3' function. */
#mesondefine HAVE_DUP3
/* Define to 1 if you have the <dxgidebug.h> header file. */
#mesondefine HAVE_DXGIDEBUG_H
/* Define to 1 if you have the `eventfd' function. */
#mesondefine HAVE_EVENTFD
......@@ -131,6 +149,9 @@
/* Define to 1 if you have the <sys/auxv.h> header file */
#mesondefine HAVE_SYS_AUXV_H
/* Defined if having gcrypt */
#mesondefine HAVE_GCRYPT
/* Define to 1 if you have the `getauxval' function. */
#mesondefine HAVE_GETAUXVAL
......@@ -193,8 +214,6 @@
* Library check macros
*/
/* TODO: Properly check for the avformat header
*/
#define HAVE_LIBAVFORMAT_AVFORMAT_H 1
......@@ -214,6 +233,9 @@
/* Define to 1 if you have the `localtime_r' function. */
#mesondefine HAVE_LOCALTIME_R
/* Define to 1 if you have the lrintf function */
#mesondefine HAVE_LRINTF
/* Define to 1 if the system has the type `max_align_t'. */
#mesondefine HAVE_MAX_ALIGN_T
......@@ -232,6 +254,8 @@
/* Define to 1 if you have the `mmap' function. */
#mesondefine HAVE_MMAP
/* Define to 1 if you have the <mpc/mpcdec.h> header file. */
#mesondefine HAVE_MPC_MPCDEC_H
/* Define to 1 if you have the NANF function */
#mesondefine HAVE_NANF
......@@ -269,9 +293,8 @@
/* Define to 1 if you have the `posix_memalign' function. */
#mesondefine HAVE_POSIX_MEMALIGN
/* Define to 1 if the system has the type
`PROCESS_MITIGATION_IMAGE_LOAD_POLICY'. */
#mesondefine HAVE_PROCESS_MITIGATION_IMAGE_LOAD_POLICY
/* Define to 1 if using libprojectM 2.x */
#mesondefine HAVE_PROJECTM2
/* Define to 1 if you have the <pthread.h> header file. */
#mesondefine HAVE_PTHREAD_H
......@@ -426,9 +449,15 @@
/* Define to 1 if you have the `writev' function. */
#mesondefine HAVE_WRITEV
/* Use external asm on x86. */
#mesondefine HAVE_X86ASM
/* Define to 1 if you have the <xlocale.h> header file. */
#mesondefine HAVE_XLOCALE_H
/* Define to 1 if you have zlib. */
#mesondefine HAVE_ZLIB
/* Define to 1 if you have the <zlib.h> header file. */
#mesondefine HAVE_ZLIB_H
......@@ -551,7 +580,7 @@
// #undef ZVBI_COMPILED
/* Define to 64 for large files support. */
#mesondefine _FILE_OFFSET_BITS
#define _FILE_OFFSET_BITS 64
/* Alias fdatasync() to fsync() if missing. */
#mesondefine fdatasync
......
dnl Autoconf settings for vlc
AC_COPYRIGHT([Copyright 1999-2024 VLC authors and VideoLAN])
AC_COPYRIGHT([Copyright 1999-2025 VLC authors and VideoLAN])
AC_INIT([vlc], [4.0.0-dev])
VERSION_MAJOR=4
......@@ -19,7 +19,7 @@ AC_SUBST([PKGDIR])
CONFIGURE_LINE="`echo "$0 $ac_configure_args" | sed -e 's/\\\/\\\\\\\/g'`"
CODENAME="Otto Chriek"
COPYRIGHT_YEARS="1996-2024"
COPYRIGHT_YEARS="1996-2025"
AC_CONFIG_SRCDIR([src/libvlc.c])
AC_CONFIG_AUX_DIR([autotools])
......@@ -118,11 +118,11 @@ X86ASMFLAGS=""
case "${host_cpu}" in
i?86)
X86ASMFLAGS="-f elf32"
X86ASMDEFS="-DARCH_X86_32=1 -DARCH_X86_64=0"
X86ASMDEFS="-DARCH_X86_64=0"
;;
x86_64)
X86ASMFLAGS="-f elf64"
X86ASMDEFS="-DARCH_X86_32=0 -DARCH_X86_64=1"
X86ASMDEFS="-DARCH_X86_64=1"
;;
esac
......@@ -379,11 +379,15 @@ int foo() { return my_array[0]; }
WINDOWS_ARCH="arm"
PROGRAMFILES="PROGRAMFILES"
;;
*)
i?86)
WINDOWS_ARCH="x86"
PROGRAMFILES="PROGRAMFILES"
X86ASMFLAGS="-f win32"
X86ASMDEFS="${X86ASMDEFS} -DPREFIX"
AX_APPEND_FLAG([-Wl,--large-address-aware], [LDFLAGS])
;;
*)
AC_MSG_ERROR([Unsupported Windows architecture ${host_cpu}])
;;
esac
AC_SUBST([WINDOWS_ARCH])
......@@ -407,7 +411,7 @@ int foo() { return my_array[0]; }
AC_LIBOBJ([gai_strerror])
AC_CHECK_FUNCS([if_nametoindex])
X86ASMFLAGS="-f aout"
X86ASMDEFS="-DARCH_X86_32=1 -DARCH_X86_64=0 -DPREFIX"
X86ASMDEFS="-DARCH_X86_64=0 -DPREFIX"
;;
*emscripten*)
SYS=emscripten
......@@ -451,7 +455,7 @@ esac
dnl WinRT
AC_ARG_ENABLE([winstore_app],
AS_HELP_STRING([--enable-winstore-app],
[Build targetted for Windows Store apps (default disabled)]))
[Build targeted for Windows Store apps (default disabled)]))
vlc_winstore_app=0
AS_IF([test "${SYS}" = "mingw32"],[
......@@ -490,6 +494,7 @@ AS_IF([test "${SYS}" = "mingw32"],[
])
AM_CONDITIONAL([HAVE_FREEBSD], [test "${SYS}" = "freebsd"])
AM_CONDITIONAL([HAVE_OPENBSD], [test "${SYS}" = "openbsd"])
AM_CONDITIONAL([HAVE_LINUX], [test "${SYS}" = "linux"])
AM_CONDITIONAL([HAVE_ANDROID], [test "${VENDOR}" = "android"])
AM_CONDITIONAL([HAVE_OS2], [test "${SYS}" = "os2"])
......@@ -687,7 +692,7 @@ AC_PREPROC_IFELSE([AC_LANG_SOURCE([
#endif
])], [
dnl Check for broken versions of mingw-runtime compatability library
dnl Check for broken versions of mingw-runtime compatibility library
AC_MSG_CHECKING(for broken mingw-runtime)
AC_PREPROC_IFELSE([AC_LANG_SOURCE([
#include <_mingw.h>
......@@ -713,13 +718,6 @@ dnl Check for broken versions of mingw-runtime compatability library
CPPFLAGS="${CPPFLAGS} -D__USE_MINGW_ANSI_STDIO=0"
])
dnl Check for the need to include the mingwex lib for mingw32
VLC_SAVE_FLAGS
AC_CHECK_LIB([mingwex], [opendir],
AC_CHECK_LIB([mingw32], [opendir],,
[VLC_ADD_LIBS([libvlccore],[-lmingwex])])
)
VLC_RESTORE_FLAGS
], [
AC_MSG_RESULT([Not compiling with mingw])
])
......@@ -745,7 +743,7 @@ dnl Check for broken versions of mingw-runtime compatability library
dnl
dnl Buggy glibc prevention. Purposedly not cached.
dnl Buggy glibc prevention. Purposely not cached.
dnl See sourceware.org bugs 5058 and 5443.
dnl Ubuntu alone has 20 bug numbers for this...
dnl
......@@ -775,7 +773,7 @@ dnl Check for system libs needed
need_libc=false
dnl Check for usual libc functions
AC_CHECK_FUNCS([accept4 dup3 fcntl flock fstatat fstatvfs fork getmntent_r getenv getpwuid_r isatty memalign mkostemp mmap open_memstream newlocale pipe2 posix_fadvise setlocale uselocale wordexp])
AC_CHECK_FUNCS([accept4 dup3 fcntl flock fstatat fstatvfs fork getmntent_r getenv getpwuid_r isatty memalign mkostemp mmap open_memstream newlocale pipe2 posix_fadvise qsort_r setlocale uselocale wordexp])
AC_REPLACE_FUNCS([aligned_alloc asprintf atof atoll dirfd fdopendir flockfile fsync getdelim getpid gmtime_r lfind lldiv localtime_r memrchr nrand48 poll posix_memalign readv recvmsg rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup strnlen strnstr strsep strtof strtok_r strtoll swab tdestroy tfind timegm timespec_get strverscmp vasprintf writev])
AC_REPLACE_FUNCS([gettimeofday])
AC_CHECK_FUNC(fdatasync,,
......@@ -798,6 +796,8 @@ case "$SYS" in
;;
esac
AM_CONDITIONAL([HAVE_QSORT_R], [test "x$ac_cv_func_qsort_r" = "xyes"])
AH_BOTTOM([#include <vlc_fixups.h>])
dnl Check for struct timespec
......@@ -942,12 +942,10 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_Thread_local int foo = 0;
],[ AC_MSG_RESULT([no])])
dnl __STDC_NO_THREADS__ can't be trusted on some platforms.
dnl check for its availability explicitely
dnl check for its availability explicitly
AC_CHECK_HEADERS([threads.h])
AC_CHECK_LIB([anl],[getaddrinfo_a],[
AC_DEFINE(HAVE_LIBANL, 1, [Define to 1 if you have the anl library])
])
AC_CHECK_LIB([anl],[getaddrinfo_a],[])
dnl Check for dynamic plugins
LIBDL=""
......@@ -1001,6 +999,13 @@ AS_IF([test "${SYS}" != "mingw32"], [
])
AC_SUBST([LIBRT])
dnl Check for libatomic
have_libatomic="no"
VLC_SAVE_FLAGS
AC_SEARCH_LIBS([__atomic_load], [atomic], [have_libatomic="yes"])
VLC_RESTORE_FLAGS
AM_CONDITIONAL([HAVE_LIBATOMIC], [test "${have_libatomic}" = "yes"])
dnl Check for clock_* functions, needs to be done here,
dnl after the -lrt check
AC_REPLACE_FUNCS([clock_gettime clock_nanosleep clock_getres])
......@@ -1012,17 +1017,16 @@ dnl
AC_CHECK_HEADER([stdbit.h],, [
CPPFLAGS="${CPPFLAGS} -I\$(top_srcdir)/compat/stdbit"
])
AC_CHECK_HEADER([stdckdint.h],, [
have_stdckdint="no"
AC_CHECK_HEADER([stdckdint.h], [
have_stdckdint="yes"
], [
CPPFLAGS="${CPPFLAGS} -I\$(top_srcdir)/compat/stdckdint"
])
AM_CONDITIONAL([HAVE_STDCKDINT], [test "${have_stdckdint}" = "yes"])
dnl POSIX
AC_CHECK_HEADERS([arpa/inet.h poll.h pthread.h search.h sys/shm.h sys/socket.h sys/uio.h wordexp.h])
AC_CHECK_HEADERS([net/if.h], [], [],
[
#include <sys/types.h>
#include <sys/socket.h>
])
AC_CHECK_HEADERS([arpa/inet.h net/if.h poll.h pthread.h search.h sys/shm.h sys/socket.h sys/uio.h wordexp.h])
AC_CHECK_HEADER([syslog.h], [have_syslog="yes"], [have_syslog="no"])
AM_CONDITIONAL([HAVE_SYSLOG], [test "$have_syslog" = "yes"])
......@@ -1071,7 +1075,7 @@ PKG_PROG_PKG_CONFIG()
dnl On some OS we need static linking
AS_IF([test -n "${PKG_CONFIG}" ],[
AS_IF([test "${SYS}" = "mingw32" -o "${SYS}" = "darwin" -o "${SYS}" = "os2" ],[
AS_IF([test "${SYS}" = "mingw32" -o "${SYS}" = "darwin" -o "${SYS}" = "os2" -o "${SYS}" = "emscripten" ],[
PKG_CONFIG="${PKG_CONFIG} --static"
])
])
......@@ -1197,9 +1201,18 @@ AC_ARG_ENABLE([extra_checks],
[Turn some warnings into compilation error (default disabled)]),,
[enable_extra_checks="no"])
AS_IF([test "${enable_extra_checks}" = "yes"], [
AX_APPEND_COMPILE_FLAGS([-Werror=missing-field-initializers -Werror=format -Werror=incompatible-pointer-types -Werror=restrict -Werror=int-conversion -Werror=implicit-int -Werror=return-mismatch -Werror=declaration-missing-parameter-type], [CFLAGS])
AX_APPEND_COMPILE_FLAGS([-Werror=missing-field-initializers -Werror=format -Werror=incompatible-pointer-types -Werror=restrict -Werror=int-conversion -Werror=implicit-int -Werror=return-mismatch -Werror=declaration-missing-parameter-type -Werror=excess-initializers], [CFLAGS])
AC_LANG_PUSH(C++)
AX_APPEND_COMPILE_FLAGS([-Werror=missing-field-initializers -Werror=format -Werror=return-mismatch], [CXXFLAGS])
AX_APPEND_COMPILE_FLAGS([-Werror=missing-field-initializers -Werror=format -Werror=excess-initializers], [CXXFLAGS])
AC_LANG_POP(C++)
])
# Casting incompatible functions is notoriously bug prone with emscripten:
# https://emscripten.org/docs/porting/guidelines/function_pointer_issues.html
AS_IF([test "${enable_extra_checks}" = "yes" && test "${SYS}" = "emscripten"], [
AX_APPEND_COMPILE_FLAGS([-Werror=cast-function-type-strict], [CFLAGS])
AC_LANG_PUSH(C++)
AX_APPEND_COMPILE_FLAGS([-Werror=cast-function-type-strict], [CXXFLAGS])
AC_LANG_POP(C++)
])
......@@ -1450,7 +1463,7 @@ fi
WIN32_PATH_CMD=
AS_IF([test "${SYS}" = "mingw32"], [
AC_MSG_CHECKING([how to transform windows pathes])
AC_MSG_CHECKING([how to transform windows paths])
win32_path_cmd=no
for win_path in "cygpath" "wslpath" "wine winepath"
do
......@@ -1886,28 +1899,71 @@ AM_CONDITIONAL([ENABLE_SOUT], [test "${enable_sout}" != "no"])
dnl
dnl Rust Modules
dnl
AC_ARG_WITH([rust-std],
AS_HELP_STRING([--with-rust-std[=ARGS]],
[Specify how to find Rust standard library. If ARGS is build-std=STDARGS, it forwards parameters to Cargo as -Z build-std=STDARGS. (default auto)]))
AS_CASE(["${with_rust_std}"],
[build-std=*], [cargo_build_std_args=-Z"${with_rust_std}"],
[auto], [cargo_build_std_args=""],
[""], [cargo_build_std_args=""],
[AC_MSG_ERROR([Unknown option ${with_rust_std} for --with-rust-std=])])
AC_SUBST([CARGO_BUILD_STD], [${cargo_build_std_args}])
AC_ARG_ENABLE([rust],
AS_HELP_STRING([--enable-rust],
[enable building Rust modules (default disabled)]))
AS_IF([test "${enable_rust}" = "yes"],[
AC_CHECK_PROGS(RUSTC, [rustc], [no])
AS_IF([test "$RUSTC" = "no"],[
AC_MSG_ERROR([rustc not found but required to build Rust modules])
])
AS_IF([test "${host}" = "${build}"],[
AC_CACHE_CHECK([rustc host target], [ac_cv_rustc_host_target],
[ac_cv_rustc_host_target=$($RUSTC --verbose --version | grep "host:" | cut -d" " -f2-)])
AS_IF([test -n "${ac_cv_rustc_host_target}"],
[AC_SUBST([RUST_TARGET], ["$ac_cv_rustc_host_target"])],
[AC_MSG_ERROR(failed to extract rustc host target)])
rust_target_flags=
AS_IF([test "$vlc_winstore_app" = "1"],[
rust_target_flags="${rust_target_flags} --uwp"
])
AS_IF([test -n "$(eval ${CC} --version 2>/dev/null | grep 'clang')"],[
rust_target_flags="${rust_target_flags} --llvm"
])
AS_IF([test "${HAVE_TVOS}" = "1"],[
rust_target_flags="${rust_target_flags} --darwin=tvos"
],[
AS_IF([test "${HAVE_WATCHOS}" = "1"],[
rust_target_flags="${rust_target_flags} --darwin=watchos"
],[
AS_IF([test "${HAVE_XROS}" = "1"],[
rust_target_flags="${rust_target_flags} --darwin=xros"
],[
AS_IF([test "${HAVE_IOS}" = "1"],[
rust_target_flags="${rust_target_flags} --darwin=ios"
],[
AS_IF([test "${HAVE_OSX}" = "1"],[
rust_target_flags="${rust_target_flags} --darwin=macos"
])
])
])
])
])
AC_MSG_CHECKING([Rust target])
rust_target=$(${srcdir}/contrib/src/get-rust-target.sh \
${rust_target_flags} \
${host})
ac_status=$?
AS_IF([test $ac_status = 0],[
AC_MSG_RESULT([${rust_target}])
AC_SUBST([RUST_TARGET], ["${rust_target}"])
],[
AC_MSG_ERROR([cross compilation is not yet supported for Rust modules (${host} != ${build})])
AC_MSG_RESULT([unsupported])
AC_MSG_ERROR([Unsupported Rust target for ${host}])
])
AC_CHECK_PROGS(CARGO, [cargo], [no])
AS_IF([test -z "${CARGO_HOME}"], [
dnl CARGO_HOME default to the home folder
dnl https://doc.rust-lang.org/cargo/guide/cargo-home.html
CARGO_HOME="${HOME}/.cargo"
])
AC_PATH_PROGS(CARGO, [cargo], [no], [${CARGO_HOME}/bin:${PATH}])
AS_IF([test "$CARGO" = "no"],[
AC_MSG_ERROR([cargo not found. cargo is required to build Rust modules])
])
AC_DEFINE(ENABLE_RUST, 1, [Define to 1 for building rust modules.])
])
AM_CONDITIONAL([HAVE_RUST], [test "${enable_rust}" = "yes"])
......@@ -1994,10 +2050,6 @@ dnl
AC_ARG_ENABLE([addonmanagermodules],
AS_HELP_STRING([--disable-addonmanagermodules],
[disable the addons manager modules (default enabled)]))
if test "${enable_addonmanagermodules}" != "no"
then
AC_DEFINE(ENABLE_ADDONMANAGERMODULES, 1, [Define if you want the addons manager modules])
fi
AM_CONDITIONAL([ENABLE_ADDONMANAGERMODULES], [test "${enable_addonmanagermodules}" != "no"])
......@@ -2186,8 +2238,10 @@ AC_ARG_ENABLE([nvdec], AS_HELP_STRING([--disable-nvdec],
[disable NVDEC decoder (default auto)]))
have_nvdec="no"
AS_IF([test "$enable_nvdec" != "no"], [
AC_CHECK_HEADERS([ffnvcodec/dynlink_loader.h], [
PKG_CHECK_MODULES([FFNVCODEC], [ffnvcodec], [
have_nvdec="yes"
], [
AC_MSG_WARN([${FFNVCODEC_PKG_ERRORS}: nvdec will not be available.])
])
])
AM_CONDITIONAL([HAVE_NVDEC], [test "${have_nvdec}" != "no"])
......@@ -2216,6 +2270,16 @@ AS_IF([test "$enable_amf_enhancer" != "no"], [
])
AM_CONDITIONAL([HAVE_AMF_ENHANCER], [test "${have_amf_enhancer}" != "no"])
AC_ARG_ENABLE([amf-frc], AS_HELP_STRING([--disable-amf-frc],
[disable AMD FRC (default auto)]))
have_amf_frc="no"
AS_IF([test "$enable_amf_frc" != "no"], [
AC_CHECK_HEADERS([AMF/core/PropertyStorage.h AMF/components/FRC.h], [
have_amf_frc="yes"
])
])
AM_CONDITIONAL([HAVE_AMF_FRC], [test "${have_amf_frc}" != "no"])
dnl
dnl special access module for Blackmagic SDI cards
dnl
......@@ -2717,7 +2781,7 @@ AM_CONDITIONAL([HAVE_AVCODEC_D3D11VA], [test "${have_avcodec_d3d11va}" = "yes"])
dnl
dnl DXGI debug
dnl
AC_CHECK_HEADERS([dxgidebug.h dxgi1_6.h d3d11_4.h])
AC_CHECK_HEADERS([dxgidebug.h])
dnl
dnl IStorageFolder
......@@ -2749,19 +2813,6 @@ __x_ABI_CWindows_CStorage_CIApplicationData2 *toto;
AM_CONDITIONAL([HAVE_WINDOWS_STORAGE], [test "${have_iapplication_data2}" = "yes"])
dnl
dnl DirectComposition
dnl
AC_LANG_PUSH([C++])
AC_CHECK_HEADERS([dcomp.h], [
have_dcomp="yes"
], [], [
#include <windows.h>
])
AC_LANG_POP([C++])
AM_CONDITIONAL([HAVE_DCOMP], [test "${have_dcomp}" = "yes"])
dnl
dnl avformat demuxer/muxer plugin
dnl
......@@ -2904,56 +2955,11 @@ dnl fdk-aac encoder plugin
dnl
PKG_ENABLE_MODULES_VLC([FDKAAC], [], [fdk-aac], [FDK-AAC encoder], [disabled])
dnl
dnl A52/AC3 decoder plugin
dnl
AC_ARG_ENABLE([a52],
AS_HELP_STRING([--enable-a52], [A/52 support with liba52 (default enabled)]))
if test "${enable_a52}" != "no"
then
AC_ARG_WITH([a52],
AS_HELP_STRING([--with-a52=PATH], [a52 headers and libraries]))
if test -z "${with_a52}"
then
LDFLAGS_test=""
CPPFLAGS_test=""
else
LDFLAGS_test="-L${with_a52}/lib"
CPPFLAGS_test="-I${with_a52}/include"
fi
VLC_SAVE_FLAGS
CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_test} ${CPPFLAGS_a52}"
LDFLAGS="${LDFLAGS} ${LDFLAGS_test} ${LIBS_a52}"
AC_CHECK_HEADERS([a52dec/a52.h], [
AC_CHECK_LIB([a52], [a52_free], [
VLC_ADD_PLUGIN([a52])
VLC_ADD_LIBS([a52],[${LDFLAGS_test} -la52 $LIBM])
VLC_ADD_CPPFLAGS([a52],[${CPPFLAGS_test}])
],[
AC_MSG_ERROR([Could not find liba52 on your system: you may get it from http://liba52.sf.net/. Alternatively you can use --disable-a52 to disable the a52 plugin.])
], [$LIBM])
],[
AC_MSG_ERROR([Could not find liba52 on your system: you may get it from http://liba52.sf.net/. Alternatively you can use --disable-a52 to disable the a52 plugin.])
])
VLC_RESTORE_FLAGS
fi
dnl
dnl DTS Coherent Acoustics decoder plugin
dnl
PKG_ENABLE_MODULES_VLC([DCA], [dca], [libdca >= 0.0.5], [DTS Coherent Acoustics support with libdca], [auto])
dnl
dnl Flac plugin
dnl
PKG_ENABLE_MODULES_VLC([FLAC], [], [flac], [libflac decoder/encoder support], [auto])
dnl
dnl Libmpeg2 plugin
dnl
PKG_ENABLE_MODULES_VLC([LIBMPEG2], [], [libmpeg2 > 0.3.2], [libmpeg2 decoder support], [auto])
dnl
dnl Vorbis plugin
dnl
......@@ -3125,9 +3131,9 @@ fi
dnl
dnl Intel QuickSync (aka MediaSDK) H264/H262 encoder
dnl Intel Video Processing Library
dnl
PKG_ENABLE_MODULES_VLC([MFX], [qsv], [libmfx], [Intel QuickSync MPEG4-Part10/MPEG2 (aka H.264/H.262) encoder], [auto])
PKG_ENABLE_MODULES_VLC([VPL], [qsv], [vpl], [Intel Video Processing Library encoder], [auto])
dnl
......@@ -3147,7 +3153,7 @@ dnl
dnl Teletext Modules
dnl vbi decoder plugin (using libzbvi)
dnl telx module
dnl uncompatible
dnl incompatible
dnl
AC_ARG_ENABLE([zvbi],
AS_HELP_STRING([--enable-zvbi],[VBI (inc. Teletext) decoding support with
......@@ -3311,9 +3317,6 @@ PKG_CHECK_MODULES([GL], [gl], [
AC_MSG_RESULT([${have_gl}])
])
AM_CONDITIONAL([HAVE_GL], [test "${have_gl}" = "yes"])
AS_IF([test "${have_gl}" = "yes"], [
AC_DEFINE([HAVE_GL], 1, [Defined if having OpenGL])
])
dnl OpenGL ES 2: depends on EGL 1.1
PKG_HAVE_WITH_MODULES([GLES2], [glesv2], [enable GLES2 support (default auto)])
......@@ -3327,7 +3330,6 @@ AC_ARG_ENABLE(vulkan,
AS_IF([test "$enable_vulkan" != "no"], [
PKG_CHECK_MODULES([VULKAN], [vulkan >= 1.0.26], [
AC_DEFINE([HAVE_VULKAN], [1], [Define to 1 if vulkan is enabled.])
], [
AS_IF([test -n "${enable_vulkan}"], [
AC_MSG_ERROR([${VULKAN_PKG_ERRORS}.])
......@@ -3731,6 +3733,28 @@ dnl
EXTEND_HELP_STRING([Audio plugins:])
dnl
dnl Pipewire module
dnl
AC_ARG_ENABLE([pipewire],
AS_HELP_STRING([--enable-pipewire],
[use the PipeWire client library (default auto)]))
have_pipewire="no"
AS_IF([test "${enable_pipewire}" != "no"], [
for v in "0.3 >= 0.3.64" # list of supported package versions
do
AS_IF([test "${have_pipewire}" = "no"], [
PKG_CHECK_MODULES([PIPEWIRE], [libpipewire-${v}], [
have_pipewire="yes"
], [true])
])
done
AS_IF([test "${enable_pipewire}" = "yes" -a "${have_pipewire}" = "no"], [
AC_MSG_ERROR([$PIPEWIRE_PKG_ERRORS. Pipewire required.])
])
])
AM_CONDITIONAL([HAVE_PIPEWIRE], [test "${have_pipewire}" = "yes"])
dnl
dnl Pulseaudio module
dnl
......@@ -3930,10 +3954,22 @@ AS_IF([test -n "$PKG_CONFIG"],[
AC_PATH_PROGS(PROTOC, [protoc], no, ["${CONTRIB_DIR}/../bin:$PATH"])
AS_IF([test "${PROTOC}" != "no"], [
dnl silently checks the protoc version matches the protobuf library
PROTOBUF_VERSION="$(eval ${PROTOC} --version 2>/dev/null | head -1 | sed s/'.* '// | cut -d '.' -f -2)"
protoc_ver_next="${PROTOBUF_VERSION%.*}.$((${PROTOBUF_VERSION##*.}+1))"
PROTOC_FULL_VERSION="$(eval ${PROTOC} --version 2>/dev/null | head -1 | sed s/'.* '//)"
PROTOC_MAJ_VERSION="$(echo ${PROTOC_FULL_VERSION} | cut -d '.' -f -1)"
AS_IF([test "${PROTOC_MAJ_VERSION}" -lt "22" ], [
dnl protoc x.y.z is compatible with protobuf x.y.z
PROTOBUF_VERSION="$(echo ${PROTOC_FULL_VERSION} | cut -d '.' -f -3)"
dnl the protoc version is in the x.y.z format but protobuf version is in the x.y.z.r format
PROTOBUF_MAX_VERSION="${PROTOBUF_VERSION%.*}.$((${PROTOBUF_VERSION##*.}+1))"
PROTOBUF_TEST="protobuf-lite >= ${PROTOBUF_VERSION} protobuf-lite < ${PROTOBUF_MAX_VERSION}"
],[
dnl protoc x.y is compatible with protobuf x.y.*
PROTOBUF_VERSION="$(echo ${PROTOC_FULL_VERSION} | cut -d '.' -f -2)"
PROTOBUF_MAX_VERSION="${PROTOBUF_VERSION%.*}.$((${PROTOBUF_VERSION##*.}+1))"
PROTOBUF_TEST="protobuf-lite >= ${PROTOBUF_VERSION} protobuf-lite < ${PROTOBUF_MAX_VERSION}"
])
AC_MSG_CHECKING([protobuf-lite matches ${PROTOC} version ${PROTOBUF_VERSION}])
($PKG_CONFIG --exists --print-errors "protobuf-lite >= ${PROTOBUF_VERSION} protobuf-lite < ${protoc_ver_next}") 2>&AS_MESSAGE_FD
($PKG_CONFIG --exists --print-errors "${PROTOBUF_TEST}") 2>&AS_MESSAGE_FD
ac_status=$?
AS_IF([test $ac_status = 0],[
protoc_matching=yes
......@@ -3976,13 +4012,15 @@ AC_ARG_ENABLE([qt],
])
])
have_qt_gtk="no"
have_qt_qtest="no"
have_qt_quick_test="no"
have_qt_declarative_private="no"
have_qt_gui_private="no"
have_qt_core_private="no"
have_qt65="no"
have_qt_zstd="no"
have_fxc="no"
AS_IF([test "${enable_qt}" != "no"], [
have_qt="yes"
dnl use any qmake that is available, including from contrib tools
AC_PATH_PROGS(QMAKE6, [qmake6], qmake6, ["$PATH:${CONTRIB_DIR}/../bin"])
AC_ARG_WITH([qtconf],
......@@ -3998,6 +4036,21 @@ AS_IF([test "${enable_qt}" != "no"], [
])
])
AS_IF([test -z "${QMAKE6}"], [
have_qt="no"
],[
AS_IF([test -n "${with_qtconf}"], [
QT_BIN_DIRECTORY="$(${QMAKE6} -qtconf ${with_qtconf} -query QT_HOST_BINS 2>/dev/null)"
AC_MSG_CHECKING([if qmake6 is found with qtconf])
AS_IF([test -n "${QT_BIN_DIRECTORY}" -a -x "${QT_BIN_DIRECTORY}/qmake6"], [
QMAKE6="${QT_BIN_DIRECTORY}/qmake6"
AC_MSG_RESULT([yes])
],[
AC_MSG_RESULT([no])
])
])
])
QT_PATHS=${QMAKE6}
AS_IF([test -n "${with_qtconf}"], [
QT_PATHS="${QMAKE6} -qtconf ${with_qtconf}"
......@@ -4010,40 +4063,47 @@ AS_IF([test "${enable_qt}" != "no"], [
QT_MINIMUM_MIN=$(echo ${QT_MINIMUM_VERSION} | cut -d "." -f 2-2)
QT_VERSION_MAJ=$(echo ${QT_VERSION_CORE} | cut -d "." -f -1)
QT_VERSION_MIN=$(echo ${QT_VERSION_CORE} | cut -d "." -f 2-2)
AS_IF([ test "${QT_VERSION_MAJ}" -lt "${QT_MINIMUM_MAJ}" || (test "${QT_VERSION_MAJ}" = "${QT_MINIMUM_MAJ}" && test "${QT_VERSION_MIN}" -lt "${QT_MINIMUM_MIN}") ], [
AS_IF([test "${QT_VERSION_MAJ:-0}" -lt "${QT_MINIMUM_MAJ}" || (test "${QT_VERSION_MAJ:-0}" = "${QT_MINIMUM_MAJ}" && test "${QT_VERSION_MIN:-0}" -lt "${QT_MINIMUM_MIN}") ], [
AC_MSG_RESULT([(${QT_VERSION_CORE}) no])
have_qt="no"
],[
AC_MSG_RESULT([(${QT_VERSION_CORE}) yes])
AS_IF([test "${QT_VERSION_MAJ:-0}" -gt "6" || (test "${QT_VERSION_MAJ:-0}" = "6" && test "${QT_VERSION_MIN:-0}" -ge "5")], [
have_qt65="yes"
], [])
QT_BIN_DIRECTORY="$(${QT_PATHS} -query QT_HOST_BINS 2>/dev/null)"
QMAKE="${QT_PATHS}"
AC_MSG_NOTICE([using ${QMAKE}])
AC_MSG_NOTICE([using ${QT_PATHS}])
AC_CHECK_PROGS(PYTHON3, [python3], [no])
AS_IF([test "$PYTHON3" == "no"], [
AC_MSG_WARN([python is required to detect Qt libraries/flags])
have_qt="no"
],[
AC_MSG_CHECKING([for Qt libraries])
mkdir -p ${ac_pwd}/modules/gui/qt
touch ${ac_pwd}/modules/gui/qt/.qmake.stash
QT_PKG_ERRORS=$(${QMAKE} ${srcdir}/modules/gui/qt/qt6.pro -o ${ac_pwd}/modules/gui/qt/qmake-qt 2>&1)
srcdir_abs=`(cd ${srcdir} && pwd -P)`
QT_PKG_ERRORS=$(${PYTHON3} ${srcdir}/modules/gui/qt/scripts/static_dirs.py \
--qmake "${QMAKE6}" --qtconf "${with_qtconf}" \
--pro ${srcdir_abs}/modules/gui/qt/qt6.pro \
--builddir ${ac_pwd}/modules/gui/qt \
--libs)
ac_status=$?
AS_IF([test $ac_status = 0 && test -f ${ac_pwd}/modules/gui/qt/qmake-qt],[
echo "get_cflags:" > ${ac_pwd}/modules/gui/qt/qmake-common.mk
echo ' $(info $(DEFINES) $(INCPATH))' >> ${ac_pwd}/modules/gui/qt/qmake-common.mk
echo "get_libs:" >> ${ac_pwd}/modules/gui/qt/qmake-common.mk
dnl transform /foo/bar/libbaz.so arguments to -L/foo/bar -lbaz
dnl RS: each arguments (space separated) are treated as a new line
dnl FS: split fields using /[^/]* to extract the file basepath ($1)
dnl /lib.*\.so/ lines (arguments) will add -Lxxx if this is not the current path (p), then transform into a -lxxx argument
dnl other arguments are kept as-is
echo ' echo $(LIBS) | awk '\''BEGIN{FS="/[[^/]]*$$";RS=" ";ORS=" "}{if($$0 ~ /\/lib.*\.so/){ if(p != $$1){ print "-L" $$1; p=$$1}; sub(/.*\/lib/, "-l"); sub(/\.so.*/, "")}; print $$0}'\' >> ${ac_pwd}/modules/gui/qt/qmake-common.mk
echo 'get_ldflags:' >> ${ac_pwd}/modules/gui/qt/qmake-common.mk
echo ' echo $(LFLAGS)' >> ${ac_pwd}/modules/gui/qt/qmake-common.mk
echo "include ${ac_pwd}/modules/gui/qt/qmake-common.mk" >> ${ac_pwd}/modules/gui/qt/qmake-qt
AS_IF([test $ac_status = 0],[
AC_MSG_RESULT([yes])
QT_LIBS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-qt get_libs)
QT_CFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-qt get_cflags)
QT_LDFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-qt get_ldflags)
QT_LIBS=${QT_PKG_ERRORS}
QT_CFLAGS=$(${PYTHON3} ${srcdir}/modules/gui/qt/scripts/static_dirs.py \
--qmake "${QMAKE6}" --qtconf "${with_qtconf}" \
--pro ${srcdir_abs}/modules/gui/qt/qt6.pro \
--builddir ${ac_pwd}/modules/gui/qt \
--cflags)
QT_LDFLAGS=$(${PYTHON3} ${srcdir}/modules/gui/qt/scripts/static_dirs.py \
--qmake "${QMAKE6}" --qtconf "${with_qtconf}" \
--pro ${srcdir_abs}/modules/gui/qt/qt6.pro \
--builddir ${ac_pwd}/modules/gui/qt \
--ldflags)
AC_SUBST([QT_LIBS])
AC_SUBST([QT_CFLAGS])
AC_SUBST([QT_LDFLAGS])
......@@ -4062,9 +4122,14 @@ AS_IF([test "${enable_qt}" != "no"], [
AC_MSG_WARN([qmlcachegen not found])
])
AC_CHECK_PROGS(PYTHON3, [python3], [no])
AC_MSG_CHECKING([if required Qt plugins are installed with ${QMAKE6} and conf ${with_qtconf}])
AS_IF([test "$PYTHON3" != "no" && ${PYTHON3} ${srcdir}/buildsystem/check_qml_module.py \
AS_IF([test "${have_qt65}" = "yes"], [
qt_qml_effects_module="QtQuick.Effects"
], [
qt_qml_effects_module="Qt5Compat.GraphicalEffects"
])
AS_IF([${PYTHON3} ${srcdir}/buildsystem/check_qml_module.py \
--qmake "${QMAKE6}" \
--qtconf "${with_qtconf}" \
--modules \
......@@ -4073,7 +4138,7 @@ AS_IF([test "${enable_qt}" != "no"], [
QtQuick.Layouts="" \
QtQuick.Window="" \
QtQuick.Controls="" \
Qt5Compat.GraphicalEffects="" \
${qt_qml_effects_module}="" \
>&AS_MESSAGE_FD ], [
AC_MSG_RESULT([yes])
],[
......@@ -4082,20 +4147,75 @@ AS_IF([test "${enable_qt}" != "no"], [
have_qt="no"
])
AC_MSG_CHECKING([if Qt can decompress zstd])
VLC_SAVE_FLAGS
CPPFLAGS="${CPPFLAGS} ${QT_CFLAGS}"
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include <qconfig.h>]],[[
#if QT_FEATURE_zstd != 1
#error "Qt can not decompress zstd. Resources are going to be compressed using zlib."
#endif
]])], [
have_qt_zstd="yes"
AC_MSG_RESULT([yes])
],[
AC_MSG_RESULT([no])
])
VLC_RESTORE_FLAGS
AC_MSG_CHECKING([for Qt QTest])
_QT_QTEST_LIBS=$(${PYTHON3} ${srcdir}/modules/gui/qt/scripts/static_dirs.py \
--qmake "${QMAKE6}" --qtconf "${with_qtconf}" \
--pro ${srcdir_abs}/modules/gui/qt/qtest.pro \
--builddir ${ac_pwd}/modules/gui/qt \
--libs) 2>/dev/null
ac_status=$?
AS_IF([test $ac_status = 0],[
AC_MSG_RESULT([yes])
QT_QTEST_LIBS=${_QT_QTEST_LIBS}
QT_QTEST_CFLAGS=$(${PYTHON3} ${srcdir}/modules/gui/qt/scripts/static_dirs.py \
--qmake "${QMAKE6}" --qtconf "${with_qtconf}" \
--pro ${srcdir_abs}/modules/gui/qt/qtest.pro \
--builddir ${ac_pwd}/modules/gui/qt \
--cflags)
QT_QTEST_LDFLAGS=$(${PYTHON3} ${srcdir}/modules/gui/qt/scripts/static_dirs.py \
--qmake "${QMAKE6}" --qtconf "${with_qtconf}" \
--pro ${srcdir_abs}/modules/gui/qt/qtest.pro \
--builddir ${ac_pwd}/modules/gui/qt \
--ldflags)
AC_SUBST([QT_QTEST_LIBS])
AC_SUBST([QT_QTEST_CFLAGS])
AC_SUBST([QT_QTEST_LDFLAGS])
have_qt_qtest="yes"
],[
AC_MSG_RESULT([no])
])
AC_MSG_CHECKING([for QuickTest])
(${QMAKE} ${srcdir}/modules/gui/qt/quicktest.pro -o ${ac_pwd}/modules/gui/qt/qmake-quicktest) 2>/dev/null
_QT_QUICK_TEST_LIBS=$(${PYTHON3} ${srcdir}/modules/gui/qt/scripts/static_dirs.py \
--qmake "${QMAKE6}" --qtconf "${with_qtconf}" \
--pro ${srcdir_abs}/modules/gui/qt/quicktest.pro \
--builddir ${ac_pwd}/modules/gui/qt \
--libs) 2>/dev/null
ac_status=$?
AS_IF([test $ac_status = 0 && test -f ${ac_pwd}/modules/gui/qt/qmake-quicktest],[
AS_IF([test "$PYTHON3" != "no" && ${PYTHON3} ${srcdir}/buildsystem/check_qml_module.py \
AS_IF([test $ac_status = 0],[
AS_IF([${PYTHON3} ${srcdir}/buildsystem/check_qml_module.py \
--qmake "${QMAKE6}" \
--qtconf "${with_qtconf}" \
--modules QtTest="" \
>&AS_MESSAGE_FD ], [
echo "include ${ac_pwd}/modules/gui/qt/qmake-common.mk" >> ${ac_pwd}/modules/gui/qt/qmake-quicktest
AC_MSG_RESULT([yes])
QT_QUICK_TEST_LIBS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-quicktest get_libs)
QT_QUICK_TEST_CFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-quicktest get_cflags)
QT_QUICK_TEST_LDFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-quicktest get_ldflags)
QT_QUICK_TEST_LIBS=${_QT_QUICK_TEST_LIBS}
QT_QUICK_TEST_CFLAGS=$(${PYTHON3} ${srcdir}/modules/gui/qt/scripts/static_dirs.py \
--qmake "${QMAKE6}" --qtconf "${with_qtconf}" \
--pro ${srcdir_abs}/modules/gui/qt/quicktest.pro \
--builddir ${ac_pwd}/modules/gui/qt \
--cflags)
QT_QUICK_TEST_LDFLAGS=$(${PYTHON3} ${srcdir}/modules/gui/qt/scripts/static_dirs.py \
--qmake "${QMAKE6}" --qtconf "${with_qtconf}" \
--pro ${srcdir_abs}/modules/gui/qt/quicktest.pro \
--builddir ${ac_pwd}/modules/gui/qt \
--ldflags)
AC_SUBST([QT_QUICK_TEST_LIBS])
AC_SUBST([QT_QUICK_TEST_CFLAGS])
AC_SUBST([QT_QUICK_TEST_LDFLAGS])
......@@ -4106,7 +4226,6 @@ AS_IF([test "${enable_qt}" != "no"], [
],[
AC_MSG_RESULT([no])
])
rm -f ${ac_pwd}/modules/gui/qt/qmake-quicktest
AC_PATH_PROGS(FXC, [fxc], [no], [${CONTRIB_DIR}/bin])
AS_IF([test "$FXC" != "no"],[
......@@ -4115,60 +4234,16 @@ AS_IF([test "${enable_qt}" != "no"], [
AC_SUBST([FXC_PATH])
])
AC_MSG_CHECKING([for Qt Core private])
(${QMAKE} ${srcdir}/modules/gui/qt/private-core.pro -o ${ac_pwd}/modules/gui/qt/qmake-private-core) 2>/dev/null
ac_status=$?
AS_IF([test $ac_status = 0 && test -f ${ac_pwd}/modules/gui/qt/qmake-private-core],[
echo "include ${ac_pwd}/modules/gui/qt/qmake-common.mk" >> ${ac_pwd}/modules/gui/qt/qmake-private-core
AC_MSG_RESULT([yes])
QT_CORE_PRIVATE_LIBS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-private-core get_libs)
QT_CORE_PRIVATE_CFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-private-core get_cflags)
QT_CORE_PRIVATE_LDFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-private-core get_cflags)
AC_SUBST([QT_CORE_PRIVATE_LIBS])
AC_SUBST([QT_CORE_PRIVATE_CFLAGS])
AC_SUBST([QT_CORE_PRIVATE_LDFLAGS])
have_qt_core_private="yes"
],[
AC_MSG_RESULT([no])
])
rm -f ${ac_pwd}/modules/gui/qt/qmake-private-core
AC_MSG_CHECKING([for Qt GUI private])
(${QMAKE} ${srcdir}/modules/gui/qt/private-gui.pro -o ${ac_pwd}/modules/gui/qt/qmake-private-gui) 2>/dev/null
ac_status=$?
AS_IF([test $ac_status = 0 && test -f ${ac_pwd}/modules/gui/qt/qmake-private-gui],[
echo "include ${ac_pwd}/modules/gui/qt/qmake-common.mk" >> ${ac_pwd}/modules/gui/qt/qmake-private-gui
AC_MSG_RESULT([yes])
QT_GUI_PRIVATE_LIBS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-private-gui get_libs)
QT_GUI_PRIVATE_CFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-private-gui get_cflags)
QT_GUI_PRIVATE_LDFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-private-gui get_ldflags)
AC_SUBST([QT_GUI_PRIVATE_LIBS])
AC_SUBST([QT_GUI_PRIVATE_CFLAGS])
AC_SUBST([QT_GUI_PRIVATE_LDFLAGS])
have_qt_gui_private="yes"
],[
AC_MSG_RESULT([no])
])
rm -f ${ac_pwd}/modules/gui/qt/qmake-private-gui
AC_MSG_CHECKING([for Qt Quick private])
(${QMAKE} ${srcdir}/modules/gui/qt/private-quick.pro -o ${ac_pwd}/modules/gui/qt/qmake-private-quick) 2>/dev/null
ac_status=$?
AS_IF([test $ac_status = 0 && test -f ${ac_pwd}/modules/gui/qt/qmake-private-quick],[
echo "include ${ac_pwd}/modules/gui/qt/qmake-common.mk" >> ${ac_pwd}/modules/gui/qt/qmake-private-quick
AC_MSG_RESULT([yes])
QT_QUICK_PRIVATE_LIBS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-private-quick get_libs)
QT_QUICK_PRIVATE_CFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-private-quick get_cflags)
QT_QUICK_PRIVATE_LDFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-private-quick get_ldflags)
AC_SUBST([QT_QUICK_PRIVATE_LIBS])
AC_SUBST([QT_QUICK_PRIVATE_CFLAGS])
AC_SUBST([QT_QUICK_PRIVATE_LDFLAGS])
have_qt_declarative_private="yes"
],[
AC_MSG_RESULT([no])
])
rm -f ${ac_pwd}/modules/gui/qt/qmake-private-quick
case $QT_CFLAGS in
*-DQT_GUI_PRIVATE\ *)
AC_MSG_RESULT([yes])
have_qt_gui_private="yes"
;;
*)
AC_MSG_RESULT([no])
;;
esac
dnl gtk theme provider
PKG_CHECK_MODULES([GTK3], [gtk+-3.0 >= 3.20], [
......@@ -4179,9 +4254,8 @@ AS_IF([test "${enable_qt}" != "no"], [
have_qt="no"
])
])
rm -f ${ac_pwd}/modules/gui/qt/qmake-common.mk
rm -f ${ac_pwd}/modules/gui/qt/qmake-qt
rm -f ${ac_pwd}/modules/gui/qt/.qmake.stash
])
AS_IF([test "${have_qt}" = "no"],[
AS_IF([test -n "${enable_qt}"],[
AC_MSG_ERROR([${QT_PKG_ERRORS}. If you want to build VLC without GUI, pass --disable-qt.])
......@@ -4207,12 +4281,13 @@ AS_IF([test "${enable_qt}" != "no"], [
AC_SUBST([QT_INDIRECT_LIBS])
AM_CONDITIONAL([ENABLE_QT], [test "$enable_qt" != "no"])
AM_CONDITIONAL([HAVE_QT_GTK], [test "${have_qt_gtk}" = "yes"])
AM_CONDITIONAL([HAVE_QT_QTEST], [test "${have_qt_qtest}" = "yes"])
AM_CONDITIONAL([HAVE_QT_QUICK_TEST], [test "${have_qt_quick_test}" = "yes"])
AM_CONDITIONAL([HAVE_QT_DECLARATIVE_PRIVATE], [test "${have_qt_declarative_private}" = "yes"])
AM_CONDITIONAL([HAVE_QT_GUI_PRIVATE], [test "${have_qt_gui_private}" = "yes"])
AM_CONDITIONAL([HAVE_QT_CORE_PRIVATE], [test "${have_qt_core_private}" = "yes"])
AM_CONDITIONAL([HAVE_FXC], [test "${have_fxc}" = "yes"])
AM_CONDITIONAL([HAVE_QT67], [test "${QT_VERSION_MAJ}" -gt "6" || (test "${QT_VERSION_MAJ}" = "6" && test "${QT_VERSION_MIN}" -ge "7")])
AM_CONDITIONAL([HAVE_QT67], [test "${QT_VERSION_MAJ:-0}" -gt "6" || (test "${QT_VERSION_MAJ:-0}" = "6" && test "${QT_VERSION_MIN:-0}" -ge "7")])
AM_CONDITIONAL([HAVE_QT65], [test "${have_qt65}" = "yes"])
AM_CONDITIONAL([HAVE_QT_ZSTD], [test "${have_qt_zstd}" = "yes"])
dnl
dnl detect kde4-config patch (used for kde solids).
......@@ -4722,14 +4797,6 @@ AS_IF([test "${SYS}" = "mingw32"], [
])
AM_CONDITIONAL([HAVE_MAKENSIS], [test "$MAKENSIS" != "no" && test "$nsis_version_ok" = "yes"])
dnl
dnl Check wether we have the PROCESS_MITIGATION_IMAGE_LOAD_POLICY
dnl It should only be available when building for win10, but some SDKs define it unconditionnaly
dnl
if test "${SYS}" = "mingw32"; then
AC_CHECK_TYPES([PROCESS_MITIGATION_IMAGE_LOAD_POLICY],,,[#include <windows.h>])
fi
EXTEND_HELP_STRING([Components:])
dnl
......@@ -4737,7 +4804,7 @@ dnl the VLC binary
dnl
AC_ARG_ENABLE([vlc],
AS_HELP_STRING([--enable-vlc], [build the VLC media player (default enabled)]))
AM_CONDITIONAL([BUILD_VLC], [test "${enable_vlc}" != "no"])
AM_CONDITIONAL([BUILD_VLC], [test "${enable_vlc}" != "no" -a "$vlc_winstore_app" = "0"])
dnl
dnl Fuzzer (at the end not to mess dependencies FLAGS)
......@@ -4835,7 +4902,7 @@ AC_CONFIG_FILES([
lib/Makefile
bin/Makefile
test/Makefile
share/vlc.appdata.xml.in
share/org.videolan.vlc.appdata.xml.in
])
AM_COND_IF([HAVE_WIN32], [
......
......@@ -3,6 +3,11 @@ include
lib
libexec
share
doc
metatypes
mkspecs
modules
plugins
python-venv
vlc-contrib-*.tar.xz
vlc-contrib-*.tar.bz2
......