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, <stephen.cook...@sca-uk.com <mailto:stephen.cook...@sca-uk.com>> 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.


Reply via email to