build: major cleanup
authorDavid Herrmann <dh.herrmann@googlemail.com>
Tue, 5 Feb 2013 23:16:33 +0000 (00:16 +0100)
committerDavid Herrmann <dh.herrmann@googlemail.com>
Wed, 6 Feb 2013 00:22:10 +0000 (01:22 +0100)
Major overhaul of the build system. This introduces symbol-versioning for
all exported libraries. Please note that none of these libraries is
stable, yet!

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
22 files changed:
Makefile.am
configure.ac
docs/sym/libeloop.sym [new file with mode: 0644]
docs/sym/libtsm.sym [new file with mode: 0644]
docs/sym/libuterm.sym [new file with mode: 0644]
src/eloop.c
src/font.c
src/kmscon_module_interface.h
src/log.c
src/shl_misc.h
src/text.c
src/tsm_screen.c
src/tsm_unicode.c
src/tsm_vte.c
src/tsm_vte_charsets.c
src/uterm_drm2d_video.c
src/uterm_drm3d_video.c
src/uterm_fbdev_video.c
src/uterm_input.c
src/uterm_monitor.c
src/uterm_video.c
src/uterm_vt.c

index 2e464a5..1b221bb 100644 (file)
@@ -3,16 +3,47 @@
 # Copyright (c) 2012 David Herrmann <dh.herrmann@googlemail.com>
 #
 
-ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = \
-       .
+#
+# Library Version Numbers
+#
+
+LIBELOOP_CURRENT = 1
+LIBELOOP_REVISION = 0
+LIBELOOP_AGE = 0
+
+LIBTSM_CURRENT = 1
+LIBTSM_REVISION = 0
+LIBTSM_AGE = 0
+
+LIBUTERM_CURRENT = 1
+LIBUTERM_REVISION = 0
+LIBUTERM_AGE = 0
+
+#
+# Global Configurations and Initializations
+#
+
+ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+AM_MAKEFLAGS = --no-print-directory
+AUTOMAKE_OPTIONS = color-tests
+
+SUBDIRS = .
+
+.DELETE_ON_ERROR:
+
 include_HEADERS =
 EXTRA_DIST = \
        README \
        COPYING \
        NEWS \
        docs/kmscon.service \
-       docs/kmsconvt@.service
+       docs/kmsconvt@.service \
+       docs/pc/libeloop.pc.in \
+       docs/pc/libtsm.pc.in \
+       docs/pc/libuterm.pc.in \
+       docs/sym/libeloop.sym \
+       docs/sym/libtsm.sym \
+       docs/sym/libuterm.sym
 CLEANFILES =
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA =
@@ -22,13 +53,11 @@ TPHONY =
 
 bin_PROGRAMS =
 check_PROGRAMS =
-noinst_PROGRAMS = \
-       genshader \
-       genunifont
-noinst_LTLIBRARIES =
+noinst_PROGRAMS =
 lib_LTLIBRARIES =
+noinst_LTLIBRARIES =
 
-moduledir = @libdir@/kmscon
+moduledir = $(libdir)/kmscon
 module_LTLIBRARIES =
 
 #
@@ -44,13 +73,25 @@ module_LTLIBRARIES =
 #
 
 AM_CFLAGS = \
-       -Wall
+       -Wall \
+       -pipe \
+       -fno-common \
+       -ffast-math \
+       -fdiagnostics-show-option \
+       -fno-strict-aliasing \
+       -fvisibility=hidden \
+       -ffunction-sections \
+       -fdata-sections \
+       -fstack-protector
 AM_CPPFLAGS = \
        -DBUILD_MODULE_DIR='"$(moduledir)"' \
        -include $(top_builddir)/config.h \
        -I $(srcdir)/src
 AM_LDFLAGS = \
-       -Wl,--as-needed
+       -Wl,--as-needed \
+       -Wl,--gc-sections \
+       -Wl,-z,relro \
+       -Wl,-z,now
 
 if BUILD_ENABLE_DEBUG
 AM_CFLAGS += -g
@@ -63,39 +104,6 @@ AM_CFLAGS += -O0
 endif
 
 #
-# SHL - Static Helper Library
-# The SHL subsystem contains several small code pieces used all over kmscon and
-# other applications.
-#
-# Simply include $(SHL_*) in your source-file list.
-# SHL_MISC needs xkbcommon
-# SHL_REGISTER needs pthread
-#
-
-SHL_DLIST = \
-       src/shl_dlist.h
-SHL_ARRAY = \
-       src/shl_array.h
-SHL_HASHTABLE = \
-       src/shl_hashtable.h \
-       external/htable.h \
-       external/htable.c
-SHL_RING = \
-       src/shl_ring.h
-SHL_TIMER = \
-       src/shl_timer.h
-SHL_LLOG = \
-       src/shl_llog.h
-SHL_HOOK = \
-       src/shl_hook.h \
-       $(SHL_DLIST)
-SHL_MISC = \
-       src/shl_misc.h
-SHL_REGISTER = \
-       src/shl_register.h \
-       $(SHL_DLIST)
-
-#
 # GIT-HEAD helper
 # The file ./src/githead.h contains a constant BUILD_GIT_HEAD which is defined
 # to the string returned by "git describe". We need to adjust this string for
@@ -132,6 +140,37 @@ EXTRA_DIST += src/genversion.sh
 GITHEAD:=$(shell $(emptyvariable)"$(srcdir)/src/genversion.sh" "$(srcdir)/src/githead.h")
 
 #
+# SHL - Static Helper Library
+# The SHL subsystem contains several small code pieces used all over kmscon and
+# other applications.
+#
+
+noinst_LTLIBRARIES += libshl.la
+
+libshl_la_SOURCES = \
+       src/shl_dlist.h \
+       src/shl_array.h \
+       src/shl_hashtable.h \
+       external/htable.h \
+       external/htable.c \
+       src/shl_ring.h \
+       src/shl_timer.h \
+       src/shl_llog.h \
+       src/shl_hook.h \
+       src/shl_misc.h \
+       src/shl_register.h
+libshl_la_CPPFLAGS = \
+       $(AM_CPPFLAGS) \
+       $(XKBCOMMON_CFLAGS) \
+       -pthread
+libshl_la_LDFLAGS = \
+       $(AM_LDFLAGS) \
+       -pthread
+libshl_la_LIBADD = \
+       $(AM_LIBADD) \
+       $(XKBCOMMON_LIBS)
+
+#
 # libeloop
 # This library contains the whole event-loop implementation of kmscon. It is
 # compiled into a separate object to allow using it in several other programs.
@@ -144,17 +183,16 @@ pkgconfig_DATA += docs/pc/libeloop.pc
 endif
 
 libeloop_la_SOURCES = \
-       $(SHL_DLIST) \
-       $(SHL_LLOG) \
-       $(SHL_HOOK) \
        src/eloop.h \
        src/eloop.c
 
-libeloop_la_CPPFLAGS = \
-       $(AM_CPPFLAGS)
-libeloop_la_LIBADD =
+libeloop_la_LIBADD = libshl.la
+libeloop_la_CPPFLAGS = $(AM_CPPFLAGS)
+EXTRA_libeloop_la_DEPENDENCIES = ${top_srcdir}/docs/sym/libeloop.sym
 libeloop_la_LDFLAGS = \
-       -version-info 1:0:0
+       $(AM_LDFLAGS) \
+       -version-info $(LIBELOOP_CURRENT):$(LIBELOOP_REVISION):$(LIBELOOP_AGE) \
+       -Wl,--version-script=$(top_srcdir)/docs/sym/libeloop.sym
 
 
 if BUILD_ENABLE_ELOOP_DBUS
@@ -162,10 +200,8 @@ libeloop_la_SOURCES += \
        external/dbus-common.h \
        external/dbus-loop.h \
        external/dbus-loop.c
-libeloop_la_CPPFLAGS += \
-       $(DBUS_CFLAGS)
-libeloop_la_LIBADD += \
-       $(DBUS_LIBS)
+libeloop_la_CPPFLAGS += $(DBUS_CFLAGS)
+libeloop_la_LIBADD += $(DBUS_LIBS)
 endif
 
 #
@@ -176,21 +212,15 @@ endif
 #
 
 if BUILD_ENABLE_TSM
-lib_LTLIBRARIES += \
-       libtsm.la
+lib_LTLIBRARIES += libtsm.la
 include_HEADERS += \
        src/tsm_screen.h \
        src/tsm_unicode.h \
        src/tsm_vte.h
-pkgconfig_DATA += \
-       docs/pc/libtsm.pc
+pkgconfig_DATA += docs/pc/libtsm.pc
 endif
 
 libtsm_la_SOURCES = \
-       $(SHL_LLOG) \
-       $(SHL_TIMER) \
-       $(SHL_ARRAY) \
-       $(SHL_HASHTABLE) \
        src/tsm_screen.h \
        src/tsm_screen.c \
        src/tsm_unicode.h \
@@ -204,9 +234,14 @@ libtsm_la_SOURCES = \
 libtsm_la_CPPFLAGS = \
        $(AM_CPPFLAGS) \
        $(XKBCOMMON_CFLAGS)
-libtsm_la_LDFLAGS = \
+libtsm_la_LIBADD = \
        $(XKBCOMMON_LIBS) \
-       -version-info 1:0:0
+       libshl.la
+EXTRA_libtsm_la_DEPENDENCIES = ${top_srcdir}/docs/sym/libtsm.sym
+libtsm_la_LDFLAGS = \
+       $(AM_LDFLAGS) \
+       -version-info $(LIBTSM_CURRENT):$(LIBTSM_REVISION):$(LIBTSM_AGE) \
+       -Wl,--version-script="$(top_srcdir)/docs/sym/libtsm.sym"
 
 #
 # libuterm
@@ -227,10 +262,6 @@ pkgconfig_DATA += docs/pc/libuterm.pc
 endif
 
 libuterm_la_SOURCES = \
-       $(SHL_DLIST) \
-       $(SHL_HOOK) \
-       $(SHL_MISC) \
-       $(SHL_TIMER) \
        src/uterm_input.h \
        src/uterm_monitor.h \
        src/uterm_video.h \
@@ -251,9 +282,13 @@ libuterm_la_CPPFLAGS = \
        $(XKBCOMMON_CFLAGS)
 libuterm_la_LIBADD = \
        $(XKBCOMMON_LIBS) \
-       libeloop.la
+       libeloop.la \
+       libshl.la
+EXTRA_libuterm_la_DEPENDENCIES = ${top_srcdir}/docs/sym/libuterm.sym
 libuterm_la_LDFLAGS = \
-       -version-info 1:0:0
+       $(AM_LDFLAGS) \
+       -version-info $(LIBUTERM_CURRENT):$(LIBUTERM_REVISION):$(LIBUTERM_AGE) \
+       -Wl,--version-script="$(top_srcdir)/docs/sym/libuterm.sym"
 
 if BUILD_ENABLE_MULTI_SEAT
 libuterm_la_SOURCES += src/uterm_systemd.c
@@ -283,6 +318,7 @@ libuterm_la_LIBADD += $(DRM_LIBS)
 endif
 
 if BUILD_ENABLE_VIDEO_DRM3D
+noinst_PROGRAMS += genshader
 libuterm_la_SOURCES += \
        src/uterm_drm3d_internal.h \
        src/uterm_drm3d_video.c \
@@ -290,8 +326,7 @@ libuterm_la_SOURCES += \
        src/static_gl.h \
        src/static_gl_math.c \
        src/static_gl_shader.c
-nodist_libuterm_la_SOURCES += \
-       src/static_shaders.c
+nodist_libuterm_la_SOURCES += src/static_shaders.c
 libuterm_la_CPPFLAGS += \
        $(DRM_CFLAGS) \
        $(EGL_CFLAGS) \
@@ -362,6 +397,7 @@ src/font_unifont_data.c: $(UNIFONT) genunifont$(EXEEXT)
 
 if BUILD_ENABLE_FONT_UNIFONT
 module_LTLIBRARIES += mod-unifont.la
+noinst_PROGRAMS += genunifont
 endif
 
 mod_unifont_la_SOURCES = \
@@ -371,7 +407,9 @@ mod_unifont_la_SOURCES = \
        src/kmscon_mod_unifont.c
 nodist_mod_unifont_la_SOURCES = \
        src/font_unifont_data.c
+mod_unifont_la_LIBADD = libshl.la
 mod_unifont_la_LDFLAGS = \
+       $(AM_LDFLAGS) \
        -module \
        -avoid-version
 
@@ -380,8 +418,6 @@ module_LTLIBRARIES += mod-freetype2.la
 endif
 
 mod_freetype2_la_SOURCES = \
-       $(SHL_DLIST) \
-       $(SHL_HASHTABLE) \
        src/kmscon_module_interface.h \
        src/githead.h \
        src/font_freetype2.c \
@@ -392,8 +428,10 @@ mod_freetype2_la_CPPFLAGS = \
 mod_freetype2_la_LIBADD = \
        $(FREETYPE2_LIBS) \
        -lpthread \
-       libtsm.la
+       libtsm.la \
+       libshl.la
 mod_freetype2_la_LDFLAGS = \
+       $(AM_LDFLAGS) \
        -module \
        -avoid-version
 
@@ -402,8 +440,6 @@ module_LTLIBRARIES += mod-pango.la
 endif
 
 mod_pango_la_SOURCES = \
-       $(SHL_DLIST) \
-       $(SHL_HASHTABLE) \
        src/kmscon_module_interface.h \
        src/githead.h \
        src/font_pango.c \
@@ -414,8 +450,10 @@ mod_pango_la_CPPFLAGS = \
 mod_pango_la_LIBADD = \
        $(PANGO_LIBS) \
        -lpthread \
-       libtsm.la
+       libtsm.la \
+       libshl.la
 mod_pango_la_LDFLAGS = \
+       $(AM_LDFLAGS) \
        -module \
        -avoid-version
 
@@ -428,12 +466,15 @@ mod_bbulk_la_SOURCES = \
        src/githead.h \
        src/text_bbulk.c \
        src/kmscon_mod_bbulk.c
+mod_bbulk_la_LIBADD = libshl.la
 mod_bbulk_la_LDFLAGS = \
+       $(AM_LDFLAGS) \
        -module \
        -avoid-version
 
 if BUILD_ENABLE_RENDERER_GLTEX
 module_LTLIBRARIES += mod-gltex.la
+noinst_PROGRAMS += genshader
 endif
 
 mod_gltex_la_SOURCES = \
@@ -450,8 +491,10 @@ mod_gltex_la_CPPFLAGS = \
        $(AM_CPPFLAGS) \
        $(GLES2_CFLAGS)
 mod_gltex_la_LIBADD = \
-       $(GLES2_LIBS)
+       $(GLES2_LIBS) \
+       libshl.la
 mod_gltex_la_LDFLAGS = \
+       $(AM_LDFLAGS) \
        -module \
        -avoid-version
 
@@ -468,8 +511,10 @@ mod_cairo_la_CPPFLAGS = \
        $(AM_CPPFLAGS) \
        $(CAIRO_CFLAGS)
 mod_cairo_la_LIBADD = \
-       $(CAIRO_LIBS)
+       $(CAIRO_LIBS) \
+       libshl.la
 mod_cairo_la_LDFLAGS = \
+       $(AM_LDFLAGS) \
        -module \
        -avoid-version
 
@@ -486,8 +531,10 @@ mod_pixman_la_CPPFLAGS = \
        $(AM_CPPFLAGS) \
        $(PIXMAN_CFLAGS)
 mod_pixman_la_LIBADD = \
-       $(PIXMAN_LIBS)
+       $(PIXMAN_LIBS) \
+       libshl.la
 mod_pixman_la_LDFLAGS = \
+       $(AM_LDFLAGS) \
        -module \
        -avoid-version
 
@@ -509,14 +556,6 @@ MANPAGES += docs/man/kmscon.1
 endif
 
 kmscon_SOURCES = \
-       $(SHL_DLIST) \
-       $(SHL_MISC) \
-       $(SHL_ARRAY) \
-       $(SHL_HASHTABLE) \
-       $(SHL_RING) \
-       $(SHL_TIMER) \
-       $(SHL_HOOK) \
-       $(SHL_REGISTER) \
        src/githead.h \
        src/conf.h \
        src/conf.c \
@@ -550,9 +589,11 @@ kmscon_LDADD = \
        $(XKBCOMMON_LIBS) \
        libeloop.la \
        libuterm.la \
+       libshl.la \
        -lpthread \
        -ldl
 kmscon_LDFLAGS = \
+       $(AM_LDFLAGS) \
        -rdynamic
 
 if BUILD_ENABLE_SESSION_DUMMY
@@ -579,12 +620,6 @@ bin_PROGRAMS += wlterm
 endif
 
 wlterm_SOURCES = \
-       $(SHL_MISC) \
-       $(SHL_ARRAY) \
-       $(SHL_DLIST) \
-       $(SHL_HOOK) \
-       $(SHL_REGISTER) \
-       $(SHL_HASHTABLE) \
        src/wlt_main.h \
        src/wlt_main.c \
        src/wlt_toolkit.h \
@@ -614,6 +649,7 @@ wlterm_LDADD = \
        $(XKBCOMMON_LIBS) \
        libeloop.la \
        libtsm.la \
+       libshl.la \
        -lpthread
 
 #
@@ -627,6 +663,7 @@ test_sources = \
        src/conf.c \
        tests/test_include.h
 test_cflags = \
+       $(AM_CPPFLAGS) \
        $(XKBCOMMON_CFLAGS)
 test_libs = \
        $(XKBCOMMON_LIBS) \
@@ -635,9 +672,7 @@ test_libs = \
 test_output_SOURCES = \
        $(test_sources) \
        tests/test_output.c
-test_output_CPPFLAGS = \
-       $(AM_CPPFLAGS) \
-       $(test_cflags)
+test_output_CPPFLAGS = $(test_cflags)
 test_output_LDADD = \
        $(test_libs) \
        libuterm.la
@@ -645,9 +680,7 @@ test_output_LDADD = \
 test_vt_SOURCES = \
        $(test_sources) \
        tests/test_vt.c
-test_vt_CPPFLAGS = \
-       $(AM_CPPFLAGS) \
-       $(test_cflags)
+test_vt_CPPFLAGS = $(test_cflags)
 test_vt_LDADD = \
        $(test_libs) \
        libuterm.la
@@ -655,9 +688,7 @@ test_vt_LDADD = \
 test_input_SOURCES = \
        $(test_sources) \
        tests/test_input.c
-test_input_CPPFLAGS = \
-       $(AM_CPPFLAGS) \
-       $(test_cflags)
+test_input_CPPFLAGS = $(test_cflags)
 test_input_LDADD = \
        $(test_libs) \
        libuterm.la
@@ -665,11 +696,8 @@ test_input_LDADD = \
 test_key_SOURCES = \
        $(test_sources) \
        tests/test_key.c
-test_key_CPPFLAGS = \
-       $(AM_CPPFLAGS) \
-       $(test_cflags)
-test_key_LDADD = \
-       $(test_libs)
+test_key_CPPFLAGS = $(test_cflags)
+test_key_LDADD = $(test_libs)
 
 #
 # Manpages
index eaa3db4..bc5d9b0 100644 (file)
@@ -11,6 +11,10 @@ AC_CONFIG_SRCDIR([src/kmscon_main.c])
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_HEADER(config.h)
+AC_USE_SYSTEM_EXTENSIONS
+AC_SYS_LARGEFILE
+AC_PREFIX_DEFAULT([/usr])
+AC_CANONICAL_HOST
 
 AM_INIT_AUTOMAKE([foreign 1.11 subdir-objects dist-bzip2 no-dist-gzip tar-pax -Wall -Werror -Wno-portability])
 AM_SILENT_RULES([yes])
@@ -23,15 +27,18 @@ AM_SILENT_RULES([yes])
 
 : ${CFLAGS=""}
 
-AC_USE_SYSTEM_EXTENSIONS
 AC_PROG_CC
 AC_PROG_CC_C99
 AM_PROG_CC_C_O
-AC_PROG_SED
 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
+AC_PROG_SED
+AC_PROG_MKDIR_P
+AC_PROG_LN_S
+AC_PROG_GREP
+AC_PROG_AWK
 
 LT_PREREQ(2.2)
-LT_INIT
+LT_INIT([disable-static])
 
 #
 # pkg-config dependencies
diff --git a/docs/sym/libeloop.sym b/docs/sym/libeloop.sym
new file mode 100644 (file)
index 0000000..7db72a7
--- /dev/null
@@ -0,0 +1,107 @@
+/***
+ * libeloop - Simple Event-Loop Library
+ *
+ * Copyright (c) 2012-2013 David Herrmann <dh.herrmann@googlemail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ ***/
+
+LIBELOOP_1 {
+global:
+       ev_eloop_new;
+       ev_eloop_ref;
+       ev_eloop_unref;
+local:
+       *;
+};
+
+LIBELOOP_2 {
+global:
+       ev_eloop_flush_fd;
+       ev_eloop_dispatch;
+       ev_eloop_run;
+       ev_eloop_exit;
+       ev_eloop_get_fd;
+
+       ev_eloop_new_eloop;
+       ev_eloop_add_eloop;
+       ev_eloop_rm_eloop;
+
+       ev_fd_new;
+       ev_fd_ref;
+       ev_fd_unref;
+
+       ev_fd_enable;
+       ev_fd_disable;
+       ev_fd_is_enabled;
+       ev_fd_is_bound;
+       ev_fd_set_cb_data;
+       ev_fd_update;
+
+       ev_eloop_new_fd;
+       ev_eloop_add_fd;
+       ev_eloop_rm_fd;
+
+       ev_timer_new;
+       ev_timer_ref;
+       ev_timer_unref;
+
+       ev_timer_enable;
+       ev_timer_disable;
+       ev_timer_is_enabled;
+       ev_timer_is_bound;
+       ev_timer_set_cb_data;
+       ev_timer_update;
+       ev_timer_drain;
+
+       ev_eloop_new_timer;
+       ev_eloop_add_timer;
+       ev_eloop_rm_timer;
+
+       ev_counter_new;
+       ev_counter_ref;
+       ev_counter_unref;
+
+       ev_counter_enable;
+       ev_counter_disable;
+       ev_counter_is_enabled;
+       ev_counter_is_bound;
+       ev_counter_set_cb_data;
+       ev_counter_inc;
+
+       ev_eloop_new_counter;
+       ev_eloop_add_counter;
+       ev_eloop_rm_counter;
+
+       ev_eloop_register_signal_cb;
+       ev_eloop_unregister_signal_cb;
+
+       ev_eloop_register_child_cb;
+       ev_eloop_unregister_child_cb;
+
+       ev_eloop_register_idle_cb;
+       ev_eloop_unregister_idle_cb;
+
+       ev_eloop_register_pre_cb;
+       ev_eloop_unregister_pre_cb;
+
+       ev_eloop_register_post_cb;
+       ev_eloop_unregister_post_cb;
+} LIBELOOP_1;
diff --git a/docs/sym/libtsm.sym b/docs/sym/libtsm.sym
new file mode 100644 (file)
index 0000000..df605d4
--- /dev/null
@@ -0,0 +1,137 @@
+/***
+ * libtsm - Terminal-Emulator State Machine
+ *
+ * Copyright (c) 2012-2013 David Herrmann <dh.herrmann@googlemail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ ***/
+
+LIBTSM_1 {
+global:
+       tsm_symbol_default;
+local:
+       *;
+};
+
+LIBTSM_2 {
+global:
+       tsm_symbol_table_new;
+       tsm_symbol_table_ref;
+       tsm_symbol_table_unref;
+
+       tsm_symbol_make;
+       tsm_symbol_append;
+       tsm_symbol_get;
+       tsm_symbol_get_width;
+
+       tsm_ucs4_get_width;
+       tsm_ucs4_to_utf8;
+       tsm_ucs4_to_utf8_alloc;
+
+       tsm_utf8_mach_new;
+       tsm_utf8_mach_free;
+
+       tsm_utf8_mach_feed;
+       tsm_utf8_mach_get;
+       tsm_utf8_mach_reset;
+
+       tsm_screen_new;
+       tsm_screen_ref;
+       tsm_screen_unref;
+
+       tsm_screen_set_opts;
+       tsm_screen_reset_opts;
+       tsm_screen_get_opts;
+
+       tsm_screen_get_width;
+       tsm_screen_get_height;
+       tsm_screen_resize;
+       tsm_screen_set_margins;
+       tsm_screen_set_max_sb;
+       tsm_screen_clear_sb;
+
+       tsm_screen_sb_up;
+       tsm_screen_sb_down;
+       tsm_screen_sb_page_up;
+       tsm_screen_sb_page_down;
+       tsm_screen_sb_reset;
+
+       tsm_screen_set_def_attr;
+       tsm_screen_reset;
+       tsm_screen_set_flags;
+       tsm_screen_reset_flags;
+       tsm_screen_get_flags;
+
+       tsm_screen_get_cursor_x;
+       tsm_screen_get_cursor_y;
+
+       tsm_screen_set_tabstop;
+       tsm_screen_reset_tabstop;
+       tsm_screen_reset_all_tabstops;
+
+       tsm_screen_write;
+       tsm_screen_newline;
+       tsm_screen_scroll_up;
+       tsm_screen_scroll_down;
+       tsm_screen_move_to;
+       tsm_screen_move_up;
+       tsm_screen_move_down;
+       tsm_screen_move_left;
+       tsm_screen_move_right;
+       tsm_screen_move_line_end;
+       tsm_screen_move_line_home;
+       tsm_screen_tab_right;
+       tsm_screen_tab_left;
+       tsm_screen_insert_lines;
+       tsm_screen_delete_lines;
+       tsm_screen_insert_chars;
+       tsm_screen_delete_chars;
+       tsm_screen_erase_cursor;
+       tsm_screen_erase_chars;
+       tsm_screen_erase_cursor_to_end;
+       tsm_screen_erase_home_to_cursor;
+       tsm_screen_erase_current_line;
+       tsm_screen_erase_screen_to_cursor;
+       tsm_screen_erase_cursor_to_screen;
+       tsm_screen_erase_screen;
+
+       tsm_screen_selection_reset;
+       tsm_screen_selection_start;
+       tsm_screen_selection_target;
+       tsm_screen_selection_copy;
+
+       tsm_screen_draw;
+
+       tsm_vte_unicode_lower;
+
+       tsm_vte_new;
+       tsm_vte_ref;
+       tsm_vte_unref;
+
+       tsm_vte_set_palette;
+
+       tsm_vte_reset;
+       tsm_vte_hard_reset;
+       tsm_vte_input;
+       tsm_vte_handle_keyboard;
+       tsm_vte_unicode_upper;
+       tsm_vte_dec_supplemental_graphics;
+       tsm_vte_dec_special_graphics;
+} LIBTSM_1;
diff --git a/docs/sym/libuterm.sym b/docs/sym/libuterm.sym
new file mode 100644 (file)
index 0000000..5fd8fd3
--- /dev/null
@@ -0,0 +1,124 @@
+/***
+ * libuterm - User-Space Terminals
+ *
+ * Copyright (c) 2012-2013 David Herrmann <dh.herrmann@googlemail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ ***/
+
+LIBUTERM_1 {
+global:
+       uterm_input_new;
+       uterm_input_ref;
+       uterm_input_unref;
+
+       uterm_input_add_dev;
+       uterm_input_remove_dev;
+
+       uterm_input_register_cb;
+       uterm_input_unregister_cb;
+
+       uterm_input_sleep;
+       uterm_input_wake_up;
+       uterm_input_is_awake;
+
+       uterm_vt_master_new;
+       uterm_vt_master_ref;
+       uterm_vt_master_unref;
+
+       uterm_vt_master_activate_all;
+       uterm_vt_master_deactivate_all;
+
+       uterm_vt_allocate;
+       uterm_vt_deallocate;
+       uterm_vt_ref;
+       uterm_vt_unref;
+
+       uterm_vt_activate;
+       uterm_vt_deactivate;
+       uterm_vt_retry;
+       uterm_vt_get_type;
+
+       uterm_dpms_to_name;
+       uterm_video_available;
+
+       uterm_mode_ref;
+       uterm_mode_unref;
+       uterm_mode_next;
+
+       uterm_mode_get_name;
+       uterm_mode_get_width;
+       uterm_mode_get_height;
+
+       uterm_display_ref;
+       uterm_display_unref;
+       uterm_display_next;
+
+       uterm_display_register_cb;
+       uterm_display_unregister_cb;
+
+       uterm_display_get_modes;
+       uterm_display_get_current;
+       uterm_display_get_default;
+
+       uterm_display_get_state;
+       uterm_display_activate;
+       uterm_display_deactivate;
+       uterm_display_set_dpms;
+       uterm_display_get_dpms;
+
+       uterm_display_use;
+       uterm_display_get_buffers;
+       uterm_display_swap;
+       uterm_display_is_swapping;
+
+       uterm_display_fill;
+       uterm_display_blit;
+       uterm_display_fake_blend;
+       uterm_display_fake_blendv;
+
+       uterm_video_new;
+       uterm_video_ref;
+       uterm_video_unref;
+
+       uterm_video_segfault;
+       uterm_video_get_displays;
+       uterm_video_register_cb;
+       uterm_video_unregister_cb;
+
+       uterm_video_sleep;
+       uterm_video_wake_up;
+       uterm_video_is_awake;
+       uterm_video_poll;
+
+       UTERM_VIDEO_FBDEV;
+       UTERM_VIDEO_DRM2D;
+       UTERM_VIDEO_DRM3D;
+
+       uterm_monitor_new;
+       uterm_monitor_ref;
+       uterm_monitor_unref;
+       uterm_monitor_scan;
+
+       uterm_monitor_set_seat_data;
+       uterm_monitor_set_dev_data;
+local:
+       *;
+};
index d3e09c4..d1a6151 100644 (file)
 #include "shl_dlist.h"
 #include "shl_hook.h"
 #include "shl_llog.h"
+#include "shl_misc.h"
 
 #define LLOG_SUBSYSTEM "eloop"
 
@@ -577,6 +578,7 @@ err_out:
  *
  * Returns: 0 on success, otherwise negative error code
  */
+SHL_EXPORT
 int ev_eloop_new(struct ev_eloop **out, ev_log_t log)
 {
        struct ev_eloop *loop;
@@ -681,6 +683,7 @@ err_free:
  *
  * This increases the ref-count of @loop by 1.
  */
+SHL_EXPORT
 void ev_eloop_ref(struct ev_eloop *loop)
 {
        if (!loop)
@@ -698,6 +701,7 @@ void ev_eloop_ref(struct ev_eloop *loop)
  * of the event loop so this ref-count will never drop to zero while there is an
  * registered event source.
  */
+SHL_EXPORT
 void ev_eloop_unref(struct ev_eloop *loop)
 {
        struct ev_signal_shared *sig;
@@ -746,6 +750,7 @@ void ev_eloop_unref(struct ev_eloop *loop)
  * If @loop is currently dispatching events, this will remove all pending events
  * of @fd from the current event-list.
  */
+SHL_EXPORT
 void ev_eloop_flush_fd(struct ev_eloop *loop, struct ev_fd *fd)
 {
        int i;
@@ -797,6 +802,7 @@ static unsigned int convert_mask(uint32_t mask)
  *
  * Returns: 0 on success, otherwise negative error code
  */
+SHL_EXPORT
 int ev_eloop_dispatch(struct ev_eloop *loop, int timeout)
 {
        struct epoll_event *ep;
@@ -886,6 +892,7 @@ out_dispatch:
  *
  * Returns: 0 on success, otherwise a negative error code
  */
+SHL_EXPORT
 int ev_eloop_run(struct ev_eloop *loop, int timeout)
 {
        int ret;
@@ -930,6 +937,7 @@ int ev_eloop_run(struct ev_eloop *loop, int timeout)
  *
  * This makes a call to ev_eloop_run() stop.
  */
+SHL_EXPORT
 void ev_eloop_exit(struct ev_eloop *loop)
 {
        if (!loop)
@@ -954,6 +962,7 @@ void ev_eloop_exit(struct ev_eloop *loop)
  *
  * Returns: A file descriptor for the event loop or negative error code
  */
+SHL_EXPORT
 int ev_eloop_get_fd(struct ev_eloop *loop)
 {
        if (!loop)
@@ -972,6 +981,7 @@ int ev_eloop_get_fd(struct ev_eloop *loop)
  *
  * Returns: 0 on success, otherwise negative error code
  */
+SHL_EXPORT
 int ev_eloop_new_eloop(struct ev_eloop *loop, struct ev_eloop **out)
 {
        struct ev_eloop *el;
@@ -1007,6 +1017,7 @@ int ev_eloop_new_eloop(struct ev_eloop *loop, struct ev_eloop **out)
  *
  * Returns: 0 on success, otherwise negative error code
  */
+SHL_EXPORT
 int ev_eloop_add_eloop(struct ev_eloop *loop, struct ev_eloop *add)
 {
        int ret;
@@ -1045,6 +1056,7 @@ int ev_eloop_add_eloop(struct ev_eloop *loop, struct ev_eloop *add)
  * event loop was not registered on any other event loop, then this call does
  * nothing.
  */
+SHL_EXPORT
 void ev_eloop_rm_eloop(struct ev_eloop *rm)
 {
        if (!rm || !rm->fd->loop)
@@ -1081,6 +1093,7 @@ void ev_eloop_rm_eloop(struct ev_eloop *rm)
  *
  * Returns: 0 on success, otherwise negative error code
  */
+SHL_EXPORT
 int ev_fd_new(struct ev_fd **out, int rfd, int mask, ev_fd_cb cb, void *data,
              ev_log_t log)
 {
@@ -1112,6 +1125,7 @@ int ev_fd_new(struct ev_fd **out, int rfd, int mask, ev_fd_cb cb, void *data,
  *
  * Increases the ref-count of @fd by 1.
  */
+SHL_EXPORT
 void ev_fd_ref(struct ev_fd *fd)
 {
        if (!fd)
@@ -1129,6 +1143,7 @@ void ev_fd_ref(struct ev_fd *fd)
  * Decreases the ref-count of @fd by 1. Destroys the object if the ref-count
  * drops to zero.
  */
+SHL_EXPORT
 void ev_fd_unref(struct ev_fd *fd)
 {
        if (!fd)
@@ -1217,6 +1232,7 @@ static int fd_epoll_update(struct ev_fd *fd)
  *
  * Returns: 0 on success, otherwise negative error code
  */
+SHL_EXPORT
 int ev_fd_enable(struct ev_fd *fd)
 {
        int ret;
@@ -1241,6 +1257,7 @@ int ev_fd_enable(struct ev_fd *fd)
  * Disables @fd. That means, no more events are handled for @fd until you
  * re-enable it with ev_fd_enable().
  */
+SHL_EXPORT
 void ev_fd_disable(struct ev_fd *fd)
 {
        if (!fd || !fd->enabled)
@@ -1258,6 +1275,7 @@ void ev_fd_disable(struct ev_fd *fd)
  *
  * Returns: true if @fd is enabled, otherwise false.
  */
+SHL_EXPORT
 bool ev_fd_is_enabled(struct ev_fd *fd)
 {
        return fd && fd->enabled;
@@ -1271,6 +1289,7 @@ bool ev_fd_is_enabled(struct ev_fd *fd)
  *
  * Returns: true if @fd is bound, otherwise false
  */
+SHL_EXPORT
 bool ev_fd_is_bound(struct ev_fd *fd)
 {
        return fd && fd->loop;
@@ -1286,6 +1305,7 @@ bool ev_fd_is_bound(struct ev_fd *fd)
  * Both can be set to NULL. If @cb is NULL, then the callback will not be called
  * anymore.
  */
+SHL_EXPORT
 void ev_fd_set_cb_data(struct ev_fd *fd, ev_fd_cb cb, void *data)
 {
        if (!fd)
@@ -1304,6 +1324,7 @@ void ev_fd_set_cb_data(struct ev_fd *fd, ev_fd_cb cb, void *data)
  *
  * Returns: 0 on success, otherwise negative error code
  */
+SHL_EXPORT
 int ev_fd_update(struct ev_fd *fd, int mask)
 {
        int ret;
@@ -1346,6 +1367,7 @@ int ev_fd_update(struct ev_fd *fd, int mask)
  *
  * Returns: 0 on success, otherwise negative error code
  */
+SHL_EXPORT
 int ev_eloop_new_fd(struct ev_eloop *loop, struct ev_fd **out, int rfd,
                        int mask, ev_fd_cb cb, void *data)
 {
@@ -1383,6 +1405,7 @@ int ev_eloop_new_fd(struct ev_eloop *loop, struct ev_fd **out, int rfd,
  *
  * Returns: 0 on success, otherwise negative error code
  */
+SHL_EXPORT
 int ev_eloop_add_fd(struct ev_eloop *loop, struct ev_fd *fd)
 {
        int ret;
@@ -1417,6 +1440,7 @@ int ev_eloop_add_fd(struct ev_eloop *loop, struct ev_fd *fd)
  * It is safe to call this in any callback. This makes sure that the current
  * dispatcher will not get confused or read invalid memory.
  */
+SHL_EXPORT
 void ev_eloop_rm_fd(struct ev_fd *fd)
 {
        struct ev_eloop *loop;
@@ -1532,6 +1556,7 @@ static const struct itimerspec ev_timer_zero;
  *
  * Returns: 0 on success, negative error on failure
  */
+SHL_EXPORT
 int ev_timer_new(struct ev_timer **out, const struct itimerspec *spec,
                 ev_timer_cb cb, void *data, ev_log_t log)
 {
@@ -1589,6 +1614,7 @@ err_free:
  *
  * Increase reference count by 1.
  */
+SHL_EXPORT
 void ev_timer_ref(struct ev_timer *timer)
 {
        if (!timer)
@@ -1605,6 +1631,7 @@ void ev_timer_ref(struct ev_timer *timer)
  *
  * Decrease reference-count by 1 and destroy timer if it drops to 0.
  */
+SHL_EXPORT
 void ev_timer_unref(struct ev_timer *timer)
 {
        if (!timer)
@@ -1628,6 +1655,7 @@ void ev_timer_unref(struct ev_timer *timer)
  *
  * Returns: 0 on success negative error code on failure
  */
+SHL_EXPORT
 int ev_timer_enable(struct ev_timer *timer)
 {
        if (!timer)
@@ -1645,6 +1673,7 @@ int ev_timer_enable(struct ev_timer *timer)
  *
  * Returns: 0 on success and negative error code on failure
  */
+SHL_EXPORT
 void ev_timer_disable(struct ev_timer *timer)
 {
        if (!timer)
@@ -1661,6 +1690,7 @@ void ev_timer_disable(struct ev_timer *timer)
  *
  * Returns: true if timer is enabled, false otherwise
  */
+SHL_EXPORT
 bool ev_timer_is_enabled(struct ev_timer *timer)
 {
        return timer && ev_fd_is_enabled(timer->efd);
@@ -1674,6 +1704,7 @@ bool ev_timer_is_enabled(struct ev_timer *timer)
  *
  * Returns: true if the timer is bound, false otherwise.
  */
+SHL_EXPORT
 bool ev_timer_is_bound(struct ev_timer *timer)
 {
        return timer && ev_fd_is_bound(timer->efd);
@@ -1688,6 +1719,7 @@ bool ev_timer_is_bound(struct ev_timer *timer)
  * This changes the user-supplied callback and data that is used for this timer
  * object.
  */
+SHL_EXPORT
 void ev_timer_set_cb_data(struct ev_timer *timer, ev_timer_cb cb, void *data)
 {
        if (!timer)
@@ -1707,6 +1739,7 @@ void ev_timer_set_cb_data(struct ev_timer *timer, ev_timer_cb cb, void *data)
  *
  * Returns: 0 on success, negative error code on failure.
  */
+SHL_EXPORT
 int ev_timer_update(struct ev_timer *timer, const struct itimerspec *spec)
 {
        int ret;
@@ -1739,6 +1772,7 @@ int ev_timer_update(struct ev_timer *timer, const struct itimerspec *spec)
  *
  * Returns: 0 on success, negative error code on failure.
  */
+SHL_EXPORT
 int ev_timer_drain(struct ev_timer *timer, uint64_t *expirations)
 {
        if (!timer)
@@ -1760,6 +1794,7 @@ int ev_timer_drain(struct ev_timer *timer, uint64_t *expirations)
  *
  * Returns: 0 on success, negative error code on failure.
  */
+SHL_EXPORT
 int ev_eloop_new_timer(struct ev_eloop *loop, struct ev_timer **out,
                        const struct itimerspec *spec, ev_timer_cb cb,
                        void *data)
@@ -1797,6 +1832,7 @@ int ev_eloop_new_timer(struct ev_eloop *loop, struct ev_timer **out,
  *
  * Returns: 0 on success, negative error code on failure
  */
+SHL_EXPORT
 int ev_eloop_add_timer(struct ev_eloop *loop, struct ev_timer *timer)
 {
        int ret;
@@ -1824,6 +1860,7 @@ int ev_eloop_add_timer(struct ev_eloop *loop, struct ev_timer *timer)
  * If @timer is currently bound to an event loop, this will remove this bondage
  * again.
  */
+SHL_EXPORT
 void ev_eloop_rm_timer(struct ev_timer *timer)
 {
        if (!timer || !ev_fd_is_bound(timer->efd))
@@ -1898,6 +1935,7 @@ static void counter_event(struct ev_fd *fd, int mask, void *data)
  *
  * Returns: 0 on success, negative error code on failure.
  */
+SHL_EXPORT
 int ev_counter_new(struct ev_counter **out, ev_counter_cb cb, void *data,
                   ev_log_t log)
 {
@@ -1944,6 +1982,7 @@ err_free:
  *
  * This increases the reference-count of @cnt by 1.
  */
+SHL_EXPORT
 void ev_counter_ref(struct ev_counter *cnt)
 {
        if (!cnt)
@@ -1961,6 +2000,7 @@ void ev_counter_ref(struct ev_counter *cnt)
  * This decreases the reference-count of @cnt by 1 and destroys the object if
  * it drops to 0.
  */
+SHL_EXPORT
 void ev_counter_unref(struct ev_counter *cnt)
 {
        if (!cnt)
@@ -1984,6 +2024,7 @@ void ev_counter_unref(struct ev_counter *cnt)
  *
  * Returns: 0 on success, negative error code on failure
  */
+SHL_EXPORT
 int ev_counter_enable(struct ev_counter *cnt)
 {
        if (!cnt)
@@ -1999,6 +2040,7 @@ int ev_counter_enable(struct ev_counter *cnt)
  * This disables the counter. It calls ev_fd_disable() on the underlying
  * file-descriptor.
  */
+SHL_EXPORT
 void ev_counter_disable(struct ev_counter *cnt)
 {
        if (!cnt)
@@ -2015,6 +2057,7 @@ void ev_counter_disable(struct ev_counter *cnt)
  *
  * Returns: true if the counter is enabled, otherwise returns false.
  */
+SHL_EXPORT
 bool ev_counter_is_enabled(struct ev_counter *cnt)
 {
        return cnt && ev_fd_is_enabled(cnt->efd);
@@ -2028,6 +2071,7 @@ bool ev_counter_is_enabled(struct ev_counter *cnt)
  *
  * Returns: true if the counter is bound, otherwise false is returned.
  */
+SHL_EXPORT
 bool ev_counter_is_bound(struct ev_counter *cnt)
 {
        return cnt && ev_fd_is_bound(cnt->efd);
@@ -2042,6 +2086,7 @@ bool ev_counter_is_bound(struct ev_counter *cnt)
  * This changes the user-supplied callback and data for the given counter
  * object.
  */
+SHL_EXPORT
 void ev_counter_set_cb_data(struct ev_counter *cnt, ev_counter_cb cb,
                            void *data)
 {
@@ -2061,6 +2106,7 @@ void ev_counter_set_cb_data(struct ev_counter *cnt, ev_counter_cb cb,
  *
  * Returns: 0 on success, negative error code on failure.
  */
+SHL_EXPORT
 int ev_counter_inc(struct ev_counter *cnt, uint64_t val)
 {
        if (!cnt)
@@ -2080,6 +2126,7 @@ int ev_counter_inc(struct ev_counter *cnt, uint64_t val)
  *
  * Returns: 0 on success, negative error code on failure.
  */
+SHL_EXPORT
 int ev_eloop_new_counter(struct ev_eloop *eloop, struct ev_counter **out,
                         ev_counter_cb cb, void *data)
 {
@@ -2116,6 +2163,7 @@ int ev_eloop_new_counter(struct ev_eloop *eloop, struct ev_counter **out,
  *
  * Returns: 0 on success, negative error code on failure.
  */
+SHL_EXPORT
 int ev_eloop_add_counter(struct ev_eloop *eloop, struct ev_counter *cnt)
 {
        int ret;
@@ -2142,6 +2190,7 @@ int ev_eloop_add_counter(struct ev_eloop *eloop, struct ev_counter *cnt)
  *
  * If @cnt is bound to an event-loop, then this will remove this bondage again.
  */
+SHL_EXPORT
 void ev_eloop_rm_counter(struct ev_counter *cnt)
 {
        if (!cnt || !ev_fd_is_bound(cnt->efd))
@@ -2171,6 +2220,7 @@ void ev_eloop_rm_counter(struct ev_counter *cnt)
  *
  * Returns: 0 on success, negative error code on failure.
  */
+SHL_EXPORT
 int ev_eloop_register_signal_cb(struct ev_eloop *loop, int signum,
                                ev_signal_shared_cb cb, void *data)
 {
@@ -2217,6 +2267,7 @@ int ev_eloop_register_signal_cb(struct ev_eloop *loop, int signum,
  * callbacks with the same arguments are registered, then only one callback is
  * removed. It doesn't matter which callback is removed as both are identical.
  */
+SHL_EXPORT
 void ev_eloop_unregister_signal_cb(struct ev_eloop *loop, int signum,
                                        ev_signal_shared_cb cb, void *data)
 {
@@ -2247,6 +2298,7 @@ void ev_eloop_unregister_signal_cb(struct ev_eloop *loop, int signum,
  * the events while others will call waitpid() and get EAGAIN.
  */
 
+SHL_EXPORT
 int ev_eloop_register_child_cb(struct ev_eloop *loop, ev_child_cb cb,
                               void *data)
 {
@@ -2273,6 +2325,7 @@ int ev_eloop_register_child_cb(struct ev_eloop *loop, ev_child_cb cb,
        return 0;
 }
 
+SHL_EXPORT
 void ev_eloop_unregister_child_cb(struct ev_eloop *loop, ev_child_cb cb,
                                  void *data)
 {
@@ -2304,6 +2357,7 @@ void ev_eloop_unregister_child_cb(struct ev_eloop *loop, ev_child_cb cb,
  *
  * Returns: 0 on success, negative error code on failure.
  */
+SHL_EXPORT
 int ev_eloop_register_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb,
                              void *data, unsigned int flags)
 {
@@ -2343,6 +2397,7 @@ int ev_eloop_register_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb,
  * then only one is removed. It doesn't matter which one is removed, because
  * they are identical.
  */
+SHL_EXPORT
 void ev_eloop_unregister_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb,
                                 void *data, unsigned int flags)
 {
@@ -2375,6 +2430,7 @@ void ev_eloop_unregister_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb,
  *
  * Returns: 0 on success, negative error code on failure.
  */
+SHL_EXPORT
 int ev_eloop_register_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb,
                             void *data)
 {
@@ -2395,6 +2451,7 @@ int ev_eloop_register_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb,
  * then only one is removed. It doesn't matter which one is removed, because
  * they are identical.
  */
+SHL_EXPORT
 void ev_eloop_unregister_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb,
                                void *data)
 {
@@ -2424,6 +2481,7 @@ void ev_eloop_unregister_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb,
  *
  * Returns: 0 on success, negative error code on failure.
  */
+SHL_EXPORT
 int ev_eloop_register_post_cb(struct ev_eloop *eloop, ev_idle_cb cb,
                              void *data)
 {
@@ -2444,6 +2502,7 @@ int ev_eloop_register_post_cb(struct ev_eloop *eloop, ev_idle_cb cb,
  * then only one is removed. It doesn't matter which one is removed, because
  * they are identical.
  */
+SHL_EXPORT
 void ev_eloop_unregister_post_cb(struct ev_eloop *eloop, ev_idle_cb cb,
                                 void *data)
 {
index 30a16ae..cb93132 100644 (file)
@@ -60,6 +60,7 @@
 #include "kmscon_module.h"
 #include "log.h"
 #include "shl_dlist.h"
+#include "shl_misc.h"
 #include "shl_register.h"
 
 #define LOG_SUBSYSTEM "font"
@@ -81,6 +82,7 @@ static struct shl_register font_reg = SHL_REGISTER_INIT(font_reg);
  * not set, then the height is calculated and after that the points are
  * recalculated so we will never have division-errors.
  */
+SHL_EXPORT
 void kmscon_font_attr_normalize(struct kmscon_font_attr *attr)
 {
        if (!attr)
@@ -113,6 +115,7 @@ void kmscon_font_attr_normalize(struct kmscon_font_attr *attr)
  *
  * Returns: true if they match, otherwise false
  */
+SHL_EXPORT
 bool kmscon_font_attr_match(const struct kmscon_font_attr *a1,
                            const struct kmscon_font_attr *a2)
 {
@@ -154,6 +157,7 @@ static inline void kmscon_font_destroy(void *data)
  *
  * Returns: 0 on success, negative error code on failure
  */
+SHL_EXPORT
 int kmscon_font_register(const struct kmscon_font_ops *ops)
 {
        int ret;
@@ -182,6 +186,7 @@ int kmscon_font_register(const struct kmscon_font_ops *ops)
  * This unregisters the font-backend that is registered with name @name. If
  * @name is not found, a warning is printed but nothing else is done.
  */
+SHL_EXPORT
 void kmscon_font_unregister(const char *name)
 {
        log_debug("unregister font backend %s", name);
@@ -389,6 +394,7 @@ void kmscon_font_unref(struct kmscon_font *font)
  *
  * Returns: 0 on success, negative error code on failure
  */
+SHL_EXPORT
 int kmscon_font_render(struct kmscon_font *font,
                       uint32_t id, const uint32_t *ch, size_t len,
                       const struct kmscon_glyph **out)
@@ -410,6 +416,7 @@ int kmscon_font_render(struct kmscon_font *font,
  *
  * Returns: 0 on success, negative error code on failure
  */
+SHL_EXPORT
 int kmscon_font_render_empty(struct kmscon_font *font,
                             const struct kmscon_glyph **out)
 {
@@ -431,6 +438,7 @@ int kmscon_font_render_empty(struct kmscon_font *font,
  *
  * Returns: 0 on success ,engative error code on failure
  */
+SHL_EXPORT
 int kmscon_font_render_inval(struct kmscon_font *font,
                             const struct kmscon_glyph **out)
 {
index 2941967..8203a34 100644 (file)
@@ -35,6 +35,7 @@
 #include "githead.h"
 #include "kmscon_module.h"
 #include "shl_dlist.h"
+#include "shl_misc.h"
 
 struct kmscon_module_info {
        const char *githead;
@@ -68,6 +69,7 @@ struct kmscon_module {
                }, \
        };
 
+SHL_EXPORT
 extern struct kmscon_module module;
 #define KMSCON_THIS_MODULE (&module)
 
index 724050d..5a3fd80 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -19,6 +19,7 @@
 #include <string.h>
 #include "githead.h"
 #include "log.h"
+#include "shl_misc.h"
 
 /*
  * Locking
@@ -76,6 +77,7 @@ static void log__time(long long *sec, long long *usec)
  * LOG_SUBSYSTEM: By default no subsystem is specified
  */
 
+SHL_EXPORT
 const struct log_config LOG_CONFIG = {
        .sev = {
                [LOG_DEBUG] = 2,
@@ -445,6 +447,7 @@ static void log__format(const char *file,
        va_end(list);
 }
 
+SHL_EXPORT
 void log_submit(const char *file,
                int line,
                const char *func,
@@ -463,6 +466,7 @@ void log_submit(const char *file,
        errno = saved_errno;
 }
 
+SHL_EXPORT
 void log_format(const char *file,
                int line,
                const char *func,
@@ -484,6 +488,7 @@ void log_format(const char *file,
        errno = saved_errno;
 }
 
+SHL_EXPORT
 void log_llog(const char *file,
              int line,
              const char *func,
index 637e3be..64d4836 100644 (file)
 #include <stddef.h>
 #include <stdint.h>
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 #include <xkbcommon/xkbcommon.h>
 
+#define SHL_EXPORT __attribute__((visibility("default")))
 #define SHL_HAS_BITS(_bitmask, _bits) (((_bitmask) & (_bits)) == (_bits))
 #define SHL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
 
index 89c4899..c829bef 100644 (file)
@@ -37,6 +37,7 @@
 #include <string.h>
 #include "log.h"
 #include "shl_dlist.h"
+#include "shl_misc.h"
 #include "shl_register.h"
 #include "text.h"
 #include "uterm_video.h"
@@ -66,6 +67,7 @@ static inline void kmscon_text_destroy(void *data)
  *
  * Returns: 0 on success, negative error code on failure
  */
+SHL_EXPORT
 int kmscon_text_register(const struct kmscon_text_ops *ops)
 {
        int ret;
@@ -94,6 +96,7 @@ int kmscon_text_register(const struct kmscon_text_ops *ops)
  * This unregisters the text-backend that is registered with name @name. If
  * @name is not found, nothing is done.
  */
+SHL_EXPORT
 void kmscon_text_unregister(const char *name)
 {
        log_debug("unregister backend %s", name);
index e2cd12c..6b5d9a9 100644 (file)
@@ -37,6 +37,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include "shl_llog.h"
+#include "shl_misc.h"
 #include "shl_timer.h"
 #include "tsm_screen.h"
 #include "tsm_unicode.h"
@@ -436,6 +437,7 @@ static inline unsigned int to_abs_y(struct tsm_screen *con, unsigned int y)
        return con->margin_top + y;
 }
 
+SHL_EXPORT
 int tsm_screen_new(struct tsm_screen **out, tsm_log_t log)
 {
        struct tsm_screen *con;
@@ -483,6 +485,7 @@ err_free:
        return ret;
 }
 
+SHL_EXPORT
 void tsm_screen_ref(struct tsm_screen *con)
 {
        if (!con)
@@ -491,6 +494,7 @@ void tsm_screen_ref(struct tsm_screen *con)
        ++con->ref;
 }
 
+SHL_EXPORT
 void tsm_screen_unref(struct tsm_screen *con)
 {
        unsigned int i;
@@ -511,6 +515,7 @@ void tsm_screen_unref(struct tsm_screen *con)
        free(con);
 }
 
+SHL_EXPORT
 void tsm_screen_set_opts(struct tsm_screen *scr, unsigned int opts)
 {
        if (!scr || !opts)
@@ -519,6 +524,7 @@ void tsm_screen_set_opts(struct tsm_screen *scr, unsigned int opts)
        scr->opts |= opts;
 }
 
+SHL_EXPORT
 void tsm_screen_reset_opts(struct tsm_screen *scr, unsigned int opts)
 {
        if (!scr || !opts)
@@ -527,6 +533,7 @@ void tsm_screen_reset_opts(struct tsm_screen *scr, unsigned int opts)
        scr->opts &= ~opts;
 }
 
+SHL_EXPORT
 unsigned int tsm_screen_get_opts(struct tsm_screen *scr)
 {
        if (!scr)
@@ -535,6 +542,7 @@ unsigned int tsm_screen_get_opts(struct tsm_screen *scr)
        return scr->opts;
 }
 
+SHL_EXPORT
 unsigned int tsm_screen_get_width(struct tsm_screen *con)
 {
        if (!con)
@@ -543,6 +551,7 @@ unsigned int tsm_screen_get_width(struct tsm_screen *con)
        return con->size_x;
 }
 
+SHL_EXPORT
 unsigned int tsm_screen_get_height(struct tsm_screen *con)
 {
        if (!con)
@@ -551,6 +560,7 @@ unsigned int tsm_screen_get_height(struct tsm_screen *con)
        return con->size_y;
 }
 
+SHL_EXPORT
 int tsm_screen_resize(struct tsm_screen *con, unsigned int x,
                      unsigned int y)
 {
@@ -695,6 +705,7 @@ int tsm_screen_resize(struct tsm_screen *con, unsigned int x,
        return 0;
 }
 
+SHL_EXPORT
 int tsm_screen_set_margins(struct tsm_screen *con,
                               unsigned int top, unsigned int bottom)
 {
@@ -723,6 +734,7 @@ int tsm_screen_set_margins(struct tsm_screen *con,
 }
 
 /* set maximum scrollback buffer size */
+SHL_EXPORT
 void tsm_screen_set_max_sb(struct tsm_screen *con,
                               unsigned int max)
 {
@@ -762,6 +774,7 @@ void tsm_screen_set_max_sb(struct tsm_screen *con,
 }
 
 /* clear scrollback buffer */
+SHL_EXPORT
 void tsm_screen_clear_sb(struct tsm_screen *con)
 {
        struct line *iter, *tmp;
@@ -792,6 +805,7 @@ void tsm_screen_clear_sb(struct tsm_screen *con)
        }
 }
 
+SHL_EXPORT
 void tsm_screen_sb_up(struct tsm_screen *con, unsigned int num)
 {
        if (!con || !num)
@@ -811,6 +825,7 @@ void tsm_screen_sb_up(struct tsm_screen *con, unsigned int num)
        }
 }
 
+SHL_EXPORT
 void tsm_screen_sb_down(struct tsm_screen *con, unsigned int num)
 {
        if (!con || !num)
@@ -827,6 +842,7 @@ void tsm_screen_sb_down(struct tsm_screen *con, unsigned int num)
        }
 }
 
+SHL_EXPORT
 void tsm_screen_sb_page_up(struct tsm_screen *con, unsigned int num)
 {
        if (!con || !num)
@@ -835,6 +851,7 @@ void tsm_screen_sb_page_up(struct tsm_screen *con, unsigned int num)
        tsm_screen_sb_up(con, num * con->size_y);
 }
 
+SHL_EXPORT
 void tsm_screen_sb_page_down(struct tsm_screen *con, unsigned int num)
 {
        if (!con || !num)
@@ -843,6 +860,7 @@ void tsm_screen_sb_page_down(struct tsm_screen *con, unsigned int num)
        tsm_screen_sb_down(con, num * con->size_y);
 }
 
+SHL_EXPORT
 void tsm_screen_sb_reset(struct tsm_screen *con)
 {
        if (!con)
@@ -851,6 +869,7 @@ void tsm_screen_sb_reset(struct tsm_screen *con)
        con->sb_pos = NULL;
 }
 
+SHL_EXPORT
 void tsm_screen_set_def_attr(struct tsm_screen *con,
                                 const struct tsm_screen_attr *attr)
 {
@@ -860,6 +879,7 @@ void tsm_screen_set_def_attr(struct tsm_screen *con,
        memcpy(&con->def_attr, attr, sizeof(*attr));
 }
 
+SHL_EXPORT
 void tsm_screen_reset(struct tsm_screen *con)
 {
        unsigned int i;
@@ -879,6 +899,7 @@ void tsm_screen_reset(struct tsm_screen *con)
        }
 }
 
+SHL_EXPORT
 void tsm_screen_set_flags(struct tsm_screen *con, unsigned int flags)
 {
        unsigned int old;
@@ -893,6 +914,7 @@ void tsm_screen_set_flags(struct tsm_screen *con, unsigned int flags)
                con->lines = con->alt_lines;
 }
 
+SHL_EXPORT
 void tsm_screen_reset_flags(struct tsm_screen *con, unsigned int flags)
 {
        unsigned int old;
@@ -907,6 +929,7 @@ void tsm_screen_reset_flags(struct tsm_screen *con, unsigned int flags)
                con->lines = con->main_lines;
 }
 
+SHL_EXPORT
 unsigned int tsm_screen_get_flags(struct tsm_screen *con)
 {
        if (!con)
@@ -915,6 +938,7 @@ unsigned int tsm_screen_get_flags(struct tsm_screen *con)
        return con->flags;
 }
 
+SHL_EXPORT
 unsigned int tsm_screen_get_cursor_x(struct tsm_screen *con)
 {
        if (!con)
@@ -923,6 +947,7 @@ unsigned int tsm_screen_get_cursor_x(struct tsm_screen *con)
        return con->cursor_x;
 }
 
+SHL_EXPORT
 unsigned int tsm_screen_get_cursor_y(struct tsm_screen *con)
 {
        if (!con)
@@ -931,6 +956,7 @@ unsigned int tsm_screen_get_cursor_y(struct tsm_screen *con)
        return con->cursor_y;
 }
 
+SHL_EXPORT
 void tsm_screen_set_tabstop(struct tsm_screen *con)
 {
        if (!con || con->cursor_x >= con->size_x)
@@ -939,6 +965,7 @@ void tsm_screen_set_tabstop(struct tsm_screen *con)
        con->tab_ruler[con->cursor_x] = true;
 }
 
+SHL_EXPORT
 void tsm_screen_reset_tabstop(struct tsm_screen *con)
 {
        if (!con || con->cursor_x >= con->size_x)
@@ -947,6 +974,7 @@ void tsm_screen_reset_tabstop(struct tsm_screen *con)
        con->tab_ruler[con->cursor_x] = false;
 }
 
+SHL_EXPORT
 void tsm_screen_reset_all_tabstops(struct tsm_screen *con)
 {
        unsigned int i;
@@ -958,6 +986,7 @@ void tsm_screen_reset_all_tabstops(struct tsm_screen *con)
                con->tab_ruler[i] = false;
 }
 
+SHL_EXPORT
 void tsm_screen_write(struct tsm_screen *con, tsm_symbol_t ch,
                          const struct tsm_screen_attr *attr)
 {
@@ -994,6 +1023,7 @@ void tsm_screen_write(struct tsm_screen *con, tsm_symbol_t ch,
        con->cursor_x += len;
 }
 
+SHL_EXPORT
 void tsm_screen_newline(struct tsm_screen *con)
 {
        if (!con)
@@ -1003,6 +1033,7 @@ void tsm_screen_newline(struct tsm_screen *con)
        tsm_screen_move_line_home(con);
 }
 
+SHL_EXPORT
 void tsm_screen_scroll_up(struct tsm_screen *con, unsigned int num)
 {
        if (!con || !num)
@@ -1011,6 +1042,7 @@ void tsm_screen_scroll_up(struct tsm_screen *con, unsigned int num)
        screen_scroll_up(con, num);
 }
 
+SHL_EXPORT
 void tsm_screen_scroll_down(struct tsm_screen *con, unsigned int num)
 {
        if (!con || !num)
@@ -1019,6 +1051,7 @@ void tsm_screen_scroll_down(struct tsm_screen *con, unsigned int num)
        screen_scroll_down(con, num);
 }
 
+SHL_EXPORT
 void tsm_screen_move_to(struct tsm_screen *con, unsigned int x,
                            unsigned int y)
 {
@@ -1041,6 +1074,7 @@ void tsm_screen_move_to(struct tsm_screen *con, unsigned int x,
                con->cursor_y = last;
 }
 
+SHL_EXPORT
 void tsm_screen_move_up(struct tsm_screen *con, unsigned int num,
                            bool scroll)
 {
@@ -1065,6 +1099,7 @@ void tsm_screen_move_up(struct tsm_screen *con, unsigned int num,
        }
 }
 
+SHL_EXPORT
 void tsm_screen_move_down(struct tsm_screen *con, unsigned int num,
                              bool scroll)
 {
@@ -1089,6 +1124,7 @@ void tsm_screen_move_down(struct tsm_screen *con, unsigned int num,
        }
 }
 
+SHL_EXPORT
 void tsm_screen_move_left(struct tsm_screen *con, unsigned int num)
 {
        if (!con || !num)
@@ -1106,6 +1142,7 @@ void tsm_screen_move_left(struct tsm_screen *con, unsigned int num)
                con->cursor_x -= num;
 }
 
+SHL_EXPORT
 void tsm_screen_move_right(struct tsm_screen *con, unsigned int num)
 {
        if (!con || !num)
@@ -1120,6 +1157,7 @@ void tsm_screen_move_right(struct tsm_screen *con, unsigned int num)
                con->cursor_x += num;
 }
 
+SHL_EXPORT
 void tsm_screen_move_line_end(struct tsm_screen *con)
 {
        if (!con)
@@ -1128,6 +1166,7 @@ void tsm_screen_move_line_end(struct tsm_screen *con)
        con->cursor_x = con->size_x - 1;
 }
 
+SHL_EXPORT
 void tsm_screen_move_line_home(struct tsm_screen *con)
 {
        if (!con)
@@ -1136,6 +1175,7 @@ void tsm_screen_move_line_home(struct tsm_screen *con)
        con->cursor_x = 0;
 }
 
+SHL_EXPORT
 void tsm_screen_tab_right(struct tsm_screen *con, unsigned int num)
 {
        unsigned int i, j;
@@ -1159,6 +1199,7 @@ void tsm_screen_tab_right(struct tsm_screen *con, unsigned int num)
                con->cursor_x = con->size_x - 1;
 }
 
+SHL_EXPORT
 void tsm_screen_tab_left(struct tsm_screen *con, unsigned int num)
 {
        unsigned int i;
@@ -1181,6 +1222,7 @@ void tsm_screen_tab_left(struct tsm_screen *con, unsigned int num)
        }
 }
 
+SHL_EXPORT
 void tsm_screen_insert_lines(struct tsm_screen *con, unsigned int num)
 {
        unsigned int i, j, max;
@@ -1216,6 +1258,7 @@ void tsm_screen_insert_lines(struct tsm_screen *con, unsigned int num)
        con->cursor_x = 0;
 }
 
+SHL_EXPORT
 void tsm_screen_delete_lines(struct tsm_screen *con, unsigned int num)
 {
        unsigned int i, j, max;
@@ -1251,6 +1294,7 @@ void tsm_screen_delete_lines(struct tsm_screen *con, unsigned int num)
        con->cursor_x = 0;
 }
 
+SHL_EXPORT
 void tsm_screen_insert_chars(struct tsm_screen *con, unsigned int num)
 {
        struct cell *cells;
@@ -1280,6 +1324,7 @@ void tsm_screen_insert_chars(struct tsm_screen *con, unsigned int num)
        }
 }
 
+SHL_EXPORT
 void tsm_screen_delete_chars(struct tsm_screen *con, unsigned int num)
 {
        struct cell *cells;
@@ -1309,6 +1354,7 @@ void tsm_screen_delete_chars(struct tsm_screen *con, unsigned int num)
        }
 }
 
+SHL_EXPORT
 void tsm_screen_erase_cursor(struct tsm_screen *con)
 {
        unsigned int x;
@@ -1324,6 +1370,7 @@ void tsm_screen_erase_cursor(struct tsm_screen *con)
        screen_erase_region(con, x, con->cursor_y, x, con->cursor_y, false);
 }
 
+SHL_EXPORT
 void tsm_screen_erase_chars(struct tsm_screen *con, unsigned int num)
 {
        unsigned int x;
@@ -1340,6 +1387,7 @@ void tsm_screen_erase_chars(struct tsm_screen *con, unsigned int num)
                             false);
 }
 
+SHL_EXPORT
 void tsm_screen_erase_cursor_to_end(struct tsm_screen *con,
                                        bool protect)
 {
@@ -1357,6 +1405,7 @@ void tsm_screen_erase_cursor_to_end(struct tsm_screen *con,
                             con->cursor_y, protect);
 }
 
+SHL_EXPORT
 void tsm_screen_erase_home_to_cursor(struct tsm_screen *con,
                                         bool protect)
 {
@@ -1367,6 +1416,7 @@ void tsm_screen_erase_home_to_cursor(struct tsm_screen *con,
                             con->cursor_y, protect);
 }
 
+SHL_EXPORT
 void tsm_screen_erase_current_line(struct tsm_screen *con,
                                       bool protect)
 {
@@ -1377,6 +1427,7 @@ void tsm_screen_erase_current_line(struct tsm_screen *con,
                             con->cursor_y, protect);
 }
 
+SHL_EXPORT
 void tsm_screen_erase_screen_to_cursor(struct tsm_screen *con,
                                           bool protect)
 {
@@ -1386,6 +1437,7 @@ void tsm_screen_erase_screen_to_cursor(struct tsm_screen *con,
        screen_erase_region(con, 0, 0, con->cursor_x, con->cursor_y, protect);
 }
 
+SHL_EXPORT
 void tsm_screen_erase_cursor_to_screen(struct tsm_screen *con,
                                           bool protect)
 {
@@ -1403,6 +1455,7 @@ void tsm_screen_erase_cursor_to_screen(struct tsm_screen *con,
                             con->size_y - 1, protect);
 }
 
+SHL_EXPORT
 void tsm_screen_erase_screen(struct tsm_screen *con, bool protect)
 {
        if (!con)
@@ -1459,6 +1512,7 @@ static void selection_set(struct tsm_screen *con, struct selection_pos *sel,
        sel->y = y;
 }
 
+SHL_EXPORT
 void tsm_screen_selection_reset(struct tsm_screen *con)
 {
        if (!con)
@@ -1467,6 +1521,7 @@ void tsm_screen_selection_reset(struct tsm_screen *con)
        con->sel_active = false;
 }
 
+SHL_EXPORT
 void tsm_screen_selection_start(struct tsm_screen *con,
                                unsigned int posx,
                                unsigned int posy)
@@ -1479,6 +1534,7 @@ void tsm_screen_selection_start(struct tsm_screen *con,
        memcpy(&con->sel_end, &con->sel_start, sizeof(con->sel_end));
 }
 
+SHL_EXPORT
 void tsm_screen_selection_target(struct tsm_screen *con,
                                 unsigned int posx,
                                 unsigned int posy)
@@ -1511,6 +1567,7 @@ static unsigned int copy_line(struct line *line, char *buf,
 
 /* TODO: This beast definitely needs some "beautification", however, it's meant
  * as a "proof-of-concept" so its enough for now. */
+SHL_EXPORT
 int tsm_screen_selection_copy(struct tsm_screen *con, char **out)
 {
        unsigned int len, i;
@@ -1718,6 +1775,7 @@ int tsm_screen_selection_copy(struct tsm_screen *con, char **out)
        return pos - str;
 }
 
+SHL_EXPORT
 void tsm_screen_draw(struct tsm_screen *con,
                         tsm_screen_prepare_cb prepare_cb,
                         tsm_screen_draw_cb draw_cb,
index 0ca79fb..b53878a 100644 (file)
@@ -61,6 +61,7 @@
 #include "external/wcwidth.h"
 #include "shl_array.h"
 #include "shl_hashtable.h"
+#include "shl_misc.h"
 #include "tsm_unicode.h"
 
 /*
@@ -97,6 +98,7 @@
  * push the new symbol into the symbol table.
  */
 
+SHL_EXPORT
 const tsm_symbol_t tsm_symbol_default = 0;
 
 struct tsm_symbol_table {
@@ -147,6 +149,7 @@ static bool cmp_ucs4(const void *a, const void *b)
        }
 }
 
+SHL_EXPORT
 int tsm_symbol_table_new(struct tsm_symbol_table **out)
 {
        struct tsm_symbol_table *tbl;
@@ -185,6 +188,7 @@ err_free:
        return ret;
 }
 
+SHL_EXPORT
 void tsm_symbol_table_ref(struct tsm_symbol_table *tbl)
 {
        if (!tbl || !tbl->ref)
@@ -193,6 +197,7 @@ void tsm_symbol_table_ref(struct tsm_symbol_table *tbl)
        ++tbl->ref;
 }
 
+SHL_EXPORT
 void tsm_symbol_table_unref(struct tsm_symbol_table *tbl)
 {
        if (!tbl || !tbl->ref || --tbl->ref)
@@ -203,6 +208,7 @@ void tsm_symbol_table_unref(struct tsm_symbol_table *tbl)
        free(tbl);
 }
 
+SHL_EXPORT
 tsm_symbol_t tsm_symbol_make(uint32_t ucs4)
 {
        if (ucs4 > TSM_UCS4_MAX)
@@ -222,6 +228,7 @@ tsm_symbol_t tsm_symbol_make(uint32_t ucs4)
  * This always returns a valid value. If an error happens, the default character
  * is returned. If \size is NULL, then the size value is omitted.
  */
+SHL_EXPORT
 const uint32_t *tsm_symbol_get(struct tsm_symbol_table *tbl,
                               tsm_symbol_t *sym, size_t *size)
 {
@@ -268,6 +275,7 @@ const uint32_t *tsm_symbol_get(struct tsm_symbol_table *tbl,
        return ucs4;
 }
 
+SHL_EXPORT
 tsm_symbol_t tsm_symbol_append(struct tsm_symbol_table *tbl,
                               tsm_symbol_t sym, uint32_t ucs4)
 {
@@ -332,6 +340,7 @@ err_id:
        return sym;
 }
 
+SHL_EXPORT
 unsigned int tsm_symbol_get_width(struct tsm_symbol_table *tbl,
                                  tsm_symbol_t sym)
 {
@@ -376,6 +385,7 @@ unsigned int tsm_symbol_get_width(struct tsm_symbol_table *tbl,
  * 0xFFFF or 0xFFFE.
  */
 
+SHL_EXPORT
 unsigned int tsm_ucs4_get_width(uint32_t ucs4)
 {
        int ret;
@@ -387,6 +397,7 @@ unsigned int tsm_ucs4_get_width(uint32_t ucs4)
        return ret;
 }
 
+SHL_EXPORT
 size_t tsm_ucs4_to_utf8(uint32_t g, char *txt)
 {
        if (g >= 0xd800 && g <= 0xdfff)
@@ -419,6 +430,7 @@ size_t tsm_ucs4_to_utf8(uint32_t g, char *txt)
        }
 }
 
+SHL_EXPORT
 char *tsm_ucs4_to_utf8_alloc(const uint32_t *ucs4, size_t len, size_t *len_out)
 {
        char *val;
@@ -495,6 +507,7 @@ struct tsm_utf8_mach {
        uint32_t ch;
 };
 
+SHL_EXPORT
 int tsm_utf8_mach_new(struct tsm_utf8_mach **out)
 {
        struct tsm_utf8_mach *mach;
@@ -513,6 +526,7 @@ int tsm_utf8_mach_new(struct tsm_utf8_mach **out)
        return 0;
 }
 
+SHL_EXPORT
 void tsm_utf8_mach_free(struct tsm_utf8_mach *mach)
 {
        if (!mach)
@@ -521,6 +535,7 @@ void tsm_utf8_mach_free(struct tsm_utf8_mach *mach)
        free(mach);
 }
 
+SHL_EXPORT
 int tsm_utf8_mach_feed(struct tsm_utf8_mach *mach, char ci)
 {
        uint32_t c;
@@ -590,6 +605,7 @@ int tsm_utf8_mach_feed(struct tsm_utf8_mach *mach, char ci)
        return mach->state;
 }
 
+SHL_EXPORT
 uint32_t tsm_utf8_mach_get(struct tsm_utf8_mach *mach)
 {
        if (!mach || mach->state != TSM_UTF8_ACCEPT)
@@ -598,6 +614,7 @@ uint32_t tsm_utf8_mach_get(struct tsm_utf8_mach *mach)
        return mach->ch;
 }
 
+SHL_EXPORT
 void tsm_utf8_mach_reset(struct tsm_utf8_mach *mach)
 {
        if (!mach)
index 892bde9..5817afc 100644 (file)
@@ -54,6 +54,7 @@
 #include <string.h>
 #include <xkbcommon/xkbcommon-keysyms.h>
 #include "shl_llog.h"
+#include "shl_misc.h"
 #include "tsm_screen.h"
 #include "tsm_unicode.h"
 #include "tsm_vte.h"
@@ -360,6 +361,7 @@ static void copy_bcolor(struct tsm_screen_attr *dest,
        dest->bb = src->bb;
 }
 
+SHL_EXPORT
 int tsm_vte_new(struct tsm_vte **out, struct tsm_screen *con,
                tsm_vte_write_cb write_cb, void *data,
                tsm_log_t log)
@@ -402,6 +404,7 @@ err_free:
        return ret;
 }
 
+SHL_EXPORT
 void tsm_vte_ref(struct tsm_vte *vte)
 {
        if (!vte)
@@ -410,6 +413,7 @@ void tsm_vte_ref(struct tsm_vte *vte)
        vte->ref++;
 }
 
+SHL_EXPORT
 void tsm_vte_unref(struct tsm_vte *vte)
 {
        if (!vte || !vte->ref)
@@ -424,6 +428,7 @@ void tsm_vte_unref(struct tsm_vte *vte)
        free(vte);
 }
 
+SHL_EXPORT
 int tsm_vte_set_palette(struct tsm_vte *vte, const char *palette)
 {
        char *tmp = NULL;
@@ -590,6 +595,7 @@ static void restore_state(struct tsm_vte *vte)
  * same state as when the VTE was created. This does not affect the console,
  * though.
  */
+SHL_EXPORT
 void tsm_vte_reset(struct tsm_vte *vte)
 {
        if (!vte)
@@ -622,6 +628,7 @@ void tsm_vte_reset(struct tsm_vte *vte)
        reset_state(vte);
 }
 
+SHL_EXPORT
 void tsm_vte_hard_reset(struct tsm_vte *vte)
 {
        tsm_vte_reset(vte);
@@ -2184,6 +2191,7 @@ static void parse_data(struct tsm_vte *vte, uint32_t raw)
        llog_warn(vte, "unhandled input %u in state %d", raw, vte->state);
 }
 
+SHL_EXPORT
 void tsm_vte_input(struct tsm_vte *vte, const char *u8, size_t len)
 {
        int state;
@@ -2214,6 +2222,7 @@ void tsm_vte_input(struct tsm_vte *vte, const char *u8, size_t len)
        --vte->parse_cnt;
 }
 
+SHL_EXPORT
 bool tsm_vte_handle_keyboard(struct tsm_vte *vte, uint32_t keysym,
                             uint32_t ascii, unsigned int mods,
                             uint32_t unicode)
index 06d90fc..249ff9c 100644 (file)
@@ -66,6 +66,7 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <string.h>
+#include "shl_misc.h"
 #include "tsm_vte.h"
 
 /*
@@ -73,6 +74,7 @@
  * characters 33-126. These are all graphics characters defined in ASCII. The
  * first an last entry are never used so we can safely set them to anything.
  */
+SHL_EXPORT
 tsm_vte_charset tsm_vte_unicode_lower = {
        [0] = 0,
        [1] = 33,
@@ -179,6 +181,7 @@ tsm_vte_charset tsm_vte_unicode_lower = {
  * for the definitions of each symbol. Again, the first an last entry are never
  * used so set them to 0.
  */
+SHL_EXPORT
 tsm_vte_charset tsm_vte_unicode_upper = {
        [0] = 0,
        [1] = 161,
@@ -287,6 +290,7 @@ tsm_vte_charset tsm_vte_unicode_upper = {
  * This is very similar to unicode_upper, however, few symbols differ so do not
  * mix them up!
  */
+SHL_EXPORT
 tsm_vte_charset tsm_vte_dec_supplemental_graphics = {
        [0] = 0,
        [1] = 161,
@@ -396,6 +400,7 @@ tsm_vte_charset tsm_vte_dec_supplemental_graphics = {
  * commonly used for ASCII drawings. It depends on the Unicode Standard 3.2 for
  * the extended horizontal scan-line characters 3, 5, 7, and 9.
  */
+SHL_EXPORT
 tsm_vte_charset tsm_vte_dec_special_graphics = {
        [0] = 0,
        [1] = 33,
index 021d290..0c3154a 100644 (file)
@@ -39,6 +39,7 @@
 #include <xf86drmMode.h>
 #include "eloop.h"
 #include "log.h"
+#include "shl_misc.h"
 #include "uterm_drm_shared_internal.h"
 #include "uterm_drm2d_internal.h"
 #include "uterm_video.h"
@@ -380,4 +381,5 @@ static const struct uterm_video_module drm2d_module = {
        .ops = &drm2d_video_ops,
 };
 
+SHL_EXPORT
 const struct uterm_video_module *UTERM_VIDEO_DRM2D = &drm2d_module;
index 0ba9225..c8797b9 100644 (file)
@@ -46,6 +46,7 @@
 #include <xf86drmMode.h>
 #include "eloop.h"
 #include "log.h"
+#include "shl_misc.h"
 #include "static_gl.h"
 #include "uterm_drm_shared_internal.h"
 #include "uterm_drm3d_internal.h"
@@ -569,4 +570,5 @@ static const struct uterm_video_module drm3d_module = {
        .ops = &drm_video_ops,
 };
 
+SHL_EXPORT
 const struct uterm_video_module *UTERM_VIDEO_DRM3D = &drm3d_module;
index 7ee96ab..1d06138 100644 (file)
@@ -37,6 +37,7 @@
 #include <sys/mman.h>
 #include <unistd.h>
 #include "log.h"
+#include "shl_misc.h"
 #include "uterm_fbdev_internal.h"
 #include "uterm_video.h"
 #include "uterm_video_internal.h"
@@ -651,4 +652,5 @@ static const struct uterm_video_module fbdev_module = {
        .ops = &fbdev_video_ops,
 };
 
+SHL_EXPORT
 const struct uterm_video_module *UTERM_VIDEO_FBDEV = &fbdev_module;
index b20a128..ba95771 100644 (file)
@@ -40,6 +40,7 @@
 #include "log.h"
 #include "shl_dlist.h"
 #include "shl_hook.h"
+#include "shl_misc.h"
 #include "uterm_input.h"
 #include "uterm_input_internal.h"
 
@@ -215,6 +216,7 @@ static void input_free_dev(struct uterm_input_dev *dev)
        free(dev);
 }
 
+SHL_EXPORT
 int uterm_input_new(struct uterm_input **out,
                    struct ev_eloop *eloop,
                    const char *model,
@@ -269,6 +271,7 @@ err_free:
        return ret;
 }
 
+SHL_EXPORT
 void uterm_input_ref(struct uterm_input *input)
 {
        if (!input || !input->ref)
@@ -277,6 +280,7 @@ void uterm_input_ref(struct uterm_input *input)
        ++input->ref;
 }
 
+SHL_EXPORT
 void uterm_input_unref(struct uterm_input *input)
 {
        struct uterm_input_dev *dev;
@@ -352,6 +356,7 @@ err_ioctl:
        return 0;
 }
 
+SHL_EXPORT
 void uterm_input_add_dev(struct uterm_input *input, const char *node)
 {
        unsigned int capabilities;
@@ -368,6 +373,7 @@ void uterm_input_add_dev(struct uterm_input *input, const char *node)
        input_new_dev(input, node, capabilities);
 }
 
+SHL_EXPORT
 void uterm_input_remove_dev(struct uterm_input *input, const char *node)
 {
        struct shl_dlist *iter;
@@ -387,6 +393,7 @@ void uterm_input_remove_dev(struct uterm_input *input, const char *node)
        }
 }
 
+SHL_EXPORT
 int uterm_input_register_cb(struct uterm_input *input,
                                uterm_input_cb cb,
                                void *data)
@@ -397,6 +404,7 @@ int uterm_input_register_cb(struct uterm_input *input,
        return shl_hook_add_cast(input->hook, cb, data, false);
 }
 
+SHL_EXPORT
 void uterm_input_unregister_cb(struct uterm_input *input,
                                uterm_input_cb cb,
                                void *data)
@@ -407,6 +415,7 @@ void uterm_input_unregister_cb(struct uterm_input *input,
        shl_hook_rm_cast(input->hook, cb, data);
 }
 
+SHL_EXPORT
 void uterm_input_sleep(struct uterm_input *input)
 {
        struct shl_dlist *iter;
@@ -429,6 +438,7 @@ void uterm_input_sleep(struct uterm_input *input)
        }
 }
 
+SHL_EXPORT
 void uterm_input_wake_up(struct uterm_input *input)
 {
        struct shl_dlist *iter, *tmp;
@@ -454,6 +464,7 @@ void uterm_input_wake_up(struct uterm_input *input)
        }
 }
 
+SHL_EXPORT
 bool uterm_input_is_awake(struct uterm_input *input)
 {
        if (!input)
index 409b16e..b3a78fc 100644 (file)
@@ -42,6 +42,7 @@
 #include <unistd.h>
 #include "log.h"
 #include "shl_dlist.h"
+#include "shl_misc.h"
 #include "uterm_monitor.h"
 #include "uterm_systemd_internal.h"
 
@@ -758,6 +759,7 @@ static void monitor_udev_event(struct ev_fd *fd,
        }
 }
 
+SHL_EXPORT
 int uterm_monitor_new(struct uterm_monitor **out,
                        struct ev_eloop *eloop,
                        uterm_monitor_cb cb,
@@ -874,6 +876,7 @@ err_free:
        return ret;
 }
 
+SHL_EXPORT
 void uterm_monitor_ref(struct uterm_monitor *mon)
 {
        if (!mon || !mon->ref)
@@ -882,6 +885,7 @@ void uterm_monitor_ref(struct uterm_monitor *mon)
        ++mon->ref;
 }
 
+SHL_EXPORT
 void uterm_monitor_unref(struct uterm_monitor *mon)
 {
        struct uterm_monitor_seat *seat;
@@ -904,6 +908,7 @@ void uterm_monitor_unref(struct uterm_monitor *mon)
        free(mon);
 }
 
+SHL_EXPORT
 void uterm_monitor_scan(struct uterm_monitor *mon)
 {
        struct udev_enumerate *e;
@@ -970,6 +975,7 @@ out_enum:
        udev_enumerate_unref(e);
 }
 
+SHL_EXPORT
 void uterm_monitor_set_seat_data(struct uterm_monitor_seat *seat, void *data)
 {
        if (!seat)
@@ -978,6 +984,7 @@ void uterm_monitor_set_seat_data(struct uterm_monitor_seat *seat, void *data)
        seat->data = data;
 }
 
+SHL_EXPORT
 void uterm_monitor_set_dev_data(struct uterm_monitor_dev *dev, void *data)
 {
        if (!dev)
index 6186bb2..bcc35b0 100644 (file)
 #include "log.h"
 #include "shl_dlist.h"
 #include "shl_hook.h"
+#include "shl_misc.h"
 #include "uterm_video.h"
 #include "uterm_video_internal.h"
 
 #define LOG_SUBSYSTEM "video"
 
+SHL_EXPORT
 const char *uterm_dpms_to_name(int dpms)
 {
        switch (dpms) {
@@ -59,6 +61,7 @@ const char *uterm_dpms_to_name(int dpms)
        }
 }
 
+SHL_EXPORT
 bool uterm_video_available(const struct uterm_video_module *mod)
 {
        if (!mod)
@@ -70,6 +73,7 @@ bool uterm_video_available(const struct uterm_video_module *mod)
        return true;
 }
 
+SHL_EXPORT
 int mode_new(struct uterm_mode **out, const struct mode_ops *ops)
 {
        struct uterm_mode *mode;
@@ -97,6 +101,7 @@ err_free:
        return ret;
 }
 
+SHL_EXPORT
 void uterm_mode_ref(struct uterm_mode *mode)
 {
        if (!mode || !mode->ref)
@@ -105,6 +110,7 @@ void uterm_mode_ref(struct uterm_mode *mode)
        ++mode->ref;
 }
 
+SHL_EXPORT
 void uterm_mode_unref(struct uterm_mode *mode)
 {
        if (!mode || !mode->ref || --mode->ref)
@@ -114,6 +120,7 @@ void uterm_mode_unref(struct uterm_mode *mode)
        free(mode);
 }
 
+SHL_EXPORT
 int uterm_mode_bind(struct uterm_mode *mode, struct uterm_display *disp)
 {
        if (!mode || !disp || mode->disp)
@@ -126,6 +133,7 @@ int uterm_mode_bind(struct uterm_mode *mode, struct uterm_display *disp)
        return 0;
 }
 
+SHL_EXPORT
 void uterm_mode_unbind(struct uterm_mode *mode)
 {
        if (!mode)
@@ -136,6 +144,7 @@ void uterm_mode_unbind(struct uterm_mode *mode)
        uterm_mode_unref(mode);
 }
 
+SHL_EXPORT
 struct uterm_mode *uterm_mode_next(struct uterm_mode *mode)
 {
        if (!mode || mode->list.next == &mode->disp->modes)
@@ -144,6 +153,7 @@ struct uterm_mode *uterm_mode_next(struct uterm_mode *mode)
        return shl_dlist_entry(mode->list.next, struct uterm_mode, list);
 }
 
+SHL_EXPORT
 const char *uterm_mode_get_name(const struct uterm_mode *mode)
 {
        if (!mode)
@@ -152,6 +162,7 @@ const char *uterm_mode_get_name(const struct uterm_mode *mode)
        return VIDEO_CALL(mode->ops->get_name, NULL, mode);
 }
 
+SHL_EXPORT
 unsigned int uterm_mode_get_width(const struct uterm_mode *mode)
 {
        if (!mode)
@@ -160,6 +171,7 @@ unsigned int uterm_mode_get_width(const struct uterm_mode *mode)
        return VIDEO_CALL(mode->ops->get_width, 0, mode);
 }
 
+SHL_EXPORT
 unsigned int uterm_mode_get_height(const struct uterm_mode *mode)
 {
        if (!mode)
@@ -249,6 +261,7 @@ err_free:
        return ret;
 }
 
+SHL_EXPORT
 void uterm_display_ref(struct uterm_display *disp)
 {
        if (!disp || !disp->ref)
@@ -257,6 +270,7 @@ void uterm_display_ref(struct uterm_display *disp)
        ++disp->ref;
 }
 
+SHL_EXPORT
 void uterm_display_unref(struct uterm_display *disp)
 {
        struct uterm_mode *mode;
@@ -278,6 +292,7 @@ void uterm_display_unref(struct uterm_display *disp)
        free(disp);
 }
 
+SHL_EXPORT
 int uterm_display_bind(struct uterm_display *disp, struct uterm_video *video)
 {
        int ret;
@@ -297,6 +312,7 @@ int uterm_display_bind(struct uterm_display *disp, struct uterm_video *video)
        return 0;
 }
 
+SHL_EXPORT
 void uterm_display_unbind(struct uterm_display *disp)
 {
        if (!disp || !disp->video)
@@ -310,6 +326,7 @@ void uterm_display_unbind(struct uterm_display *disp)
        uterm_display_unref(disp);
 }
 
+SHL_EXPORT
 struct uterm_display *uterm_display_next(struct uterm_display *disp)
 {
        if (!disp || !disp->video || disp->list.next == &disp->video->displays)
@@ -318,6 +335,7 @@ struct uterm_display *uterm_display_next(struct uterm_display *disp)
        return shl_dlist_entry(disp->list.next, struct uterm_display, list);
 }
 
+SHL_EXPORT
 int uterm_display_register_cb(struct uterm_display *disp, uterm_display_cb cb,
                              void *data)
 {
@@ -327,6 +345,7 @@ int uterm_display_register_cb(struct uterm_display *disp, uterm_display_cb cb,
        return shl_hook_add_cast(disp->hook, cb, data, false);
 }
 
+SHL_EXPORT
 void uterm_display_unregister_cb(struct uterm_display *disp,
                                 uterm_display_cb cb, void *data)
 {
@@ -336,6 +355,7 @@ void uterm_display_unregister_cb(struct uterm_display *disp,
        shl_hook_rm_cast(disp->hook, cb, data);
 }
 
+SHL_EXPORT
 struct uterm_mode *uterm_display_get_modes(struct uterm_display *disp)
 {
        if (!disp || shl_dlist_empty(&disp->modes))
@@ -344,6 +364,7 @@ struct uterm_mode *uterm_display_get_modes(struct uterm_display *disp)
        return shl_dlist_entry(disp->modes.next, struct uterm_mode, list);
 }
 
+SHL_EXPORT
 struct uterm_mode *uterm_display_get_current(struct uterm_display *disp)
 {
        if (!disp)
@@ -352,6 +373,7 @@ struct uterm_mode *uterm_display_get_current(struct uterm_display *disp)
        return disp->current_mode;
 }
 
+SHL_EXPORT
 struct uterm_mode *uterm_display_get_default(struct uterm_display *disp)
 {
        if (!disp)
@@ -360,6 +382,7 @@ struct uterm_mode *uterm_display_get_default(struct uterm_display *disp)
        return disp->default_mode;
 }
 
+SHL_EXPORT
 int uterm_display_get_state(struct uterm_display *disp)
 {
        if (!disp)
@@ -379,6 +402,7 @@ int uterm_display_get_state(struct uterm_display *disp)
        }
 }
 
+SHL_EXPORT
 int uterm_display_activate(struct uterm_display *disp, struct uterm_mode *mode)
 {
        if (!disp || !disp->video || display_is_online(disp) ||
@@ -391,6 +415,7 @@ int uterm_display_activate(struct uterm_display *disp, struct uterm_mode *mode)
        return VIDEO_CALL(disp->ops->activate, 0, disp, mode);
 }
 
+SHL_EXPORT
 void uterm_display_deactivate(struct uterm_display *disp)
 {
        if (!disp || !display_is_online(disp))
@@ -399,6 +424,7 @@ void uterm_display_deactivate(struct uterm_display *disp)
        VIDEO_CALL(disp->ops->deactivate, 0, disp);
 }
 
+SHL_EXPORT
 int uterm_display_set_dpms(struct uterm_display *disp, int state)
 {
        if (!disp || !display_is_online(disp) || !video_is_awake(disp->video))
@@ -407,6 +433,7 @@ int uterm_display_set_dpms(struct uterm_display *disp, int state)
        return VIDEO_CALL(disp->ops->set_dpms, 0, disp, state);
 }
 
+SHL_EXPORT
 int uterm_display_get_dpms(const struct uterm_display *disp)
 {
        if (!disp || !disp->video)
@@ -415,6 +442,7 @@ int uterm_display_get_dpms(const struct uterm_display *disp)
        return disp->dpms;
 }
 
+SHL_EXPORT
 int uterm_display_use(struct uterm_display *disp, bool *opengl)
 {
        if (!disp || !display_is_online(disp))
@@ -423,6 +451,7 @@ int uterm_display_use(struct uterm_display *disp, bool *opengl)
        return VIDEO_CALL(disp->ops->use, -EOPNOTSUPP, disp, opengl);
 }
 
+SHL_EXPORT
 int uterm_display_get_buffers(struct uterm_display *disp,
                              struct uterm_video_buffer *buffer,
                              unsigned int formats)
@@ -434,6 +463,7 @@ int uterm_display_get_buffers(struct uterm_display *disp,
                          formats);
 }
 
+SHL_EXPORT
 int uterm_display_swap(struct uterm_display *disp, bool immediate)
 {
        if (!disp || !display_is_online(disp) || !video_is_awake(disp->video))
@@ -442,6 +472,7 @@ int uterm_display_swap(struct uterm_display *disp, bool immediate)
        return VIDEO_CALL(disp->ops->swap, 0, disp, immediate);
 }
 
+SHL_EXPORT
 bool uterm_display_is_swapping(struct uterm_display *disp)
 {
        if (!disp)
@@ -450,6 +481,7 @@ bool uterm_display_is_swapping(struct uterm_display *disp)
        return disp->vblank_scheduled || (disp->flags & DISPLAY_VSYNC);
 }
 
+SHL_EXPORT
 int uterm_display_fill(struct uterm_display *disp,
                       uint8_t r, uint8_t g, uint8_t b,
                       unsigned int x, unsigned int y,
@@ -462,6 +494,7 @@ int uterm_display_fill(struct uterm_display *disp,
                          width, height);
 }
 
+SHL_EXPORT
 int uterm_display_blit(struct uterm_display *disp,
                       const struct uterm_video_buffer *buf,
                       unsigned int x, unsigned int y)
@@ -472,6 +505,7 @@ int uterm_display_blit(struct uterm_display *disp,
        return VIDEO_CALL(disp->ops->blit, -EOPNOTSUPP, disp, buf, x, y);
 }
 
+SHL_EXPORT
 int uterm_display_fake_blend(struct uterm_display *disp,
                             const struct uterm_video_buffer *buf,
                             unsigned int x, unsigned int y,
@@ -497,6 +531,7 @@ int uterm_display_fake_blend(struct uterm_display *disp,
        return VIDEO_CALL(disp->ops->fake_blendv, -EOPNOTSUPP, disp, &req, 1);
 }
 
+SHL_EXPORT
 int uterm_display_fake_blendv(struct uterm_display *disp,
                              const struct uterm_video_blend_req *req,
                              size_t num)
@@ -507,6 +542,7 @@ int uterm_display_fake_blendv(struct uterm_display *disp,
        return VIDEO_CALL(disp->ops->fake_blendv, -EOPNOTSUPP, disp, req, num);
 }
 
+SHL_EXPORT
 int uterm_video_new(struct uterm_video **out, struct ev_eloop *eloop,
                    const char *node, const struct uterm_video_module *mod)
 {
@@ -548,6 +584,7 @@ err_free:
        return ret;
 }
 
+SHL_EXPORT
 void uterm_video_ref(struct uterm_video *video)
 {
        if (!video || !video->ref)
@@ -556,6 +593,7 @@ void uterm_video_ref(struct uterm_video *video)
        ++video->ref;
 }
 
+SHL_EXPORT
 void uterm_video_unref(struct uterm_video *video)
 {
        struct uterm_display *disp;
@@ -577,6 +615,7 @@ void uterm_video_unref(struct uterm_video *video)
        free(video);
 }
 
+SHL_EXPORT
 void uterm_video_segfault(struct uterm_video *video)
 {
        if (!video)
@@ -585,6 +624,7 @@ void uterm_video_segfault(struct uterm_video *video)
        VIDEO_CALL(video->ops->segfault, 0, video);
 }
 
+SHL_EXPORT
 struct uterm_display *uterm_video_get_displays(struct uterm_video *video)
 {
        if (!video || shl_dlist_empty(&video->displays))
@@ -594,6 +634,7 @@ struct uterm_display *uterm_video_get_displays(struct uterm_video *video)
                               list);
 }
 
+SHL_EXPORT
 int uterm_video_register_cb(struct uterm_video *video, uterm_video_cb cb,
                                void *data)
 {
@@ -603,6 +644,7 @@ int uterm_video_register_cb(struct uterm_video *video, uterm_video_cb cb,
        return shl_hook_add_cast(video->hook, cb, data, false);
 }
 
+SHL_EXPORT
 void uterm_video_unregister_cb(struct uterm_video *video, uterm_video_cb cb,
                                void *data)
 {
@@ -612,6 +654,7 @@ void uterm_video_unregister_cb(struct uterm_video *video, uterm_video_cb cb,
        shl_hook_rm_cast(video->hook, cb, data);
 }
 
+SHL_EXPORT
 void uterm_video_sleep(struct uterm_video *video)
 {
        if (!video || !video_is_awake(video))
@@ -624,6 +667,7 @@ void uterm_video_sleep(struct uterm_video *video)
        VIDEO_CALL(video->ops->sleep, 0, video);
 }
 
+SHL_EXPORT
 int uterm_video_wake_up(struct uterm_video *video)
 {
        int ret;
@@ -646,11 +690,13 @@ int uterm_video_wake_up(struct uterm_video *video)
        return 0;
 }
 
+SHL_EXPORT
 bool uterm_video_is_awake(struct uterm_video *video)
 {
        return video && video_is_awake(video);
 }
 
+SHL_EXPORT
 void uterm_video_poll(struct uterm_video *video)
 {
        if (!video)
index 4b6fdd1..0e0e04c 100644 (file)
@@ -813,6 +813,7 @@ static int seat_find_vt(const char *seat, char **out)
        return 0;
 }
 
+SHL_EXPORT
 int uterm_vt_allocate(struct uterm_vt_master *vtm,
                      struct uterm_vt **out,
                      unsigned int allowed_types,
@@ -903,6 +904,7 @@ err_free:
        return ret;
 }
 
+SHL_EXPORT
 void uterm_vt_deallocate(struct uterm_vt *vt)
 {
        if (!vt || !vt->vtm)
@@ -921,6 +923,7 @@ void uterm_vt_deallocate(struct uterm_vt *vt)
        uterm_vt_unref(vt);
 }
 
+SHL_EXPORT
 void uterm_vt_ref(struct uterm_vt *vt)
 {
        if (!vt || !vt->ref)
@@ -929,6 +932,7 @@ void uterm_vt_ref(struct uterm_vt *vt)
        ++vt->ref;
 }
 
+SHL_EXPORT
 void uterm_vt_unref(struct uterm_vt *vt)
 {
        if (!vt || !vt->ref || --vt->ref)
@@ -938,6 +942,7 @@ void uterm_vt_unref(struct uterm_vt *vt)
        free(vt);
 }
 
+SHL_EXPORT
 int uterm_vt_activate(struct uterm_vt *vt)
 {
        if (!vt || !vt->vtm)
@@ -949,6 +954,7 @@ int uterm_vt_activate(struct uterm_vt *vt)
                return fake_activate(vt);
 }
 
+SHL_EXPORT
 int uterm_vt_deactivate(struct uterm_vt *vt)
 {
        if (!vt || !vt->vtm)
@@ -960,6 +966,7 @@ int uterm_vt_deactivate(struct uterm_vt *vt)
                return fake_deactivate(vt);
 }
 
+SHL_EXPORT
 void uterm_vt_retry(struct uterm_vt *vt)
 {
        if (!vt || !vt->vtm)
@@ -969,6 +976,7 @@ void uterm_vt_retry(struct uterm_vt *vt)
                real_retry(vt);
 }
 
+SHL_EXPORT
 unsigned int uterm_vt_get_type(struct uterm_vt *vt)
 {
        if (!vt)
@@ -977,6 +985,7 @@ unsigned int uterm_vt_get_type(struct uterm_vt *vt)
        return vt->mode;
 }
 
+SHL_EXPORT
 int uterm_vt_master_new(struct uterm_vt_master **out,
                        struct ev_eloop *eloop)
 {
@@ -998,6 +1007,7 @@ int uterm_vt_master_new(struct uterm_vt_master **out,
        return 0;
 }
 
+SHL_EXPORT
 void uterm_vt_master_ref(struct uterm_vt_master *vtm)
 {
        if (!vtm || !vtm->ref)
@@ -1008,6 +1018,7 @@ void uterm_vt_master_ref(struct uterm_vt_master *vtm)
 
 /* Drops a reference to the VT-master. If the reference drops to 0, all
  * allocated VTs are deallocated and the VT-master is destroyed. */
+SHL_EXPORT
 void uterm_vt_master_unref(struct uterm_vt_master *vtm)
 {
        struct uterm_vt *vt;
@@ -1029,6 +1040,7 @@ void uterm_vt_master_unref(struct uterm_vt_master *vtm)
 /* Calls uterm_vt_activate() on all allocated VTs on this master. Returns
  * number of VTs that returned -EINPROGRESS or a negative error code on failure.
  * See uterm_vt_activate() for information. */
+SHL_EXPORT
 int uterm_vt_master_activate_all(struct uterm_vt_master *vtm)
 {
        struct uterm_vt *vt;
@@ -1057,6 +1069,7 @@ int uterm_vt_master_activate_all(struct uterm_vt_master *vtm)
 /* Calls uterm_vt_deactivate() on all allocated VTs on this master. Returns
  * number of VTs that returned -EINPROGRESS or a negative error code on failure.
  * See uterm_vt_deactivate() for information. */
+SHL_EXPORT
 int uterm_vt_master_deactivate_all(struct uterm_vt_master *vtm)
 {
        struct uterm_vt *vt;