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.

Reply via email to