vlc/src/Makefile.am

742 lines
18 KiB
Makefile
Raw Normal View History

###############################################################################
# Automake targets and declarations
###############################################################################
AUTOMAKE_OPTIONS = subdir-objects
NULL =
2011-07-07 15:55:57 +02:00
EXTRA_DIST = \
2008-03-27 17:09:56 +01:00
vlc-plugin.pc.in \
2010-08-21 18:20:45 +02:00
libvlccore.sym \
2011-08-30 22:40:14 +02:00
revision.txt
2011-08-30 22:40:14 +02:00
BUILT_SOURCES = $(nodist_pluginsinclude_HEADERS)
2008-02-08 17:13:58 +01:00
CLEANFILES = $(BUILT_SOURCES)
SUFFIXES = .pc.in .pc .rc.in .rc
###############################################################################
# Headers
###############################################################################
2008-05-01 22:00:05 +02:00
pluginsincludedir = $(pkgincludedir)/plugins
2008-05-01 22:00:05 +02:00
pluginsinclude_HEADERS = \
2008-05-26 20:01:00 +02:00
../include/vlc_access.h \
../include/vlc_actions.h \
2014-02-10 13:58:17 +01:00
../include/vlc_addons.h \
../include/vlc_ancillary.h \
../include/vlc_aout.h \
../include/vlc_aout_volume.h \
2008-05-01 22:00:05 +02:00
../include/vlc_arrays.h \
../include/vlc_atomic.h \
../include/vlc_avcodec.h \
2008-05-26 20:01:00 +02:00
../include/vlc_bits.h \
../include/vlc_block.h \
../include/vlc_block_helper.h \
../include/vlc_boxes.h \
2008-05-26 20:01:00 +02:00
../include/vlc_charset.h \
../include/vlc_codec.h \
2008-05-01 22:00:05 +02:00
../include/vlc_common.h \
../include/vlc_config.h \
2008-05-26 20:01:00 +02:00
../include/vlc_config_cat.h \
2008-05-01 22:00:05 +02:00
../include/vlc_configuration.h \
../include/vlc_cpu.h \
../include/vlc_cxx_helpers.hpp \
../include/vlc_clock.h \
../include/vlc_decoder.h \
../include/vlc_demux.h \
../include/vlc_dialog.h \
../include/vlc_diffutil.h \
2008-05-26 20:01:00 +02:00
../include/vlc_epg.h \
../include/vlc_es.h \
2008-05-26 20:01:00 +02:00
../include/vlc_es_out.h \
../include/vlc_events.h \
../include/vlc_executor.h \
../include/vlc_filter.h \
../include/vlc_fingerprinter.h \
../include/vlc_fourcc.h \
../include/vlc_frame.h \
../include/vlc_fs.h \
2008-05-26 20:01:00 +02:00
../include/vlc_gcrypt.h \
../include/vlc_hash.h \
../include/vlc_http.h \
2008-05-26 20:01:00 +02:00
../include/vlc_httpd.h \
../include/vlc_image.h \
../include/vlc_inhibit.h \
../include/vlc_input.h \
../include/vlc_input_item.h \
2015-03-02 21:44:36 +01:00
../include/vlc_interface.h \
../include/vlc_interrupt.h \
2015-11-23 14:47:10 +01:00
../include/vlc_keystore.h \
../include/vlc_list.h \
../include/vlc_media_library.h \
../include/vlc_media_source.h \
../include/vlc_memstream.h \
2008-05-01 22:00:05 +02:00
../include/vlc_messages.h \
../include/vlc_tracer.h \
2008-05-26 20:01:00 +02:00
../include/vlc_meta.h \
2014-05-13 16:36:31 +02:00
../include/vlc_meta_fetcher.h \
../include/vlc_mime.h \
2008-05-01 22:00:05 +02:00
../include/vlc_modules.h \
../include/vlc_mouse.h \
2011-11-03 19:47:58 +01:00
../include/vlc_network.h \
2008-05-01 22:00:05 +02:00
../include/vlc_objects.h \
../include/vlc_opengl.h \
../include/vlc_opengl_interop.h \
../include/vlc_opengl_filter.h \
../include/vlc_picture.h \
../include/vlc_picture_fifo.h \
../include/vlc_picture_pool.h \
../include/vlc_player.h \
../include/vlc_playlist.h \
../include/vlc_playlist_export.h \
2008-05-08 17:55:18 +02:00
../include/vlc_plugin.h \
../include/vlc_probe.h \
../include/vlc_preparser.h \
../include/vlc_queue.h \
../include/vlc_rand.h \
../include/vlc_renderer_discovery.h \
../include/vlc_services_discovery.h \
../include/vlc_sort.h \
../include/vlc_sout.h \
../include/vlc_spawn.h \
../include/vlc_spu.h \
2008-05-26 20:01:00 +02:00
../include/vlc_stream.h \
../include/vlc_stream_extractor.h \
2008-05-26 20:01:00 +02:00
../include/vlc_strings.h \
../include/vlc_subpicture.h \
../include/vlc_text_style.h \
2008-05-01 22:00:05 +02:00
../include/vlc_threads.h \
../include/vlc_thumbnailer.h \
../include/vlc_tick.h \
../include/vlc_timestamp_helper.h \
2011-11-03 19:47:58 +01:00
../include/vlc_tls.h \
2008-05-26 20:01:00 +02:00
../include/vlc_url.h \
../include/vlc_variables.h \
vlc_vector: add helpers for vectors Add a new API for handling general-purpose vectors, intended to replace ARRAY_*. Like ARRAY_*, it provides macros to handle a dynamic array generic over the type of its items. Contrary to ARRAY_*: - it does not abort on allocation failure (but reports the error); - it uses size_t instead of int to store the capacity and the size; - it checks for overflows on reallocation. For illustration purpose, embedding a vector of input_item_t* in a struct looks like: struct playlist { struct VLC_VECTOR(input_item_t *) items; // ... }; The main features (with names inspired by std::vector from C++ and std::vec::Vec from Rust) are: - void vlc_vector_init(pv) init the vector (use VLC_VECTOR_INITIALIZER for static init) - void vlc_vector_destroy(pv) destroy the vector and release any associated resources - void vlc_vector_clear(pv) remove all items from the vector - vec.size read the size of the vector - vec.data[i] access the i_th item - bool vlc_vector_push(pv, item) push an item to the end of the vector - bool vlc_vector_push_all(pv, items, count) push serveral items to the end of the vector - bool vlc_vector_insert(pv, index, item) insert an item at index - bool vlc_vector_insert_all(pv, index, items, count) insert several items at index - void vlc_vector_move(pv, index, target) move an item to target - void vlc_vector_move_all(pv, index, count, target) move a slice of items to target - void vlc_vector_remove(pv, index) remove an item - void vlc_vector_remove_slice(pv, index, count) remove a slice of items - void vlc_vector_swap_remove(pv, index) remove an item in O(1) without preserving ordering - bool vlc_vector_reserve(pv, mincap) increase the capacity of the vector in advance - void vlc_vector_shrink_to_fit(pv) resize the vector to its actual size - void vlc_vector_index_of(pv, index, pidx) find the index of an item (returns the result in *pidx) - vlc_vector_foreach(item, pv) a for-each loop It uses an exponential growth policy for both increasing and decreasing the size. As a consequence, the amortized complexity of vlc_vector_push() is O(1). Signed-off-by: Thomas Guillem <thomas@gllm.fr>
2018-10-16 11:21:02 +02:00
../include/vlc_vector.h \
../include/vlc_video_splitter.h \
../include/vlc_viewpoint.h \
../include/vlc_vlm.h \
../include/vlc_vout.h \
../include/vlc_vout_display.h \
../include/vlc_vout_osd.h \
../include/vlc_window.h \
../include/vlc_xlib.h \
../include/vlc_xml.h \
2008-05-01 22:00:05 +02:00
$(NULL)
nodist_pluginsinclude_HEADERS = ../include/vlc_about.h
2008-05-01 22:00:05 +02:00
noinst_HEADERS = \
../include/vlc_codecs.h \
2010-01-25 18:39:07 +01:00
../include/vlc_extensions.h \
2008-01-27 18:05:30 +01:00
../include/vlc_fixups.h \
../include/vlc_intf_strings.h \
../include/vlc_iso_lang.h \
2008-01-24 18:34:52 +01:00
../include/vlc_pgpkey.h \
../include/vlc_update.h \
$(NULL)
../include/vlc_about.h: Makefile.am $(top_srcdir)/COPYING $(top_srcdir)/THANKS $(top_srcdir)/AUTHORS
2010-01-31 12:00:59 +01:00
$(AM_V_at)rm -f -- "$@.tmp"
$(AM_V_at)mkdir -p -- ../include
$(AM_V_GEN)(echo "/* Automatically generated file - DO NOT EDIT */" && \
echo "static const char psz_license[] =" && \
sed 's/"/\\"/g;s/^.*$$/\"&\\n\"/' "$(top_srcdir)/COPYING" && \
echo ";" && \
echo "static const char psz_thanks[] =" && \
2009-07-24 17:24:08 +02:00
sed '/\$$Id:/d;s/"/\\"/g;s/<.*.> //;s/^.*$$/\"&\\n\"/' \
2010-01-31 12:00:59 +01:00
"$(top_srcdir)/THANKS" && \
echo ";" && \
echo "static const char psz_authors[] =" && \
2010-07-25 21:37:25 +02:00
sed '/\$$Id:/d;s/"/\\"/g;s/<.*.> //;s/^.*$$/\"&\\n\"/' \
2010-01-31 12:00:59 +01:00
"$(top_srcdir)/AUTHORS" && \
echo ";") >> "$@.tmp"
$(AM_V_at)mv -f -- "$@.tmp" "$@"
###############################################################################
# pkg-config integration
###############################################################################
pkgconfigdir = $(libdir)/pkgconfig
2011-08-30 22:40:14 +02:00
pkgconfig_DATA = vlc-plugin.pc
CLEANFILES += $(pkgconfig_DATA)
vlc-plugin.pc: vlc-plugin.pc.in $(top_builddir)/config.status
2010-01-31 11:58:12 +01:00
$(AM_V_GEN)cd "$(top_builddir)" && \
$(SHELL) ./config.status --file="src/$@"
##############################################################################
# Windows resource files
##############################################################################
if HAVE_WIN32
noinst_DATA = libvlccore_win32_rc.rc
endif
EXTRA_DIST += libvlccore_win32_rc.rc.in
libvlccore_win32_rc.rc: libvlccore_win32_rc.rc.in $(top_builddir)/config.status
2020-09-27 21:34:29 +02:00
$(AM_V_GEN)cd "$(top_builddir)" && \
$(SHELL) ./config.status --file="src/$@"
###############################################################################
# Building libvlc
###############################################################################
2011-08-30 22:40:14 +02:00
lib_LTLIBRARIES = libvlccore.la
AM_CPPFLAGS = $(INCICONV) $(IDN_CFLAGS) \
2013-12-07 00:57:11 +01:00
-DMODULE_STRING=\"core\" \
2018-03-05 22:10:08 +01:00
-DSYSDATADIR=\"$(datadir)\" \
-DLIBDIR=\"$(libdir)\" \
-DLIBEXECDIR=\"$(libexecdir)\" \
-DLOCALEDIR=\"$(localedir)\" \
-DPKGDATADIR=\"$(pkgdatadir)\" \
-DPKGLIBDIR=\"$(pkglibdir)\" \
-DPKGLIBEXECDIR=\"$(pkglibexecdir)\"
2011-08-30 22:40:14 +02:00
AM_CFLAGS = $(CFLAGS_libvlccore)
if HAVE_DYNAMIC_PLUGINS
AM_CPPFLAGS += -DHAVE_DYNAMIC_PLUGINS
if HAVE_WIN32
AM_CPPFLAGS += -DVLC_DLL_EXPORT
endif
endif
if HAVE_DBUS
AM_CPPFLAGS += -DHAVE_DBUS
AM_CFLAGS += $(DBUS_CFLAGS)
endif
2011-08-30 22:40:14 +02:00
libvlccore_la_SOURCES = \
libvlc.c \
libvlc.h \
libvlc-module.c \
2008-10-22 19:24:07 +02:00
missing.c \
2011-08-17 20:59:56 +02:00
revision.c \
version.c \
config/ansi_term.h \
config/configuration.h \
config/core.c \
config/chain.c \
config/file.c \
config/help.c \
config/intf.c \
config/cmdline.c \
config/getopt.c \
config/vlc_getopt.h \
config/jaro_winkler.c \
config/vlc_jaro_winkler.h \
extras/libc.c \
media_source/media_source.c \
media_source/media_source.h \
media_source/media_tree.c \
modules/modules.h \
modules/modules.c \
modules/bank.c \
modules/cache.c \
modules/entry.c \
modules/textdomain.c \
interface/dialog.c \
interface/interface.c \
playlist/content.c \
playlist/content.h \
playlist/control.c \
playlist/control.h \
playlist/export.c \
playlist/item.c \
playlist/item.h \
playlist/notify.c \
playlist/notify.h \
playlist/player.c \
playlist/player.h \
playlist/playlist.c \
playlist/playlist.h \
playlist/preparse.c \
playlist/preparse.h \
playlist/randomizer.c \
playlist/randomizer.h \
playlist/request.c \
playlist/shuffle.c \
playlist/sort.c \
preparser/art.c \
preparser/art.h \
preparser/fetcher.c \
preparser/fetcher.h \
preparser/preparser.c \
input/item.c \
input/access.c \
clock/clock_internal.c \
clock/input_clock.c \
clock/clock.c \
input/decoder.c \
input/decoder_device.c \
input/decoder_helpers.c \
input/demux.c \
input/demux_chained.c \
input/es_out.c \
input/es_out_source.c \
input/es_out_timeshift.c \
input/input.c \
2010-02-24 23:03:20 +01:00
input/info.h \
input/meta.c \
input/attachment.c \
player/player.c \
player/player.h \
player/input.c \
player: add the timer API Any interface or control modules could request a timer from the player. This player timer is like the player event listener except that: - It is only used to receive time update points0: - The timer is not locked by the player lock. Indeed the player lock can be too "slow" (it can be recursive, it is used by the playlist, and is it held when sending all events). So it's not a good idea to hold this lock for every frame/sample updates. - The minimum delay between each updates can be configured: it avoids to flood the UI when playing a media file with very high fps or very low audio sample size. The time updated is the output time, unlike the on_position_changed event that use the input time. It can fixes a very big delay between the UI time widgets and the outputted content (depending on the audio output module, this delay could be close to 2seconds). The vlc_player_timer_point struct is used by timer update callbacks. This public struct hold all the informations to interpolate a time at a given date. It could be done with the vlc_player_timer_point_Interpolate() helper. That way, it is now possible to get the last player time without holding any locks. There are two timer types: - vlc_player_AddTimer(): update are sent only when a frame or a sample is outputted. Users of this timer should take into account that the delay between each updates is not regular and can be up to 1seconds (depending of the input). In that case, they should use their own timer (from their mainloop) and use vlc_player_timer_point_Interpolate() to get the last time. - vlc_player_AddSmpteTimer(): send a SMPTE timecode each time a frame is rendered. This timer use a different callback struct and data struct: vlc_player_timer_smpte_timecode. It's not possible to interpolate it, the UI should update its widgets once it receive the new timecode update. This SMPTE timer handle NTSC 29.97 and 59.94 drop frames and is frame accurate.
2019-08-13 15:37:13 +02:00
player/timer.c \
player/track.c \
player/title.c \
player/aout.c \
player/vout.c \
player/osd.c \
player/medialib.c \
player/metadata.c \
clock/input_clock.h \
clock/clock.h \
clock/clock_internal.h \
2008-10-13 19:52:33 +02:00
input/decoder.h \
2008-10-13 19:57:51 +02:00
input/demux.h \
2008-10-13 19:52:33 +02:00
input/es_out.h \
input/event.h \
input/item.h \
input/mrl_helpers.h \
2008-10-13 20:20:54 +02:00
input/stream.h \
input/input_internal.h \
input/input_interface.h \
2007-03-11 20:40:05 +01:00
input/vlm_internal.h \
input/vlm_event.h \
2009-03-01 09:40:11 +01:00
input/resource.h \
input/resource.c \
input/services_discovery.c \
2011-11-29 21:08:07 +01:00
input/stats.c \
input/stream.c \
input/stream_fifo.c \
input/stream_extractor.c \
input/stream_filter.c \
2008-10-13 20:20:54 +02:00
input/stream_memory.c \
input/subtitles.c \
input/thumbnailer.c \
input/var.c \
audio_output/aout_internal.h \
audio_output/common.c \
audio_output/dec.c \
audio_output/filters.c \
audio_output/meter.c \
audio_output/output.c \
audio_output/volume.c \
2010-04-25 09:29:33 +02:00
video_output/chrono.h \
video_output/control.c \
video_output/control.h \
video_output/display.c \
video_output/display.h \
video_output/inhibit.c \
video_output/inhibit.h \
video_output/interlacing.c \
video_output/snapshot.c \
video_output/snapshot.h \
video_output/statistic.h \
video_output/video_output.c \
video_output/video_text.c \
video_output/video_epg.c \
video_output/video_widgets.c \
video_output/vout_subpictures.c \
2017-05-30 17:42:19 +02:00
video_output/vout_spuregion_helper.h \
video_output/vout_wrapper.h \
video_output/video_window.c \
video_output/video_window.h \
video_output/window.c \
video_output/opengl.c \
video_output/vout_intf.c \
2008-09-28 08:59:04 +02:00
video_output/vout_internal.h \
video_output/vout_private.h \
video_output/vout_wrapper.c \
network/getaddrinfo.c \
network/http_auth.c \
network/httpd.c \
network/io.c \
network/tcp.c \
network/udp.c \
2008-06-06 17:14:56 +02:00
network/rootbind.c \
network/stream.c \
network/tls.c \
text/charset.c \
text/memstream.c \
text/strings.c \
text/unicode.c \
text/url.c \
text/filesystem.c \
text/iso_lang.c \
text/iso-639_def.h \
misc/actions.c \
misc/ancillary.h \
misc/ancillary.c \
misc/executor.c \
misc/md5.c \
misc/probe.c \
2007-09-01 17:32:45 +02:00
misc/rand.c \
misc/mtime.c \
misc/frame.c \
misc/fifo.c \
misc/fourcc.c \
misc/fourcc_list.h \
misc/es_format.c \
misc/picture.c \
2015-06-25 22:30:37 +02:00
misc/picture.h \
misc/picture_fifo.c \
misc/picture_pool.c \
input: add per-thread sleep interruption framework For the sake of simplicity and for historical reasons, access and demux modules perform I/O in blocking mode. If no data is available (or more generally no I/O events), the blocking I/O calls will sleep and hold the whole input thread. This can lead to long time-outs or even complete deadlocks, e.g. notably in case of network error. Originally, a volatile flag (b_die) was checked at frequent interval to ascertain whether to abort. This violated the threaded memory model, and was incompatible with race-to-idle power management. In 2007, the VLC object thread signaling functions were introduced (vlc_object_wait, vlc_object_signal, ...) in an attempt to solve this. They proved inflexible and were not compatible with poll/select-style I/O events multiplexing. Those functions were ultimately removed a little over a year later. In the mean time, the "wait pipe" had been introduced. It was focused on network/socket data reception. While it continues to be used, it suffers several limitations: - it affects other threads using the same VLC object, and indistinctly disrupts all I/O after the "kill", - it incorrectly assumes that the same VLC object is used everywhere (leading to race conditions and live loops), - the convenience wrappers around the wait pipe can only wait on one single I/O event direction on a single file descriptor at a time, - it is currently tied to the VLC input thread. Also at about the same time, thread cancellation was reintroduced. Thread cancellation has proven helpful for simple thread main loops. But it ranges from impractical to unusable when sleeping deep within layers of code, such as in access and stream modules. Generally the problem of interrupting I/O is an intractable halting problem. And in practice a given reading operations inside a demuxer cannot be interrupted without breaking the state machine of the demuxer - in many or most cases. This changes set is only an attempt to complement thread cancellation, This does overcome most limitations of the existing "wait pipe" system and of former VLC object signals: - It is triggered by a function call specifying a target context. The context is tied to the thread that needs to be woken up from sleep. This works quite well because the problem essentially relates to the call flow of the sleeping thread. On the trigger side, this is similar to thread cancellation. - It leaves some flexibility w.r.t. choice of sleeping primitives. This initial change uses semaphores. Low-level file I/O will be introduced later. - The wake-up mechanism is edge-triggered and can be fired multiple times. Thus it does not irreversibly prevent all I/O and sleeping operations once fired. It only interrupts the ongoing or next sleep. In principles non-fatal interruptions could be handled that way, for instance input thread seek (rather than forceful stop) although that is not part of the changes set. - It is not tied to any specific event. The initial use case is stopping the input thread and checking vlc_object_alive() but it can be used for other purposes.
2015-06-30 22:52:51 +02:00
misc/interrupt.h \
misc/interrupt.c \
2015-11-23 14:47:10 +01:00
misc/keystore.c \
misc/rcu.h \
misc/rcu.c \
misc/renderer_discovery.c \
misc/threads.c \
misc/cpu.c \
misc/diffutil.c \
misc/epg.c \
misc/exit.c \
misc/events.c \
misc/image.c \
misc/messages.c \
misc/tracer.c \
misc/mime.c \
misc/objects.c \
misc/objres.c \
misc/queue.c \
misc/variables.h \
misc/variables.c \
misc/xml.c \
2014-02-07 23:06:20 +01:00
misc/addons.c \
2009-06-04 23:44:30 +02:00
misc/filter.c \
misc/filter_chain.c \
misc/httpcookies.c \
misc/fingerprinter.c \
misc/text_style.c \
misc/sort.c \
misc/subpicture.c \
2018-06-18 15:19:39 +02:00
misc/subpicture.h \
misc/medialibrary.c \
misc/viewpoint.c
libvlccore_la_LIBADD = $(LIBS_libvlccore) \
../compat/libcompat.la \
$(LTLIBINTL) $(LTLIBICONV) \
$(IDN_LIBS) $(SOCKET_LIBS) $(LIBRT) $(LIBDL) $(LIBM)
2016-09-20 17:58:24 +02:00
libvlccore_la_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_libvlccore)
if HAVE_WIN32
libvlccore_la_SOURCES += \
win32/error.c \
win32/filesystem.c \
win32/netconf.c \
win32/plugin.c \
2016-09-20 17:58:24 +02:00
win32/rand.c \
win32/specific.c \
win32/thread.c
if HAVE_WINSTORE
libvlccore_la_SOURCES += posix/timer.c win32/dirs-uap.c
else
libvlccore_la_SOURCES += win32/timer.c win32/dirs.c win32/spawn.c
libvlccore_la_LIBADD += -lwinmm -lole32 -luuid
endif
libvlccore_la_LIBADD += -lbcrypt
endif
if HAVE_OS2
libvlccore_la_SOURCES += \
os2/dirs.c \
darwin/error.c \
os2/filesystem.c \
2016-09-20 17:58:24 +02:00
os2/getaddrinfo.c \
os2/netconf.c \
os2/plugin.c \
os2/specific.c \
2016-09-20 17:58:24 +02:00
os2/rand.c \
os2/thread.c
endif
if HAVE_EMSCRIPTEN
libvlccore_la_SOURCES += \
posix/thread.c \
posix/getaddrinfo.c \
posix/error.c \
posix/dirs.c \
posix/filesystem.c \
posix/specific.c \
posix/timer.c \
emscripten/netconf.c \
emscripten/thread.c
endif
2016-09-20 17:58:24 +02:00
if HAVE_DARWIN
libvlccore_la_SOURCES += \
darwin/error.c \
darwin/specific.c \
darwin/thread.c
libvlccore_objc_la_SOURCES = \
darwin/dirs.m \
darwin/netconf.m
noinst_LTLIBRARIES = libvlccore_objc.la
endif
if HAVE_FREEBSD
libvlccore_la_SOURCES += \
2022-02-26 14:58:56 +01:00
freebsd/cpu.c \
freebsd/thread.c
endif
2016-09-20 17:58:24 +02:00
if HAVE_LINUX
libvlccore_la_SOURCES += \
linux/cpu.c \
linux/dirs.c \
linux/thread.c
if !HAVE_ANDROID
libvlccore_la_SOURCES += \
linux/filesystem.c
else
libvlccore_la_SOURCES += \
android/error.c \
android/specific.c \
android/thread.c
endif
endif
if !HAVE_WIN32
if !HAVE_OS2
libvlccore_la_SOURCES += \
posix/filesystem.c \
posix/plugin.c \
posix/rand.c \
posix/timer.c
if !HAVE_LINUX
2020-02-17 18:36:22 +01:00
libvlccore_la_SOURCES += posix/wait.c
endif
if !HAVE_ANDROID
if !HAVE_EMSCRIPTEN
libvlccore_la_SOURCES += posix/sort.c
endif
libvlccore_la_SOURCES += \
posix/thread.c
libvlccore_la_LIBADD += $(LIBEXECINFO)
if !HAVE_DARWIN
libvlccore_la_SOURCES += \
posix/dirs.c \
posix/error.c \
posix/netconf.c \
posix/picture.c \
2020-09-25 13:40:27 +02:00
posix/spawn.c \
posix/specific.c
if HAVE_LIBANL
libvlccore_la_SOURCES += \
linux/getaddrinfo.c
libvlccore_la_LIBADD += -lanl
else
libvlccore_la_SOURCES += \
posix/getaddrinfo.c
endif
endif
endif
endif
endif
libvlccore_la_SOURCES += \
stream_output/sap.c \
stream_output/stream_output.c stream_output/stream_output.h
if ENABLE_VLM
libvlccore_la_SOURCES += input/vlm.c input/vlm_event.c input/vlmshell.c
endif
if UPDATE_CHECK
libvlccore_la_SOURCES += \
misc/update.h misc/update.c \
misc/update_crypto.c
AM_CPPFLAGS += -DUPDATE_CHECK
AM_CFLAGS += $(GCRYPT_CFLAGS)
libvlccore_la_LIBADD += $(GCRYPT_LIBS)
endif
libvlccore_la_LDFLAGS = \
$(LDFLAGS_libvlccore) \
-no-undefined \
-export-symbols $(srcdir)/libvlccore.sym \
2017-11-18 13:26:31 +01:00
-version-info 9:0:0
libvlccore_la_DEPENDENCIES = libvlccore.sym
if HAVE_WIN32
libvlccore_la_DEPENDENCIES += libvlccore_win32_rc.$(OBJEXT)
libvlccore_la_LDFLAGS += -Wl,libvlccore_win32_rc.$(OBJEXT) -avoid-version -Wc,-static
endif
if HAVE_OS2
libvlccore_la_LDFLAGS += -avoid-version
endif
if HAVE_DBUS
libvlccore_la_LIBADD += $(DBUS_LIBS)
endif
if HAVE_DARWIN
$(libvlccore_la_OBJECTS): libvlccore_objc.la
libvlccore_objc_la_OBJCFLAGS = $(AM_OBJCFLAGS) -fobjc-arc
libvlccore_objc_la_LDFLAGS = -static
libvlccore_la_LIBADD += libvlccore_objc.la
libvlccore_la_LDFLAGS += -Wl,-framework,Foundation -Xlinker -install_name -Xlinker @rpath/libvlccore.dylib
endif
# iOS and tvOS applications cannot install global shared libraries and
# dylibs must be in frameworks so there's no need for libtool versioning.
if HAVE_IOS
libvlccore_la_LDFLAGS += -avoid-version
endif
if HAVE_TVOS
libvlccore_la_LDFLAGS += -avoid-version
endif
libvlccore_win32_rc.$(OBJEXT): libvlccore_win32_rc.rc $(top_srcdir)/extras/package/win32/libvlccore.dll.manifest
$(WINDRES) --include-dir $(top_srcdir)/share --include-dir $(top_srcdir)/extras/package/win32 -i $< -o $@
# FourCC tables
BUILT_SOURCES += fourcc_tables.h
EXTRA_DIST += misc/fourcc_gen.c
MOSTLYCLEANFILES = fourcc_gen$(BUILDEXEEXT)
fourcc_gen$(BUILDEXEEXT): misc/fourcc_gen.c misc/fourcc_list.h ../include/vlc_fourcc.h
$(AM_V_at)rm -f -- $@
$(AM_V_CC)$(BUILDCC) -I$(srcdir) -o $@ $<
fourcc_tables.h: fourcc_gen$(BUILDEXEEXT)
$(AM_V_at)rm -f -- $@.tmp
$(AM_V_GEN)$(builddir)/fourcc_gen$(BUILDEXEEXT) > $@.tmp
$(AM_V_at)mv -f -- $@.tmp $@
# Unit/regression tests
#
check_PROGRAMS = \
test_block \
test_dictionary \
test_executor \
test_i18n_atof \
test_interrupt \
test_jaro_winkler \
2018-06-10 21:32:09 +02:00
test_list \
test_md5 \
2014-10-27 21:30:55 +01:00
test_picture_pool \
2017-07-23 11:13:46 +02:00
test_sort \
test_timer \
test_url \
test_utf8 \
test_xmlent \
2016-12-06 15:55:21 +01:00
test_headers \
test_mrl_helpers \
vlc_vector: add helpers for vectors Add a new API for handling general-purpose vectors, intended to replace ARRAY_*. Like ARRAY_*, it provides macros to handle a dynamic array generic over the type of its items. Contrary to ARRAY_*: - it does not abort on allocation failure (but reports the error); - it uses size_t instead of int to store the capacity and the size; - it checks for overflows on reallocation. For illustration purpose, embedding a vector of input_item_t* in a struct looks like: struct playlist { struct VLC_VECTOR(input_item_t *) items; // ... }; The main features (with names inspired by std::vector from C++ and std::vec::Vec from Rust) are: - void vlc_vector_init(pv) init the vector (use VLC_VECTOR_INITIALIZER for static init) - void vlc_vector_destroy(pv) destroy the vector and release any associated resources - void vlc_vector_clear(pv) remove all items from the vector - vec.size read the size of the vector - vec.data[i] access the i_th item - bool vlc_vector_push(pv, item) push an item to the end of the vector - bool vlc_vector_push_all(pv, items, count) push serveral items to the end of the vector - bool vlc_vector_insert(pv, index, item) insert an item at index - bool vlc_vector_insert_all(pv, index, items, count) insert several items at index - void vlc_vector_move(pv, index, target) move an item to target - void vlc_vector_move_all(pv, index, count, target) move a slice of items to target - void vlc_vector_remove(pv, index) remove an item - void vlc_vector_remove_slice(pv, index, count) remove a slice of items - void vlc_vector_swap_remove(pv, index) remove an item in O(1) without preserving ordering - bool vlc_vector_reserve(pv, mincap) increase the capacity of the vector in advance - void vlc_vector_shrink_to_fit(pv) resize the vector to its actual size - void vlc_vector_index_of(pv, index, pidx) find the index of an item (returns the result in *pidx) - vlc_vector_foreach(item, pv) a for-each loop It uses an exponential growth policy for both increasing and decreasing the size. As a consequence, the amortized complexity of vlc_vector_push() is O(1). Signed-off-by: Thomas Guillem <thomas@gllm.fr>
2018-10-16 11:21:02 +02:00
test_arrays \
test_vector \
test_shared_data_ptr \
test_playlist \
test_randomizer \
2019-07-02 15:29:16 +02:00
test_media_source \
2020-03-19 15:00:22 +01:00
test_extensions \
test_thread \
test_diffutil
TESTS = $(check_PROGRAMS) check_symbols
test_block_SOURCES = test/block_test.c
test_block_LDADD = $(LDADD) $(LIBS_libvlccore)
test_block_DEPENDENCIES =
test_dictionary_SOURCES = test/dictionary.c
test_executor_SOURCES = test/executor.c
test_i18n_atof_SOURCES = test/i18n_atof.c
test_interrupt_SOURCES = test/interrupt.c
test_interrupt_LDADD = $(LDADD) $(LIBS_libvlccore)
test_jaro_winkler_SOURCES = test/jaro_winkler.c config/jaro_winkler.c
2018-06-10 21:32:09 +02:00
test_list_SOURCES = test/list.c
test_md5_SOURCES = test/md5.c
2014-10-27 21:30:55 +01:00
test_picture_pool_SOURCES = test/picture_pool.c
2017-07-23 11:13:46 +02:00
test_sort_SOURCES = test/sort.c
test_timer_SOURCES = test/timer.c
test_url_SOURCES = test/url.c
test_utf8_SOURCES = test/utf8.c
test_xmlent_SOURCES = test/xmlent.c
test_headers_SOURCES = test/headers.c
2016-12-06 15:55:21 +01:00
test_mrl_helpers_SOURCES = test/mrl_helpers.c
test_arrays_SOURCES = test/arrays.c
vlc_vector: add helpers for vectors Add a new API for handling general-purpose vectors, intended to replace ARRAY_*. Like ARRAY_*, it provides macros to handle a dynamic array generic over the type of its items. Contrary to ARRAY_*: - it does not abort on allocation failure (but reports the error); - it uses size_t instead of int to store the capacity and the size; - it checks for overflows on reallocation. For illustration purpose, embedding a vector of input_item_t* in a struct looks like: struct playlist { struct VLC_VECTOR(input_item_t *) items; // ... }; The main features (with names inspired by std::vector from C++ and std::vec::Vec from Rust) are: - void vlc_vector_init(pv) init the vector (use VLC_VECTOR_INITIALIZER for static init) - void vlc_vector_destroy(pv) destroy the vector and release any associated resources - void vlc_vector_clear(pv) remove all items from the vector - vec.size read the size of the vector - vec.data[i] access the i_th item - bool vlc_vector_push(pv, item) push an item to the end of the vector - bool vlc_vector_push_all(pv, items, count) push serveral items to the end of the vector - bool vlc_vector_insert(pv, index, item) insert an item at index - bool vlc_vector_insert_all(pv, index, items, count) insert several items at index - void vlc_vector_move(pv, index, target) move an item to target - void vlc_vector_move_all(pv, index, count, target) move a slice of items to target - void vlc_vector_remove(pv, index) remove an item - void vlc_vector_remove_slice(pv, index, count) remove a slice of items - void vlc_vector_swap_remove(pv, index) remove an item in O(1) without preserving ordering - bool vlc_vector_reserve(pv, mincap) increase the capacity of the vector in advance - void vlc_vector_shrink_to_fit(pv) resize the vector to its actual size - void vlc_vector_index_of(pv, index, pidx) find the index of an item (returns the result in *pidx) - vlc_vector_foreach(item, pv) a for-each loop It uses an exponential growth policy for both increasing and decreasing the size. As a consequence, the amortized complexity of vlc_vector_push() is O(1). Signed-off-by: Thomas Guillem <thomas@gllm.fr>
2018-10-16 11:21:02 +02:00
test_vector_SOURCES = test/vector.c
test_shared_data_ptr_SOURCES = test/shared_data_ptr.cpp
test_extensions_SOURCES = test/extensions.c
test_diffutil_SOURCES = test/diffutil.c
test_playlist_SOURCES = playlist/test.c \
playlist/content.c \
playlist/control.c \
playlist/item.c \
playlist/notify.c \
playlist/player.c \
playlist/playlist.c \
playlist/preparse.c \
playlist/randomizer.c \
playlist/request.c \
playlist/shuffle.c \
playlist/sort.c
test_playlist_CFLAGS = -DTEST_PLAYLIST
test_randomizer_SOURCES = playlist/randomizer.c
test_randomizer_CFLAGS = -DTEST_RANDOMIZER
test_media_source_LDADD = $(LDADD) $(LIBS_libvlccore)
test_media_source_CFLAGS = -DTEST_MEDIA_SOURCE
test_media_source_SOURCES = media_source/test.c \
media_source/media_source.c \
media_source/media_tree.c
2020-03-19 15:00:22 +01:00
test_thread_SOURCES = test/thread.c
AM_LDFLAGS = -no-install
LDADD = libvlccore.la \
../compat/libcompat.la
2009-02-23 18:11:03 +01:00
###############################################################################
# GIT revision
###############################################################################
BUILT_SOURCES += stamp-revision
MAINTAINERCLEANFILES = $(srcdir)/revision.txt $(srcdir)/revision.c
2009-02-23 18:11:03 +01:00
2011-08-17 20:59:56 +02:00
$(srcdir)/revision.c: $(srcdir)/revision.txt
$(AM_V_at)rm -f -- $@
$(AM_V_GEN)echo "const char psz_vlc_changeset[] = \"$$(cat $<)\";" \
> $@
2009-02-23 18:11:03 +01:00
2011-08-17 20:59:56 +02:00
$(srcdir)/revision.txt:
2010-01-31 11:56:20 +01:00
$(AM_V_at)$(MAKE) stamp-revision
2011-08-17 20:59:56 +02:00
$(AM_V_GEN)touch $@
2009-02-23 18:11:03 +01:00
stamp-revision:
2010-01-31 11:56:20 +01:00
$(AM_V_at)rm -f -- revision.tmp
2011-08-17 20:59:56 +02:00
$(AM_V_GEN)if ! git \
-C "$(top_srcdir)" describe \
2011-08-17 20:59:56 +02:00
--tags --long --match '?.*.*' --always; then \
cat $(srcdir)/revision.txt ; \
fi > revision.tmp
$(AM_V_at)if diff revision.tmp $(srcdir)/revision.txt >/dev/null 2>&1; then \
2009-08-30 09:51:35 +02:00
rm -f -- revision.tmp; \
else \
2011-08-17 20:59:56 +02:00
mv -f -- revision.tmp $(srcdir)/revision.txt; \
fi
#2>&1
2009-02-23 18:11:03 +01:00
2006-03-08 12:32:34 +01:00
###############################################################################
# Unit/regression test
###############################################################################
2008-01-24 18:53:34 +01:00
dist_check_SCRIPTS = check_headers check_symbols
2008-01-24 18:53:34 +01:00
check-local:
2008-05-01 22:00:46 +02:00
for h in `echo $(pkginclude_HEADERS) | sed -e s,\.\./include/,,g`; \
2008-01-24 18:53:34 +01:00
do \
echo grep - "#include <$$h>" $(srcdir)/test/headers.c ; \
if ! grep -- "#include <$$h>" $(srcdir)/test/headers.c ; \
then \
echo "Header $$h not included in test/headers.c!"; \
exit 1; \
fi ; \
done
$(SHELL) $(srcdir)/check_headers $(pluginsinclude_HEADERS)
2008-01-24 18:53:34 +01:00
FORCE:
@echo "Generated source cannot be phony. Go away." >&2
@exit 1
.PHONY: FORCE