From d999c19a9febfd8efd487fa8dd0c2cc54a3f0d4f Mon Sep 17 00:00:00 2001 From: meh Date: Sat, 20 Jun 2015 19:13:59 +0200 Subject: [PATCH] crate: improve link attributes and allow static linking --- sys/Cargo.toml | 1 + sys/src/avcodec/codec.rs | 1 - sys/src/avcodec/dv_profile.rs | 1 - sys/src/avcodec/fft.rs | 1 - sys/src/avcodec/mod.rs | 4 ++++ sys/src/avcodec/qsv.rs | 1 - sys/src/avcodec/vda.rs | 1 - sys/src/avcodec/vobis_parser.rs | 1 - sys/src/avdevice/device.rs | 1 - sys/src/avdevice/mod.rs | 4 ++++ sys/src/avfilter/buffersink.rs | 1 - sys/src/avfilter/buffersrc.rs | 1 - sys/src/avfilter/filter.rs | 1 - sys/src/avfilter/mod.rs | 4 ++++ sys/src/avformat/format.rs | 1 - sys/src/avformat/io.rs | 1 - sys/src/avformat/mod.rs | 4 ++++ sys/src/avresample/mod.rs | 4 ++++ sys/src/avresample/resample.rs | 1 - sys/src/avutil/adler32.rs | 1 - sys/src/avutil/aes.rs | 1 - sys/src/avutil/audio_fifo.rs | 1 - sys/src/avutil/base64.rs | 1 - sys/src/avutil/blowfish.rs | 1 - sys/src/avutil/bprint.rs | 1 - sys/src/avutil/buffer.rs | 1 - sys/src/avutil/camellia.rs | 1 - sys/src/avutil/cast5.rs | 1 - sys/src/avutil/channel_layout.rs | 1 - sys/src/avutil/cpu.rs | 1 - sys/src/avutil/crc.rs | 1 - sys/src/avutil/dict.rs | 1 - sys/src/avutil/display.rs | 1 - sys/src/avutil/downmix_info.rs | 1 - sys/src/avutil/error.rs | 1 - sys/src/avutil/eval.rs | 1 - sys/src/avutil/fifo.rs | 1 - sys/src/avutil/file.rs | 1 - sys/src/avutil/frame.rs | 1 - sys/src/avutil/hash.rs | 1 - sys/src/avutil/hmac.rs | 1 - sys/src/avutil/imgutils.rs | 1 - sys/src/avutil/lfg.rs | 1 - sys/src/avutil/log.rs | 1 - sys/src/avutil/lzo.rs | 1 - sys/src/avutil/mathematics.rs | 1 - sys/src/avutil/md5.rs | 1 - sys/src/avutil/mem.rs | 1 - sys/src/avutil/mod.rs | 4 ++++ sys/src/avutil/murmur3.rs | 1 - sys/src/avutil/opt.rs | 1 - sys/src/avutil/parseutils.rs | 1 - sys/src/avutil/pixdesc.rs | 1 - sys/src/avutil/random_seed.rs | 1 - sys/src/avutil/rational.rs | 1 - sys/src/avutil/ripemd.rs | 1 - sys/src/avutil/samplefmt.rs | 1 - sys/src/avutil/sha.rs | 1 - sys/src/avutil/sha512.rs | 1 - sys/src/avutil/stereo3d.rs | 1 - sys/src/avutil/string.rs | 1 - sys/src/avutil/threadmessage.rs | 1 - sys/src/avutil/time.rs | 1 - sys/src/avutil/timecode.rs | 1 - sys/src/avutil/twofish.rs | 1 - sys/src/avutil/util.rs | 1 - sys/src/avutil/xtea.rs | 1 - sys/src/postproc/mod.rs | 4 ++++ sys/src/postproc/postproc.rs | 1 - sys/src/swresample/mod.rs | 4 ++++ sys/src/swresample/resample.rs | 1 - sys/src/swscale/mod.rs | 4 ++++ sys/src/swscale/scale.rs | 1 - 73 files changed, 37 insertions(+), 63 deletions(-) diff --git a/sys/Cargo.toml b/sys/Cargo.toml index 0a921ed..5ba528a 100644 --- a/sys/Cargo.toml +++ b/sys/Cargo.toml @@ -15,6 +15,7 @@ libc = "*" [features] default = ["avcodec", "avdevice", "avfilter", "avformat", "avresample", "postproc", "swresample", "swscale"] +static = [] avcodec = [] avdevice = ["avformat"] avfilter = [] diff --git a/sys/src/avcodec/codec.rs b/sys/src/avcodec/codec.rs index 8bcaffe..35438d9 100644 --- a/sys/src/avcodec/codec.rs +++ b/sys/src/avcodec/codec.rs @@ -1315,7 +1315,6 @@ pub enum AVLockOp { AV_LOCK_DESTROY, } -#[link(name = "avcodec")] extern { pub fn av_codec_get_pkt_timebase(avctx: *const AVCodecContext) -> AVRational; pub fn av_codec_set_pkt_timebase(avctx: *mut AVCodecContext, val: AVRational); diff --git a/sys/src/avcodec/dv_profile.rs b/sys/src/avcodec/dv_profile.rs index 14d90ba..088ada7 100644 --- a/sys/src/avcodec/dv_profile.rs +++ b/sys/src/avcodec/dv_profile.rs @@ -25,7 +25,6 @@ pub struct AVDVProfile { pub audio_shuffle: [*const uint8_t; 9], } -#[link(name = "avcodec")] extern { pub fn av_dv_frame_profile(sys: *const AVDVProfile, frame: *const uint8_t, buf_size: c_uint) -> *const AVDVProfile; pub fn av_dv_codec_profile(width: c_int, height: c_int, pix_fmt: AVPixelFormat) -> *const AVDVProfile; diff --git a/sys/src/avcodec/fft.rs b/sys/src/avcodec/fft.rs index f9149f7..5c18fcd 100644 --- a/sys/src/avcodec/fft.rs +++ b/sys/src/avcodec/fft.rs @@ -33,7 +33,6 @@ pub enum DCTTransformType { pub type DCTContext = c_void; -#[link(name = "avcodec")] extern { pub fn av_fft_init(nbits: c_int, inverse: c_int) -> *mut FFTContext; pub fn av_fft_permute(s: *mut FFTContext, z: *mut FFTComplex); diff --git a/sys/src/avcodec/mod.rs b/sys/src/avcodec/mod.rs index 94e2a2c..dbef20b 100644 --- a/sys/src/avcodec/mod.rs +++ b/sys/src/avcodec/mod.rs @@ -35,3 +35,7 @@ pub use self::vobis_parser::*; mod xvmc; pub use self::xvmc::*; + +#[cfg_attr(feature = "static", link(name = "avcodec", kind = "static"))] +#[cfg_attr(not(feature = "static"), link(name = "avcodec"))] +extern { } diff --git a/sys/src/avcodec/qsv.rs b/sys/src/avcodec/qsv.rs index 7e9d701..e2660f0 100644 --- a/sys/src/avcodec/qsv.rs +++ b/sys/src/avcodec/qsv.rs @@ -9,7 +9,6 @@ pub struct AVQSVContext { pub nb_ext_buffers: c_int, } -#[link(name = "avcodec")] extern { pub fn av_qsv_alloc_context() -> *mut AVQSVContext; } diff --git a/sys/src/avcodec/vda.rs b/sys/src/avcodec/vda.rs index 449b5fa..fd7c09e 100644 --- a/sys/src/avcodec/vda.rs +++ b/sys/src/avcodec/vda.rs @@ -23,7 +23,6 @@ pub struct AVVDAContext { pub output_callback: extern fn(*mut c_void, *mut c_void, i32, uint32_t, *mut c_void), } -#[link(name = "avcodec")] extern { pub fn ff_vda_create_decoder(vda_ctx: *mut vda_context, extradata: *mut uint8_t, extradata_size: c_int) -> c_int; pub fn ff_vda_destroy_decoder(vda_ctx: *mut vda_context) -> c_int; diff --git a/sys/src/avcodec/vobis_parser.rs b/sys/src/avcodec/vobis_parser.rs index a4587a5..816798c 100644 --- a/sys/src/avcodec/vobis_parser.rs +++ b/sys/src/avcodec/vobis_parser.rs @@ -6,7 +6,6 @@ pub const VORBIS_FLAG_HEADER: c_int = 0x00000001; pub const VORBIS_FLAG_COMMENT: c_int = 0x00000002; pub const VORBIS_FLAG_SETUP: c_int = 0x00000004; -#[link(name = "avcodec")] extern { pub fn av_vorbis_parse_init(extradata: *const uint8_t, extradata_size: c_int) -> *mut AVVorbisParseContext; pub fn av_vorbis_parse_free(s: *mut *mut AVVorbisParseContext); diff --git a/sys/src/avdevice/device.rs b/sys/src/avdevice/device.rs index aef4ed4..3f362f5 100644 --- a/sys/src/avdevice/device.rs +++ b/sys/src/avdevice/device.rs @@ -78,7 +78,6 @@ pub struct AVDeviceInfoList { pub default_device: c_int, } -#[link(name = "avdevice")] extern { pub static av_device_capabilities: *const AVOption; diff --git a/sys/src/avdevice/mod.rs b/sys/src/avdevice/mod.rs index 3002ec7..f30eace 100644 --- a/sys/src/avdevice/mod.rs +++ b/sys/src/avdevice/mod.rs @@ -1,2 +1,6 @@ mod device; pub use self::device::*; + +#[cfg_attr(feature = "static", link(name = "avdevice", kind = "static"))] +#[cfg_attr(not(feature = "static"), link(name = "avdevice"))] +extern { } diff --git a/sys/src/avfilter/buffersink.rs b/sys/src/avfilter/buffersink.rs index 034685b..7350c1e 100644 --- a/sys/src/avfilter/buffersink.rs +++ b/sys/src/avfilter/buffersink.rs @@ -19,7 +19,6 @@ pub struct AVABufferSinkParams { pub sample_rates: *mut c_int, } -#[link(name = "avfilter")] extern { pub fn av_buffersink_get_frame_flags(ctx: *mut AVFilterContext, frame: *mut AVFrame, flags: c_int) -> c_int; diff --git a/sys/src/avfilter/buffersrc.rs b/sys/src/avfilter/buffersrc.rs index 3020c5f..bd6a22c 100644 --- a/sys/src/avfilter/buffersrc.rs +++ b/sys/src/avfilter/buffersrc.rs @@ -7,7 +7,6 @@ pub const AV_BUFFERSRC_FLAG_NO_COPY: c_int = 2; pub const AV_BUFFERSRC_FLAG_PUSH: c_int = 4; pub const AV_BUFFERSRC_FLAG_KEEP_REF: c_int = 8; -#[link(name = "avfilter")] extern { pub fn av_buffersrc_add_ref(buffer_src: *mut AVFilterContext, picref: *mut AVFilterBufferRef, flags: c_int) -> c_int; pub fn av_buffersrc_get_nb_failed_requests(buffer_src: *mut AVFilterContext) -> c_uint; diff --git a/sys/src/avfilter/filter.rs b/sys/src/avfilter/filter.rs index 9901b4d..f44bd94 100644 --- a/sys/src/avfilter/filter.rs +++ b/sys/src/avfilter/filter.rs @@ -219,7 +219,6 @@ pub struct AVFilterInOut { pub next: *mut AVFilterInOut, } -#[link(name = "avfilter")] extern { pub fn avfilter_version() -> c_uint; pub fn avfilter_configuration() -> *const c_char; diff --git a/sys/src/avfilter/mod.rs b/sys/src/avfilter/mod.rs index d65160f..72864bf 100644 --- a/sys/src/avfilter/mod.rs +++ b/sys/src/avfilter/mod.rs @@ -6,3 +6,7 @@ pub use self::buffersink::*; mod buffersrc; pub use self::buffersrc::*; + +#[cfg_attr(feature = "static", link(name = "avfilter", kind = "static"))] +#[cfg_attr(not(feature = "static"), link(name = "avfilter"))] +extern { } diff --git a/sys/src/avformat/format.rs b/sys/src/avformat/format.rs index aeb0b50..2190745 100644 --- a/sys/src/avformat/format.rs +++ b/sys/src/avformat/format.rs @@ -433,7 +433,6 @@ pub const AVSEEK_FLAG_BYTE: c_int = 2; pub const AVSEEK_FLAG_ANY: c_int = 4; pub const AVSEEK_FLAG_FRAME: c_int = 8; -#[link(name = "avformat")] extern { pub fn av_get_packet(s: *mut AVIOContext, pkt: *mut AVPacket, size: c_int) -> c_int; pub fn av_append_packet(s: *mut AVIOContext, pkt: *mut AVPacket, size: c_int) -> c_int; diff --git a/sys/src/avformat/io.rs b/sys/src/avformat/io.rs index 3bb6ac6..54fa8b6 100644 --- a/sys/src/avformat/io.rs +++ b/sys/src/avformat/io.rs @@ -93,7 +93,6 @@ pub unsafe fn avio_tell(s: *mut AVIOContext) -> int64_t { avio_seek(s, 0, SEEK_CUR) } -#[link(name = "avformat")] extern { pub fn avio_find_protocol_name(url: *const c_char) -> *const c_char; pub fn avio_check(url: *const c_char, flags: c_int) -> c_int; diff --git a/sys/src/avformat/mod.rs b/sys/src/avformat/mod.rs index d8d815e..5a5c922 100644 --- a/sys/src/avformat/mod.rs +++ b/sys/src/avformat/mod.rs @@ -3,3 +3,7 @@ pub use self::format::*; mod io; pub use self::io::*; + +#[cfg_attr(feature = "static", link(name = "avformat", kind = "static"))] +#[cfg_attr(not(feature = "static"), link(name = "avformat"))] +extern { } diff --git a/sys/src/avresample/mod.rs b/sys/src/avresample/mod.rs index b74e900..33e5dd8 100644 --- a/sys/src/avresample/mod.rs +++ b/sys/src/avresample/mod.rs @@ -3,3 +3,7 @@ pub use self::resample::*; pub use self::resample::AVMixCoeffType::*; pub use self::resample::AVResampleFilterType::*; pub use self::resample::AVResampleDitherMethod::*; + +#[cfg_attr(feature = "static", link(name = "avresample", kind = "static"))] +#[cfg_attr(not(feature = "static"), link(name = "avresample"))] +extern { } diff --git a/sys/src/avresample/resample.rs b/sys/src/avresample/resample.rs index 02ac90e..4607698 100644 --- a/sys/src/avresample/resample.rs +++ b/sys/src/avresample/resample.rs @@ -33,7 +33,6 @@ pub enum AVResampleDitherMethod { AV_RESAMPLE_DITHER_NB, } -#[link(name = "avresample")] extern { pub fn avresample_version() -> c_uint; pub fn avresample_configuration() -> *const c_char; diff --git a/sys/src/avutil/adler32.rs b/sys/src/avutil/adler32.rs index 759826f..5cecdab 100644 --- a/sys/src/avutil/adler32.rs +++ b/sys/src/avutil/adler32.rs @@ -1,6 +1,5 @@ use libc::{c_int, c_ulong, uint8_t}; -#[link(name = "avutil")] extern { pub fn av_adler32_update(adler: c_ulong, buf: *const uint8_t, len: c_int) -> c_ulong; } diff --git a/sys/src/avutil/aes.rs b/sys/src/avutil/aes.rs index 6db2282..9628ab6 100644 --- a/sys/src/avutil/aes.rs +++ b/sys/src/avutil/aes.rs @@ -2,7 +2,6 @@ use libc::{c_void, c_int, uint8_t}; pub type AVAES = c_void; -#[link(name = "avutil")] extern { pub static av_aes_size: c_int; diff --git a/sys/src/avutil/audio_fifo.rs b/sys/src/avutil/audio_fifo.rs index b5d5b78..c6fe5c9 100644 --- a/sys/src/avutil/audio_fifo.rs +++ b/sys/src/avutil/audio_fifo.rs @@ -3,7 +3,6 @@ use super::samplefmt::AVSampleFormat; pub type AVAudioFifo = c_void; -#[link(name = "avutil")] extern { pub fn av_audio_fifo_free(af: *mut AVAudioFifo); pub fn av_audio_fifo_alloc(sample_fmt: AVSampleFormat, channels: c_int, nb_samples: c_int) -> *mut AVAudioFifo; diff --git a/sys/src/avutil/base64.rs b/sys/src/avutil/base64.rs index 0227480..27e2b1c 100644 --- a/sys/src/avutil/base64.rs +++ b/sys/src/avutil/base64.rs @@ -5,7 +5,6 @@ pub fn AV_BASE64_SIZE(x: size_t) -> size_t { (x + 2) / 3 * 4 + 1 } -#[link(name = "avutil")] extern { pub fn av_base64_decode(out: *mut uint8_t, inp: *const c_char, out_size: c_int) -> c_int; pub fn av_base64_encode(out: *mut c_char, out_size: c_int, inp: *const uint8_t, in_size: c_int) -> *mut c_char; diff --git a/sys/src/avutil/blowfish.rs b/sys/src/avutil/blowfish.rs index e01714d..d0314dc 100644 --- a/sys/src/avutil/blowfish.rs +++ b/sys/src/avutil/blowfish.rs @@ -8,7 +8,6 @@ pub struct AVBlowfish { pub s: [[uint32_t; 256]; 4], } -#[link(name = "avutil")] extern { pub fn av_blowfish_init(ctx: *mut AVBlowfish, key: *const uint8_t, key_len: c_int); pub fn av_blowfish_crypt_ecb(ctx: *mut AVBlowfish, xl: *mut uint32_t, xr: *mut uint32_t, decrypt: c_int); diff --git a/sys/src/avutil/bprint.rs b/sys/src/avutil/bprint.rs index bcbd049..5d1b2ea 100644 --- a/sys/src/avutil/bprint.rs +++ b/sys/src/avutil/bprint.rs @@ -21,7 +21,6 @@ pub unsafe fn av_bprint_is_complete(buf: *const AVBPrint) -> c_int { } } -#[link(name = "avutil")] extern { pub fn av_bprint_init(buf: *mut AVBPrint, size_init: c_uint, size_max: c_uint); pub fn av_bprint_init_for_buffer(buf: *mut AVBPrint, buffer: *mut c_char, size: c_uint); diff --git a/sys/src/avutil/buffer.rs b/sys/src/avutil/buffer.rs index 33e609e..635f36e 100644 --- a/sys/src/avutil/buffer.rs +++ b/sys/src/avutil/buffer.rs @@ -14,7 +14,6 @@ pub type AVBufferPool = c_void; pub const AV_BUFFER_FLAG_READONLY: c_int = 1; -#[link(name = "avutil")] extern { pub fn av_buffer_alloc(size: c_int) -> *mut AVBufferRef; pub fn av_buffer_allocz(size: c_int) -> *mut AVBufferRef; diff --git a/sys/src/avutil/camellia.rs b/sys/src/avutil/camellia.rs index af8b606..0dc9d6e 100644 --- a/sys/src/avutil/camellia.rs +++ b/sys/src/avutil/camellia.rs @@ -2,7 +2,6 @@ use libc::{c_void, c_int, uint8_t}; pub type AVCAMELLIA = c_void; -#[link(name = "avutil")] extern { pub static av_camellia_size: c_int; diff --git a/sys/src/avutil/cast5.rs b/sys/src/avutil/cast5.rs index 221842e..8f19217 100644 --- a/sys/src/avutil/cast5.rs +++ b/sys/src/avutil/cast5.rs @@ -2,7 +2,6 @@ use libc::{c_void, c_int, uint8_t}; pub type AVCAST5 = c_void; -#[link(name = "avutil")] extern { pub static av_cast5_size: c_int; diff --git a/sys/src/avutil/channel_layout.rs b/sys/src/avutil/channel_layout.rs index 217966d..866fd87 100644 --- a/sys/src/avutil/channel_layout.rs +++ b/sys/src/avutil/channel_layout.rs @@ -70,7 +70,6 @@ pub enum AVMatrixEncoding { AV_MATRIX_ENCODING_NB } -#[link(name = "avutil")] extern { pub fn av_get_channel_layout(name: *const c_char) -> uint64_t; pub fn av_get_channel_layout_string(buf: *mut c_char, buf_size: c_int, nb_channels: c_int, channel_layout: uint64_t); diff --git a/sys/src/avutil/cpu.rs b/sys/src/avutil/cpu.rs index b460ebd..3d9b192 100644 --- a/sys/src/avutil/cpu.rs +++ b/sys/src/avutil/cpu.rs @@ -36,7 +36,6 @@ pub const AV_CPU_FLAG_NEON: c_uint = 1 << 5; pub const AV_CPU_FLAG_ARMV8: c_uint = 1 << 6; pub const AV_CPU_FLAG_SETEND: c_uint = 1 << 16; -#[link(name = "avutil")] extern { pub fn av_get_cpu_flags() -> c_int; pub fn av_force_cpu_flags(flags: c_int); diff --git a/sys/src/avutil/crc.rs b/sys/src/avutil/crc.rs index 0875bc9..e63a86d 100644 --- a/sys/src/avutil/crc.rs +++ b/sys/src/avutil/crc.rs @@ -15,7 +15,6 @@ pub enum AVCRCId { AV_CRC_MAX, } -#[link(name = "avutil")] extern { pub fn av_crc_init(ctx: *mut AVCRC, le: c_int, bits: c_int, poly: uint32_t, ctx_size: c_int) -> c_int; pub fn av_crc_get_table(crc_id: AVCRCId) -> *const AVCRC; diff --git a/sys/src/avutil/dict.rs b/sys/src/avutil/dict.rs index af0f73a..0235dcc 100644 --- a/sys/src/avutil/dict.rs +++ b/sys/src/avutil/dict.rs @@ -15,7 +15,6 @@ pub struct AVDictionaryEntry { pub type AVDictionary = c_void; -#[link(name = "avutil")] extern { pub fn av_dict_get(m: *const AVDictionary, key: *const c_char, prev: *const AVDictionaryEntry, flags: c_int) -> *mut AVDictionaryEntry; pub fn av_dict_count(m: *const AVDictionary) -> c_int; diff --git a/sys/src/avutil/display.rs b/sys/src/avutil/display.rs index 4ba9b0c..6cbec40 100644 --- a/sys/src/avutil/display.rs +++ b/sys/src/avutil/display.rs @@ -1,6 +1,5 @@ use libc::{c_int, int32_t, c_double}; -#[link(name = "avutil")] extern { pub fn av_display_rotation_get(matrix: *const int32_t) -> c_double; pub fn av_display_rotation_set(matrix: *mut int32_t, angle: c_double); diff --git a/sys/src/avutil/downmix_info.rs b/sys/src/avutil/downmix_info.rs index 5d9f919..9504689 100644 --- a/sys/src/avutil/downmix_info.rs +++ b/sys/src/avutil/downmix_info.rs @@ -25,7 +25,6 @@ pub struct AVDownmixInfo { pub lfe_mix_level: c_double, } -#[link(name = "avutil")] extern { pub fn av_downmix_info_update_side_data(frame: *mut AVFrame) -> *mut AVDownmixInfo; } diff --git a/sys/src/avutil/error.rs b/sys/src/avutil/error.rs index 59804cd..922bb09 100644 --- a/sys/src/avutil/error.rs +++ b/sys/src/avutil/error.rs @@ -55,7 +55,6 @@ pub unsafe fn av_make_error_string(errbuf: *mut c_char, errbuf_size: size_t, err errbuf } -#[link(name = "avutil")] extern { pub fn av_strerror(errnum: c_int, errbuf: *mut c_char, errbuf_size: size_t) -> c_int; } diff --git a/sys/src/avutil/eval.rs b/sys/src/avutil/eval.rs index 36b5eda..14f21f8 100644 --- a/sys/src/avutil/eval.rs +++ b/sys/src/avutil/eval.rs @@ -2,7 +2,6 @@ use libc::{c_void, c_char, c_int, c_double}; pub type AVExpr = c_void; -#[link(name = "avutil")] extern { pub fn av_expr_parse_and_eval(res: *mut c_double, s: *const c_char, const_names: *const *const c_char, const_values: *const c_double, diff --git a/sys/src/avutil/fifo.rs b/sys/src/avutil/fifo.rs index d4479c7..20b86be 100644 --- a/sys/src/avutil/fifo.rs +++ b/sys/src/avutil/fifo.rs @@ -28,7 +28,6 @@ pub unsafe fn av_fifo_peek2(f: *const AVFifoBuffer, offs: c_int) -> *mut uint8_t } } -#[link(name = "avutil")] extern { pub fn av_fifo_alloc(size: c_uint) -> *mut AVFifoBuffer; pub fn av_fifo_alloc_array(nmemb: size_t, size: size_t) -> *mut AVFifoBuffer; diff --git a/sys/src/avutil/file.rs b/sys/src/avutil/file.rs index fe50147..c9b9636 100644 --- a/sys/src/avutil/file.rs +++ b/sys/src/avutil/file.rs @@ -1,6 +1,5 @@ use libc::{c_void, c_char, c_int, uint8_t, size_t}; -#[link(name = "avutil")] extern { pub fn av_file_map(filename: *const c_char, bufptr: *mut *mut uint8_t, size: *mut size_t, log_offset: c_int, log_ctx: *mut c_void) -> c_int; pub fn av_file_unmap(bufptr: *mut uint8_t, size: size_t); diff --git a/sys/src/avutil/frame.rs b/sys/src/avutil/frame.rs index 64f8ede..1a02c86 100644 --- a/sys/src/avutil/frame.rs +++ b/sys/src/avutil/frame.rs @@ -100,7 +100,6 @@ pub struct AVFrame { pub qp_table_buf: *mut AVBufferRef, } -#[link(name = "avutil")] extern { pub fn av_frame_get_best_effort_timestamp(frame: *const AVFrame) -> int64_t; pub fn av_frame_set_best_effort_timestamp(frame: *mut AVFrame, val: int64_t); diff --git a/sys/src/avutil/hash.rs b/sys/src/avutil/hash.rs index acb2cb6..2280617 100644 --- a/sys/src/avutil/hash.rs +++ b/sys/src/avutil/hash.rs @@ -4,7 +4,6 @@ pub type AVHashContext = c_void; pub const AV_HASH_MAX_SIZE: c_int = 64; -#[link(name = "avutil")] extern { pub fn av_hash_alloc(ctx: *mut *mut AVHashContext, name: *const c_char) -> c_int; pub fn av_hash_names(i: c_int) -> *const c_char; diff --git a/sys/src/avutil/hmac.rs b/sys/src/avutil/hmac.rs index bebeb77..a11029e 100644 --- a/sys/src/avutil/hmac.rs +++ b/sys/src/avutil/hmac.rs @@ -13,7 +13,6 @@ pub enum AVHMACType { pub type AVHMAC = c_void; -#[link(name = "avutil")] extern { pub fn av_hmac_alloc(kind: AVHMACType) -> *mut AVHMAC; pub fn av_hmac_free(ctx: *mut AVHMAC); diff --git a/sys/src/avutil/imgutils.rs b/sys/src/avutil/imgutils.rs index 3b147ab..a49c80b 100644 --- a/sys/src/avutil/imgutils.rs +++ b/sys/src/avutil/imgutils.rs @@ -3,7 +3,6 @@ use super::pixdesc::AVPixFmtDescriptor; use super::pixfmt::AVPixelFormat; use super::rational::AVRational; -#[link(name = "avutil")] extern { pub fn av_image_fill_max_pixsteps(max_pixsteps: *mut c_int, max_pixstep_comps: *mut c_int, pixdesc: *const AVPixFmtDescriptor); pub fn av_image_get_linesize(pix_fmt: AVPixelFormat, width: c_int, plane: c_int) -> c_int; diff --git a/sys/src/avutil/lfg.rs b/sys/src/avutil/lfg.rs index 2ed312b..7bfc6c4 100644 --- a/sys/src/avutil/lfg.rs +++ b/sys/src/avutil/lfg.rs @@ -26,7 +26,6 @@ pub unsafe fn av_mlfg_get(ctx: *mut AVLFG) -> c_uint { c } -#[link(name = "avutil")] extern { pub fn av_lfg_init(c: *mut AVLFG, seed: c_uint); pub fn av_bmg_get(lfg: *mut AVLFG, out: *mut c_double); diff --git a/sys/src/avutil/log.rs b/sys/src/avutil/log.rs index 0b528f4..6d4bfa4 100644 --- a/sys/src/avutil/log.rs +++ b/sys/src/avutil/log.rs @@ -77,7 +77,6 @@ pub fn AV_LOG_C(x: c_int) -> c_int { x << 8 } -#[link(name = "avutil")] extern { pub fn av_log(avcl: *mut c_void, level: c_int, fmt: *const char, ...); //pub fn av_vlog(avcl: *mut c_void, level: c_int, fmt: *const c_char, vl: va_list); diff --git a/sys/src/avutil/lzo.rs b/sys/src/avutil/lzo.rs index 0660d51..2de72ef 100644 --- a/sys/src/avutil/lzo.rs +++ b/sys/src/avutil/lzo.rs @@ -7,7 +7,6 @@ pub const AV_LZO_ERROR: c_int = 8; pub const AV_LZO_INPUT_PADDING: c_int = 8; pub const AV_LZO_OUTPUT_PADDING: c_int = 12; -#[link(name = "avutil")] extern { pub fn av_lzo1x_decode(out: *mut c_void, outlen: *mut c_int, inp: *const c_void, inlen: *mut c_int) -> c_int; } diff --git a/sys/src/avutil/mathematics.rs b/sys/src/avutil/mathematics.rs index 38de639..b60d036 100644 --- a/sys/src/avutil/mathematics.rs +++ b/sys/src/avutil/mathematics.rs @@ -12,7 +12,6 @@ pub enum AVRounding { AV_ROUND_PASS_MINMAX = 8192, } -#[link(name = "avutil")] extern { pub fn av_gcd(a: int64_t, b: int64_t) -> int64_t; pub fn av_rescale(a: int64_t, b: int64_t, c: int64_t) -> int64_t; diff --git a/sys/src/avutil/md5.rs b/sys/src/avutil/md5.rs index 08667ed..97218dd 100644 --- a/sys/src/avutil/md5.rs +++ b/sys/src/avutil/md5.rs @@ -2,7 +2,6 @@ use libc::{c_void, c_int, uint8_t}; pub type AVMD5 = c_void; -#[link(name = "avutil")] extern { pub static av_md5_size: c_int; diff --git a/sys/src/avutil/mem.rs b/sys/src/avutil/mem.rs index 40814ec..619730c 100644 --- a/sys/src/avutil/mem.rs +++ b/sys/src/avutil/mem.rs @@ -39,7 +39,6 @@ pub unsafe fn av_mallocz_array(nmemb: size_t, size: size_t) -> *mut c_void { // } //} -#[link(name = "avutil")] extern { pub fn av_malloc(size: size_t) -> *mut c_void; pub fn av_realloc(ptr: *mut c_void, size: size_t) -> *mut c_void; diff --git a/sys/src/avutil/mod.rs b/sys/src/avutil/mod.rs index 30e1f3a..56057a4 100644 --- a/sys/src/avutil/mod.rs +++ b/sys/src/avutil/mod.rs @@ -169,3 +169,7 @@ mod util; pub use self::util::*; pub use self::util::AVMediaType::*; pub use self::util::AVPictureType::*; + +#[cfg_attr(feature = "static", link(name = "avutil", kind = "static"))] +#[cfg_attr(not(feature = "static"), link(name = "avutil"))] +extern { } diff --git a/sys/src/avutil/murmur3.rs b/sys/src/avutil/murmur3.rs index 89d5e94..e29e44f 100644 --- a/sys/src/avutil/murmur3.rs +++ b/sys/src/avutil/murmur3.rs @@ -2,7 +2,6 @@ use libc::{c_void, c_int, uint8_t, uint64_t}; pub type AVMurMur3 = c_void; -#[link(name = "avutil")] extern { pub fn av_murmur3_alloc() -> *mut AVMurMur3; pub fn av_murmur3_init_seeded(c: *mut AVMurMur3, seed: uint64_t); diff --git a/sys/src/avutil/opt.rs b/sys/src/avutil/opt.rs index 44a4596..757b3b9 100644 --- a/sys/src/avutil/opt.rs +++ b/sys/src/avutil/opt.rs @@ -84,7 +84,6 @@ pub struct AVOptionRanges { pub nb_components: c_int, } -#[link(name = "avutil")] extern { pub fn av_opt_show2(obj: *mut c_void, av_log_obj: *mut c_void, req_flags: c_int, rej_flags: c_int) -> c_int; pub fn av_opt_set_defaults(s: *mut c_void); diff --git a/sys/src/avutil/parseutils.rs b/sys/src/avutil/parseutils.rs index 60dce76..62de07b 100644 --- a/sys/src/avutil/parseutils.rs +++ b/sys/src/avutil/parseutils.rs @@ -8,7 +8,6 @@ pub unsafe fn av_parse_ratio_quiet(q: *mut AVRational, string: *const c_char, ma av_parse_ratio(q, string, max, AV_LOG_MAX_OFFSET, ptr::null_mut()) } -#[link(name = "avutil")] extern { pub fn av_parse_ratio(q: *mut AVRational, string: *const c_char, max: c_int, log_offset: c_int, log_ctx: *mut c_void) -> c_int; pub fn av_parse_video_size(width_ptr: *mut c_int, height_ptr: *mut c_int, string: *const c_char) -> c_int; diff --git a/sys/src/avutil/pixdesc.rs b/sys/src/avutil/pixdesc.rs index 602b505..666886c 100644 --- a/sys/src/avutil/pixdesc.rs +++ b/sys/src/avutil/pixdesc.rs @@ -71,7 +71,6 @@ pub const FF_LOSS_ALPHA: c_int = 0x0008; pub const FF_LOSS_COLORQUANT: c_int = 0x0010; pub const FF_LOSS_CHROMA: c_int = 0x0020; -#[link(name = "avutil")] extern { pub fn av_read_image_line(dst: *mut uint16_t, data: *const *const uint8_t, linesize: *const c_int, desc: *const AVPixFmtDescriptor, x: c_int, y: c_int, c: c_int, w: c_int, read_pal_component: c_int); pub fn av_write_image_line(src: *const uint16_t, data: *const *const uint8_t, linesize: *const c_int, desc: *const AVPixFmtDescriptor, x: c_int, y: c_int, c: c_int, w: c_int); diff --git a/sys/src/avutil/random_seed.rs b/sys/src/avutil/random_seed.rs index b6261c8..ad7543b 100644 --- a/sys/src/avutil/random_seed.rs +++ b/sys/src/avutil/random_seed.rs @@ -1,6 +1,5 @@ use libc::uint32_t; -#[link(name = "avutil")] extern { pub fn av_get_random_seed() -> uint32_t; } diff --git a/sys/src/avutil/rational.rs b/sys/src/avutil/rational.rs index 26d539d..38f89ee 100644 --- a/sys/src/avutil/rational.rs +++ b/sys/src/avutil/rational.rs @@ -40,7 +40,6 @@ pub unsafe fn av_inv_q(q: AVRational) -> AVRational { AVRational { num: q.den, den: q.num } } -#[link(name = "avutil")] extern { pub fn av_reduce(dst_num: *mut c_int, dst_den: *mut c_int, num: int64_t, den: int64_t, max: int64_t) -> c_int; pub fn av_mul_q(b: AVRational, c: AVRational) -> AVRational; diff --git a/sys/src/avutil/ripemd.rs b/sys/src/avutil/ripemd.rs index e42a678..83e238d 100644 --- a/sys/src/avutil/ripemd.rs +++ b/sys/src/avutil/ripemd.rs @@ -2,7 +2,6 @@ use libc::{c_void, c_int, c_uint, uint8_t}; pub type AVRIPEMD = c_void; -#[link(name = "avutil")] extern { pub static av_ripemd_size: c_int; diff --git a/sys/src/avutil/samplefmt.rs b/sys/src/avutil/samplefmt.rs index 303e897..e5b5dd4 100644 --- a/sys/src/avutil/samplefmt.rs +++ b/sys/src/avutil/samplefmt.rs @@ -19,7 +19,6 @@ pub enum AVSampleFormat { AV_SAMPLE_FMT_NB } -#[link(name = "avutil")] extern { pub fn av_get_sample_fmt_name(sample_fmt: AVSampleFormat) -> *const c_char; pub fn av_get_sample_fmt(name: *const c_char) -> AVSampleFormat; diff --git a/sys/src/avutil/sha.rs b/sys/src/avutil/sha.rs index 783108e..721f72f 100644 --- a/sys/src/avutil/sha.rs +++ b/sys/src/avutil/sha.rs @@ -2,7 +2,6 @@ use libc::{c_void, c_int, c_uint, uint8_t}; pub type AVSHA = c_void; -#[link(name = "avutil")] extern { pub static av_sha_size: c_int; diff --git a/sys/src/avutil/sha512.rs b/sys/src/avutil/sha512.rs index ab2c77f..d9dd740 100644 --- a/sys/src/avutil/sha512.rs +++ b/sys/src/avutil/sha512.rs @@ -2,7 +2,6 @@ use libc::{c_void, c_int, c_uint, uint8_t}; pub type AVSHA512 = c_void; -#[link(name = "avutil")] extern { pub static av_sha512_size: c_int; diff --git a/sys/src/avutil/stereo3d.rs b/sys/src/avutil/stereo3d.rs index 071214d..0b6393d 100644 --- a/sys/src/avutil/stereo3d.rs +++ b/sys/src/avutil/stereo3d.rs @@ -23,7 +23,6 @@ pub struct AVStereo3D { pub flags: c_int, } -#[link(name = "avutil")] extern { pub fn av_stereo3d_alloc() -> *mut AVStereo3D; pub fn av_stereo3d_create_side_data(frame: *mut AVFrame) -> *mut AVStereo3D; diff --git a/sys/src/avutil/string.rs b/sys/src/avutil/string.rs index a713ab4..2d10b30 100644 --- a/sys/src/avutil/string.rs +++ b/sys/src/avutil/string.rs @@ -51,7 +51,6 @@ pub unsafe fn av_tolower(c: c_int) -> c_int { } } -#[link(name = "avutil")] extern { pub fn av_strstart(string: *const c_char, pfx: *const c_char, ptr: *const *const c_char) -> c_int; pub fn av_stristart(string: *const c_char, pfx: *const c_char, ptr: *const *const c_char) -> c_int; diff --git a/sys/src/avutil/threadmessage.rs b/sys/src/avutil/threadmessage.rs index 379f5d5..ac46032 100644 --- a/sys/src/avutil/threadmessage.rs +++ b/sys/src/avutil/threadmessage.rs @@ -4,7 +4,6 @@ pub type AVThreadMessageQueue = c_void; pub const AV_THREAD_MESSAGE_NONBLOCK: c_uint = 1; -#[link(name = "avutil")] extern { pub fn av_thread_message_queue_alloc(mq: *mut *mut AVThreadMessageQueue, nelem: c_uint, elsize: c_uint) -> c_int; pub fn av_thread_message_queue_free(mq: *mut *mut AVThreadMessageQueue); diff --git a/sys/src/avutil/time.rs b/sys/src/avutil/time.rs index fd0221e..c288545 100644 --- a/sys/src/avutil/time.rs +++ b/sys/src/avutil/time.rs @@ -1,6 +1,5 @@ use libc::{c_int, c_uint, int64_t}; -#[link(name = "avutil")] extern { pub fn av_gettime() -> int64_t; pub fn av_gettime_relative() -> int64_t; diff --git a/sys/src/avutil/timecode.rs b/sys/src/avutil/timecode.rs index 537d323..ddc2eac 100644 --- a/sys/src/avutil/timecode.rs +++ b/sys/src/avutil/timecode.rs @@ -14,7 +14,6 @@ pub struct AVTimecode { pub fps: c_uint, } -#[link(name = "avutil")] extern { pub fn av_timecode_adjust_ntsc_framenum2(framenum: c_int, fps: c_int) -> c_int; pub fn av_timecode_get_smpte_from_framenum(tc: *const AVTimecode, framenum: c_int) -> uint32_t; diff --git a/sys/src/avutil/twofish.rs b/sys/src/avutil/twofish.rs index 362eff4..3d2cff0 100644 --- a/sys/src/avutil/twofish.rs +++ b/sys/src/avutil/twofish.rs @@ -2,7 +2,6 @@ use libc::{c_void, c_int, uint8_t}; pub type AVTWOFISH = c_void; -#[link(name = "avutil")] extern { pub static av_twofish_size: c_int; diff --git a/sys/src/avutil/util.rs b/sys/src/avutil/util.rs index cd4e4c3..d4e5107 100644 --- a/sys/src/avutil/util.rs +++ b/sys/src/avutil/util.rs @@ -35,7 +35,6 @@ pub enum AVPictureType { AV_PICTURE_TYPE_BI, } -#[link(name = "avutil")] extern { pub fn avutil_version() -> c_uint; pub fn avutil_configuration() -> *const c_char; diff --git a/sys/src/avutil/xtea.rs b/sys/src/avutil/xtea.rs index 72a9ceb..b9640a8 100644 --- a/sys/src/avutil/xtea.rs +++ b/sys/src/avutil/xtea.rs @@ -6,7 +6,6 @@ pub struct AVXTEA { pub key: [uint32_t; 16], } -#[link(name = "avutil")] extern { pub fn av_xtea_init(ctx: *mut AVXTEA, key: *const uint8_t); pub fn av_xtea_crypt(ctx: *mut AVXTEA, dst: *mut uint8_t, src: *const uint8_t, count: c_int, iv: *mut uint8_t, decrypt: c_int); diff --git a/sys/src/postproc/mod.rs b/sys/src/postproc/mod.rs index 0d20ea5..a108768 100644 --- a/sys/src/postproc/mod.rs +++ b/sys/src/postproc/mod.rs @@ -1,2 +1,6 @@ mod postproc; pub use self::postproc::*; + +#[cfg_attr(feature = "static", link(name = "postproc", kind = "static"))] +#[cfg_attr(not(feature = "static"), link(name = "postproc"))] +extern { } diff --git a/sys/src/postproc/postproc.rs b/sys/src/postproc/postproc.rs index 0afa5de..57a2392 100644 --- a/sys/src/postproc/postproc.rs +++ b/sys/src/postproc/postproc.rs @@ -21,7 +21,6 @@ pub const PP_FORMAT_440: c_int = 0x00000010 | PP_FORMAT; pub const PP_PICT_TYPE_QP2: c_int = 0x00000010; -#[link(name = "postproc")] extern { pub fn postproc_version() -> c_uint; pub fn postproc_configuration() -> *const c_char; diff --git a/sys/src/swresample/mod.rs b/sys/src/swresample/mod.rs index f383273..c700513 100644 --- a/sys/src/swresample/mod.rs +++ b/sys/src/swresample/mod.rs @@ -3,3 +3,7 @@ pub use self::resample::*; pub use self::resample::SwrDitherType::*; pub use self::resample::SwrEngine::*; pub use self::resample::SwrFilterType::*; + +#[cfg_attr(feature = "static", link(name = "swresample", kind = "static"))] +#[cfg_attr(not(feature = "static"), link(name = "swresample"))] +extern { } diff --git a/sys/src/swresample/resample.rs b/sys/src/swresample/resample.rs index abcf686..d8faeae 100644 --- a/sys/src/swresample/resample.rs +++ b/sys/src/swresample/resample.rs @@ -42,7 +42,6 @@ pub enum SwrFilterType { pub type SwrContext = c_void; -#[link(name = "swresample")] extern { pub fn swresample_version() -> c_uint; pub fn swresample_configuration() -> *const c_char; diff --git a/sys/src/swscale/mod.rs b/sys/src/swscale/mod.rs index db9607f..8db9c77 100644 --- a/sys/src/swscale/mod.rs +++ b/sys/src/swscale/mod.rs @@ -1,2 +1,6 @@ mod scale; pub use self::scale::*; + +#[cfg_attr(feature = "static", link(name = "swscale", kind = "static"))] +#[cfg_attr(not(feature = "static"), link(name = "swscale"))] +extern { } diff --git a/sys/src/swscale/scale.rs b/sys/src/swscale/scale.rs index 607d32e..5141ab3 100644 --- a/sys/src/swscale/scale.rs +++ b/sys/src/swscale/scale.rs @@ -59,7 +59,6 @@ pub struct SwsFilter { pub type SwsContext = c_void; -#[link(name = "swscale")] extern { pub fn swscale_version() -> c_uint; pub fn swscale_configuration() -> *const c_char;