Компиляция плагина панели XFCE4

Я конвертирую апплет панели gnome в плагин панели xfce. До сих пор я удалил несколько частей, специфичных для gnome, в исходном коде и заменил их исходным кодом, специфичным для xfce, по мере необходимости.

Я создал файлы makefile.am и configure.ac, используя такие шаблоны, как плагин погоды и пример плагина. Однако мне не удается правильно его скомпилировать. Возможно, я упускаю что-то очевидное, но я перепроверил примеры со своими файлами и не нашел явных проблем.

Я приложил соответствующие файлы, а также вывод ошибок в надежде, что у кого-то есть идеи. Я не думаю, что проблема в самом источнике, но я могу добавить кое-что позже, если это необходимо.

Ошибки при компиляции:

make  all-recursive
make[1]: Entering directory `/source/my_example_xfce'
Making all in panel-plugin
make[2]: Entering directory `/source/my_example_xfce/panel-plugin'
gcc -DHAVE_CONFIG_H -I. -I.. -I.. -DTHEMESDIR=\"/usr/local/share/xfce4/my_example/icons\" -DPACKAGE_LOCALE_DIR=\"/usr/local/share/locale\" -DG_LOG_DOMAIN=\"my_example\" -DNDEBUG -pthread -I/usr/include/xfce4/libxfce4panel-1.0 -I/usr/include/gtk-2.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/xfce4   -pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/atk-1.0 -I/usr/include/xfce4   -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/xfce4 -pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12                                                         -g -O2 -MT xfce4_my_example_plugin-my_example.o -MD -MP -MF .deps/xfce4_my_example_plugin-my_example.Tpo -c -o xfce4_my_example_plugin-my_example.o `test -f 'my_example.c' || echo './'`my_example.c

my_example.c:25:25: warning: ‘struct Example_Data’ declared inside parameter list [enabled by default]
my_example.c:25:25: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
my_example.c: In function ‘setdefaults’:
my_example.c:28:3: warning: incompatible implicit declaration of built-in function ‘strncpy’ [enabled by default]
my_example.c:28:21: error: dereferencing pointer to incomplete type
my_example.c:28:45: warning: incompatible implicit declaration of built-in function ‘strlen’ [enabled by default]
my_example.c:28:3: warning: passing argument 1 of ‘strlen’ makes pointer from integer without a cast [enabled by default]
my_example.c:28:3: note: expected ‘const char *’ but argument is of type ‘int’
my_example.c:28:3: warning: passing argument 2 of ‘strncpy’ makes pointer from integer without a cast [enabled by default]
my_example.c:28:3: note: expected ‘const char *’ but argument is of type ‘int’
my_example.c:30:21: error: dereferencing pointer to incomplete type
my_example.c:30:42: error: dereferencing pointer to incomplete type
my_example.c:30:67: error: dereferencing pointer to incomplete type
my_example.c:31:3: warning: incompatible implicit declaration of built-in function ‘strncat’ [enabled by default]
my_example.c:31:21: error: dereferencing pointer to incomplete type
my_example.c:31:32: error: ‘SIGFILE’ undeclared (first use in this function)

SIGFILE является одним из определений в моих заголовочных файлах. Затем он продолжает так, как будто никогда не читал мои заголовочные файлы со всеми объявлениями.

Последний бит:

my_example.c:248:17: error: unknown type name ‘XfcePanelPlugin’
my_example.c:248:42: error: unknown type name ‘GtkWidget’
my_example.c:248:60: error: unknown type name ‘GtkWidget’
make[2]: *** [xfce4_my_example_plugin-example.o] Error 1
make[2]: Leaving directory `/source/my_example_xfce/panel-plugin'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/source/my_example_xfce'
make: *** [all] Error 2 

Ниже я вставил Makefile.am, configure.ac и panel-plugin/Makefile.am, которые необходимы для инструмента xfce4 xdt-autogen, который при запуске в исходном каталоге создаст соответствующие файлы make и configure.

***************
* Makefile.am *
***************

SUBDIRS =                                                               \
        panel-plugin                                                            \
        po

AUTOMAKE_OPTIONS =                                                      \
        1.8                                                             \
        dist-bzip2


*****************
* configure.ac  *
*****************

dnl Version information
m4_define([my_example_version_major], [1])
m4_define([my_example_version_minor], [3])
m4_define([my_example_version_micro], [0])
m4_define([my_example_version], [my_example_version_major().my_example_version_minor().my_example_version_micro()])

dnl Initialize autoconf
AC_COPYRIGHT([Copyright (c) 2013
        Example <[email protected]>])
AC_INIT([xfce4-my_example-plugin], [my_example_version()], [[email protected]])
AC_PREREQ([2.50])

dnl Initialize automake
AM_INIT_AUTOMAKE([1.8 dist-bzip2 tar-ustar])
AM_CONFIG_HEADER([config.h])
AM_MAINTAINER_MODE()

dnl Check for basic programs
AC_PROG_CC()
AC_PROG_LD()
AC_PROG_INSTALL()
AC_PROG_INTLTOOL()
AC_PROG_LIBTOOL()
AM_PROG_CC_C_O()

dnl Check for standard headers
AC_HEADER_STDC()
AC_CHECK_HEADERS([string.h fcntl.h errno.h sys/socket.h netdb.h \
                  netinet/in.h sys/types.h time.h unistd.h stdio.h \
                  sys/stat.h stddef.h stdlib.h netinet/in.h])

dnl Check for i18n support
XDT_I18N([])

dnl Check for required packages
XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.6.0])
XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.6.0])
XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.3.90.2])
XDT_CHECK_PACKAGE([LIBXFCEGUI4], [libxfcegui4-1.0], [4.3.90.2])
XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [4.3.99.1])

dnl Check for debugging support
XDT_FEATURE_DEBUG()

AC_OUTPUT([
Makefile
po/Makefile.in
panel-plugin/Makefile
])


****************************
* panel-plugin/Makefile.am *
****************************

INCLUDES =                                                              \
        -I$(top_srcdir)                                                 \
        -DTHEMESDIR=\"$(datadir)/xfce4/my_example/icons\"                       \
        -DPACKAGE_LOCALE_DIR=\"$(localedir)\"                           \
        -DG_LOG_DOMAIN=\"my_example\"
plugin_PROGRAMS =                                                       \
        xfce4-my_example-plugin

plugindir = $(libexecdir)/xfce4/panel-plugins

xfce4_my_example_plugin_SOURCES =                                               \
        my_example_dat.h                                                    \
        my_example_func.h                                                   \
        my_example_images.h                                                     \
        my_example_applet.c                                                     \
        my_example.c                                                            \
        my_example_processdata.c                                                \
        my_example_menu.c

xfce4_my_example_plugin_CFLAGS =                                                \
        $(LIBXFCE4PANEL_CFLAGS)                                         \
        $(LIBXFCEGUI4_CFLAGS)                                           \
        $(LIBXFCE4UTIL_CFLAGS)                                          \
        $(GTK_CFLAGS)

xfce4_my_example_plugin_LDADD =                                                 \
        $(LIBXFCE4PANEL_LIBS)                                           \
        $(LIBXFCE4UTIL_LIBS)                                            \
        $(LIBXFCEGUI4_LIBS)                                             \
        $(GTK_LIBS)

desktopdir = $(datadir)/xfce4/panel-plugins

desktop_DATA =                                                          \
        my_example.desktop

@INTLTOOL_DESKTOP_RULE@

EXTRA_DIST =                                                            \
        my_example.desktop.in

CLEANFILES =                                                            \
        $(desktop_DATA)

# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

У меня есть правильные файлы заголовков, включенные в мои исходные файлы, кроме того, исходные файлы компилируются нормально, прежде чем вносить изменения, связанные с xfce4.

Makefile.am

xfce4_my_example_plugin_SOURCES =     \
example_dat.h                                                    \
example_func.h                                                   \
example_images.h                                                 \
example_applet.c                                                 \
example.c                                                        \
example_processdata.c                                            \
example_menu.c

Из example_applet.c, который является первым введенным исходным файлом. Изначально у меня был только xfce4_my_example_plugin_SOURCES = example_applet.c, так как остальные можно было найти через этот файл. Это дало ту же ошибку.

#include <gtk/gtk.h>
#include <glib-object.h>
#include <string.h>
#include <libxfce4util/libxfce4util.h>
#include <libxfce4panel/xfce-panel-plugin.h>
#include <libxfce4panel/xfce-hvbox.h>

#include "example_dat.h" /* contains all structures */
#include "example_func.h" /* contains all function prototypes used in this program */
#include "example_images.h"
#include "example.c"
#include "example_processdata.c"
#include "example_menu.c"


/* register the xfce plugin */
XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL(example_applet_fill);

person aseq    schedule 30.05.2013    source источник


Ответы (1)


Похоже, я решил проблему. Процесс сборки для xfce немного отличается от того, что я использую для сборки апплета панели gnome.

Для апплета gnome я использую один исходный файл, чтобы включить все остальные исходные файлы и файлы заголовков.

В xfce после просмотра различных деревьев исходного кода плагинов оказывается, что каждый исходный файл включает в себя необходимые заголовки, однако ни один из исходных файлов не содержит других исходных файлов.

Исправление состояло в том, чтобы вообще не включать какие-либо другие исходные файлы и изменить каждый исходный файл, включив в него заголовочные файлы.

person aseq    schedule 04.06.2013