perl 6 - a "re-dip"

lilstevey on 2009-10-28T23:59:38

In response to my last Rakudu/Parrot post, daxim responded with a clear and concise answer, of which I am very greatful.

parrot_config is an executable, installed by default in $PREFIX/bin/parrot_config. Run parrot_config --dump to see interesting stuff.

I'm now watching Britains Best Dish - a fascinating show in which predominantly amateur cooks cook a single dish - either a starter, main or a dessert. This week is the finals, and today 6 or 7 main courses get whittled down to the final two. Its very british - game dishes and pies.

Anyway, I digress.

I now run:

perl Configure.pl --parrot_config=c:\Parrot-1.7.0\bin\parrot_config.exe

and

mingw32-make

and again have the previous error:

In file included from perl6_group.c:17:
/Parrot-1.7.0/include/parrot/parrot/parrot.h:235:23: libintl.h: No such file or directory
mingw32-make: *** [src\pmc\perl6_group.dll] Error 1

That appears to be "libintl.h." perhaps it's related to the dependency on the ICU library mentioned at: http://rakudo.org/how-to-get-rakudo

Breaking now for the pub quiz.

Ok. back from pub quiz.

I have:
A win32 platform
Downloaded Parrot win32 installer
Downloaded Rakudo

I attempted to install them by downloading the parrot win32 installer, and downloading the rakudo tar.gz installer. Then I got a little lost.

I believe I messed it up by not concentrating on the task in hand, and instead doing it in the background whilst watching a rather excellent film ( the Last King of Scotland ) for the first time.

So I think I have missed a dependency - the ICU library.

I visit the site and try ICU4C, downloading "Windows (win32 x86 32-bit) Visual Studio 9".

After a snooze and day at work I have another bash.

Rakudo docs at http://github.com/rakudo/rakudo/blob/master/README suggest:

In order to fully support Unicode, you'll also want to have the

ICU library installed (L<http://site.icu-project.org/>). Rakudo can run without ICU, but some Unicode-related features may not work properly.

which seems odd if the lack of ICU is causing the problem, and maybe I'm reading the following wrong, but to me the http://rakudo.org/how-to-get-rakudo site seems to be contradictory:

Building Rakudo from the sources requires Perl 5.8 or newer, a C compiler, a make utility, subversion, and the ICU library.

Turning to google again, this page turns up: http://cpansearch.perl.org/src/ARANDAL/parrot-1.0.0/README_win32.pod with some nice instructions on installing ICU - I install it and add it to path as it suggests. I download parrot 1.6 from parrot.org

\parrot-1.6.0>mingw32-make
"Compiling with:"
xx.c
Can't spawn "cmd.exe": No such file or directory at tools\dev\cc_flags.pl line 152, <$F> line 37.
mingw32-make: *** [flags_dummy] Error 255

The "Current developer release" on the parrot download page seems to point to 1.60, so I download 1.7 instead. I'll have a play with that.

C:\install\parrot-1.7.0>mingw32-make
"Compiling with:"
xx.c
Can't spawn "cmd.exe": No such file or directory at tools\dev\cc_flags.pl line 152, <$F> line 37.
mingw32-make: *** [flags_dummy] Error 255

So I try to run cmd - it fails - so lets try setting the appropriatte path and starting again:

set PATH=%PATH%;C:\WINDOWS\system32

Misconfigured system perhaps? Lets run configure again...

It was going so well...
Invoking Parrot to generate runtime\parrot\include\config.fpmc --cross your fing ers
.\miniparrot.exe config_lib.pasm > runtime\parrot\include\config.fpmc
mingw32-make: *** [runtime\parrot\include\config.fpmc] Error -1073741515

with the popup:

miniparrot.exe - Unable to Locate Component
This application has failed to start because icuuc42.dll was not found. Re-installing the application may fix this problem.

Maybe I used the wrong arguments to configure - I'll try again

perl Configure.pl --icushared="C:\usr\lib\icu\lib\icudt.lib C:\usr\lib\icu\lib\icuuc.lib" --icuheaders="C:\usr\lib\icu\include"

Did I say I was watching Heston at the moment? He's back at Little Chef. This may be slightly lost to readers out of the UK. Right. Advert break. Time to grab some stilton and biscuits.

hmm. nice stilton. Goes suprisingly well with this glass of white. Anyway - back to it. that resulted in the same error. I'll do a sanity check on the arguments. Look ok, now I noticed I had installed ICU4C - i'll try the "ICU 4.2" download instead. Ahh. notice I am trying to use 4.2.1 rather than 4.2 - I'll try installing that instead. damn. I've run out of stilton.

Ahhhh! Me being an eeedjit! Configured the environmental variables after opening the window - re added set C:\usr\lib\icu\bin to %PATH% and bingo!

And lets see...
C:\install\rakudo-2009-10>perl Configure.pl --parrot-config=c:\Parrot\bin\parrot _config.exe

Reading configuration information from c:\Parrot\bin\parrot_config.exe ...
Verifying Parrot installation...

===SORRY!===
I'm missing some needed files from the Parrot installation:
C:/Parrot/lib/parrot/1.7.0/languages/nqp/nqp.pbc
C:/Parrot/lib/parrot/1.7.0/tools/build/ops2c.pl
C:/Parrot/lib/parrot/1.7.0/tools/build/pmc2c.pl
C:/Parrot/src/parrot/1.7.0
C:/Parrot/src/parrot/1.7.0/pmc
C:/Parrot/include/parrot/1.7.0/pmc
(Perhaps you need to use Parrot's "make install-dev" or
install the "parrot-devel" package for your system?)

DOH! very nice error message though. I'll try install-dev.

That slipped in, and Configure.PL ran ok in the rakudo dir.

make ( well the mingw variant ) worked.... now running $make test

All tests successful.
Files=29, Tests=236, 146 wallclock secs ( 0.81 usr + 0.16 sys = 0.97 CPU)
Result: PASS

yay.

So it seems install. One thing left then.

I create a file, greet.pl, with the following content:
say "Hello world";
and lets try to run it ( making sure that perl6 is added to path this time ... ) and .....

Agggh! our friend the icuuc42.dll alert!. I hadn't added C:\usr\lib\icu\bin; to the global %PATH%! Easily fixed.

And, finally, largely due to my distracted state!:
C: ... \perl6>perl6 greet.pl
Hello world
yay!

Conclusions:

  • Focus on what you are doing - watching telly simultaneously isn't great
  • Follow the instructions in the parrot distro.
  • ICU seems important.
  • Be carefull about your environment variables.


libintl.h isn't from libicu

daxim on 2009-10-29T19:11:59

On Linux:

> rpm -ql libicu-devel | ack libintl.h
> locate libintl.h | xargs rpm -qf
glibc-devel-2.9-2.12.1

Interpretation: That header file does not belong to libicu, but to the C library instead. It feels strange to me that installing libicu fixed this dependency for you; can you explain that?

Re:libintl.h isn't from libicu

lilstevey on 2009-10-29T20:56:58

Thanks for the observation. The comment:

That appears to be "libintl.h." perhaps it's related to the dependency on the ICU library mentioned at: http://rakudo.org/how-to-get-rakudo

Was merely a wild stab in the dark, perhaps based on me assuming it might have something to do with unicode from a possible "intl" angle.

So - explain - no. A wild guess rather than a result of analysis, and not a particulary good one by the sounds of your studies. At some point after that, I gave up on the windows binary distribution of parrot, and switched to compiling the sources - also changing the location of them to ensure the directory containing the source didn't contain spaces. After that, most of the errors and mistakes were just down to my distracted state, and messing up environment variables - which could have had a contributory effect to the earlier problems.

Hope that explains things - I'm very sorry if you've wasted time as a result of my notes...