Skip to content

Commit

Permalink
Merge 1635ab6 into 1a2e9f7
Browse files Browse the repository at this point in the history
  • Loading branch information
zmughal committed Oct 20, 2021
2 parents 1a2e9f7 + 1635ab6 commit 075a861
Show file tree
Hide file tree
Showing 6 changed files with 272 additions and 16 deletions.
108 changes: 108 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: perl
on:
push:
branches:
- '*'
tags-ignore:
- '*'
pull_request:
create:
jobs:
notify:
runs-on: ubuntu-latest
continue-on-error: true
if: ${{ always() }}
steps:
- uses: PDLPorters/devops/github-actions/irc-notifications@master
with:
target-notifications: true
dist:
name: Make distribution using Dist::Zilla
runs-on: ubuntu-latest
if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: 'build-dzil-dist'
uses: PDLPorters/devops/github-actions/build-dzil-dist@master
ci:
runs-on: ${{ matrix.os }}
if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }}
needs: [ notify, dist ]
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
perl-version: ['5.10', '5.14', '5.20', '5.30']
alien-install-type: [ 'system' ]
include:
- perl-version: '5.30'
os: ubuntu-latest
release-test: true
coverage: true
alien-install-type: 'share'
# Automatically set ALIEN_INSTALL_TYPE=share
# because no system install on Windows.
- perl-version: '5.30'
os: windows-latest
- perl-version: '5.30'
os: macos-latest
alien-install-type: 'system'
- perl-version: '5.30'
os: macos-latest
alien-install-type: 'share'
steps:
- uses: actions/checkout@v2
- name: Get dist artifact
uses: actions/download-artifact@v2
with:
name: dist
path: build-dir
- name: 'ci-dist: target-setup-perl'
uses: PDLPorters/devops/github-actions/ci-dist@master
with:
path: build-dir
target-setup-perl: true
perl-version: ${{ matrix.perl-version }}
- name: Install PLplot (system)
if: ${{ matrix.alien-install-type == 'system' }}
uses: PDLPorters/devops/github-actions/install-dep-plplot@master
- name: 'ci-dist: target-install-dist-perl-deps'
uses: PDLPorters/devops/github-actions/ci-dist@master
with:
path: build-dir
target-setup-perl: false
target-install-dist-perl-deps: true
- name: Install Perl optional deps
shell: bash
run: |
# test dep
if ${{ toJSON( runner.os != 'Windows' ) }}; then
cpanm -n FFI::Platypus
fi
- name: Set ALIEN_INSTALL_TYPE
shell: bash
run: |
echo "ALIEN_INSTALL_TYPE=${{ matrix.alien-install-type }}" >> $GITHUB_ENV
- name: 'ci-dist: target-all after install-dist-perl-deps'
uses: PDLPorters/devops/github-actions/ci-dist@master
with:
path: build-dir
target-setup-perl: false
target-install-dist-perl-deps: false
target-test-release-testing: true
target-test: true
test-enable-release-testing: ${{ matrix.release-test }}
test-enable-coverage: ${{ matrix.coverage }}
github-token: ${{ secrets.GITHUB_TOKEN }}

build-status:
runs-on: ubuntu-latest
continue-on-error: true
if: ${{ always() }}
needs: [ 'ci' ]
steps:
- uses: PDLPorters/devops/github-actions/irc-notifications@master
with:
target-build-status: true
needs: ${{ toJSON(needs) }}
17 changes: 17 additions & 0 deletions .github/workflows/issue-notify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: issue-notify

on:
issues:
types: [opened]
issue_comment:
types: [created]

jobs:
notify:
runs-on: ubuntu-latest
continue-on-error: true
if: ${{ always() }}
steps:
- uses: PDLPorters/devops/github-actions/irc-notifications@master
with:
target-notifications: true
64 changes: 63 additions & 1 deletion alienfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
use alienfile;

use Env qw(@CMAKE_INCLUDE_PATH @CMAKE_LIBRARY_PATH);
use DynaLoader ();
use File::Basename qw(dirname);
use File::Spec;
use Config;

plugin PkgConfig => 'plplot';

share {
requires 'File::Which';
# NOTE currently only pulling PLplot 5.15.0
start_url 'https://sourceforge.net/projects/plplot/files/plplot/5.15.0%20Source/';
plugin 'Decode::SourceForge';
Expand All @@ -14,6 +21,35 @@ share {

plugin Extract => 'tar.gz';
plugin 'Build::CMake';

# Driver: png,jpeg,gif : formats via libgd
# NOTE This is currently listed as a deprecated driver in the PLplot
# documentation.
my $pld_gd_enable = 1;
my $pld_gd_gdnames = '';

# Driver: wingcc : interactive plotting device for MSWin32
my $pld_wingcc_enable = $^O eq 'MSWin32';

if( $^O eq 'MSWin32' && $Config{myuname} =~ /^Win32 strawberry-perl/ ) {
# This helps to find the paths under Strawberry Perl.
my ($gd_lib_file) = DynaLoader::dl_findfile('-lgd');
if( $gd_lib_file ) {
# libgd paths (for PLD_{png,jpeg,gif})
$pld_gd_gdnames = 'gd';
my $c_lib_dir = dirname($gd_lib_file);
my $c_dir = dirname($c_lib_dir);
my $c_inc_dir = File::Spec->catfile( $c_dir, 'include' );

# gdi32 paths (for PLD_wingcc)
my $arch = 'x86_64-w64-mingw32';
my $arch_lib_dir = File::Spec->catfile( $c_dir, $arch, 'lib' );
my $arch_inc_dir = File::Spec->catfile( $c_dir, $arch, 'include' );

push @CMAKE_LIBRARY_PATH, $c_lib_dir, $arch_lib_dir;
push @CMAKE_INCLUDE_PATH, $c_inc_dir, $arch_inc_dir;
}
}
build [
[ '%{cmake}', qw(
-DENABLE_ada=OFF
Expand All @@ -36,7 +72,33 @@ share {
-DPLPLOT_USE_QT5=OFF
-DPL_DOUBLE=ON
),
@{ meta->prop->{plugin_build_cmake}->{args} },
( $^O eq 'MSWin32'
? ( '-DPKG_CONFIG_EXECUTABLE=' . File::Which::which('pkg-config'), )
: ()
),

( $pld_wingcc_enable
? qw(-DPLD_wingcc=ON)
: ()
),

( $pld_gd_enable
? (
qw(-DPLD_png=ON -DPLD_jpeg=ON -DPLD_gif=ON),
( $pld_gd_gdnames
? ( "-DGD_NAMES=$pld_gd_gdnames" )
: ()
)
)
: ()
),

qw(
-DBUILD_SHARED_LIBS=OFF
),
( grep { $_ !~ /\Q-DCMAKE_INSTALL_LIBDIR:PATH=\E/ }
@{ meta->prop->{plugin_build_cmake}->{args} },
),
'%{.install.extract}'
],
'%{make}',
Expand Down
5 changes: 5 additions & 0 deletions lib/Alien/PLplot.pm
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,13 @@ package Alien::PLplot;
use strict;
use warnings;
use base qw( Alien::Base );
use File::Spec;
use 5.008004;

sub inline_auto_include {
return [ 'plplot.h' ];
}

1;
__END__
# ABSTRACT: Alien package for the PLplot plotting library
Expand Down
44 changes: 29 additions & 15 deletions t/basic.t
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,39 @@ use Test::Alien;
use Test::Alien::Diag;
use Alien::PLplot;


alien_diag 'Alien::PLplot';
alien_ok 'Alien::PLplot';

ffi_ok { symbols => ['c_plgver'] }, with_subtest {
my ($ffi) = @_;
eval q{
use FFI::Platypus::Memory qw( malloc free );
use FFI::Platypus::Buffer qw( scalar_to_buffer );
1; } or skip "$@";
my $get_version = $ffi->function( c_plgver => ['opaque'] => 'void' );

my $buffer = malloc(80);
$get_version->call($buffer);
my $version = $ffi->cast( 'opaque' => 'string', $buffer );

note "version: $version";
like $version, qr/^(\d+)\.(\d+)\.(\d+)$/;
my $version_re = qr/^(\d+)\.(\d+)\.(\d+)$/;

free($buffer);
my $xs = do { local $/; <DATA> };
xs_ok $xs, with_subtest {
my($module) = @_;
like $module->version, $version_re;
};

done_testing;
__DATA__
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include <string.h>
#include <plplot.h>
SV*
version(const char *class)
{
char ver[80];
c_plgver(ver);
SV* ver_sv = newSVpv( ver, strlen(ver) );
return ver_sv;
}
MODULE = TA_MODULE PACKAGE = TA_MODULE
SV* version(class);
const char *class;
50 changes: 50 additions & 0 deletions t/ffi.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
use Test2::V0;
use Test::Alien;
use Alien::PLplot;

use Env qw(@LD_LIBRARY_PATH @DYLD_FALLBACK_LIBRARY_PATH @PATH);
use DynaLoader;
use File::Basename qw(dirname);

if( Alien::PLplot->install_type('share') ) {
if( Alien::PLplot->dynamic_libs ) {
my $rpath = dirname( ( Alien::PLplot->dynamic_libs )[0] );
unshift @LD_LIBRARY_PATH, $rpath;
unshift @DYLD_FALLBACK_LIBRARY_PATH, $rpath;
unshift @PATH, $rpath;
unshift @DynaLoader::dl_library_path, $rpath;
# load shared object dependencies
for my $lib ( qw(-lcsirocsa -lqsastime -lplplot) ) {
my @files = DynaLoader::dl_findfile($lib);
DynaLoader::dl_load_file($files[0]) if @files;
}
} else {
plan skip_all => 'share install does not support dynamic linkage';
}

}

alien_ok 'Alien::PLplot';

my $version_re = qr/^(\d+)\.(\d+)\.(\d+)$/;

ffi_ok { symbols => ['c_plgver'] }, with_subtest {
my ($ffi) = @_;
eval q{
use FFI::Platypus::Memory qw( malloc free );
use FFI::Platypus::Buffer qw( scalar_to_buffer );
1; } or skip "$@";
my $get_version = $ffi->function( c_plgver => ['opaque'] => 'void' );

my $buffer = malloc(80);
$get_version->call($buffer);
my $version = $ffi->cast( 'opaque' => 'string', $buffer );

note "version: $version";
like $version, $version_re;

free($buffer);
};


done_testing;

0 comments on commit 075a861

Please sign in to comment.