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