mirror of
https://github.com/encounter/rust-ffmpeg-zmwangx.git
synced 2026-07-10 21:18:40 -07:00
crate: fix up feature recognition and upstream setting
This commit is contained in:
+104
-100
@@ -237,121 +237,125 @@ fn feature(header: &str, feature: Option<&str>, var: &str) -> io::Result<()> {
|
||||
}}
|
||||
"#, header, var));
|
||||
|
||||
if Command::new("cc").current_dir(&output()).arg("-o").arg("check").arg("check.c").status().is_err() {
|
||||
if Command::new("cc").current_dir(&output())
|
||||
.arg("-I").arg(search().join("dist").join("include").to_string_lossy().into_owned())
|
||||
.arg("-o").arg("check")
|
||||
.arg("check.c")
|
||||
.status().is_err()
|
||||
{
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if try!(Command::new("./check").current_dir(&output()).output()).stdout[0] == b'1' {
|
||||
println!(r#"cargo:rustc-cfg=feature="{}""#, var.to_lowercase());
|
||||
println!(r#"cargo:{}=true"#, var.to_lowercase());
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() {
|
||||
if env::var("CARGO_FEATURE_BUILD").is_err() {
|
||||
feature("libavutil/avutil.h", None, "FF_API_OLD_AVOPTIONS").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_PIX_FMT").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_CONTEXT_SIZE").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_PIX_FMT_DESC").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_AV_REVERSE").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_AUDIOCONVERT").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_CPU_FLAG_MMX2").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_LLS_PRIVATE").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_AVFRAME_LAVC").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_VDPAU").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_GET_CHANNEL_LAYOUT_COMPAT").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_XVMC").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_OPT_TYPE_METADATA").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_DLOG").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_HMAC").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_VAAPI").unwrap();
|
||||
if env::var("CARGO_FEATURE_BUILD").is_ok() {
|
||||
println!("cargo:rustc-link-search=native={}", search().join("lib").to_string_lossy());
|
||||
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_VIMA_DECODER").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_REQUEST_CHANNELS").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_OLD_DECODE_AUDIO").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_OLD_ENCODE_AUDIO").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_OLD_ENCODE_VIDEO").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_CODEC_ID").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AUDIO_CONVERT").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AVCODEC_RESAMPLE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_DEINTERLACE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_DESTRUCT_PACKET").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_GET_BUFFER").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MISSING_SAMPLE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_LOWRES").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_CAP_VDPAU").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_BUFS_VDPAU").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_VOXWARE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_SET_DIMENSIONS").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_DEBUG_MV").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AC_VLC").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_OLD_MSMPEG4").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_ASPECT_EXTENDED").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_THREAD_OPAQUE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_CODEC_PKT").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_ARCH_ALPHA").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_XVMC").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_ERROR_RATE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_QSCALE_TYPE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MB_TYPE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MAX_BFRAMES").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_NEG_LINESIZES").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_EMU_EDGE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_ARCH_SH4").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_ARCH_SPARC").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_UNUSED_MEMBERS").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_IDCT_XVIDMMX").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_INPUT_PRESERVED").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_NORMALIZE_AQP").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_GMC").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MV0").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_CODEC_NAME").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AFD").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_VISMV").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_DV_FRAME_PROFILE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AUDIOENC_DELAY").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_VAAPI_CONTEXT").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AVCTX_TIMEBASE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MPV_OPT").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_STREAM_CODEC_TAG").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_QUANT_BIAS").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_RC_STRATEGY").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_CODED_FRAME").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MOTION_EST").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_WITHOUT_PREFIX").unwrap();
|
||||
if fs::metadata(&search().join("lib").join("libavutil.a")).is_ok() {
|
||||
return;
|
||||
}
|
||||
|
||||
feature("libavformat/avformat.h", Some("avformat"), "FF_API_LAVF_BITEXACT").unwrap();
|
||||
feature("libavformat/avformat.h", Some("avformat"), "FF_API_LAVF_FRAC").unwrap();
|
||||
feature("libavformat/avformat.h", Some("avformat"), "FF_API_URL_FEOF").unwrap();
|
||||
feature("libavformat/avformat.h", Some("avformat"), "FF_API_PROBESIZE_32").unwrap();
|
||||
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_AVFILTERPAD_PUBLIC").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_FOO_COUNT").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_AVFILTERBUFFER").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_OLD_FILTER_OPTS").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_OLD_FILTER_OPTS_ERROR").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_AVFILTER_OPEN").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_OLD_FILTER_REGISTER").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_OLD_GRAPH_PARSE").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_NOCONST_GET_NAME").unwrap();
|
||||
|
||||
feature("libavresample/avresample.h", Some("avresample"), "FF_API_RESAMPLE_CLOSE_OPEN").unwrap();
|
||||
|
||||
feature("libswscale/swscale.h", Some("swscale"), "FF_API_SWS_CPU_CAPS").unwrap();
|
||||
feature("libswscale/swscale.h", Some("swscale"), "FF_API_ARCH_BFIN").unwrap();
|
||||
|
||||
return;
|
||||
fs::create_dir_all(&output()).ok().expect("failed to create build directory");
|
||||
fetch().unwrap();
|
||||
extract().unwrap();
|
||||
build().unwrap();
|
||||
}
|
||||
|
||||
println!("cargo:rustc-link-search=native={}", search().join("lib").to_string_lossy());
|
||||
feature("libavutil/avutil.h", None, "FF_API_OLD_AVOPTIONS").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_PIX_FMT").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_CONTEXT_SIZE").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_PIX_FMT_DESC").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_AV_REVERSE").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_AUDIOCONVERT").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_CPU_FLAG_MMX2").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_LLS_PRIVATE").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_AVFRAME_LAVC").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_VDPAU").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_GET_CHANNEL_LAYOUT_COMPAT").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_XVMC").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_OPT_TYPE_METADATA").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_DLOG").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_HMAC").unwrap();
|
||||
feature("libavutil/avutil.h", None, "FF_API_VAAPI").unwrap();
|
||||
|
||||
if fs::metadata(&search().join("lib").join("libavutil.a")).is_ok() {
|
||||
return;
|
||||
}
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_VIMA_DECODER").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_REQUEST_CHANNELS").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_OLD_DECODE_AUDIO").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_OLD_ENCODE_AUDIO").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_OLD_ENCODE_VIDEO").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_CODEC_ID").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AUDIO_CONVERT").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AVCODEC_RESAMPLE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_DEINTERLACE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_DESTRUCT_PACKET").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_GET_BUFFER").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MISSING_SAMPLE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_LOWRES").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_CAP_VDPAU").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_BUFS_VDPAU").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_VOXWARE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_SET_DIMENSIONS").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_DEBUG_MV").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AC_VLC").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_OLD_MSMPEG4").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_ASPECT_EXTENDED").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_THREAD_OPAQUE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_CODEC_PKT").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_ARCH_ALPHA").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_XVMC").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_ERROR_RATE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_QSCALE_TYPE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MB_TYPE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MAX_BFRAMES").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_NEG_LINESIZES").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_EMU_EDGE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_ARCH_SH4").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_ARCH_SPARC").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_UNUSED_MEMBERS").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_IDCT_XVIDMMX").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_INPUT_PRESERVED").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_NORMALIZE_AQP").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_GMC").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MV0").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_CODEC_NAME").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AFD").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_VISMV").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_DV_FRAME_PROFILE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AUDIOENC_DELAY").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_VAAPI_CONTEXT").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_AVCTX_TIMEBASE").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MPV_OPT").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_STREAM_CODEC_TAG").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_QUANT_BIAS").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_RC_STRATEGY").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_CODED_FRAME").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_MOTION_EST").unwrap();
|
||||
feature("libavcodec/avcodec.h", Some("avcodec"), "FF_API_WITHOUT_PREFIX").unwrap();
|
||||
|
||||
fs::create_dir_all(&output()).ok().expect("failed to create build directory");
|
||||
fetch().unwrap();
|
||||
extract().unwrap();
|
||||
build().unwrap();
|
||||
feature("libavformat/avformat.h", Some("avformat"), "FF_API_LAVF_BITEXACT").unwrap();
|
||||
feature("libavformat/avformat.h", Some("avformat"), "FF_API_LAVF_FRAC").unwrap();
|
||||
feature("libavformat/avformat.h", Some("avformat"), "FF_API_URL_FEOF").unwrap();
|
||||
feature("libavformat/avformat.h", Some("avformat"), "FF_API_PROBESIZE_32").unwrap();
|
||||
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_AVFILTERPAD_PUBLIC").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_FOO_COUNT").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_AVFILTERBUFFER").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_OLD_FILTER_OPTS").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_OLD_FILTER_OPTS_ERROR").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_AVFILTER_OPEN").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_OLD_FILTER_REGISTER").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_OLD_GRAPH_PARSE").unwrap();
|
||||
feature("libavfilter/avfilter.h", Some("avfilter"), "FF_API_NOCONST_GET_NAME").unwrap();
|
||||
|
||||
feature("libavresample/avresample.h", Some("avresample"), "FF_API_RESAMPLE_CLOSE_OPEN").unwrap();
|
||||
|
||||
feature("libswscale/swscale.h", Some("swscale"), "FF_API_SWS_CPU_CAPS").unwrap();
|
||||
feature("libswscale/swscale.h", Some("swscale"), "FF_API_ARCH_BFIN").unwrap();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user