Alien-OpenMP
view release on metacpan or search on metacpan
lib/Alien/OpenMP/configure.pm view on Meta::CPAN
package Alien::OpenMP::configure;
use strict;
use warnings;
use Config;
our $CCNAME = $ENV{CC} || $Config::Config{ccname};
our $OS = $^O;
my $checked = 0;
my $supported = {
gcc => {
cflags => ['-fopenmp'],
libs => ['-fopenmp'],
auto_include => join qq{\n}, ('#include <omp.h>'),
},
clang => {
cflags => [ '-Xclang', '-fopenmp' ],
libs => ['-lomp'], # this could be -Xpreprocessor
auto_include => join qq{\n}, ('#include <omp.h>'),
},
};
sub auto_include {
shift->_update_supported;
return $supported->{$CCNAME}{auto_include} || q{};
}
sub cflags {
shift->_update_supported;
return join ' ', @{$supported->{$OS}{cflags} || $supported->{$CCNAME}{cflags} || []};
}
sub is_known {
shift->_update_supported;
return !!(exists($supported->{$OS}) || exists($supported->{$CCNAME}));
}
sub lddlflags { __PACKAGE__->libs }
sub libs {
shift->_update_supported;
return join ' ', @{$supported->{$OS}{libs} || $supported->{$CCNAME}{libs} || []};
}
sub unsupported {
my ($self, $build) = (shift, shift);
# build an array of messages
my @msg = ("This version of $CCNAME does not support OpenMP");
if ($CCNAME eq 'gcc' and $OS ne 'darwin') {
push @msg, "This could be a bug, please record and issue https://github.com/oodler577/p5-Alien-OpenMP/issues";
}
if ($OS eq 'darwin') {
push @msg, "Support can be enabled by using Homebrew or Macports (https://clang-omp.github.io)";
push @msg, " brew install libomp (Homebrew https://brew.sh)";
push @msg, " port install libomp (Macports https://www.macports.org)";
}
# report messages using appropriate method
if (ref($build)) {
return if $build->install_prop->{alien_openmp_compiler_has_openmp};
unshift @msg, "phase = @{[$build->meta->{phase}]}";
$build->log($_) for @msg;
}
elsif ($build && (my $log = $build->can('log'))) {
unshift @msg, "phase = @{[$build->meta->{phase}]}";
$log->($_) for @msg;
}
else {
warn join q{>}, __PACKAGE__, " $_\n" for @msg;
}
print "OS Unsupported\n";
}
# test support only
sub _reset { $checked = 0; }
( run in 2.565 seconds using v1.01-cache-2.11-cpan-e1769b4cff6 )