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)