Thanks for the reply. Readme.Win32 should have a notice about building in
anything other than Visual Studio 6. Since 'msdev' is hardcoded inside the
ICU build stuff, it *won't build on anything other than Visual Studio 6*.
For anyone interested, I've written step-by-step instructions on how to
build it at
http://dotnetjunkies.com/WebLog/sriram/archive/2005/01/28/49040.aspx .

>Would you care to retrace your steps carefully from a clean CVS HEAD, 
>and provide a detailed description (eg, console in and output)?

Doing so.I have Windows XP SP2 with Visual Studio 2003. My ICU binaries are
at D:/lib/icu/bin and /lib respectively. Parrot is at D:/parrot/parrot. For
anyone building ICU from source on Win32, make sure you do a release build
as the filenames are different for the debug build.

Attempt #1
---------------

First, Readme.Win32 asks us to use " perl Configure.pl
--icushared="C:\usr\lib\icu\lib\icudata.lib C:\usr\lib\icu\lib\icuuc.lib"
--icuheaders="C:\usr\lib\icu\include""

So I run

  D:\parrot\parrot>perl Configure.pl --icushared="D:\lib\icu\lib\icudata.lib
D:\lib\icu\lib\icuuc.lib" --icuheaders="D:\lib\icu\include"

After configuring, I run nmake.

D:\parrot\parrot\nmake

Microsoft (R) Program Maintenance Utility Version 7.10.3077 Copyright (C)
Microsoft Corporation.  All rights reserved.

Compiling with:
xx.c
cl -nologo -GF -W3 -MD -Zi -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT
-DNO_HASH_SE D -Zi -I./include -ID:\lib\icu\include -DHAS_JIT -DI386 -I. -Fo
xx.obj -c xx.c

A bunch of warnings later (about unreferenced local variables,etc), I get
this

        .\parrot -o runtime\parrot\include\parrotlib.pbc
runtime\parrot\library\ parrotlib.imc

This throws an access violation and lands me in the debugger. The problem
here  is in string.c

   data_dir = Parrot_getenv("PARROT_ICU_DATA_DIR", &free_data_dir);
        if (data_dir == NULL) {
            const char *prefix;
            char *p, *build_path;
            build_path = data_dir = const_cast(DEFAULT_ICU_DATA_DIR);
            /*
             * if the installed --prefix directory exists then use it
             */
            prefix = Parrot_get_runtime_prefix(interpreter, NULL);
            if (prefix) {
                p = strstr(build_path, "blib");        /* .../blib/lib/...
*/
                assert(p);
                --p;        /* slash or backslash */
                data_dir = mem_sys_allocate(strlen(prefix) + strlen(p) + 1);
                strcpy(data_dir, prefix);
                strcat(data_dir, p);
                free_data_dir = 1;
            }
        }
The problem is that data_dir is a blank string - PARROT_ICU_DATA_DIR seems
to have a null string which causes it to finally blow up in the strlen(p)
call. What is interesting is that the assert doesn't get called at all - so
there's something wrong with the compiler switches as well.

Attempt #2
--------------

Now, the next attempt I made was by passing --icudatadir also (as
D:/lib/icu/source/data/out). This time, PARROT_ICU_DATA_DIR gets assigned
properly but the code blows up in the same section. The reason this time is
that there is no "blib" anywhere in the path of the datadir - which causes
the strstr to return 0x00000 which becomes 0xFFFFF after p--. I'm not really
sure why the data directory must be under "blib" though - and if so, what is
the point of a command line paramter to specify where it should be?

Attempt #3
-----------

This time, I copied the contents of my data directory into the blib folder
and configured it like this

D:/parrot/parrot>perl Configure.pl --icushared="D:\lib\icu\lib\icudata.lib
D:\lib\icu\lib\icuuc.lib" --icuheaders="D:\lib\icu\include"
--icudatadir="D:\parrot\parrot\blib\lib" 

This time, the build succeeds (as "blib" is present in the datadir path).
However, the linking during the 'nmake test' fails with the same error you
saw.

Attempt #4
-----------

I removed nci_dlvar_vv  from libnci_test.def and built again.This lets me
actually run the tests. My output for the tests are identical to yours (with
the nci tests failing).

Thanks,
Sriram




Reply via email to