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>