Improve Autotools build system for libgeany

Checks if the compiler supports -fvisibility and the linker supports
-dynamic-list arguments and use them instead of hardcoding. The new
geany-lib.m4 also accomodates future use of Libtool versioning.
This commit is contained in:
Matthew Brush 2014-10-13 23:07:11 -07:00 committed by Thomas Martitz
parent d33758da92
commit eb36500ac4
7 changed files with 71 additions and 16 deletions

View File

@ -122,6 +122,9 @@ AC_SUBST([pkgdatadir])
GEANY_CHECK_DOCUTILS
GEANY_CHECK_DOXYGEN
# libgeany
GEANY_LIB_INIT
# Output
AC_CONFIG_FILES([
Makefile

48
m4/geany-lib.m4 Normal file
View File

@ -0,0 +1,48 @@
AC_DEFUN([GEANY_LIB_INIT],
[
dnl In the future, if we want to use libtool/library versioning, we can
dnl set these variables accordingly. For now its the same as if not specified (0:0:0)
libgeany_current=0
libgeany_revision=0
libgeany_age=0
dnl Try and see if we can use -fvisibility compiler option and GCC`s
dnl `__attribute__((visibility(...)))` extension and use it if so.
AC_MSG_CHECKING([whether compiler supports -fvisibility])
libgeany_backup_cflags=$CFLAGS
CFLAGS=-fvisibility=hidden
AC_TRY_COMPILE([], [
__attribute__ ((visibility ("default")))
int main(int argc, char **argv) { return 0; }
], [
LIBGEANY_CFLAGS="${CFLAGS}"
AC_MSG_RESULT([yes])
], [
LIBGEANY_CFLAGS=""
AC_MSG_RESULT([no])
])
CFLAGS="${libgeany_backup_cflags}"
dnl Try and see if we can use our list of dynamically exported symbols with
dnl the linker and use it if so.
AC_MSG_CHECKING([whether linker supports --dynamic-list])
libgeany_backup_ldflags=$LDFLAGS
LDFLAGS=-Wl,--dynamic-list="${srcdir}/src/dynamicsymbols.list"
AC_LINK_IFELSE([
AC_LANG_PROGRAM([], [])
], [
LIBGEANY_LIBS="-Wl,--dynamic-list=\"\$(top_srcdir)/src/dynamicsymbols.list\""
AC_MSG_RESULT([yes])
], [
LIBGEANY_LIBS=""
AC_MSG_RESULT([no])
])
LDFLAGS="${libgeany_backup_ldflags}"
LIBGEANY_LIBS="${LIBGEANY_LIBS} -version-info ${libgeany_current}:${libgeany_revision}:${libgeany_age}"
AC_SUBST([LIBGEANY_CFLAGS])
AC_SUBST([LIBGEANY_LIBS])
])

View File

@ -140,9 +140,10 @@ src/XPM.h \
$(LEXER_SRCS)
libscintilla_la_SOURCES = $(SRCS)
libscintilla_la_LDFLAGS = @LIBGEANY_LIBS@
AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)/include -I$(srcdir)/src -I$(srcdir)/lexlib @GTK_CFLAGS@ \
-fvisibility=hidden
AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)/include -I$(srcdir)/src -I$(srcdir)/lexlib \
@GTK_CFLAGS@ @LIBGEANY_CFLAGS@
marshallers: gtk/scintilla-marshal.list
glib-genmarshal --prefix scintilla_marshal gtk/scintilla-marshal.list --header > gtk/scintilla-marshal.h

View File

@ -102,11 +102,11 @@ AM_CPPFLAGS = \
-I$(top_srcdir) \
-I$(top_srcdir)/scintilla/include \
-I$(top_srcdir)/tagmanager/src \
@GTK_CFLAGS@ @GTHREAD_CFLAGS@ $(MAC_INTEGRATION_CFLAGS)
@GTK_CFLAGS@ @GTHREAD_CFLAGS@ $(MAC_INTEGRATION_CFLAGS) @LIBGEANY_CFLAGS@
# tell automake we have a C++ file so it uses the C++ linker we need for Scintilla
nodist_EXTRA_geany_SOURCES = dummy.cxx
nodist_EXTRA_libgeany_la_SOURCES = dummy1.cxx
if MINGW
# build Geany for Windows on non-Windows systems (cross-compile)
@ -121,8 +121,10 @@ libgeany_la_LIBADD = \
@GTK_LIBS@ \
@GTHREAD_LIBS@ \
$(INTLLIBS) \
-lole32 -luuid -lwsock32 -lcomdlg32
@LIBGEANY_LIBS@ \
-lole32 -lwsock32 -lcomdlg32
libgeany_la_LDFLAGS = -Wl,-luuid $(AM_LDFLAGS)
geany_LDADD += geany_private.res -lcomdlg32
AM_CFLAGS = -DGEANY_DATADIR=\"data\" \
@ -132,10 +134,9 @@ AM_CFLAGS = -DGEANY_DATADIR=\"data\" \
-DGEANY_PREFIX=\"\" \
-DGEANY_PRIVATE \
-DGTK \
-DG_LOG_DOMAIN=\""Geany"\" \
-fvisibility=hidden
-DG_LOG_DOMAIN=\""Geany"\"
libgeany_la_LDFLAGS = -mwindows -mms-bitfields -no-undefined
libgeany_la_LDFLAGS += -mwindows -mms-bitfields -no-undefined
WINDRES = $(host_alias)-windres
@ -158,9 +159,8 @@ libgeany_la_LIBADD = \
@GTK_LIBS@ \
@GTHREAD_LIBS@ \
$(MAC_INTEGRATION_LIBS) \
$(INTLLIBS)
libgeany_la_LDFLAGS = -Wl,--dynamic-list="$(srcdir)/dynamicsymbols.list"
$(INTLLIBS) \
@LIBGEANY_LIBS@
AM_CFLAGS = -DGEANY_DATADIR=\""$(datadir)"\" \
-DGEANY_DOCDIR=\""$(docdir)"\" \
@ -169,8 +169,7 @@ AM_CFLAGS = -DGEANY_DATADIR=\""$(datadir)"\" \
-DGEANY_PREFIX=\""$(prefix)"\" \
-DGEANY_PRIVATE \
-DGTK \
-DG_LOG_DOMAIN=\""Geany"\" \
-fvisibility=hidden
-DG_LOG_DOMAIN=\""Geany"\"
clean-local:

View File

@ -4,7 +4,7 @@ AM_CPPFLAGS = \
-DG_LOG_DOMAIN=\"CTags\"
AM_CFLAGS = \
$(GTK_CFLAGS) \
-fvisibility=hidden
@LIBGEANY_CFLAGS@
EXTRA_DIST = \
makefile.win32
@ -84,3 +84,4 @@ libctags_la_SOURCES = \
vstring.h \
$(parsers)
libctags_la_LDFLAGS = @LIBGEANY_LIBS@

View File

@ -1,9 +1,10 @@
noinst_LTLIBRARIES = libmio.la
AM_CPPFLAGS = -DG_LOG_DOMAIN=\"MIO\" #-DMIO_DEBUG
AM_CFLAGS = $(GTK_CFLAGS) -fvisibility=hidden
AM_CFLAGS = $(GTK_CFLAGS) @LIBGEANY_CFLAGS@
libmio_la_SOURCES = mio.c
libmio_la_LDFLAGS = @LIBGEANY_LIBS@
EXTRA_DIST = \
mio.h \

View File

@ -6,7 +6,7 @@ AM_CPPFLAGS = \
-DG_LOG_DOMAIN=\"Tagmanager\"
AM_CFLAGS = \
$(GTK_CFLAGS) \
-fvisibility=hidden
@LIBGEANY_CFLAGS@
EXTRA_DIST = \
makefile.win32
@ -30,3 +30,5 @@ libtagmanager_la_SOURCES =\
tm_tag.c \
tm_workspace.h \
tm_workspace.c
libtagmanager_la_LDFLAGS = @LIBGEANY_LIBS@