On Friday 22 December 2006 11:08, Ron Blaschke wrote: > I have managed to build Parrot::Embed on Windows/VC8, and judging from > the test output it works. There are two warnings, but I guess those are > no problem? > > $ ./Build test > t\interp....ok 1/31Parrot VM: Can't stat no file here, code 2. > error:imcc:syntax error, unexpected IDENTIFIER > in file 'EVAL_2' line 1 > t\interp....ok > All tests successful. > Files=1, Tests=31, 0 wallclock secs ( 0.00 cusr + 0.00 csys = > 0.00 CPU)
Right. Those should be trappable from the embedding interface, but they aren't. > There are three steps necessary (four using VC8). > > 1) Two additional functions need to be exported. > Parrot_register_pmc > Parrot_unregister_pmc In some .def file somewhere, or marked somehow in the source code? > 2) Change the compiler and linker flags. > > 3) Add the path to parrot.dll to Path, so it can be found during (test) > execution. That's tough on all platforms. Is it a simple case of adding ../../blib/lib to $ENV{PATH} before executing the tests? > Step 2 is the hard part, and I'd like to ask for some advice. The flags > seem to come from F<parrot.pc>, generated from the input file > F<config/gen/makefiles/parrot.pc.in>. The relevant entries are: > > Libs: -L${libdir} -lparrot > Cflags: -I${includedir} > > The C<Cflags> seem to be added correctly in Module::Build (version > 0.2805) to the C<extra_compiler_flags>, but they don't get passed to the > compiler. I needed to change C<incpath> for this. This seems to be an > issue with Module::Build, but I need to double check this. Is C<incpath> a separate M::B option for Win32? > Second, C<Libs> is not right for Visual C++ (but added to > C<extra_linker_flags> and passed to the linker.) > > F<config/gen/makefiles/parrot.pc.in> says: > > Libs: -L${libdir} -lparrot @icu_shared@ @libs@ > > Visual C++ needs: > > ${libdir}/libparrot.lib @icu_shared@ @libs@ > or > /LIBPATH:${libdir} libparrot.lib @icu_shared@ @libs@ > > Any recommended way to get there? Does pkg-config work on Windows? If not, modifying that file is rather moot, and Parrot::Embed can work another way. Another option is to use Parrot::Config, if that'll be available and installed. That might be a better option. I'm open to ideas. -- c