From 150599760bba4918ddfcec5da1db27dea3d63cb9 Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 1 May 2021 11:18:46 +0100 Subject: Dzil-build release 1.0.0 (from 6bba3a8 on master) --- .gitignore | 15 ---- Changes | 2 - MANIFEST | 17 ++++ META.json | 73 +++++++++++++++ META.yml | 43 +++++++++ Makefile.PL | 82 +++++++++++++++++ dist.ini | 84 ----------------- lib/App/XScreenSaver/DBus.pm | 91 ++++++++++++------- lib/App/XScreenSaver/DBus/InhibitSleep.pm | 110 ++++++++++++++--------- lib/App/XScreenSaver/DBus/Saver.pm | 144 +++++++++++++++++------------- lib/App/XScreenSaver/DBus/SaverProxy.pm | 45 ++++++++-- scripts/xscreensaver-dbus | 59 ++++++++++-- t/00-compile.t | 100 +++++++++++++++++++++ t/author-pod-spell.t | 35 ++++++++ t/author-pod-syntax.t | 15 ++++ weaver.ini | 50 ----------- 16 files changed, 664 insertions(+), 301 deletions(-) delete mode 100644 .gitignore create mode 100644 MANIFEST create mode 100644 META.json create mode 100644 META.yml create mode 100644 Makefile.PL delete mode 100644 dist.ini create mode 100644 t/00-compile.t create mode 100644 t/author-pod-spell.t create mode 100644 t/author-pod-syntax.t delete mode 100644 weaver.ini diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 4fa6083..0000000 --- a/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -blib -pm_to_blib -*.sw? -Makefile -Makefile.old -MANIFEST.bak -*.tar.gz -/inc/ -/META.* -/MYMETA.* -.prove -*~ -/.build/ -/App-XScreenSaver-DBus-*/ -/App-XScreenSaver-DBus-*.tar.gz diff --git a/Changes b/Changes index 766d899..0a5fed9 100644 --- a/Changes +++ b/Changes @@ -1,4 +1,2 @@ -{{$NEXT}} - 1.0.0 2021-05-01 11:18:38+01:00 Europe/London - first CPAN release diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..114e64c --- /dev/null +++ b/MANIFEST @@ -0,0 +1,17 @@ +# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.017. +Changes +LICENSE +MANIFEST +META.json +META.yml +Makefile.PL +cpanfile +lib/App/XScreenSaver/DBus.pm +lib/App/XScreenSaver/DBus/InhibitSleep.pm +lib/App/XScreenSaver/DBus/Saver.pm +lib/App/XScreenSaver/DBus/SaverProxy.pm +perlcritic.rc +scripts/xscreensaver-dbus +t/00-compile.t +t/author-pod-spell.t +t/author-pod-syntax.t diff --git a/META.json b/META.json new file mode 100644 index 0000000..f08436c --- /dev/null +++ b/META.json @@ -0,0 +1,73 @@ +{ + "abstract" : "main application class", + "author" : [ + "Gianni Ceccarelli " + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 6.017, CPAN::Meta::Converter version 2.150005", + "license" : [ + "agpl_3" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : 2 + }, + "name" : "App-XScreenSaver-DBus", + "no_index" : { + "directory" : [ + "t/lib" + ] + }, + "prereqs" : { + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "0" + } + }, + "develop" : { + "requires" : { + "Test::Pod" : "1.41", + "Test::Spelling" : "0.12" + } + }, + "runtime" : { + "requires" : { + "IPC::Run" : "0", + "Log::Any" : "0", + "Log::Any::Adapter" : "0", + "Moo" : "0", + "Net::DBus" : "0", + "Net::DBus::Exporter" : "0", + "Net::DBus::Object" : "0", + "Net::DBus::Reactor" : "0", + "Try::Tiny" : "0", + "curry" : "0", + "experimental" : "0", + "parent" : "0", + "perl" : "v5.20.0", + "strict" : "0", + "warnings" : "0" + } + }, + "test" : { + "requires" : { + "File::Spec" : "0", + "IO::Handle" : "0", + "IPC::Open3" : "0", + "Test::More" : "0" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://luxion/xscreensaver-dbus" + } + }, + "version" : "1.0.0", + "x_generated_by_perl" : "v5.24.0", + "x_serialization_backend" : "Cpanel::JSON::XS version 4.26", + "x_spdx_expression" : "AGPL-3.0" +} + diff --git a/META.yml b/META.yml new file mode 100644 index 0000000..88cd183 --- /dev/null +++ b/META.yml @@ -0,0 +1,43 @@ +--- +abstract: 'main application class' +author: + - 'Gianni Ceccarelli ' +build_requires: + File::Spec: '0' + IO::Handle: '0' + IPC::Open3: '0' + Test::More: '0' +configure_requires: + ExtUtils::MakeMaker: '0' +dynamic_config: 0 +generated_by: 'Dist::Zilla version 6.017, CPAN::Meta::Converter version 2.150005' +license: open_source +meta-spec: + url: http://module-build.sourceforge.net/META-spec-v1.4.html + version: '1.4' +name: App-XScreenSaver-DBus +no_index: + directory: + - t/lib +requires: + IPC::Run: '0' + Log::Any: '0' + Log::Any::Adapter: '0' + Moo: '0' + Net::DBus: '0' + Net::DBus::Exporter: '0' + Net::DBus::Object: '0' + Net::DBus::Reactor: '0' + Try::Tiny: '0' + curry: '0' + experimental: '0' + parent: '0' + perl: v5.20.0 + strict: '0' + warnings: '0' +resources: + repository: git://luxion/xscreensaver-dbus +version: 1.0.0 +x_generated_by_perl: v5.24.0 +x_serialization_backend: 'YAML::Tiny version 1.73' +x_spdx_expression: AGPL-3.0 diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000..402efe8 --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,82 @@ +# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.017. +use strict; +use warnings; + +use 5.020000; + +use ExtUtils::MakeMaker; + +my %WriteMakefileArgs = ( + "ABSTRACT" => "main application class", + "AUTHOR" => "Gianni Ceccarelli ", + "CONFIGURE_REQUIRES" => { + "ExtUtils::MakeMaker" => 0 + }, + "DISTNAME" => "App-XScreenSaver-DBus", + "EXE_FILES" => [ + "scripts/xscreensaver-dbus" + ], + "LICENSE" => "open_source", + "MIN_PERL_VERSION" => "5.020000", + "NAME" => "App::XScreenSaver::DBus", + "PREREQ_PM" => { + "IPC::Run" => 0, + "Log::Any" => 0, + "Log::Any::Adapter" => 0, + "Moo" => 0, + "Net::DBus" => 0, + "Net::DBus::Exporter" => 0, + "Net::DBus::Object" => 0, + "Net::DBus::Reactor" => 0, + "Try::Tiny" => 0, + "curry" => 0, + "experimental" => 0, + "parent" => 0, + "strict" => 0, + "warnings" => 0 + }, + "TEST_REQUIRES" => { + "File::Spec" => 0, + "IO::Handle" => 0, + "IPC::Open3" => 0, + "Test::More" => 0 + }, + "VERSION" => "1.0.0", + "test" => { + "TESTS" => "t/*.t" + } +); + + +my %FallbackPrereqs = ( + "File::Spec" => 0, + "IO::Handle" => 0, + "IPC::Open3" => 0, + "IPC::Run" => 0, + "Log::Any" => 0, + "Log::Any::Adapter" => 0, + "Moo" => 0, + "Net::DBus" => 0, + "Net::DBus::Exporter" => 0, + "Net::DBus::Object" => 0, + "Net::DBus::Reactor" => 0, + "Test::More" => 0, + "Try::Tiny" => 0, + "curry" => 0, + "experimental" => 0, + "parent" => 0, + "strict" => 0, + "warnings" => 0 +); + + +unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) { + delete $WriteMakefileArgs{TEST_REQUIRES}; + delete $WriteMakefileArgs{BUILD_REQUIRES}; + $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs; +} + +delete $WriteMakefileArgs{CONFIGURE_REQUIRES} + unless eval { ExtUtils::MakeMaker->VERSION(6.52) }; + +WriteMakefile(%WriteMakefileArgs); diff --git a/dist.ini b/dist.ini deleted file mode 100644 index 9e826b9..0000000 --- a/dist.ini +++ /dev/null @@ -1,84 +0,0 @@ -name = App-XScreenSaver-DBus -author = Gianni Ceccarelli -license = AGPL_3 -copyright_holder = Gianni Ceccarelli -copyright_year = 2021 - -[GatherDir] - -[PodWeaver] -; authordep Pod::Elemental::Transformer::List - -[PruneCruft] - -[PruneFiles] -match = ~$ -filename = dist.ini -filename = weaver.ini - -[Git::Check] -allow_dirty = dist.ini - -[Git::NextVersion] -first_version = 1.0.0 - -[CheckChangeLog] - -[NextRelease] - -[AutoPrereqs] - -[OurPkgVersion] - -[ManifestSkip] - -[PodSyntaxTests] - -[Test::PodSpelling] -stopword = logind -stopword = dbus -stopword = specialised - -[Test::Compile] -fail_on_warning = author - -[ExtraTests] - -[Repository] - -[MetaNoIndex] -directory = t/lib - -[MetaYAML] - -[MetaJSON] - -[ExecDir] -dir = scripts - -[ShareDir] - -[MakeMaker] - -[Manifest] - -[TestRelease] - -[Git::Commit] - -[Git::CommitBuild] -branch = -release_branch = release/%b -release_message = Dzil-build release %v (from %h on %b) -multiple_inheritance = 1 - -[Git::Tag / master] -tag_format = v%v%t-dzilla - -[Git::Tag / release] -branch = release/master -tag_format = v%v%t - -[ConfirmRelease] - -[UploadToCPAN] diff --git a/lib/App/XScreenSaver/DBus.pm b/lib/App/XScreenSaver/DBus.pm index 2ab384a..ea83093 100644 --- a/lib/App/XScreenSaver/DBus.pm +++ b/lib/App/XScreenSaver/DBus.pm @@ -6,41 +6,21 @@ use Net::DBus::Reactor; use Log::Any; use App::XScreenSaver::DBus::InhibitSleep; use App::XScreenSaver::DBus::Saver; -# VERSION +our $VERSION = '1.0.0'; # VERSION # ABSTRACT: main application class -=head1 SYNOPSIS - - use App::XScreenSaver::DBus; - App::XScreenSaver::DBus->new->run; - -=attr C - -the event loop - -=cut has reactor => ( is => 'lazy', builder => sub { Net::DBus::Reactor->main() }, ); -=attr C - -instance of L<< C >>. - -=cut has inhibit_sleep => ( is => 'lazy', builder => sub { App::XScreenSaver::DBus::InhibitSleep->new() }, ); -=attr C - -instance of L<< C >>. - -=cut has saver => ( is => 'lazy', @@ -49,20 +29,9 @@ has saver => ( }, ); -=attr C - -a logger - -=cut has log => ( is => 'lazy', builder => sub { Log::Any->get_logger } ); -=method C - -registers the DBus services and runs the event loop; this method does -not return - -=cut sub run($self) { $self->inhibit_sleep->start(); @@ -71,3 +40,61 @@ sub run($self) { } 1; + +__END__ + +=pod + +=encoding UTF-8 + +=head1 NAME + +App::XScreenSaver::DBus - main application class + +=head1 VERSION + +version 1.0.0 + +=head1 SYNOPSIS + + use App::XScreenSaver::DBus; + App::XScreenSaver::DBus->new->run; + +=head1 ATTRIBUTES + +=head2 C + +the event loop + +=head2 C + +instance of L<< C >>. + +=head2 C + +instance of L<< C >>. + +=head2 C + +a logger + +=head1 METHODS + +=head2 C + +registers the DBus services and runs the event loop; this method does +not return + +=head1 AUTHOR + +Gianni Ceccarelli + +=head1 COPYRIGHT AND LICENSE + +This software is Copyright (c) 2021 by Gianni Ceccarelli . + +This is free software, licensed under: + + The GNU Affero General Public License, Version 3, November 2007 + +=cut diff --git a/lib/App/XScreenSaver/DBus/InhibitSleep.pm b/lib/App/XScreenSaver/DBus/InhibitSleep.pm index 226facf..ce980d7 100644 --- a/lib/App/XScreenSaver/DBus/InhibitSleep.pm +++ b/lib/App/XScreenSaver/DBus/InhibitSleep.pm @@ -6,71 +6,30 @@ use curry; use Net::DBus; use IPC::Run; use Log::Any; -# VERSION +our $VERSION = '1.0.0'; # VERSION # ABSTRACT: implements the logind "inhibitor locks" protocol -=head1 SYNOPSIS - - use Net::DBus::Reactor; - use App::XScreenSaver::DBus::InhibitSleep; - my $is = App::XScreenSaver::DBus::InhibitSleep->new; - $is->start; - - Net::DBus::Reactor->new->run; - -=attr C - -the DBus system bus - -=cut has bus => ( is => 'lazy', builder => sub { Net::DBus->system() } ); -=attr C - -the (e)logind DBus service - -=cut has logind_srv => ( is => 'lazy', builder => sub { shift->bus->get_service('org.freedesktop.login1') }, ); -=attr C - -the (e)logind DBus object - -=cut has logind_obj => ( is => 'lazy', builder => sub { shift->logind_srv->get_object('/org/freedesktop/login1') }, ); -=attr C - -the file descriptor that logind gives us when we ask for a lock; we -close it to release the lock - -=cut has inhibit_fd => ( is => 'rwp' ); -=attr C - -a logger - -=cut has log => ( is => 'lazy', builder => sub { Log::Any->get_logger } ); -=method C - -starts listening to the C signal from (e)logind, and -takes the lock - -=cut sub start($self) { $self->logind_obj->connect_to_signal( @@ -121,3 +80,70 @@ sub _xscreensaver_command($self,$command) { } 1; + +__END__ + +=pod + +=encoding UTF-8 + +=head1 NAME + +App::XScreenSaver::DBus::InhibitSleep - implements the logind "inhibitor locks" protocol + +=head1 VERSION + +version 1.0.0 + +=head1 SYNOPSIS + + use Net::DBus::Reactor; + use App::XScreenSaver::DBus::InhibitSleep; + my $is = App::XScreenSaver::DBus::InhibitSleep->new; + $is->start; + + Net::DBus::Reactor->new->run; + +=head1 ATTRIBUTES + +=head2 C + +the DBus system bus + +=head2 C + +the (e)logind DBus service + +=head2 C + +the (e)logind DBus object + +=head2 C + +the file descriptor that logind gives us when we ask for a lock; we +close it to release the lock + +=head2 C + +a logger + +=head1 METHODS + +=head2 C + +starts listening to the C signal from (e)logind, and +takes the lock + +=head1 AUTHOR + +Gianni Ceccarelli + +=head1 COPYRIGHT AND LICENSE + +This software is Copyright (c) 2021 by Gianni Ceccarelli . + +This is free software, licensed under: + + The GNU Affero General Public License, Version 3, November 2007 + +=cut diff --git a/lib/App/XScreenSaver/DBus/Saver.pm b/lib/App/XScreenSaver/DBus/Saver.pm index 6c3e761..ea79278 100644 --- a/lib/App/XScreenSaver/DBus/Saver.pm +++ b/lib/App/XScreenSaver/DBus/Saver.pm @@ -7,63 +7,27 @@ use Log::Any; use Try::Tiny; use IPC::Run; use App::XScreenSaver::DBus::SaverProxy; -# VERSION +our $VERSION = '1.0.0'; # VERSION # ABSTRACT: implements the "idle inhibition" protocol -=head1 SYNOPSIS - - use Net::DBus::Reactor; - use App::XScreenSaver::DBus::InhibitSleep; - - my $reactor = Net::DBus::Reactor->new; - my $s = App::XScreenSaver::DBus::Saver->new(reactor => $reactor); - $s->start; - - $reactor->run; - -=attr C - -the event loop - -=cut has reactor => ( is => 'ro', required => 1 ); -=attr C - -the DBus session bus - -=cut has bus => ( is => 'lazy', builder => sub { Net::DBus->session() } ); -=attr C - -the DBus manager DBus service - -=cut has dbus_srv => ( is => 'lazy', builder => sub { shift->bus->get_service('org.freedesktop.DBus') }, ); -=attr C - -the DBus manager DBus object - -=cut has dbus_obj => ( is => 'lazy', builder => sub { shift->dbus_srv->get_object('/org/freedesktop/DBus') }, ); -=attr C - -the DBus service we export - -=cut has service => ( is => 'lazy', @@ -73,25 +37,12 @@ has service => ( }, ); -=attr C - -the paths at which we export our DBus object - -there's two of them because different applications expect this object -at different paths - -=cut has paths => ( is => 'ro', default => sub { [qw(/ScreenSaver /org/freedesktop/ScreenSaver)] }, ); -=attr C - -a logger - -=cut has log => ( is => 'lazy', builder => sub { Log::Any->get_logger } ); @@ -99,16 +50,6 @@ has _impls => ( is => 'rw' ); has _prod_id => ( is => 'rw' ); has _inhibits => ( is => 'rw', default => sub { +{} } ); -=method C - -Exports our object to the session bus, and starts listening for -C events. - -Those events are emitted when a client attaches or detaches from the -bus. A client may die before releasing the idle inhibition, so we want -to be notified when that happens, and release that inhibition. - -=cut sub start($self) { my $inhibit_cb = $self->curry::weak::_inhibit; @@ -218,3 +159,86 @@ sub _prod_screensaver($self) { } 1; + +__END__ + +=pod + +=encoding UTF-8 + +=head1 NAME + +App::XScreenSaver::DBus::Saver - implements the "idle inhibition" protocol + +=head1 VERSION + +version 1.0.0 + +=head1 SYNOPSIS + + use Net::DBus::Reactor; + use App::XScreenSaver::DBus::InhibitSleep; + + my $reactor = Net::DBus::Reactor->new; + my $s = App::XScreenSaver::DBus::Saver->new(reactor => $reactor); + $s->start; + + $reactor->run; + +=head1 ATTRIBUTES + +=head2 C + +the event loop + +=head2 C + +the DBus session bus + +=head2 C + +the DBus manager DBus service + +=head2 C + +the DBus manager DBus object + +=head2 C + +the DBus service we export + +=head2 C + +the paths at which we export our DBus object + +there's two of them because different applications expect this object +at different paths + +=head2 C + +a logger + +=head1 METHODS + +=head2 C + +Exports our object to the session bus, and starts listening for +C events. + +Those events are emitted when a client attaches or detaches from the +bus. A client may die before releasing the idle inhibition, so we want +to be notified when that happens, and release that inhibition. + +=head1 AUTHOR + +Gianni Ceccarelli + +=head1 COPYRIGHT AND LICENSE + +This software is Copyright (c) 2021 by Gianni Ceccarelli . + +This is free software, licensed under: + + The GNU Affero General Public License, Version 3, November 2007 + +=cut diff --git a/lib/App/XScreenSaver/DBus/SaverProxy.pm b/lib/App/XScreenSaver/DBus/SaverProxy.pm index 858dcba..f6ed7b1 100644 --- a/lib/App/XScreenSaver/DBus/SaverProxy.pm +++ b/lib/App/XScreenSaver/DBus/SaverProxy.pm @@ -6,17 +6,9 @@ use experimental qw(signatures postderef); # this is the interface name use Net::DBus::Exporter qw(org.freedesktop.ScreenSaver); use parent 'Net::DBus::Object'; -# VERSION +our $VERSION = '1.0.0'; # VERSION # ABSTRACT: proxy dbus object -=head1 DESCRIPTION - -This is functionally the same as L<< C >>, but -specialised for this application, and with a hack to allow L<< -C >> to access the sender of the -message. - -=cut dbus_method('Inhibit',['string','string'],['uint32']); dbus_method('UnInhibit',['uint32'],[]); @@ -44,3 +36,38 @@ sub UnInhibit($self,$cookie) { } 1; + +__END__ + +=pod + +=encoding UTF-8 + +=head1 NAME + +App::XScreenSaver::DBus::SaverProxy - proxy dbus object + +=head1 VERSION + +version 1.0.0 + +=head1 DESCRIPTION + +This is functionally the same as L<< C >>, but +specialised for this application, and with a hack to allow L<< +C >> to access the sender of the +message. + +=head1 AUTHOR + +Gianni Ceccarelli + +=head1 COPYRIGHT AND LICENSE + +This software is Copyright (c) 2021 by Gianni Ceccarelli . + +This is free software, licensed under: + + The GNU Affero General Public License, Version 3, November 2007 + +=cut diff --git a/scripts/xscreensaver-dbus b/scripts/xscreensaver-dbus index a48334c..e48cc92 100755 --- a/scripts/xscreensaver-dbus +++ b/scripts/xscreensaver-dbus @@ -4,13 +4,27 @@ use warnings; use v5.20; use Log::Any::Adapter Stdout => ( log_level => 'debug' ); use App::XScreenSaver::DBus; -# VERSION +our $VERSION = '1.0.0'; # VERSION # PODNAME: xscreensaver-dbus # ABSTRACT: tie xscreensaver into dbus $|++; App::XScreenSaver::DBus->new->run; +__END__ + +=pod + +=encoding UTF-8 + +=head1 NAME + +xscreensaver-dbus - tie xscreensaver into dbus + +=head1 VERSION + +version 1.0.0 + =head1 SYNOPSIS xscreensaver & @@ -46,9 +60,40 @@ So I wrote this. =head1 REFERENCES -=for :list -* Martin Lucina F https://github.com/mato/xscreensaver-systemd -* the Debian bug where the above program is first mentioned https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=781961 -* "Is there a decent way to inhibit screensavers in linux?" on StackOverflow https://stackoverflow.com/questions/460140/is-there-a-decent-way-to-inhibit-screensavers-in-linux -* the systemd "Inhibitor Locks" documentation https://www.freedesktop.org/wiki/Software/systemd/inhibit/ -* the "idle inhibition" spec https://people.freedesktop.org/~hadess/idle-inhibition-spec/index.html +=over 4 + +=item * + +Martin Lucina F https://github.com/mato/xscreensaver-systemd + +=item * + +the Debian bug where the above program is first mentioned https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=781961 + +=item * + +"Is there a decent way to inhibit screensavers in linux?" on StackOverflow https://stackoverflow.com/questions/460140/is-there-a-decent-way-to-inhibit-screensavers-in-linux + +=item * + +the systemd "Inhibitor Locks" documentation https://www.freedesktop.org/wiki/Software/systemd/inhibit/ + +=item * + +the "idle inhibition" spec https://people.freedesktop.org/~hadess/idle-inhibition-spec/index.html + +=back + +=head1 AUTHOR + +Gianni Ceccarelli + +=head1 COPYRIGHT AND LICENSE + +This software is Copyright (c) 2021 by Gianni Ceccarelli . + +This is free software, licensed under: + + The GNU Affero General Public License, Version 3, November 2007 + +=cut diff --git a/t/00-compile.t b/t/00-compile.t new file mode 100644 index 0000000..7421167 --- /dev/null +++ b/t/00-compile.t @@ -0,0 +1,100 @@ +use 5.006; +use strict; +use warnings; + +# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.058 + +use Test::More; + +plan tests => 5 + ($ENV{AUTHOR_TESTING} ? 1 : 0); + +my @module_files = ( + 'App/XScreenSaver/DBus.pm', + 'App/XScreenSaver/DBus/InhibitSleep.pm', + 'App/XScreenSaver/DBus/Saver.pm', + 'App/XScreenSaver/DBus/SaverProxy.pm' +); + +my @scripts = ( + 'scripts/xscreensaver-dbus' +); + +# no fake home requested + +my @switches = ( + -d 'blib' ? '-Mblib' : '-Ilib', +); + +use File::Spec; +use IPC::Open3; +use IO::Handle; + +open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!"; + +my @warnings; +for my $lib (@module_files) +{ + # see L + my $stderr = IO::Handle->new; + + diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} } + $^X, @switches, '-e', "require q[$lib]")) + if $ENV{PERL_COMPILE_TEST_DEBUG}; + + my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-e', "require q[$lib]"); + binmode $stderr, ':crlf' if $^O eq 'MSWin32'; + my @_warnings = <$stderr>; + waitpid($pid, 0); + is($?, 0, "$lib loaded ok"); + + shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/ + and not eval { +require blib; blib->VERSION('1.01') }; + + if (@_warnings) + { + warn @_warnings; + push @warnings, @_warnings; + } +} + +foreach my $file (@scripts) +{ SKIP: { + open my $fh, '<', $file or warn("Unable to open $file: $!"), next; + my $line = <$fh>; + + close $fh and skip("$file isn't perl", 1) unless $line =~ /^#!\s*(?:\S*perl\S*)((?:\s+-\w*)*)(?:\s*#.*)?$/; + @switches = (@switches, split(' ', $1)) if $1; + + close $fh and skip("$file uses -T; not testable with PERL5LIB", 1) + if grep { $_ eq '-T' } @switches and $ENV{PERL5LIB}; + + my $stderr = IO::Handle->new; + + diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} } + $^X, @switches, '-c', $file)) + if $ENV{PERL_COMPILE_TEST_DEBUG}; + + my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-c', $file); + binmode $stderr, ':crlf' if $^O eq 'MSWin32'; + my @_warnings = <$stderr>; + waitpid($pid, 0); + is($?, 0, "$file compiled ok"); + + shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/ + and not eval { +require blib; blib->VERSION('1.01') }; + + # in older perls, -c output is simply the file portion of the path being tested + if (@_warnings = grep { !/\bsyntax OK$/ } + grep { chomp; $_ ne (File::Spec->splitpath($file))[2] } @_warnings) + { + warn @_warnings; + push @warnings, @_warnings; + } +} } + + + +is(scalar(@warnings), 0, 'no warnings found') + or diag 'got warnings: ', ( Test::More->can('explain') ? Test::More::explain(\@warnings) : join("\n", '', @warnings) ) if $ENV{AUTHOR_TESTING}; + + diff --git a/t/author-pod-spell.t b/t/author-pod-spell.t new file mode 100644 index 0000000..e3d5969 --- /dev/null +++ b/t/author-pod-spell.t @@ -0,0 +1,35 @@ + +BEGIN { + unless ($ENV{AUTHOR_TESTING}) { + print qq{1..0 # SKIP these tests are for testing by the author\n}; + exit + } +} + +use strict; +use warnings; +use Test::More; + +# generated by Dist::Zilla::Plugin::Test::PodSpelling 2.007005 +use Test::Spelling 0.12; +use Pod::Wordlist; + + +add_stopwords(); +all_pod_files_spelling_ok( qw( bin lib ) ); +__DATA__ +App +Ceccarelli +DBus +Gianni +InhibitSleep +Saver +SaverProxy +XScreenSaver +dakkar +dbus +lib +logind +scripts +specialised +xscreensaver diff --git a/t/author-pod-syntax.t b/t/author-pod-syntax.t new file mode 100644 index 0000000..2233af0 --- /dev/null +++ b/t/author-pod-syntax.t @@ -0,0 +1,15 @@ +#!perl + +BEGIN { + unless ($ENV{AUTHOR_TESTING}) { + print qq{1..0 # SKIP these tests are for testing by the author\n}; + exit + } +} + +# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests. +use strict; use warnings; +use Test::More; +use Test::Pod 1.41; + +all_pod_files_ok(); diff --git a/weaver.ini b/weaver.ini deleted file mode 100644 index 2a9dfc0..0000000 --- a/weaver.ini +++ /dev/null @@ -1,50 +0,0 @@ -[@CorePrep] - -[-SingleEncoding] - -[Region / stopwords] -flatten = 0 - -[Name] -[Version] - -[Region / prelude] - -[Generic / SYNOPSIS] -[Generic / DESCRIPTION] -[Generic / OVERVIEW] - -[Collect / ATTRIBUTES] -command = attr - -[Collect / COLUMNS] -command = column - -[Collect / RELATIONSHIPS] -command = rel - -[Collect / REQUIRED METHODS] -command = require - -[Collect / METHODS] -command = method - -[Collect / MODIFIED METHODS] -command = modif - -[Collect / FUNCTIONS] -command = func - -[Collect / TYPES] -command = type - -[Leftovers] - -[Region / postlude] - -[Authors] -[Legal] - -[-Transformer / Lists] -transformer = List -format_name = list -- cgit v1.2.3