File: gen_modules.pl

package info (click to toggle)
libzmq-ffi-perl 1.19-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 552 kB
  • sloc: perl: 4,708; sh: 92; ansic: 30; makefile: 27
file content (65 lines) | stat: -rw-r--r-- 1,621 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/env perl

use warnings;
use 5.012;

use Template::Tiny;
use Path::Class qw(file);

use inc::ZMQ2::ContextWrappers;
use inc::ZMQ2::SocketWrappers;

use inc::ZMQ3::ContextWrappers;
use inc::ZMQ3::SocketWrappers;

use inc::ZMQ4::ContextWrappers;
use inc::ZMQ4::SocketWrappers;

use inc::ZMQ4_1::ContextWrappers;
use inc::ZMQ4_1::SocketWrappers;

my @wrappers;

for my $zmqver (qw(ZMQ2 ZMQ3 ZMQ4 ZMQ4_1)) {
    my $context_wrapper = "inc::${zmqver}::ContextWrappers";
    my $socket_wrapper  = "inc::${zmqver}::SocketWrappers";

    push @wrappers, $context_wrapper->new( zmqver => $zmqver );
    push @wrappers, $socket_wrapper->new( zmqver => $zmqver );
}

gen_module($_) for @wrappers;

sub gen_module {
    my ($wrapper) = @_;

    my $socket_check =
    q(if ($_[0]->socket_ptr == -1) {
        carp "Operation on closed socket";
        return;
    });

    my $api_wrappers = $wrapper->wrappers;

    my %tt_vars = (
        date                => split("\n", scalar(qx{date -u})),
        zmqver              => $wrapper->zmqver,
        closed_socket_check => $socket_check,
        api_methods         => $wrapper->api_methods,
        lib_imports         => $wrapper->lib_imports,
        %$api_wrappers,
    );

    my $input = $wrapper->template->slurp();

    # Processing twice so template tokens used in
    # zmq function wrappers also get interoplated
    my $output;
    Template::Tiny->new->process(\$input,  \%tt_vars, \$output);
    Template::Tiny->new->process(\$output, \%tt_vars, \$output);

    my $target = $wrapper->target;
    say "Generating '$target'";
    $target->spew($output)
}