1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2024-11-08 08:47:17 +01:00
SqMod/vendor/MaxmindDB/t/compile_c++_t.pl
Sandu Liviu Catalin fd2a1de107 Backport MaxmindDB.
2021-01-31 18:48:31 +02:00

108 lines
2.1 KiB
Perl

#!/usr/bin/env perl
use strict;
use warnings;
use Cwd qw( abs_path );
use FindBin qw( $Bin );
eval <<'EOF';
use Test::More 0.88;
use File::Temp qw( tempdir );
use IPC::Run3 qw( run3 );
EOF
if ($@) {
print
"1..0 # skip all tests skipped - these tests need the Test::More 0.88, File::Temp, and IPC::Run3 modules:\n";
print "$@";
exit 0;
}
my $test_db = "$Bin/maxmind-db/test-data/GeoIP2-City-Test.mmdb";
my $cpp_code = <<"EOF";
#include <maxminddb.h>
int main(int argc, char *argv[])
{
const char *fname = "$test_db";
MMDB_s mmdb;
return MMDB_open(fname, MMDB_MODE_MMAP, &mmdb);
}
EOF
my $tempdir = tempdir(CLEANUP => 1 );
my $file = "$tempdir/open.cpp";
open my $fh, '>', $file or die $!;
print {$fh} $cpp_code or die $!;
close $fh or die $!;
my $exe = "$tempdir/open";
my $include_dir = abs_path("$Bin/../include");
my $lib_dir = abs_path("$Bin/../src/.libs");
my $cxx = $ENV{CXX} || 'c++';
_test_cmd(
[ $cxx, $file, "-I$include_dir", "-L$lib_dir", "-lmaxminddb", "-o$exe" ],
qr/^$/,
q{},
0,
'compile C++ program which links against libmaxminddb',
);
# DYLD_LIBRARY_PATH is for Mac OS X
$ENV{LD_LIBRARY_PATH} = $ENV{DYLD_LIBRARY_PATH} = $lib_dir;
_test_cmd(
[$exe],
qr/^$/,
q{},
0,
'compiled C++ program executes without errors'
);
done_testing();
sub _test_cmd {
my $cmd = shift;
my $expect_stdout = shift;
my $expect_stderr = shift;
my $expect_status = shift;
my $desc = shift;
my $stdout;
my $stderr;
run3(
$cmd,
\undef,
\$stdout,
\$stderr,
);
my $exit_status = $? >> 8;
# We don't need to retest that the help output shows up for all errors
if ( defined $expect_stdout ) {
like(
$stdout,
$expect_stdout,
"stdout for @{$cmd}"
);
}
if ( ref $expect_stderr ) {
like( $stderr, $expect_stderr, "stderr for @{$cmd}" );
}
else {
is( $stderr, $expect_stderr, "stderr for @{$cmd}" );
}
is(
$exit_status, $expect_status,
"exit status was $expect_status for @{$cmd}"
);
}