gtk+-2.6.10+DirectFB-1.0.0-rc1(modify)

本文档介绍了如何通过configure脚本配置GDK以支持不同的目标环境,包括DirectFB,并详细展示了条件判断、依赖检查及编译选项设置的过程。

configure.in///文件
1588////////////////////////////////////////////////////////
##################################################
# Checks for gtk-doc and docbook-tools
##################################################
+#ifdef(GTK_DOC_CHECK, GTK_DOC_CHECK([1.0]))

+AM_CONDITIONAL(ENABLE_GTK_DOC, false)
+AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, false)
-GTK_DOC_CHECK([1.0])
+#GTK_DOC_CHECK([1.0])
////////////////////////////////////////////////////////////
222:222/////
-  gdktarget=x11
+  gdktarget=directfb

226:226/////////
-AC_ARG_WITH(gdktarget, [  --with-gdktarget=[[x11/linux-fb/win32]] select GDK target [default=$gdktarget]],
+AC_ARG_WITH(gdktarget, [  --with-gdktarget=[[x11/linux-fb/directfb/win32]] select GDK target [default=$gdktarget]],

230:230///////////////////////////////////////////////////////////////////////////////////
case $gdktarget in
-  x11|linux-fb|win32) ;;
-  *) AC_MSG_ERROR([Invalid target for GDK: use x11, linux-fb or win32.]);;
esac

case $gdktarget in
+  x11|linux-fb|win32|directfb) ;;
+  *) AC_MSG_ERROR([Invalid target for GDK: use x11, linux-fb, directfb or win32.]);;
esac

1369:1369/////////////////////////////////             ////////////~~~~~~~~~~~~~~~~~~~
AC_SUBST(GDK_PIXBUF_XLIB_DEP_CFLAGS)
 
+if test "x$gdktarget" = "xdirectfb"; then
+  DIRECTFB_REQUIRED_VERSION=1.0.0
+
+  AC_MSG_CHECKING(for DirectFB)
+  if $PKG_CONFIG --atleast-version $DIRECTFB_REQUIRED_VERSION directfb ; then
+      AC_MSG_RESULT(found)
+      GDK_EXTRA_CFLAGS="`$PKG_CONFIG --cflags directfb` $GDK_EXTRA_CFLAGS"             //加上??
+      GDK_EXTRA_LIBS="`$PKG_CONFIG --libs directfb` $GDK_EXTRA_LIBS"                   //。。。
+  else
+      AC_MSG_ERROR([
+*** DirectFB $DIRECTFB_REQUIRED_VERSION or newer is required. The latest
+*** version of DirectFB is always available from http://www.directfb.org.
+  ])
+  fi
+
+  GDK_PACKAGES=directfb
+
+  with_xinput=no
+  AC_DEFINE(XINPUT_NONE)
+  x_cflags=
+  x_includes=
+  x_ldflags=
+  x_libs=
+  xinput_progs=
+
+  AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no)
+  if test x$FREETYPE_CONFIG = xno ; then
+    AC_MSG_ERROR([*** freetype-config not found])
+  fi
+
+  FREETYPE_CFLAGS="`$FREETYPE_CONFIG --cflags`"
+  FREETYPE_LIBS="`$FREETYPE_CONFIG --libs`"
+  CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
+
+  GDK_EXTRA_CFLAGS="$GDK_EXTRA_CFLAGS $FREETYPE_CFLAGS"
+  GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS $FREETYPE_LIBS"
+
+  AM_CONDITIONAL(USE_DIRECTFB, true)
+else
+  AM_CONDITIONAL(USE_DIRECTFB, false)
+fi
+
if test "x$gdktarget" = "xlinux-fb"; then        /////////////~~~~~~~~~~~~~~~~~~~~~~~~~~~delete
//////////////////////////////////////////////
@@ -1361,6 +1361,27 @@ else
   AM_CONDITIONAL(ENABLE_FB_MANAGER, false)
 fi
 
+if test "x$gdktarget" = "xdirectfb"; then
+  DIRECTFB_REQUIRED_VERSION=0.9.21
+  AC_MSG_CHECKING(for DirectFB)
+
+  if $PKG_CONFIG --atleast-version $DIRECTFB_REQUIRED_VERSION directfb ; then
+      AC_MSG_RESULT(found)
+      GDK_EXTRA_CFLAGS="`$PKG_CONFIG --cflags directfb` $GDK_EXTRA_CFLAGS"
+      GDK_EXTRA_LIBS="`$PKG_CONFIG --libs directfb` $GDK_EXTRA_LIBS"
+  else
+      AC_MSG_ERROR([
+*** DirectFB $DIRECTFB_REQUIRED_VERSION or newer is required. The latest
+*** version of DirectFB is always available from http://www.directfb.org/.
+  ])
+  fi
+
+  AM_CONDITIONAL(USE_DIRECTFB, true)
+else
+  AM_CONDITIONAL(USE_DIRECTFB, false)
+fi
+
+
 # Check for Pango flags

1461////////////////////////////////////////////////////////////////////////////////////////////

elif test "x$gdktarget" = "xlinux-fb"; then
         PANGO_PACKAGES=pangoft2
+elif test "x$gdktarget" = "xdirectfb"; then
+        PANGO_PACKAGES=pangoft2
 else
         PANGO_PACKAGES=pango
        
1500///////////////////////////////////////////////////////////////////////////////////

LDFLAGS="$saved_ldflags"

-GDK_PACKAGES="$PANGO_PACKAGES"
+GDK_PACKAGES="$GDK_PACKAGES $PANGO_PACKAGES"
GDK_DEP_LIBS="$GDK_EXTRA_LIBS `$PKG_CONFIG --libs $GDK_PIXBUF_PACKAGES $GDK_PACKAGES` $GDK_PIXBUF_EXTRA_LIBS"
GDK_DEP_CFLAGS="`$PKG_CONFIG --cflags  gthread-2.0 $GDK_PIXBUF_PACKAGES $GDK_PACKAGES` $GDK_PIXBUF_EXTRA_CFLAGS $GDK_EXTRA_CFLAGS"

1673////////////////////////////////////////////////////////////////////////////////////////////

#define GDK_NATIVE_WINDOW_POINTER'
+elif test "x$gdktarget" = "xdirectfb" ; then
+  gdk_windowing='
+#define GDK_WINDOWING_DIRECTFB'
 fi
 
1734////////////////////////////////////////////////////////////////////////////////////////////

gdk/win32/rc/gdk.rc
 gdk/linux-fb/Makefile
+gdk/directfb/Makefile
 gtk/Makefile
 gtk/makefile.msc
 
 
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
gdk/Makefile.am
//////////////////////////////////
3////////////////////////////////////////////////////////////////////////////////////
SUBDIRS = $(gdktarget)
-DIST_SUBDIRS = linux-fb win32 x11
+DIST_SUBDIRS = linux-fb win32 x11 directfb

EXTRA_DIST =   /

129 //////////////////////////////////////////////////////////////////////////////////

gdkmarshalers.h

+libgdk_directfb_2_0_la_SOURCES = $(common_sources)
+libgdk_directfb_2_0_la_LIBADD = directfb/libgdk-directfb.la $(GDK_DEP_LIBS) /
+  $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la
+libgdk_directfb_2_0_la_LDFLAGS = $(LDADD)
+
 libgdk_x11_2_0_la_SOURCES = $(common_sources)
 libgdk_x11_2_0_la_LIBADD = x11/libgdk-x11.la $(GDK_DEP_LIBS) /
 
198 ///////////////////////////////////////////////////////////////////////////////////

lib_LTLIBRARIES = $(gdktargetlib)

-EXTRA_LTLIBRARIES = libgdk-x11-2.0.la libgdk-linux-fb-2.0.la libgdk-win32-2.0.la
+EXTRA_LTLIBRARIES = libgdk-x11-2.0.la libgdk-linux-fb-2.0.la libgdk-win32-2.0.la libgdk-directfb-2.0.la

 MAINTAINERCLEANFILES = gdkenumtypes.h stamp-gdkenumtypes.h gdkenumtypes.c /
 
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
gdk/gdk.symbols
////////////////////////////////////////////////////////////////////////
318 ////////////////////////////////////////////////////////////////////////////////
dk_colormap_get_type G_GNUC_CONST
+#ifndef GDK_DISABLE_DEPRECATED
 gdk_colormap_change
 gdk_colors_alloc
 gdk_colors_free
-#ifndef GDK_DISABLE_DEPRECATED
 gdk_colormap_get_system_size
 gdk_color_change
 #endiff
 
513//////////////////////////////////////////////////////////////////////////////////

gdk_drawable_unref
 gdk_draw_string
+gdk_draw_text
+gdk_draw_text_wc
 #endif
 
537 //////////////////////////////////////////////////////////////////////////////

gdk_draw_polygon
 gdk_draw_rectangle
 gdk_draw_segments
-gdk_draw_text
-gdk_draw_text_wc
 gdk_draw_trapezoids
 #endif

786 ///////////////////////////////////////////////////////////////////////////

gdk_keymap_translate_keyboard_state
+#ifndef GDK_WINDOWING_DIRECTFB
 gdk_keyval_convert_case
+#endif
 gdk_keyval_from_name
 
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
gtk/Makefile.am
/////////////////////////////
658/////////////////////////////////////////////////////////

libgtk_x11_2_0_la_SOURCES = $(gtk_c_sources) $(gtk_plug_c_sources)
libgtk_linux_fb_2_0_la_SOURCES = $(gtk_c_sources)
libgtk_win32_2_0_la_SOURCES = $(gtk_c_sources)
+libgtk_directfb_2_0_la_SOURCES = $(gtk_c_sources)

libgtk_x11_2_0_la_LDFLAGS = $(libtool_opts)
 libgtk_linux_fb_2_0_la_LDFLAGS = $(libtool_opts)
 libgtk_win32_2_0_la_LDFLAGS = $(libtool_opts)
+libgtk_directfb_2_0_la_LDFLAGS = $(libtool_opts)

libgtk_x11_2_0_la_LIBADD = $(libadd)
 libgtk_linux_fb_2_0_la_LIBADD = $(libadd)
 libgtk_win32_2_0_la_LIBADD = $(libadd) $(gtk_win32res_lo) -lole32 -lwsock32 -lgdi32
 libgtk_win32_2_0_la_DEPENDENCIES = $(gtk_def) $(gtk_win32res_lo)
+libgtk_directfb_2_0_la_LIBADD = $(libadd)

f USE_WIN32
 libgtk_target_ldflags = $(gtk_win32_symbols)
 endif
-EXTRA_LTLIBRARIES = libgtk-x11-2.0.la libgtk-linux-fb-2.0.la libgtk-win32-2.0.la
+EXTRA_LTLIBRARIES = libgtk-x11-2.0.la libgtk-linux-fb-2.0.la libgtk-win32-2.0.la libgtk-directfb-2.0.la

///////////////////////////////////////////////////////////
/////////////////////////////////////////////////////
.................................................................................
gdkdrawable-directfb.c
 //  drawable_class->ref_cairo_surface = gdk_directfb_ref_cairo_surface;


gdkkeys-directfb.c
1609//     case DIKI_ALTGR:      keyval = GDK_Mode_switch; break; 

### 如何解决缺少 gtk+-2.0 包的问题 在遇到“`No package 'gtk+-2.0' found`”的错误时,这通常表明系统中未安装 GTK+ 2.0 的开发包或其版本不满足要求。以下是针对不同操作系统的安装和配置方法。 #### 在 Ubuntu 系统中安装 gtk+-2.0 对于基于 Debian 的 Linux 发行版(如 Ubuntu),可以通过以下命令安装 GTK+ 2.0 的开发包: ```bash sudo apt update sudo apt install libgtk2.0-dev ``` 此命令会安装 GTK+ 2.0 的开发库及其依赖项[^2]。安装完成后,可以使用 `pkg-config` 检查是否正确安装: ```bash pkg-config --cflags --libs gtk+-2.0 ``` 如果输出包含头文件路径和库文件路径,则说明安装成功。 #### 在 Windows 系统中配置 gtk+-2.0 对于 Windows 用户,可以按照以下步骤手动安装和配置 GTK+ 2.01. **下载并解压 GTK+ 安装包** 下载 GTK+ 的 Windows 版本安装包(例如:`gtk+-bundle_2.24.10-20120208_win32.zip`),并将其解压到一个目录中(如:`D:\MinGW\gtk+-bundle_2.24.10-20120208_win32`)[^3]。 2. **配置环境变量** 将解压后的 GTK+ 目录中的 `\bin` 文件夹路径添加到系统的环境变量 `PATH` 中。例如: ``` D:\MinGW\gtk+-bundle_2.24.10-20120208_win32\bin ``` 这一步确保编译器和运行时能够找到所需的 `.dll` 文件。 3. **在 IDE 中配置 GTK+ 路径** 如果使用 Code::Blocks 或其他 IDE,需要在项目设置中指定 GTK+ 的头文件和库文件路径。具体路径如下: - 头文件路径:`D:\MinGW\gtk+-bundle_2.24.10-20120208_win32\include` - 库文件路径:`D:\MinGW\gtk+-bundle_2.24.10-20120208_win32\lib` #### 编译时的注意事项 在编译 GTK+ 程序时,应使用倒引号(`` ` ``)而不是单引号(`'`)来包含 `pkg-config` 命令的结果。正确的编译命令如下: ```bash gcc base.c -o base `pkg-config --cflags --libs gtk+-2.0` ``` 如果使用单引号,会导致编译器无法识别 `pkg-config` 的输出,从而报错[^4]。 ### 示例代码 以下是一个简单的 GTK+ 程序示例: ```c #include <gtk/gtk.h> int main(int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "Hello World"); gtk_widget_show(window); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_main(); return 0; } ``` 编译上述代码时,请确保使用正确的命令格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值