Alexandre Julliard : tools: Improve error handling in the buildicon script.

Alexandre Julliard julliard at winehq.org
Tue Apr 6 11:20:07 CDT 2010


Module: wine
Branch: master
Commit: 513c77655a963a70d74d3fd3fa27cbd49f52a0a1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=513c77655a963a70d74d3fd3fa27cbd49f52a0a1

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Apr  6 13:24:04 2010 +0200

tools: Improve error handling in the buildicon script.

---

 tools/buildicon |   37 +++++++++++++++++++++++++------------
 1 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/tools/buildicon b/tools/buildicon
index 2f91f4b..4c6a088 100755
--- a/tools/buildicon
+++ b/tools/buildicon
@@ -36,12 +36,27 @@ my $icoName = $1;
 my @pngFiles;
 
 # Get the programs from the environment variables
-my $convert = $ENV{"CONVERT"};
-$convert = "convert" if $convert eq "";
-my $rsvg = $ENV{"RSVG"};
-$rsvg = "rsvg" if $rsvg eq "";
-my $icotool = $ENV{"ICOTOOL"};
-$icotool = "icotool" if $icotool eq "";
+my $convert = $ENV{"CONVERT"} || "convert";
+my $rsvg = $ENV{"RSVG"} || "rsvg";
+my $icotool = $ENV{"ICOTOOL"} || "icotool";
+
+sub cleanup()
+{
+    unlink $renderedSVGFileName;
+    unlink $_ foreach(@pngFiles);
+}
+
+$SIG{"INT"} = "cleanup";
+$SIG{"HUP"} = "cleanup";
+$SIG{"TERM"} = "cleanup";
+$SIG{"__DIE__"} = "cleanup";
+
+# run a shell command and die on error
+sub shell(@)
+{
+    my @args = @_;
+    system(@args) == 0 or die "@args failed: $?";
+}
 
 sub svg_element_start
 {
@@ -67,7 +82,7 @@ sub svg_element_start
 
         if(defined($x) and defined($x)) {
             if($x =~ /\d*/ and $y =~ /\d*/) {
-                system "$convert $renderedSVGFileName -crop '$size x$size+$x+$y' $pngFileName";
+                shell $convert, $renderedSVGFileName, "-crop", "${size}x${size}+$x+$y", $pngFileName;
             }
         }
 
@@ -96,7 +111,7 @@ sub resize_image
     # Use ImageMagick to stretch the image
     my($size) = @_;
     my $pngFileName = "$icoName-$size.png";
-    system "$convert $renderedSVGFileName -resize '$size x$size' $pngFileName";
+    shell $convert, $renderedSVGFileName, "-resize", "${size}x${size}", $pngFileName;
     push(@pngFiles, $pngFileName);
 }
 
@@ -108,7 +123,7 @@ sub fallback_render
 }
 
 # Render the SVG image
-system 'rsvg', $svgFileName, $renderedSVGFileName;
+shell 'rsvg', $svgFileName, $renderedSVGFileName;
 
 # Render the images in the SVG
 my $parser = new XML::Parser(
@@ -120,9 +135,7 @@ $parser->parsefile("$svgFileName");
 fallback_render unless(@pngFiles);
 
 # Combine them into an ICO file
-my $icotoolCommand = "$icotool -c -o $icoFileName";
-$icotoolCommand .= " $_" foreach(@pngFiles);
-system $icotoolCommand;
+shell $icotool, "-c", "-o", $icoFileName, @pngFiles;
 
 # Delete the intermediate images
 unlink $renderedSVGFileName;




More information about the wine-cvs mailing list