Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Jan 2008 18:04:14 +0100
From:      Nikola =?UTF-8?B?TGXEjWnEhw==?= <nikola.lecic@anthesphoria.net>
To:        Hiroki Sato <hrs@FreeBSD.org>
Cc:        FreeBSD-ports@FreeBSD.org
Subject:   Re: CFT: Adobe Reader 8 + SCIM/UIM
Message-ID:  <20080114180414.28009108@anthesphoria.net>
In-Reply-To: <20080114.023713.237718911.hrs@allbsd.org>
References:  <20080108.114947.266356108.hrs@allbsd.org> <20080108.132806.27123224.hrs@allbsd.org> <20080108095126.2efc4557@anthesphoria.net> <20080114.023713.237718911.hrs@allbsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
I tried to follow all your tests and to check what binary is loaded
in what case. Below are my observations. Then I tested your diff,
comments included. Finally, please find the modified
ADOBE_VER-dependent version of that patch that served me perfectly.

Note: Sometimes I wasn't sure if the analyses in your post assumed that
there was no linux im-scim.so present in the system. Without linux
im-scim.so, there is no way for me to get acroread8+SCIM to work for me.

Therefore, I did all tests both with and without linux im-scim.so and
included separate comments.

BTW, I think that in the diff you obviously meant

-	case GTK_IM_MODULE in
+	case ${GTK_IM_MODULE} in

On Mon, 14 Jan 2008 02:37:13 +0900 (JST)
Hiroki Sato <hrs@FreeBSD.org> wrote:

> Nikola Lečić <nikola.lecic@anthesphoria.net> wrote
>   in <20080108095126.2efc4557@anthesphoria.net>:
> 
> ni> 3. Now acroread7 doesn't work (for me at least), with all
> ni> SCIM-related environment variables schemes. It just returns me
> ni> back to the shell prompt without any error message;
> ni> 
> ni> 4. However, if I use the environment scheme I suggested in my
> ni> previous mail and change GTK_IM_MODULE/XMODIFIERS in acroread7
> ni> startup script as proposed, all applications work, and SCIM in
> ni> them.
> 
>  From further investigation, the cause of this problem turns out to be
>  as follows:
> 
>  a) When GTK_IM_MODULE=xim and one runs a Linux binary that uses
>     linux-gtk2 library, the binary uses im-xim.so in linux-gtk2 and it
>     works.

The same here, if XMODIFIERS=@im=SCIM (if one actually wants SCIM, of
course).

>  b) When GTK_IM_MODULE=scim (or other than xim) and one runs a Linux
>     binary that uses linux-gtk2 library, the binary tries to load the
>     corresponding immodule file.  If the corresponding file is found
>     in /usr/compat/linux/usr/lib/gtk-2.0 (i.e. Linux binary), it is
>     loaded and should work fine.  If the corresponding file is found
>     in /usr/local/lib/gtk-2.0 (i.e. FreeBSD native binary), it is
>     loaded but does not work.  In the latter case, if the loading
>     fails gracefully, it falls back into loading im-xim.so.

I can confirm this, in both cases. (However, as you confirmed, the
presence of linux im-scim.so will crash acroread7.)
 
>  c) acroread7 works only with im-xim.so and loading FreeBSD binary
>     fails gracefully.  This means setting GTK_IM_MODULE=scim falls
>     back into GTK_IM_MODULE=xim automatically. (probably this is the
>     reason why GTK_IM_MODULE=scim + QT_IM_MODULE=scim +
>     XMODIFIERS=@im=SCIM works.)

With GTK_IM_MODULE=scim acroread7 will (according to b)) try to load
im-scim.so from /usr/compat/linux/usr/lib/gtk-2.0, which will cause a
crash. However, yes, if acroread7 loads linux im-xim.so, SCIM will work.

>  d) acroread8 works with both im-xim.so and im-scim.so as far as I can
>     check, and loading FreeBSD binary makes the process get hosed.

Not exactly so for me (if SCIM is the goal).

* With (_and only with_) linux im-scim.so _and_ GTK_IM_MODULE=scim,
  acroread8+SCIM works.
* Without linux im-scim.so no GTK_IM_MODULE settings helps.

>  So, the individual cases can be classified as follows:
> 
>  - acroread7 + GTK_IM_MODULE=xim + XMODIFIERS=@im=SCIM
> 
>    -> should work.  @im=foo other than SCIM also works.

The same here: acroread7 loads linux im-xim.so. In this case, with
XMODIFIERS=@im=SCIM, acroread7+SCIM works.

(BTW, SCIM won't work with GTK_IM_MODULE=xim + XMODIFIERS=@im=XIM
anywhere (but such values imply that one doesn't want SCIM, I think.)

>  - acroread7 + GTK_IM_MODULE=scim
> 
>    -> should work.  Even if FreeBSD native im-scim.so exists it is
>       always ignored and XIM is used.  Note that if Linux im-scim.so
>       exists it prevents the acroread7 from working, but there is no
>       port of im-scim.so in the Ports Collection now.

* With linux im-scim.so: yes, it crashes acroread7 (as reported).
* Without linux im-scim.so: the same here, it works.

>  - acroread8 + GTK_IM_MODULE=xim + XMODIFIERS=@im=SCIM
> 
>    -> should work.  @im=foo other than SCIM also works.

Not for me. Linux im-scim.so must be present, and GTK_IM_MODULE must be
changed to scim. Otherwise, acroread8 will load linux im-xim.so and SCIM
won't work. XMODIFIERS doesn't matter in this case.

(Again, I think that xim/XIM isn't preferable combination for SCIM user,
as stated above.)
 
>  - acroread8 + GTK_IM_MODULE=scim
> 
>    -> does not work unless Linux im-scim.so exists.  If FreeBSD native
>       im-scim.so exists the acroread8 process gets hosed (no fall-back
>       happens).

* With linux im-scim.so present, yes, it works.
* Without linux im-scim.so, nothing bad happens. acroread8 just loads
  Linux im-xim.so and SCIM won't work.
 
>  So, the safest way to loading Linux version of im-xim.so is setting
>  GTK_IM_MODULE=xim forcibly.  And if setting XMODIFIERS properly there
>  should be little difference in its behavior from the user's point of
>  view.

Forced GTK_IM_MODULE=xim will always cause linux im-xim.so to be loaded,
but this is why acroread8+SCIM never works for me with the diff included
with your previous mail...

>  I pondered over adding ports of the Linux immodules in my previous
>  post or a hack for GTK_IM_MODULE variable into print/acroreadwrapper,
>  but I think changing acroreadwrapper is better.  A patch for
>  acroreadwrapper that sets GTK_IM_MODULE=xim forcibly and sets
>  XMODIFIERS=@im=foo according to GTK_IM_MODULE, has been attached.

... and that's why this confuses me: do you mean that you get
acroread8+SCIM working without linux im-scim.so?

>  However, in your post you said when GTK_IM_MODULE=xim +
>  XMODIFIERS=@im=SCIM, the behavior is bad.  Could you elaborate it?  I
>  could not reproduce it.

That statement was a part of description of global effects that various
SCIM-related variables have. GTK_IM_MODULE=xim + XMODIFIERS=@im=SCIM is
explained in SCIM documentation:

  http://www.scim-im.org/wiki/documentation/installation_and_configuration/all/system_configuration

as the "the least optimal approach". For me, it has one bad and one good
side:

  * switching among various SCIM keyboard layouts works normally only if
    "Share the same input method among all applications" is set in
    SCIM-setup, and even then not always perfectly. Otherwise, keyboard
    icon will usually be out of synchronisation with actually active
    keyboard layout in a given window, when the focus change;

  * good side is that it's currently the only way known to me to get the
    most complex keystroke rules of scim-kmfl-imengine working in
    OpenOffice, but this is another thing. (I'm investigating this and
    I'm sure there's a better solution.)

Therefore I try to avoid xim/SCIM scheme.

Now, to sum up what works for me. This list is the conditio sine qua
non (after as much testing as I could do):

1. The only way to get SCIM working in acroread8 is to load linux
   im-scim.so.

2. GTK_IM_MODULE=scim + the presence of linux im-scim.so will crash
   acroread7.

3. However, this can be easily avoided by setting GTK_IM_MODULE=xim
   if ADOBE_VER=7.

4. acroread8 always loads linux version of GTK_IM_MODULE if it exists.
   XMODIFIERS are not important in such cases.

Therefore the proposed diff is not functional for me.

IMHO 1-4 means that hack of GTK_IM_MODULE must be ADOBE_VER-dependent.
I included the modified version of your patch, which is the optimal
solution for me. (I repeat, always with linux im-scim.so, i.e. with
textproc/lunux-scim-libs port.) With this patch, SCIM works in both
acroread7 and acroread8 with any possible environmental settings. I'd
say it doesn't break anything for XIM users. I didn't test UIM.

--- acroreadwrapper.diff begins here ---
Index: Makefile
===================================================================
RCS file: /eris/cvsroot/ports/print/acroreadwrapper/Makefile,v
retrieving revision 1.9
diff -u -r1.9 Makefile
--- Makefile	4 Jan 2008 20:20:20 -0000	1.9
+++ Makefile	14 Jan 2008 15:05:56 -0000
@@ -6,7 +6,7 @@
 #
 
 PORTNAME=	acroreadwrapper
-PORTVERSION=	0.0.20071020
+PORTVERSION=	0.0.20080110
 CATEGORIES=	print
 MASTER_SITES=	# empty
 DISTFILES=	# empty
@@ -29,7 +29,7 @@
 ADOBEBASE=	Adobe
 ACROBASE7=	${ADOBEBASE}/Acrobat7.0
 ACROBASE8=	${ADOBEBASE}/Reader8
-PLUGINDIR=	lib/browser_linux_plugins
+PLUGINDIR=	lib/npapi/linux-acroread
 
 do-fetch:
 	@${DO_NADA}
Index: files/acroread.in
===================================================================
RCS file: /eris/cvsroot/ports/print/acroreadwrapper/files/acroread.in,v
retrieving revision 1.5
diff -u -r1.5 acroread.in
--- files/acroread.in	4 Jan 2008 20:20:20 -0000	1.5
+++ files/acroread.in	14 Jan 2008 16:15:21 -0000
@@ -1,4 +1,4 @@
-#!%%LINUXBASE%%/bin/sh
+#!/bin/sh
 # $FreeBSD: ports/print/acroreadwrapper/files/acroread.in,v 1.4 2007/09/23 18:28:46 hrs Exp $
 
 # environment variables:
@@ -13,6 +13,14 @@
 #     When this script is invoked as "acroread7" and "acroread8",
 #     ADOBE_VER is automatically set.
 #
+# ADOBE_DISABLEIMMODULEHACK:
+#     This script sets GTK_IM_MODULE as "xim" by default because
+#     immodules other than xim require the corresponding module files
+#     in Linux binary, not FreeBSD native versions (if a FreeBSD
+#     native immodule library exists and the corresponding Linux
+#     library does not, Adobe Reader attempts to load the FreeBSD
+#     binary and it will fail).  If $ADOBE_DISABLEIMMODULEHACK is
+#     defined as "YES", this behavior is disabled.
 
 ADOBE_LANG=`echo "${ADOBE_LANG}" | tr a-z A-Z`
 
@@ -63,7 +71,6 @@
 case ${ADOBE_LANG} in
 CHS) : ${GDK_USE_XFT:=0}; export GDK_USE_XFT ;;
 CHT) : ${GDK_USE_XFT:=0}; export GDK_USE_XFT ;;
-JPN) : ${GTK_IM_MODULE:=xim}; export GTK_IM_MODULE ;;
 KOR) : ${GDK_USE_XFT:=0}; export GDK_USE_XFT ;;
 esac
 
@@ -81,6 +88,32 @@
 ;;
 esac
 
+case ${ADOBE_DISABLEIMMODULEHACK} in
+[Yy][Ee][Ss])	;; # do nothing
+*)
+	case ${ADOBE_VER} in
+	7)
+		case ${GTK_IM_MODULE} in
+		""|xim)	;; # do nothing
+		scim)
+			GTK_IM_MODULE=xim; export GTK_IM_MODULE
+			XMODIFIERS=@im=SCIM; export XMODIFIERS
+		;;
+		esac
+	;;
+	8)
+		case ${XMODIFIERS} in
+		@im=SCIM) GTK_IM_MODULE=scim; export GTK_IM_MODULE ;;
+		*) ;; # do nothing
+		esac
+	;;
+	esac
+	case ${GTK_IM_MODULE} in
+		""|xim|scim) ;; # do nothing
+		*) XMODIFIERS="@im=${GTK_IM_MODULE}"; export XMODIFIERS ;;
+	esac
+esac
+
 case ${ADOBE_VER} in
 7)
 	ACROBASE=%%ACROBASE7%%
@@ -98,15 +131,15 @@
 --install-plugin)
 	echo "installing PDF plugin..."
 	echo "%%PREFIX%%/${ACROBASE}/${ADOBE_LANG}/Browser/intellinux/nppdf.so -> %%PREFIX%%/%%PLUGINDIR%%/nppdf.so"
-	mkdir -p /../%%PREFIX%%/%%PLUGINDIR%%
+	mkdir -p %%PREFIX%%/%%PLUGINDIR%%
 	ln -s -f %%PREFIX%%/${ACROBASE}/${ADOBE_LANG}/Browser/intellinux/nppdf.so \
-	/../%%PREFIX%%/%%PLUGINDIR%%/nppdf.so
+	%%PREFIX%%/%%PLUGINDIR%%/nppdf.so
 	exit 0
 ;;
 --deinstall-plugin)
 	echo "deinstalling PDF plugin..."
-	rm -f /../%%PREFIX%%/%%PLUGINDIR%%/nppdf.so
-	rmdir /../%%PREFIX%%/%%PLUGINDIR%% 2> /dev/null || true
+	rm -f %%PREFIX%%/%%PLUGINDIR%%/nppdf.so
+	rmdir %%PREFIX%%/%%PLUGINDIR%% > /dev/null 2>&1 || true
 	exit 0
 ;;
 esac
--- acroreadwrapper.diff ends here ---

Best regards.
-- 
Nikola Lečić :: Никола Лечић



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080114180414.28009108>