Ticket #1309 (new bug)

Opened 5 years ago

Last modified 4 years ago

perl Configure.pl finds icu but doesn't set it up

Reported by: getpsimon Owned by:
Priority: normal Milestone:
Component: build Version: 1.8.0
Severity: medium Keywords:
Cc: jkeenan Language:
Patch status: new Platform: linux

Description

perl Configure.pl finds icu during config but doesn't set you up to use it.

perl Configure.pl says: ... auto::icu - Is ICU installed....................................yes.

But during make, the following error is reported: Invoking Parrot to generate runtime/parrot/include/config.fpmc --cross your fingers ./miniparrot config_lib.pasm > runtime/parrot/include/config.fpmc ./miniparrot: error while loading shared libraries: libicuuc.so.42: cannot open shared object file: No such file or directory gmake: *** [runtime/parrot/include/config.fpmc] Error 127

Attachments

auto.icu.verbose.txt Download (7.7 KB) - added by getpsimon 5 years ago.
auto.icu.steptest.txt Download (5.8 KB) - added by getpsimon 5 years ago.
auto_icu.patch.txt Download (423 bytes) - added by jkeenan 4 years ago.
Add two values to 'libs'

Change History

in reply to: ↑ description ; follow-up: ↓ 4   Changed 5 years ago by jkeenan

Replying to getpsimon:

To assist in diagnosing this problem:

1. Could you provide information on your OS, platform, etc.? Also, indicate where you expect to find key ICU files.

2. Could you re-run configuration with verbosity on for auto::icu, and then run the corresponding step test? The following should work:

perl Configure.pl --verbose-step=auto::icu 2>&1 | tee auto.icu.verbose.txt && prove -v t/steps/auto/icu-01.t 2>&1 | tee auto.icu.steptest.txt

If you can do that, please add the two output files as Attachments.

Thank you very much.

kid51

  Changed 5 years ago by jkeenan

Reference only: Another ICU-related ticket is here: TT #673.

  Changed 5 years ago by doughera

On Thu, 19 Nov 2009, Parrot wrote:

> -----------------------+----------------------------------------------------
>  perl Configure.pl finds icu during config but doesn't set you up to use
>  it.
> 
>  perl Configure.pl says:
>  ...
>  auto::icu -          Is ICU
>  installed....................................yes.
> 
>  But during make, the following error is reported:
>  Invoking Parrot to generate runtime/parrot/include/config.fpmc --cross
>  your fingers
>  ./miniparrot config_lib.pasm > runtime/parrot/include/config.fpmc
>  ./miniparrot: error while loading shared libraries: libicuuc.so.42: cannot
>  open shared object file: No such file or directory
>  gmake: *** [runtime/parrot/include/config.fpmc] Error 127

Generally speaking, on some Linux systems, this sort of thing can happen
if you have the runtime-version of a library installed but not the
"development" version.   What do you actually have installed for icu?  
On a Debian system, for example, you can find out by running:

	dpkg --get-selections | grep icu

Other distributions probably have similar commands, but I don't know them.

-- 
    Andy Dougherty		doughera@lafayette.edu

Changed 5 years ago by getpsimon

Changed 5 years ago by getpsimon

in reply to: ↑ 1   Changed 5 years ago by getpsimon

Replying to jkeenan:

Replying to getpsimon: To assist in diagnosing this problem: 1. Could you provide information on your OS, platform, etc.? Also, indicate where you expect to find key ICU files. 2. Could you re-run configuration with verbosity on for auto::icu, and then run the corresponding step test? The following should work: {{{ perl Configure.pl --verbose-step=auto::icu 2>&1 | tee auto.icu.verbose.txt && prove -v t/steps/auto/icu-01.t 2>&1 | tee auto.icu.steptest.txt }}} If you can do that, please add the two output files as Attachments. Thank you very much. kid51

See attached files. I accidentally uploaded auto.icu.verbose twice. Yikes!

follow-up: ↓ 6   Changed 5 years ago by jkeenan

Thanks for your response.

1. I deleted the superfluous attachment.

2. The output of t/steps/auto/icu-01.t is fine. I compared your output of Configure.pl --verbose-step=auto::icu with mine on Linux/i386. There did not appear to be significant differences. So I think Configure.pl is doing just a good on your box as on anyone else's.

3. Have you had a chance to consider Andy Dougherty's hypothesis and recommendation? It sounds plausible to me. I'm on Debian, and I followed his suggestion:

$ dpkg --get-selections | grep icu
icu-doc                                         install
libicu36                                        install
libicu36-dev                                    install

Note the presence of the -dev package.

Thank you very much.

kid51

in reply to: ↑ 5 ; follow-up: ↓ 7   Changed 5 years ago by getpsimon

Replying to jkeenan:

Thanks for your response. 1. I deleted the superfluous attachment. 2. The output of t/steps/auto/icu-01.t is fine. I compared your output of Configure.pl --verbose-step=auto::icu with mine on Linux/i386. There did not appear to be significant differences. So I think Configure.pl is doing just a good on your box as on anyone else's. 3. Have you had a chance to consider Andy Dougherty's hypothesis and recommendation? It sounds plausible to me. I'm on Debian, and I followed his suggestion: {{{ $ dpkg --get-selections | grep icu icu-doc install libicu36 install libicu36-dev install }}} Note the presence of the -dev package. Thank you very much. kid51

I followed Andy's suggestion, apt-get install libicu-dev, and parrot installed flawlessly. However, parrot won't install if I build ICU from source unless I add /usr/local/lib to LD_LIBRARY_PATH.

in reply to: ↑ 6   Changed 5 years ago by doughera

Replying to getpsimon:

I followed Andy's suggestion, apt-get install libicu-dev, and parrot installed flawlessly. However, parrot won't install if I build ICU from source unless I add /usr/local/lib to LD_LIBRARY_PATH.

Ah ha -- that was the missing piece. I didn't know you were trying to build from a locally-installed version.

There's enough blame here for everyone to share some. icu-config should perhaps have given more helpful flags (like including the approriate -rpath incantations). If you want parrot to use libraries from a location not normally searched by ld.so, then perhaps you should be expected to make appropriate local adjustments (either by setting LD_LIBRARY_PATH or running ldconfig or whatever is appropriate on your system). And finally, even if parrot doesn't automatically add the appropriate flags, it should at least warn you earlier in a more helpful way what is going on.

I see two easy possibilities for things parrot could do better:

1. Parrot's icu test could actually try linking a program against -licu and running the program before deciding that the user actually has a useful icu library.

2. Towards the end of the configuration process, Configure.pl could run a quick sanity check to make sure all the flags and libraries will work together, and print a helpful error message if there is any problem. (More details on how to do such a check are in RT #41168.)

  Changed 4 years ago by jkeenan

  • cc jkeenan added

Changed 4 years ago by jkeenan

Add two values to 'libs'

  Changed 4 years ago by jkeenan

  • patch set to new

It may be the case that once we located the appropriate libraries, we failed to add them to our libs element in the configuration data.

getpsimon, can you try the patch attached?

Thank you very much.

kid51

Note: See TracTickets for help on using tickets.