Author: sparky
Date: Mon Dec  4 16:22:01 2006
New Revision: 8061

Modified:
   vfmg/trunk/VFMG/Icons.pm
Log:
- support in-line convert scripts, not tested


Modified: vfmg/trunk/VFMG/Icons.pm
==============================================================================
--- vfmg/trunk/VFMG/Icons.pm    (original)
+++ vfmg/trunk/VFMG/Icons.pm    Mon Dec  4 16:22:01 2006
@@ -14,6 +14,30 @@
        '',
 );
 
+my @del_files;
+sub prepare_exec($) {
+       my $sect = shift;
+       unless (exists $main::rcSect{$sect}) {
+               warn "Section '$sect' does not exist!\n";
+               return undef;
+       }
+
+       my $tmp = (grep {defined and length and -d and -w}
+               ($ENV{TMPDIR}, $ENV{TMP}, "/tmp"))[0];
+       return undef unless ($tmp);
+       my $file = "$tmp/$sect";
+
+       umask 077;
+       unlink $file if -e $file;
+       open F_OUT, ">", $file or warn "$file: $!\n" and return undef;
+       push @del_files, $file;
+       print F_OUT @{$main::rcSect{$sect}};
+       close F_OUT or return undef;
+       chmod 700, $file;
+       return undef unless -x $file;
+       return $file;
+}
+
 sub preconf() {
        eval { $main::opt{icons_dir} = VFMG::Output::icons_dir() }
                unless length $main::opt{icons_dir};
@@ -21,7 +45,22 @@
        $main::opt{icons_ext} = 1 if $main::opt{icons_full};
 
        return unless $main::opt{icons_scale};
-       if ( length $main::opt{icons_dir} ) {
+       unless ( length $main::opt{icons_dir} ) {
+               $main::opt{icons_scale} = 0;
+               warn "Icons destination directory is not specified, not 
scaling.\n";
+               return;
+       }
+       if ( $main::opt{convert} =~ s/^\s*\$(\S+)\s+// ) {
+               my $sect = $1;
+               my $conv = prepare_exec($sect);
+               if ( defined $conv and length $conv and -x $conv ) {
+                       $main::opt{convert} =~ s/^/$conv /;
+                       $main::opt{icons} = 1;
+               } else {
+                       warn "Some error ocurred wile preparing '\$$sect' 
script\n";
+                       $main::opt{icons_scale} = 0;
+               }
+       } else {
                my $conv = (split /\s/, $main::opt{convert})[0];
                if ( length `which $conv` ) {
                        $main::opt{icons} = 1;
@@ -29,10 +68,8 @@
                        $main::opt{icons_scale} = 0;
                        warn "$conv is not executable, not scaling icons.\n";
                }
-       } else {
-               $main::opt{icons_scale} = 0;
-               warn "Icons destination directory is not specified, not 
scaling.\n";
        }
+       return;
 }
 
 our $scale_icon;
@@ -118,6 +155,7 @@
        foreach my $cmd (@scale) {
                system($cmd);
        }
+       unlink @del_files;
 }
 
 1;
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to