Hello!

On Fri, Apr 13, 2018 at 02:40:17AM +0200, Ondrej Jombik wrote:

> We have some proprietary code in C language, which we cannot convert
> into Perl. We would like to use this C code in Perl nginx module. Code
> runs well under Perl's Inline C.
> 
> However when I try to run Inline C code in nginx Perl module, it does
> not work. Not only this code does not work, in fact no Inline C code
> work inside Perl nginx environment.
> 
> For example, look at this very simple Perl module inlinetest.pm:
> 
> package inlinetest;
> use strict;
> use nginx;
> 
> $ENV{'PATH'} = '/bin/:/usr/bin/';
> use Inline Config =>
>               DIRECTORY => '/tmp/';
> use Inline "C" => <<'...';
>       void test_fnc(int num)
>       {
>               fprintf(stderr, "%d\n", num);
>       }

[...]

> As you can see in my example, I am not even using or calling test_fnc()
> yet. But Perl code simply fails on startup with this error message:
> 
> -- Unit nginx.service has begun starting up.
> nginx[20011]: nginx: [emerg] require_pv("inlinetest.pm") failed: "Running 
> Mkbootstrap for inlinetest_0cff 
> nginx[20011]: chmod 644 "inlinetest_0cff.bs"
> nginx[20011]: "/usr/bin/perl" "/usr/share/perl/5.24/ExtUtils/xsubpp"  
> -typemap "/usr/share/perl/5.24/ExtUt
> nginx[20011]: x86_64-linux-gnu-gcc -c  -I"/" -D_REENTRANT -D_GNU_SOURCE 
> -DDEBIAN -fwrapv -fno-strict-alias
> nginx[20011]: x86_64-linux-gnu-gcc: error trying to exec 'cc1': execvp: No 
> such file or directory
> nginx[20011]: Makefile:332: recipe for target 'inlinetest_0cff.o' failed

The problem is that your PATH is empty when relevant compilation 
happens.  You try to set it in the code using "$ENV{'PATH'} = 
...", but it doesn't work as this happens _after_ "use Inline...", 
because "use ..." operators are executed at compile time in Perl, 
much like BEGIN{}.

A simple fix would be to set PATH in a BEGIN{} block at compile 
time:

BEGIN { $ENV{'PATH'} = '/bin/:/usr/bin/'; }
use Inline ...

Alternativel, you can use nginx "env" directive to set PATH or 
preserve it from original environment, see http://nginx.org/r/env.

-- 
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to