Closed GoogleCodeExporter closed 9 years ago
[deleted comment]
The modification of if_perl.xs to work around.
1. Perl_sv_free2:
Perl 5.18.1 introduces a new file lib\CORE\inline.h, which defines inline functions that refers to Perl_sv_free2 before if_perl.xs defines Perl_sv_free2.
Perl_sv_free2 must be defined before inline.h uses it.
Define macro PERL_NO_INLINE_FUNCTIONS before #include "vim.h" to prevent perl.h to include inline.h.
After Perl_sv_free2 is defined, include "inline.h" manual to retrieve the definitions of S_SvREFCNT_inc and S_SvREFCNT_dec.
Another issue is, Perl_sv_free2 has 2 arguments now, the definition becomes "static void (*Perl_sv_free2)(pTHX_ SV*, const U32);".
2. Perl_croak_xs_usage:
In lib\CORE\embed.h, macro croak_xs_usage is defined as "#define croak_xs_usage Perl_croak_xs_usage".
However, in the generated if_perl.c, croak_xs_usage should be defined as "#define croak_xs_usage S_croak_xs_usage".
Thus, undefine macro croak_xs_usage, and undefine macro PERL_ARGS_ASSERT_CROAK_XS_USAGE to enable "#define croak_xs_usage S_croak_xs_usage".
I use:
- Window 7 Home Basic x64.
- Visual C++ 2012 Express for Desktop SP1 x86.
- Perl 5.18.1 x86 built from source:
http://www.cpan.org/src/5.0/perl-5.18.1.tar.gz.
Original comment by Gauchy...@gmail.com
on 16 Oct 2013 at 2:56
Attachments:
Unfortunately this patch does not work with Activestate perl 5.18.1 x64.
Part of error log:
if_perl.c:1916:15: note: in expansion of macro 'newXSproto_portable'
(void)newXSproto_portable("VIBUF::Get", XS_VIBUF_Get, file, "$;@");
^
if_perl.c:1137:67: error: expected expression before ')' token
#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
^
if_perl.c:1917:15: note: in expansion of macro 'newXSproto_portable'
(void)newXSproto_portable("VIBUF::Set", XS_VIBUF_Set, file, "$;@");
^
if_perl.c:1137:66: error: invalid operands to binary * (have 'struct
<anonymous> *' and 'struct <anonymous> *')
#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
^
if_perl.c:1917:15: note: in expansion of macro 'newXSproto_portable'
(void)newXSproto_portable("VIBUF::Set", XS_VIBUF_Set, file, "$;@");
^
if_perl.c:1137:67: error: expected expression before ')' token
#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
^
if_perl.c:1918:15: note: in expansion of macro 'newXSproto_portable'
(void)newXSproto_portable("VIBUF::Delete", XS_VIBUF_Delete, file, "$;@");
^
if_perl.c:1137:66: error: invalid operands to binary * (have 'struct
<anonymous> *' and 'struct <anonymous> *')
#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
^
if_perl.c:1918:15: note: in expansion of macro 'newXSproto_portable'
(void)newXSproto_portable("VIBUF::Delete", XS_VIBUF_Delete, file, "$;@");
^
if_perl.c:1137:67: error: expected expression before ')' token
#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
^
if_perl.c:1919:15: note: in expansion of macro 'newXSproto_portable'
(void)newXSproto_portable("VIBUF::Append", XS_VIBUF_Append, file, "$;@");
^
if_perl.c:1137:66: error: invalid operands to binary * (have 'struct
<anonymous> *' and 'struct <anonymous> *')
#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
^
if_perl.c:1919:15: note: in expansion of macro 'newXSproto_portable'
(void)newXSproto_portable("VIBUF::Append", XS_VIBUF_Append, file, "$;@");
^
if_perl.c:1924:5: error: 'XSRETURN_YES' undeclared (first use in this function)
XSRETURN_YES;
^
Make_ming.mak:734: recipe for target 'gobjx86-64/if_perl.o' failed
mingw32-make.exe: *** [gobjx86-64/if_perl.o] Error 1
Original comment by alaska...@gmail.com
on 16 Oct 2013 at 3:45
[deleted comment]
Sorry, I've forgot to mention that I was building vim-7.3.1314. :P
vim-7.4 has a different vim.h, which doesn't include "perl.h" anymore, and the
if_perl.xs is changed accordingly.
That's why a vim-7.3.1314 "if_perl.xs" doesn't work (some definitions from perl
are missing).
I've attached the modified "if_perl.xs" from revision 5404, which should work
for both 7.3 and 7.4 versions.
OK to build under Visual C++ 2012.
I didn't test it with mingw32, however.
Original comment by Gauchy...@gmail.com
on 17 Oct 2013 at 3:27
Attachments:
Thanks, now works without any errors.
Built and tested vim 7.4 with mingw-x64 and ActivePerl 5.18.1.
Original comment by z...@softvisio.net
on 17 Oct 2013 at 6:45
Hi,
windows 8.1 x64
vim 7.4.155
strawberry perl 5.18.2.1 x64
MinGW-builds toolchain, x64-4.8.1-release-posix-seh-rev5
Compiling vim with following cmd:
mingw32-make.exe -f Make_ming.mak ARCH=x86-64 FEATURES=HUGE OLE=yes
PERL="d:/devel/perl" PERL_VER=518 DYNAMIC_PERL=yes gvim.exe xxd/xxd.exe
vimrun.exe
Vim compiled successfully, but when i trying to use perl inside vim - got error:
E370: Could not load library perl518.dll
Sorry, this command is disabled: the Perl library could not be loaded.
Perl bin directory is in the %path%, also, with ActivePerl 5.18.1 x64
everything works fine.
Please, help to resolve this problem.
Original comment by dzagas...@gmail.com
on 19 Jan 2014 at 4:39
The original issue was already fixed with 7.4.117, 120, 127 and 128.
Maybe this issue can be closed.
> #7 dzagas...@gmail.com
There are some fixes for if_perl after 7.4.155.
(E.g. 7.4.321 supports Strawberry Perl 5.20.)
Does it still occur with the latest Vim?
Original comment by ktakata6...@gmail.com
on 14 Nov 2014 at 4:33
Okay, closing as fixed then.
Original comment by chrisbr...@googlemail.com
on 15 Nov 2014 at 12:29
Original issue reported on code.google.com by
z...@softvisio.net
on 1 Oct 2013 at 8:27