[Kazehakase-devel 2486] 共有ライブラリ化

Back to archive index

Kouhei Sutou kou****@cozmi*****
2005年 11月 26日 (土) 00:18:39 JST


須藤です.

現在,風博士はmain.cに全てのソースをコンパイルしリンクして
kazehakaseを生成していますが,main.c以外のソースを共有ライブ
ラリlibkazehakase.soにして,main.cはlibkazehakase.soにリンク
するようにしてもよいですか?添付のパッチは,これを実現するた
めのものです.
# 肉が近すぎる気がしますが...
## もっと本格的にやるならヘッダファイルのインストールとかも
## しなければいけませんが...


理由は,風博士とRubyやSchemeなどのスクリプト言語とのブリッジ
を作成しやすくするためです.

現在では,風博士とスクリプト言語とのブリッジを作成するには以
下の2種類の方法がありますが,Rubyの場合はどちらの方法も問題
があります.

(1) 風博士本体にブリッジ部分もリンクする方法.

つまり,ブリッジ部分もkz-*.cのようにmain.cにリンクしてしまう
方法です.

しかし,この方法ではスクリプト言語のブリッジ作成用ライブラリ
を使用することができない場合があります.

例えばRubyの場合だと,GTK+関係のオブジェクトとRuby間のブリッ
ジを作成する場合はRuby/GTK2やRuby/GLib2を使用します.そして,
これらはgtk2.soやglib2.soとして提供されています.

しかし,これらはlibXXX.soという名前ではないため,-lXXXという
ようにリンクすることができません.これはこれらのライブラリが
Rubyレベルでロード(require)して使用するように設計されてい
るためです.

よって,Rubyの場合はこの方法でブリッジを作成することができま
せん.

(2) 風博士起動後にブリッジ部分をロードする方法

つまり,ブリッジ部分は共有ライブラリとして作成し風博士起動後
にスクリプト言語によってロードするようにし,main.cにはブリッ
ジ部分をリンクしない方法です.

しかし,この方法ではmain.cにリンクしたソース(kz-*.c)をブリッ
ジ部分にもリンクしなければいけなくなります.これでは,ブリッ
ジ部分の共有ライブラリが大きくなります.
# 風博士本体とブリッジ部分に同じものが別にリンクされていると
# いうのも気持ち悪い.



風博士を共有ライブラリ化することにより,(2)の方法を使ってすっ
きりと(?)ブリッジ部分を作成することができるようになります.
-------------- next part --------------
Index: src/Makefile.am
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/Makefile.am,v
retrieving revision 1.109
diff -u -p -r1.109 Makefile.am
--- src/Makefile.am	27 Sep 2005 07:45:43 -0000	1.109
+++ src/Makefile.am	25 Nov 2005 14:54:23 -0000
@@ -4,6 +4,8 @@ SUBDIRS = utils net actions bookmarks di
 	  widget prefs_ui sidebar libegg \
 	  mozilla khtml
 
+lib_LTLIBRARIES = libkazehakase.la
+
 AM_CPPFLAGS = \
 	-DLOCALEDIR=\""$(localedir)"\" \
 	-DSYSCONFDIR=\""$(sysconfdir)"\" \
@@ -39,6 +41,15 @@ marshal_sources = \
 bin_PROGRAMS = kazehakase
 
 dist_kazehakase_SOURCES = \
+	main.c
+
+kazehakase_LDADD = libkazehakase.la
+
+if ENABLE_GTK_WEBCORE
+LIBKZWEBCORE=$(top_builddir)/src/khtml/libkzkhtml.la
+endif
+
+libkazehakase_la_SOURCES = \
 	kazehakase.h \
 	kz-embed.c kz-embed.h \
 	kz-embed-event.c kz-embed-event.h \
@@ -48,7 +59,6 @@ dist_kazehakase_SOURCES = \
 	kz-prefs-win.c kz-prefs-win.h \
 	kz-sidebar.c kz-sidebar.h \
 	kz-window.c kz-window.h \
-	main.c \
 	kz-plugin.c kz-plugin.h \
 	kz-profile.c kz-profile.h \
 	kz-xml.c kz-xml.h \
@@ -66,15 +76,11 @@ dist_kazehakase_SOURCES = \
 	kz-popup-preview.c kz-popup-preview.h \
 	kz-popup-tablist.c kz-popup-tablist.h
 
-nodist_kazehakase_SOURCES = $(marshal_sources)
-
-if ENABLE_GTK_WEBCORE
-LIBKZWEBCORE=$(top_builddir)/src/khtml/libkzkhtml.la
-endif
+nodist_libkazehakase_la_SOURCES = $(marshal_sources)
 
-kazehakase_LDFLAGS = -R$(MOZILLA_HOME)
+libkazehakase_la_LDFLAGS = -R$(MOZILLA_HOME)
 
-kazehakase_LDADD = \
+libkazehakase_la_LIBADD = \
 	$(INTLLIBS) \
 	$(GTK_LIBS) \
 	$(LIBGNUTLS_LIBS) \
Index: src/prefs_ui/Makefile.am
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/prefs_ui/Makefile.am,v
retrieving revision 1.33
diff -u -p -r1.33 Makefile.am
--- src/prefs_ui/Makefile.am	23 Apr 2005 01:20:37 -0000	1.33
+++ src/prefs_ui/Makefile.am	25 Nov 2005 14:54:23 -0000
@@ -37,6 +37,4 @@ libkzprefsui_la_SOURCES = \
 	prefs_bookmark.c prefs_bookmark.h
 
 libkzprefsui_la_LIBADD = \
-	$(GTK_LIBS) \
-	$(top_builddir)/src/utils/libkzutils.la \
-	$(top_builddir)/src/widget/libkzwidget.la
+	$(GTK_LIBS)


Kazehakase-devel メーリングリストの案内
Back to archive index