Re: The wxPerl wrap (part1)
Steve Cookson - gmail <[email protected]> Mon, 18 Jan 2016 15:20:57 +0000
| Newsgroups | gmane.comp.lang.perl.wxperl |
|---|---|
| Message-ID | <[email protected]> |
Hi James, Do you know of a web version of this, sadly my copy of Perl Cookbook is still in storage after the move. Regards Steve On 17/01/16 15:01, James Lynes wrote: > > Steve: > > Your Part 1 is very close to the Perl Cookbook section 12.18 Using > h2xs to Make a Module with C Code. > > I've started reading the various perldoc xs tutorials. Haven't seen > any mention of bootstrap yet. > > James > > On Jan 16, 2016 6:33 AM, <[email protected] > <mailto:[email protected]>> wrote: > > Hi People, > > I thought I'd start a new thread for The wxPerl wrap. > Interestingly (and I've > only just realised this) you can get a lot of information on > wrapping just by > reinstalling your wxPerl and redirecting the compiler output to a > file, > something like this: > > cd ~ > rm -rf ~/wxPerl > svn co https://svn.code.sf.net/p/wxperl/code/wxPerl/trunk ~/wxPerl > cd ~/wxPerl > perl Makefile.PL > make 2>&1 | tee -a wxperl_install.txt ; > make install > cd ~ > > If you then inspect wxperl_install.txt you'll find all sorts of > lovely info eg > (and I'm using my favourite module wxMediaCtrl for this): > > make[2]: Entering directory `/home/image/wxPerl/ext/media' > cp lib/Wx/Media.pm ../../blib/lib/Wx/Media.pm > Running Mkbootstrap for Wx::Media () > chmod 644 "Media.bs" > "/usr/bin/perl" "/usr/local/share/perl/5.18.2/ExtUtils/xsubpp" > -noprototypes -nolinenumbers -typemap > "/usr/share/perl/5.18/ExtUtils/typemap" > -typemap "../../typemap" -typemap "typemap" Media.xs > Media.xsc > && mv > Media.xsc Media.c > g++ -pthread -c -I. -I../.. > -I/usr/local/lib/perl/5.18.2/Alien/wxWidgets/gtk_3_0_2_uni/lib/wx/include/gtk2-unicode-3.0 > -I/usr/local/lib/perl/5.18.2/Alien/wxWidgets/gtk_3_0_2_uni/include/wx-3.0 > -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector > -fno-strict-aliasing > -pipe -I/usr/local/include -D_LARGEFILE_SOURCE > -D_FILE_OFFSET_BITS=64 -O2 -g > -DVERSION=\"0.01\" -DXS_VERSION=\"0.01\" -fPIC > "-I/usr/lib/perl/5.18/CORE" > -DWXPL_EXT -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ Media.c > rm -f ../../blib/arch/auto/Wx/Media/Media.so > LD_RUN_PATH="/usr/local/lib/perl/5.18.2/Alien/wxWidgets/gtk_3_0_2_uni/lib" > g++ -shared -fstack-protector Media.o -o > ../../blib/arch/auto/Wx/Media/Media.so \ > -L/usr/local/lib/perl/5.18.2/Alien/wxWidgets/gtk_3_0_2_uni/lib > -lpthread > -lwx_gtk2u_media-3.0 -lwx_gtk2u_core-3.0 -lwx_baseu-3.0 \ > > chmod 755 ../../blib/arch/auto/Wx/Media/Media.so > "/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- Media.bs > ../../blib/arch/auto/Wx/Media/Media.bs 644 > make[2]: Leaving directory `/home/image/wxPerl/ext/media' > > So working through this we get: > > # Move to the directory and put the base module Media.pm in the > right place. > make[2]: Entering directory `/home/image/wxPerl/ext/media' > cp lib/Wx/Media.pm ../../blib/lib/Wx/Media.pm > # Media.pm has some code like this: > # package Wx::MediaCtrl; @ISA = qw(Wx::Control); > # package Wx::MediaEvent; @ISA = qw(Wx::NotifyEvent); > # And some MediaCtrl specific events like this: > # sub EVT_MEDIA_LOADED($$$) { $_[0]->Connect( $_[1], -1, > &Wx::wxEVT_MEDIA_LOADED, $_[2] ) }; > > # Not sure what this does: > Running Mkbootstrap for Wx::Media () > chmod 644 "Media.bs" > > # The we have the main part which creates Media.c using xsubpp and > typemap from > Media.xs > "/usr/bin/perl" "/usr/local/share/perl/5.18.2/ExtUtils/xsubpp" > -noprototypes -nolinenumbers -typemap > "/usr/share/perl/5.18/ExtUtils/typemap" > -typemap "../../typemap" -typemap "typemap" Media.xs > Media.xsc > && mv > Media.xsc Media.c > > # And then we compile Media.c > > g++ -pthread -c -I. -I../.. > -I/usr/local/lib/perl/5.18.2/Alien/wxWidgets/gtk_3_0_2_uni/lib/wx/include/gtk2-unicode-3.0 > -I/usr/local/lib/perl/5.18.2/Alien/wxWidgets/gtk_3_0_2_uni/include/wx-3.0 > -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector > -fno-strict-aliasing > -pipe -I/usr/local/include -D_LARGEFILE_SOURCE > -D_FILE_OFFSET_BITS=64 -O2 -g > -DVERSION=\"0.01\" -DXS_VERSION=\"0.01\" -fPIC > "-I/usr/lib/perl/5.18/CORE" > -DWXPL_EXT -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ Media.c > > # We do some other automatic stuff here and I don't think we need > to get into it > yet. > > rm -f ../../blib/arch/auto/Wx/Media/Media.so > LD_RUN_PATH="/usr/local/lib/perl/5.18.2/Alien/wxWidgets/gtk_3_0_2_uni/lib" > g++ -shared -fstack-protector Media.o -o > ../../blib/arch/auto/Wx/Media/Media.so \ > -L/usr/local/lib/perl/5.18.2/Alien/wxWidgets/gtk_3_0_2_uni/lib > -lpthread > -lwx_gtk2u_media-3.0 -lwx_gtk2u_core-3.0 -lwx_baseu-3.0 \ > > # And make it executable. > chmod 755 ../../blib/arch/auto/Wx/Media/Media.so > "/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- Media.bs > ../../blib/arch/auto/Wx/Media/Media.bs 644 > make[2]: Leaving directory `/home/image/wxPerl/ext/media' > > # There we have it. > > So in this case the two input files are Media.pm and Media.xs if > we create these > and then put an entry into typemap at the top level everything > should work, > There is a lot of stuff on the wiki about how to do this and I'm > going to start > drilling down later. > > Please be free with your comments. > > Regards > > Steve. >