Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Category:

Новости калоедения

Я давно уже поставил себе непосильную задачу - собрать биндинги к ZMQ под мои языки и ОС. Постоянно я проигрывал богу Юникса, но сегодня я продвинулся дальше обычного: собрал перловую библиотеку под названием ZMQ под Win64.

Для сборки надо пройти 3 уровня:

- сборку собственно libzmq (хард)
- сборку перловой библиотеки ZMQ::LibZMQ3 (вери хард)
- сборку обвеса: ZMQ::Constants и ZMQ - изи

Конечный результат (да засмеют меня гуру 0MQ):

cli.pl
use warnings;
use strict;
use ZMQ;
use ZMQ::Constants qw(ZMQ_PAIR);

my $cxt = ZMQ::Context->new(5);
my $sock = $cxt->socket( ZMQ_PAIR );
$sock->connect( "tcp://127.0.0.1:9999" );
$sock->sendmsg(ZMQ::Message->new( "Hello" ));
$sock->sendmsg(ZMQ::Message->new( "Foo" ));
srv.pl
use warnings;
use strict;

use ZMQ;
use ZMQ::Constants qw(ZMQ_PAIR);

my $cxt = ZMQ::Context->new(5);
my $sock = $cxt->socket( ZMQ_PAIR );
$sock->bind( "tcp://127.0.0.1:9999" );
while (1)
{
	print $sock->recvmsg()->data();
	print "\n";
}


Для этого нам понадобится:

- Исходники libzmq 4.0.4 (!)
- Инфа о том, что патч для сборки под Win64 в транке, но не в 4.0.4
- RubyDevKit (!) x64

RubyDevKit - это SFX-архив с MSYS и MinGW внутри. Распаковываем и прибиваем папочку mingw.

Распаковываем исходники libzmq

Открываем cmd и запускаем devkitvars.bat. Можно и не запускать, а просто добавить папочку bin в начало PATH.

С бином в пасе запускаем
sh configure --prefix=/mingw
make install
Префикс - это такой ход конём, префикс не зависит от реального пути. После процедуры билда, длящейся века, в папочке RubyDevKit появляется подпапочка mingw с нашей любимой libzmq.

В идеальном мире было бы достаточно скопировать эту иерархию в strawberry64\c, и запустить установку ZMQ::LibZMQ3, а затем ZMQ любым штатным способом.

Но из-за криворучья создателей перловых либ PkgConfig и ZMQ::LibZMQ3 придётся всё безбожно патчить. Идиотизм многоуровневый, так что вместо ТруЪ делаем сверхгрязный адхок.

Распаковываем тарболл с ZMQ::LibZMQ3. В Makefile.PL заменяем
my $ok = (system("make", $name) == 0);
...
system "make", "clean";
на
my $ok = (system("dmake", "$name.o") == 0);
...
system "dmake", "clean";
Удаляем t/104_ipc.t t/100_basic.t t/200_fork.t

Теперь используем build.bat из предыдущего поста, для чего запаковываем обратно. Можно не в тарболл, а в zip.
set ZMQ_HOME=c:/progs/strawberry64/c
call build --archive ZMQ-LibZMQ3-1.16.zip
call build ZMQ


Upd: PkgConfig починен. Теперь (c PkgConfig 0.08020) строка set ZMQ_HOME не нужна.
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments