use strict; use warnings; use ExtUtils::MakeMaker; use File::Spec::Functions; use Getopt::Long; my $opt = {}; GetOptions($opt, 'growlhelperapp=s'); my $REQUIRED = '0.6.0'; my $GHA; if ($opt->{growlhelperapp}) { $GHA = $opt->{growlhelperapp}; } elsif (-e '/Library/PreferencePanes/Growl.prefPane/Contents/Resources/GrowlHelperApp.app') { $GHA = '/Library/PreferencePanes/Growl.prefPane/Contents/Resources/GrowlHelperApp.app'; } else { $GHA = "$ENV{HOME}/Library/PreferencePanes/Growl.prefPane/Contents/Resources/GrowlHelperApp.app"; } my $goodversion = checkversion(); warn "... but we will attempt to install anyway.\n" unless $goodversion; WriteMakefile( NAME => 'Mac::Growl', VERSION_FROM => 'lib/Mac/Growl.pm', clean => { 'FILES' => 'Mac-Growl-* .makeglue' }, NO_META => 1, ); sub checkversion { my $info = catfile($GHA, updir(), updir(), qw(Info.plist)); my $fh; unless (open($fh, '<', $info)) { warn "warning: Growl cannot be found!\n"; return; } my $version; while (<$fh>) { if ($version) { m|^\s*([\d.]+)\s*$|; $version = $1; last; } elsif (m|^\s*CFBundleVersion\s*$|) { $version = 1; next; } } if (! defined $version) { warn "warning: Growl version cannot be found!\n"; return; } my($V, $R) = map { join '', map { chr } split /\./, $_ } ($version, $REQUIRED); if ($V lt $R) { warn "warning: Growl version is $version; minimum $REQUIRED required!\n"; return; } return 1; } sub findbin { my($name) = @_; chomp(my $path = `which $name`); if (!$path || $path =~ /\bno gluemac\b/) { my @paths = qw(/usr/local/bin /System/Library/Perl/Extras/bin /sw/bin /usr/bin); for (@paths) { my $test = catfile($_, $name); if (-e $test) { $path = $test; last; } } } return $path; } sub MY::postamble { return '' unless -e $GHA && $goodversion; eval { require Mac::Glue }; if ($Mac::Glue::VERSION && $Mac::Glue::VERSION < 1.24) { return <<"MAKE_FRAG"; .makeglue: @\$(ECHO) "Copying glue files to $Mac::Glue::Common::MACGLUEDIR" @\$(CP) 'lib/Mac/Glue/glues/GrowlHelperApp' 'lib/Mac/Glue/glues/GrowlHelperApp.pod' '$Mac::Glue::Common::MACGLUEDIR' @\$(TOUCH) .makeglue all :: .makeglue MAKE_FRAG } else { my $path = findbin('gluemac') or return ''; return <<"MAKE_FRAG"; .makeglue: @\$(PERL) '$path' -I '$GHA' @\$(TOUCH) .makeglue all :: .makeglue MAKE_FRAG } }