Browse Source

Add the alias code to libxfce4panel.

tags/xfce4-panel-4.10.0
Nick Schermer 11 years ago
parent
commit
708c40e969
12 changed files with 427 additions and 22 deletions
  1. +47
    -11
      configure.in.in
  2. +24
    -3
      libxfce4panel/Makefile.am
  3. +23
    -0
      libxfce4panel/abicheck.sh
  4. +128
    -0
      libxfce4panel/libxfce4panel.symbols
  5. +154
    -0
      libxfce4panel/make-libxfce4panel-alias.pl
  6. +9
    -1
      libxfce4panel/xfce-arrow-button.c
  7. +9
    -1
      libxfce4panel/xfce-hvbox.c
  8. +8
    -1
      libxfce4panel/xfce-panel-convenience.c
  9. +8
    -1
      libxfce4panel/xfce-panel-image.c
  10. +7
    -2
      libxfce4panel/xfce-panel-plugin-provider.c
  11. +9
    -2
      libxfce4panel/xfce-panel-plugin.c
  12. +1
    -0
      libxfce4panel/xfce-panel-plugin.h

+ 47
- 11
configure.in.in View File

@@ -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

+ 24
- 3
libxfce4panel/Makefile.am View File

@@ -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 <libxfce4panel/libxfce4panel-marshal.h>" > $@ \
&& 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:

+ 23
- 0
libxfce4panel/abicheck.sh View File

@@ -0,0 +1,23 @@
#!/bin/sh
#
# Copyright (c) 2004 The GLib Development Team.
# Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>.
#
# 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

+ 128
- 0
libxfce4panel/libxfce4panel.symbols View File

@@ -0,0 +1,128 @@
/*-
* Copyright (c) 2009 Nick Schermer <nick@xfce.org>
*
* 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

+ 154
- 0
libxfce4panel/make-libxfce4panel-alias.pl View File

@@ -0,0 +1,154 @@
#!/usr/bin/env perl -w
#
# Copyright (c) 2004 The GLib Development Team.
# Copyright (c) 2005 Benedikt Meurer <benny@xfce.org>.
#
# 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;
/* Generated by make-libxfce4panel-alias.pl. Do not edit this file. */

#ifdef HAVE_GNUC_VISIBILITY

#include <glib.h>

EOF

if ($option_def)
{
print <<EOF
#undef IN_HEADER
#define IN_HEADER(x) 1

#undef IN_SOURCE
#define IN_SOURCE defined

EOF
}
else
{
print <<EOF
#define IN_HEADER defined
#define IN_SOURCE(x) 1

EOF
}

my $in_comment = 0;
my $in_skipped_section = 0;

while (<>)
{
# 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 <<EOF
extern __typeof ($symbol) $alias __attribute((visibility("hidden")))$attributes;
\#define $symbol $alias

EOF
}
else
{
print <<EOF
\#undef $symbol
extern __typeof ($symbol) $symbol __attribute((alias("$alias"), visibility("default")));

EOF
}
}

print <<EOF;

#endif /* HAVE_GNUC_VISIBILITY */
EOF



+ 9
- 1
libxfce4panel/xfce-arrow-button.c View File

@@ -30,8 +30,11 @@
#endif

#include <gtk/gtk.h>
#include <libxfce4panel/libxfce4panel.h>
#include <common/panel-private.h>
#include <libxfce4panel/xfce-panel-macros.h>
#include <libxfce4panel/xfce-arrow-button.h>
#include <libxfce4panel/libxfce4panel-alias.h>

#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 <libxfce4panel/libxfce4panel-aliasdef.c>

+ 9
- 1
libxfce4panel/xfce-hvbox.c View File

@@ -27,7 +27,10 @@
#endif

#include <gtk/gtk.h>
#include <libxfce4panel/libxfce4panel.h>

#include <libxfce4panel/xfce-panel-macros.h>
#include <libxfce4panel/xfce-hvbox.h>
#include <libxfce4panel/libxfce4panel-alias.h>



@@ -271,3 +274,8 @@ xfce_hvbox_get_orientation (XfceHVBox *hvbox)
return hvbox->orientation;
#endif
}



#define __XFCE_HVBOX_C__
#include <libxfce4panel/libxfce4panel-aliasdef.c>

+ 8
- 1
libxfce4panel/xfce-panel-convenience.c View File

@@ -25,7 +25,9 @@
#include <libxfce4util/libxfce4util.h>
#include <gtk/gtk.h>

#include <libxfce4panel/libxfce4panel.h>
#include <libxfce4panel/xfce-panel-macros.h>
#include <libxfce4panel/xfce-panel-convenience.h>
#include <libxfce4panel/libxfce4panel-alias.h>

/**
* xfce_panel_create_button:
@@ -101,3 +103,8 @@ xfce_panel_allow_customization (void)

return allow_customization;
}



#define __XFCE_PANEL_CONVENIENCE_C__
#include <libxfce4panel/libxfce4panel-aliasdef.c>

+ 8
- 1
libxfce4panel/xfce-panel-image.c View File

@@ -28,7 +28,9 @@
#include <gtk/gtk.h>

#include <common/panel-private.h>
#include <libxfce4panel/libxfce4panel.h>
#include <libxfce4panel/xfce-panel-macros.h>
#include <libxfce4panel/xfce-panel-image.h>
#include <libxfce4panel/libxfce4panel-alias.h>


/* 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 <libxfce4panel/libxfce4panel-aliasdef.c>

+ 7
- 2
libxfce4panel/xfce-panel-plugin-provider.c View File

@@ -23,9 +23,9 @@

#include <gtk/gtk.h>

#include <libxfce4panel/libxfce4panel.h>
#include <libxfce4panel/xfce-panel-macros.h>
#include <libxfce4panel/xfce-panel-plugin-provider.h>
#include <libxfce4panel/libxfce4panel-alias.h>


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 <libxfce4panel/libxfce4panel-aliasdef.c>

+ 9
- 2
libxfce4panel/xfce-panel-plugin.c View File

@@ -26,9 +26,11 @@
#include <libxfce4util/libxfce4util.h>

#include <common/panel-private.h>
#include <libxfce4panel/libxfce4panel.h>
#include <libxfce4panel/libxfce4panel-marshal.h>
#include <libxfce4panel/xfce-panel-macros.h>
#include <libxfce4panel/xfce-panel-plugin.h>
#include <libxfce4panel/xfce-panel-plugin-provider.h>
#include <libxfce4panel/libxfce4panel-marshal.h>
#include <libxfce4panel/libxfce4panel-alias.h>

#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 <libxfce4panel/libxfce4panel-aliasdef.c>

+ 1
- 0
libxfce4panel/xfce-panel-plugin.h View File

@@ -25,6 +25,7 @@
#define __XFCE_PANEL_PLUGIN_H__

#include <gtk/gtk.h>
#include <libxfce4panel/xfce-panel-enums.h>

G_BEGIN_DECLS



Loading…
Cancel
Save