daemonfreaks.com

PyXPCOMを使ってみよう

posted by jun-g at Sun, 18 Mar 2007 03:02 JST

Lingraodag隊長voluntasさんと会話中にPyXPCOMの話題になり、最近のMozillaのソースには普通にPyXPCOMのソースが含まれている事を教えてもらったので早速ビルド/インストールしてみる事にした。…とはいえ自前でソース取ってきて一からビルドできる程の知識は持ってないので、ここを参考にしながらportsを改造する事に。FreeBSD万歳!!

って事で以下はwww/mozilla/Makefile.commonのパッチ。

--- Makefile.common.orig	Sat Mar 17 01:35:11 2007
+++ Makefile.common	Sat Mar 17 03:34:09 2007
@@ -119,7 +119,7 @@
 LDFLAGS+=		-L${X11BASE}/lib -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH}
 LIBS+=			${PTHREAD_LIBS} -L${LOCALBASE}/lib -liconv
 
-_USE_GECKO_OPTIONS_ALL=	java debug logging optimized_cflags
+_USE_GECKO_OPTIONS_ALL=	java python debug logging optimized_cflags
 
 .if !defined(USE_GECKO_OPTIONS)
 USE_GECKO_OPTIONS=	debug logging optimized_cflags
@@ -127,6 +127,7 @@
 
 debug_OPTION=	"Build a debugging image" off
 java_OPTION=	"Enable JAVA xpcom" off
+python_OPTION=  "Enable PyXPCOM" off
 logging_OPTION=	"Enable additional log messages" off
 optimized_cflags_OPTION=	"Enable some additional optimizations" off
 
@@ -214,6 +215,11 @@
 JAVA_OS+=	native
 CONFIGURE_ENV+=	JAVA_HOME="${JAVA_HOME}"
 MOZ_OPTIONS+=	--enable-javaxpcom
+.endif
+
+.if defined(WITH_PYTHON)
+USE_PYTHON=	yes
+MOZ_EXTENSIONS+=python/xpcom
 .endif
 
 .if defined(WITH_LOGGING)

PyXPCOMを有効にする対象はXULRunnerにしよう、という事で、次はwww/xulrunner/Makefileのパッチ。

--- Makefile.orig	Sat Mar 17 01:38:02 2007
+++ Makefile	Sat Mar 17 03:35:18 2007
@@ -29,7 +29,7 @@
 		--enable-system-cairo
 MOZ_EXTENSIONS=	default,cookie,permissions
 OPTIONS=	# Empty, used for generic gecko OPTIONS
-USE_GECKO_OPTIONS=	java debug logging optimized_cflags
+USE_GECKO_OPTIONS=	java python debug logging optimized_cflags
 
 .include 
 .include "${PORTSDIR}/www/mozilla/Makefile.common"

この2つのパッチを適用したら、www/xulrunnerのオプションに「Python」ってのが出るようになる。

でもって早速make installして試してみた。

/home/jun-g% python
Python 2.4.4 (#2, Feb 24 2007, 05:43:34) 
[GCC 3.4.6 [FreeBSD] 20060305] on freebsd6
Type "help", "copyright", "credits" or "license" for more information.
>>> import xpcom
>>>

出来た!!という訳で今回はここまで。次はここ見ながらもうちょっと試してみよう。