On 09/12/06, Jan Dubois <[EMAIL PROTECTED]> wrote:
>I just started with Win32 to make sure everything still works after the
>move. It is not done yet; I plan to do the following additional steps:
>
>1) Move the remaining Win32::* functions from win32/win32.c into
> ext/Win32/Win32.xs and just add forwarding stubs to win32/win32.c
> that will "require Win32" and then call the function in Win32.xs.
It turned out that this move was not as easy as expected. The problems
fall into 2 areas:
1) miniperl can no longer use Win32::* functions because it cannot load
Win32.dll.
2) Some tests fail because they change the working directory, so loading
the Win32::* functions at runtime via -I../lib doesn't always work.
The changes in patch1.diff modify the build scripts, test script and
some modules used via miniperl to deal with this correctly.
patch2.diff moves the Win32::* functions into the ext/Win32 module and
adds forwarder functions to load the module at runtime on first use:
static void
forward(pTHX_ const char *function)
{
dXSARGS;
Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, newSVpvn("Win32",5), NULL);
PUSHMARK(SP-items);
call_pv(function, GIMME_V);
}
#define FORWARD(function) XS(w32_##function){ forward(aTHX_
"Win32::"#function); }
FORWARD(GetCwd)
FORWARD(SetCwd)
Thanks, patches applied as change #29509 and #29510.
Note that this also impacts those dual-lived modules:
* PathTools (BTW, any new maintainer yet?)
* ExtUtils::MM
(Further patch in this thread applied as change #29511 -- impacts Storable.)