diff --git a/configure.in.in b/configure.in.in index 06e78e72..31ee7046 100644 --- a/configure.in.in +++ b/configure.in.in @@ -19,9 +19,9 @@ m4_define([xfce4_panel_version_tag], [git]) m4_define([xfce4_panel_version], [xfce4_panel_version_major().xfce4_panel_version_minor().xfce4_panel_version_micro()ifelse(xfce4_panel_version_nano(), [], [], [.xfce4_panel_version_nano()])ifelse(xfce4_panel_version_tag(), [git], [xfce4_panel_version_tag()-xfce4_panel_version_build()], [xfce4_panel_version_tag()])]) dnl ******************************************* -dnl *** Debugging support for SVN snapshots *** +dnl *** Debugging support for GIT snapshots *** dnl ******************************************* -m4_define([panel_debug_default], [ifelse(xfce4_panel_version_tag(), [svn], [yes], [minimum])]) +m4_define([panel_debug_default], [ifelse(xfce4_panel_version_tag(), [git], [yes], [minimum])]) dnl *************************** dnl *** Initialize autoconf *** @@ -63,6 +63,7 @@ dnl *** Initialize libtool *** dnl ************************** AC_DISABLE_STATIC() AC_PROG_LIBTOOL() +AC_CHECK_PROGS([PERL], [perl5 perl]) dnl ************************************** dnl *** Substitute version information *** @@ -108,15 +109,6 @@ dnl *** Check for gtk-doc *** dnl ************************* GTK_DOC_CHECK([1.0]) -dnl ********************************************************* -dnl *** Disable deprecated components and single includes *** -dnl ********************************************************* -dnl #PLATFORM_CPPFLAGS="$PLATFORM_CPPFLAGS -DXFCE_DISABLE_DEPRECATED" -dnl #PLATFORM_CPPFLAGS="$PLATFORM_CPPFLAGS -DG_DISABLE_DEPRECATED -DG_DISABLE_SINGLE_INCLUDES" -dnl #PLATFORM_CPPFLAGS="$PLATFORM_CPPFLAGS -DGTK_DISABLE_DEPRECATED -DGTK_DISABLE_SINGLE_INCLUDES" -dnl #PLATFORM_CPPFLAGS="$PLATFORM_CPPFLAGS -DGDK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES" -dnl #PLATFORM_CPPFLAGS="$PLATFORM_CPPFLAGS -DPANGO_DISABLE_DEPRECATED -DPANGO_DISABLE_SINGLE_INCLUDES" - dnl *********************************** dnl *** Check for debugging support *** dnl *********************************** @@ -127,6 +119,40 @@ dnl *** Check for linker optimizations *** dnl ************************************** XDT_FEATURE_LINKER_OPTS() +dnl **************************************** +dnl *** Check for ELF visibility support *** +dnl **************************************** +AC_ARG_ENABLE([visibility], AC_HELP_STRING([--disable-visibility], [Do not use ELF visibility attributes]), [], [enable_visibility=yes]) +have_gnuc_visibility=no +if test x"$enable_visibility" != x"no"; then + dnl Check whether the compiler supports the visibility attribute + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wall -Werror" + AC_MSG_CHECKING([whether $CC supports the GNUC visibility attribute]) + AC_COMPILE_IFELSE(AC_LANG_SOURCE( + [ + void test_default (void); + void test_hidden (void); + + void __attribute__ ((visibility("default"))) test_default (void) {} + void __attribute__ ((visibility("hidden"))) test_hidden (void) {} + + int main (int argc, char **argv) { test_default (); test_hidden (); return 0; } + ]), + [ + have_gnuc_visibility=yes + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + ]) + CFLAGS="$save_CFLAGS" +fi +if test x"$have_gnuc_visibility" = x"yes"; then + CPPFLAGS="$CPPFLAGS -DHAVE_GNUC_VISIBILITY" +fi +AM_CONDITIONAL([HAVE_GNUC_VISIBILITY], [test x"$have_gnuc_visibility" = x"yes"]) + dnl ********************************* dnl *** Substitute platform flags *** dnl ********************************* @@ -159,3 +185,13 @@ plugins/tasklist/Makefile plugins/windowmenu/Makefile po/Makefile.in ]) + +dnl *************************** +dnl *** Print configuration *** +dnl *************************** +echo +echo "Build Configuration:" +echo +echo "* Debug Support: $enable_debug" +echo "* GNU Visibility: $have_gnuc_visibility" +echo diff --git a/libxfce4panel/Makefile.am b/libxfce4panel/Makefile.am index 51efbc58..d1992356 100644 --- a/libxfce4panel/Makefile.am +++ b/libxfce4panel/Makefile.am @@ -11,6 +11,8 @@ lib_LTLIBRARIES = \ libxfce4panel.la libxfce4panel_built_sources = \ + libxfce4panel-alias.h \ + libxfce4panel-aliasdef.c \ libxfce4panel-marshal.c \ libxfce4panel-marshal.h @@ -63,9 +65,6 @@ libxfce4panel_la_LIBADD = \ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libxfce4panel-1.0.pc -EXTRA_DIST = \ - libxfce4panel-marshal.list - # # Build sources # @@ -77,11 +76,33 @@ libxfce4panel-marshal.c: libxfce4panel-marshal.list Makefile $(AM_V_GEN) echo "#include " > $@ \ && glib-genmarshal --prefix=_libxfce4panel_marshal --body $< >> $@ +libxfce4panel-alias.h: make-libxfce4panel-alias.pl libxfce4panel.symbols + $(AM_V_GEN) $(PERL) $(srcdir)/make-libxfce4panel-alias.pl $(srcdir)/libxfce4panel.symbols > $@ + +libxfce4panel-aliasdef.c: make-libxfce4panel-alias.pl libxfce4panel.symbols + $(AM_V_GEN) $(PERL) $(srcdir)/make-libxfce4panel-alias.pl -def < $(srcdir)/libxfce4panel.symbols > $@ + DISTCLEANFILES = \ $(libxfce4panel_built_sources) BUILT_SOURCES = \ $(libxfce4panel_built_sources) + +CLEANFILES = \ + actual-abi \ + expected-abi +endif + +EXTRA_DIST = \ + abicheck.sh \ + libxfce4panel.symbols \ + libxfce4panel-alias.h \ + libxfce4panel-aliasdef.c \ + libxfce4panel-marshal.list \ + make-libxfce4panel-alias.pl + +if HAVE_GNUC_VISIBILITY +TESTS = abicheck.sh endif # vi:set ts=8 sw=8 noet ai nocindent syntax=automake: diff --git a/libxfce4panel/abicheck.sh b/libxfce4panel/abicheck.sh new file mode 100755 index 00000000..6370f07d --- /dev/null +++ b/libxfce4panel/abicheck.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# +# Copyright (c) 2004 The GLib Development Team. +# Copyright (c) 2005 Benedikt Meurer . +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +cpp -P -DINCLUDE_INTERNAL_SYMBOLS -DINCLUDE_VARIABLES -DALL_FILES ${srcdir:-.}/libxfce4panel.symbols | sed -e '/^$/d' -e 's/ G_GNUC.*$//' -e 's/ PRIVATE//' | sort > expected-abi +nm -D .libs/libxfce4panel.so | grep " T\|R " | cut -d ' ' -f 3 | grep -v '^_.*' | sort > actual-abi +diff -u expected-abi actual-abi && rm expected-abi actual-abi diff --git a/libxfce4panel/libxfce4panel.symbols b/libxfce4panel/libxfce4panel.symbols new file mode 100644 index 00000000..b720c81f --- /dev/null +++ b/libxfce4panel/libxfce4panel.symbols @@ -0,0 +1,128 @@ +/*- + * Copyright (c) 2009 Nick Schermer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* This file lists all exported symbols. It is used to generate + * the libxfce4panel-alias.h/libxfce4panel-aliasdef.c files used + * to avoid PLT entries for internal uses of exported functions (see + * make-libxfce4panel-alias.pl). + * + * Every symbol must be included in the right + * #ifdef IN_HEADER(sym) #endif and + * #ifdef IN_SOURCE(sym) #endif sections. + */ + +#ifdef ALL_FILES +#define IN_HEADER(x) 1 +#define IN_SOURCE(x) 1 +#endif + +/* xfce-arrow-button.h */ +#if IN_HEADER(__XFCE_ARROW_BUTTON_H__) +#if IN_SOURCE(__XFCE_ARROW_BUTTON_C__) +xfce_arrow_button_get_type G_GNUC_CONST +xfce_arrow_button_new G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT +xfce_arrow_button_get_arrow_type +xfce_arrow_button_set_arrow_type +xfce_arrow_button_get_blinking +xfce_arrow_button_set_blinking +#endif +#endif + +/* xfce-hvbox.h */ +#if IN_HEADER(__XFCE_HVBOX_H__) +#if IN_SOURCE(__XFCE_HVBOX_C__) +xfce_hvbox_get_type G_GNUC_CONST +xfce_hvbox_new G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT +xfce_hvbox_set_orientation +xfce_hvbox_get_orientation +#endif +#endif + +/* xfce-panel-convenience.h */ +#if IN_HEADER(__XFCE_PANEL_CONVENIENCE_H__) +#if IN_SOURCE(__XFCE_PANEL_CONVENIENCE_C__) +xfce_panel_create_button G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT +xfce_panel_create_toggle_button G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT +xfce_panel_allow_customization +#endif +#endif + +/* xfce-panel-image.h */ +#if IN_HEADER(__XFCE_PANEL_IMAGE_H__) +#if IN_SOURCE(__XFCE_PANEL_IMAGE_C__) +xfce_panel_image_get_type G_GNUC_CONST +xfce_panel_image_new G_GNUC_MALLOC +xfce_panel_image_new_from_pixbuf G_GNUC_MALLOC +xfce_panel_image_new_from_source G_GNUC_MALLOC +xfce_panel_image_set_from_pixbuf +xfce_panel_image_set_from_source +xfce_panel_image_clear +#endif +#endif + +/* xfce-panel-plugin.h */ +#if IN_HEADER(__XFCE_PANEL_PLUGIN_H__) +#if IN_SOURCE(__XFCE_PANEL_PLUGIN_C__) +xfce_panel_plugin_get_type G_GNUC_CONST +xfce_panel_plugin_get_name G_GNUC_PURE +xfce_panel_plugin_get_display_name G_GNUC_PURE +xfce_panel_plugin_get_comment G_GNUC_PURE +xfce_panel_plugin_get_unique_id G_GNUC_PURE +xfce_panel_plugin_get_property_base G_GNUC_PURE +xfce_panel_plugin_get_arguments G_GNUC_PURE +xfce_panel_plugin_get_size G_GNUC_PURE +xfce_panel_plugin_get_expand G_GNUC_PURE +xfce_panel_plugin_set_expand +xfce_panel_plugin_get_orientation G_GNUC_PURE +xfce_panel_plugin_get_screen_position G_GNUC_PURE +xfce_panel_plugin_take_window +xfce_panel_plugin_add_action_widget +xfce_panel_plugin_menu_insert_item +xfce_panel_plugin_menu_show_configure +xfce_panel_plugin_menu_show_about +xfce_panel_plugin_block_menu +xfce_panel_plugin_unblock_menu +xfce_panel_plugin_register_menu +xfce_panel_plugin_arrow_type +xfce_panel_plugin_position_widget +xfce_panel_plugin_position_menu +xfce_panel_plugin_focus_widget +xfce_panel_plugin_block_autohide +xfce_panel_plugin_lookup_rc_file G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT +xfce_panel_plugin_save_location G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT +#endif +#endif + +/* xfce-panel-plugin-provider.h */ +#if IN_HEADER(__XFCE_PANEL_PLUGIN_PROVIDER_H__) +#if IN_SOURCE(__XFCE_PANEL_PLUGIN_PROVIDER_C__) +xfce_panel_plugin_provider_get_type G_GNUC_CONST +xfce_panel_plugin_provider_get_name +xfce_panel_plugin_provider_get_unique_id +xfce_panel_plugin_provider_set_size +xfce_panel_plugin_provider_set_orientation +xfce_panel_plugin_provider_set_screen_position +xfce_panel_plugin_provider_save +xfce_panel_plugin_provider_emit_signal +xfce_panel_plugin_provider_get_show_configure +xfce_panel_plugin_provider_show_configure +xfce_panel_plugin_provider_get_show_about +xfce_panel_plugin_provider_show_about +xfce_panel_plugin_provider_remove +#endif +#endif diff --git a/libxfce4panel/make-libxfce4panel-alias.pl b/libxfce4panel/make-libxfce4panel-alias.pl new file mode 100644 index 00000000..9d6af397 --- /dev/null +++ b/libxfce4panel/make-libxfce4panel-alias.pl @@ -0,0 +1,154 @@ +#!/usr/bin/env perl -w +# +# Copyright (c) 2004 The GLib Development Team. +# Copyright (c) 2005 Benedikt Meurer . +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +my $option_def = 0; + +if (($#ARGV >= 0) && ($ARGV[0] eq "-def")) + { + shift; + $option_def = 1; + } + +print < + +EOF + +if ($option_def) + { + print <) + { + # ignore empty lines + next if /^\s*$/; + + # skip comments + if ($_ =~ /^\s*\/\*/) + { + $in_comment = 1; + } + + if ($in_comment) + { + if ($_ =~ /\*\/\s$/) + { + $in_comment = 0; + } + next; + } + + # handle ifdefs + if ($_ =~ /^\#endif/) + { + if (!$in_skipped_section) + { + print $_; + } + + $in_skipped_section = 0; + next; + } + + if ($_ =~ /^\#ifdef\s+(INCLUDE_VARIABLES|INCLUDE_INTERNAL_SYMBOLS|ALL_FILES)/) + { + $in_skipped_section = 1; + } + + if ($in_skipped_section) + { + next; + } + + if ($_ =~ /^\#ifn?def\s+G/) + { + print $_; + next; + } + + if ($_ =~ /^\#if.*(IN_SOURCE|IN_HEADER)/) + { + print $_; + next; + } + + chop; + my $line = $_; + my @words; + my $attributes = ""; + + @words = split (/ /, $line); + my $symbol = shift (@words); + chomp ($symbol); + my $alias = "IA__".$symbol; + + # Drop any Win32 specific .def file syntax, but keep attributes + foreach $word (@words) + { + $attributes = "$attributes $word" unless $word eq "PRIVATE"; + } + + if (!$option_def) + { + print < -#include + #include +#include +#include +#include #define XFCE_ARROW_BUTTON_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \ XFCE_TYPE_ARROW_BUTTON, \ @@ -523,3 +526,8 @@ xfce_arrow_button_set_blinking (XfceArrowButton *button, /* start with a blinking or make sure the button is normal */ xfce_arrow_button_blinking_timeout (button); } + + + +#define __XFCE_ARROW_BUTTON_C__ +#include diff --git a/libxfce4panel/xfce-hvbox.c b/libxfce4panel/xfce-hvbox.c index 9d88cdc5..5d0b2e1e 100644 --- a/libxfce4panel/xfce-hvbox.c +++ b/libxfce4panel/xfce-hvbox.c @@ -27,7 +27,10 @@ #endif #include -#include + +#include +#include +#include @@ -271,3 +274,8 @@ xfce_hvbox_get_orientation (XfceHVBox *hvbox) return hvbox->orientation; #endif } + + + +#define __XFCE_HVBOX_C__ +#include diff --git a/libxfce4panel/xfce-panel-convenience.c b/libxfce4panel/xfce-panel-convenience.c index 1a690778..01970c55 100644 --- a/libxfce4panel/xfce-panel-convenience.c +++ b/libxfce4panel/xfce-panel-convenience.c @@ -25,7 +25,9 @@ #include #include -#include +#include +#include +#include /** * xfce_panel_create_button: @@ -101,3 +103,8 @@ xfce_panel_allow_customization (void) return allow_customization; } + + + +#define __XFCE_PANEL_CONVENIENCE_C__ +#include diff --git a/libxfce4panel/xfce-panel-image.c b/libxfce4panel/xfce-panel-image.c index 4df3707b..5d243336 100644 --- a/libxfce4panel/xfce-panel-image.c +++ b/libxfce4panel/xfce-panel-image.c @@ -28,7 +28,9 @@ #include #include -#include +#include +#include +#include /* design limit for the panel, to reduce the uncached pixbuf size */ @@ -556,3 +558,8 @@ xfce_panel_image_clear (XfcePanelImage *image) priv->width = -1; priv->height = -1; } + + + +#define __XFCE_PANEL_IMAGE_C__ +#include diff --git a/libxfce4panel/xfce-panel-plugin-provider.c b/libxfce4panel/xfce-panel-plugin-provider.c index 825c2a69..c7f47b16 100644 --- a/libxfce4panel/xfce-panel-plugin-provider.c +++ b/libxfce4panel/xfce-panel-plugin-provider.c @@ -23,9 +23,9 @@ #include -#include +#include #include - +#include enum @@ -201,3 +201,8 @@ xfce_panel_plugin_provider_remove (XfcePanelPluginProvider *provider) (*XFCE_PANEL_PLUGIN_PROVIDER_GET_IFACE (provider)->remove) (provider); } + + + +#define __XFCE_PANEL_PLUGIN_PROVIDER_C__ +#include diff --git a/libxfce4panel/xfce-panel-plugin.c b/libxfce4panel/xfce-panel-plugin.c index d521d9f1..934affd0 100644 --- a/libxfce4panel/xfce-panel-plugin.c +++ b/libxfce4panel/xfce-panel-plugin.c @@ -26,9 +26,11 @@ #include #include -#include -#include +#include +#include #include +#include +#include #define XFCE_PANEL_PLUGIN_CONSTRUCTED(plugin) \ PANEL_HAS_FLAG (XFCE_PANEL_PLUGIN (plugin)->priv->flags, \ @@ -1928,3 +1930,8 @@ xfce_panel_plugin_save_location (XfcePanelPlugin *plugin, return path; } + + + +#define __XFCE_PANEL_PLUGIN_C__ +#include diff --git a/libxfce4panel/xfce-panel-plugin.h b/libxfce4panel/xfce-panel-plugin.h index db6f26ba..f797aa5d 100644 --- a/libxfce4panel/xfce-panel-plugin.h +++ b/libxfce4panel/xfce-panel-plugin.h @@ -25,6 +25,7 @@ #define __XFCE_PANEL_PLUGIN_H__ #include +#include G_BEGIN_DECLS