#!/usr/bin/perl -w

die '$RPM_BUILD_ROOT is not set!' unless $ENV{'RPM_BUILD_ROOT'};

`mkdir -p $ENV{'RPM_BUILD_ROOT'}/usr/share/applications`;
foreach $desktopfile (glob $ENV{'RPM_BUILD_ROOT'}.'/usr/share/gnome/apps/*.desktop') {
    system ('mv', $desktopfile, "$ENV{'RPM_BUILD_ROOT'}/usr/share/applications") and die $!;
}

foreach $desktopfile (glob ($ENV{'RPM_BUILD_ROOT'}.'/usr/share/applications/*.desktop'), glob ($ENV{'RPM_BUILD_ROOT'}.'/usr/share/applications/*/*.desktop')) {
    open DF, $desktopfile or die $!;
    my @olddesktop=<DF>;
    close DF or die $!;
    my $desktop_entry=0;
    open DF, '>', $desktopfile or die $!;
    foreach (@olddesktop) {
	chomp;
	my $oldline=$_;
	if ($desktop_entry) {
	    # warning: key "Encoding" in group "Desktop Entry" is deprecated;
	    if (/^Encoding/) {
		&log ("removed $_");
		next;
	    }
	    # warning: boolean key "Terminal" in group "Desktop Entry" has value "0", 
	    # which is deprecated: boolean values should be "false" or "true"; 
	    s/^Terminal=0/Terminal=false/;
	    s/^Terminal=1/Terminal=true/;
	    # warning: key "Categories" in group "Desktop Entry" contains a deprecated value "Application"; 
	    if (m/^Categories=/ and not m/^Categories=Application;\s*$/) {
		s/Application;//;
		# error: value "..." for string list key "Categories" in group "Desktop Entry" does not have a semicolon (';') as trailing character; 
		s/(\S+)/$1;/ unless m/;\s*$/;
	    }
	    # warning: key "DocPath" in group "Desktop Entry" is a reserved key for KDE;
	    s/^DocPath=/X-DocPath=/;
	    # error: value "__.png" for key "Icon" in group "Desktop Entry" is an icon name with an extension, but there should be no extension as described in the Icon Theme Specification if the value is not an absolute path;
	    if (m/^Icon=[^\S]/) {
		s/.png(\s*)$/$1/;
		s/.xpm(\s*)$/$1/;
		s/.jpg(\s*)$/$1/;
		s/.jpeg(\s*)$/$1/;
	    }
	    if (m/^MimeType=/) {
		# error: value "..." for string list key "MimeType" in group "Desktop Entry" does not have a semicolon (';') as trailing character; 
		s/(\S+)/$1;/ unless m/;\s*$/;
	    }
	}
	$desktop_entry =1 if /^\[Desktop Entry\]/;
	print DF $_,"\n";
	&log ("changed $oldline to $_") if ($_ ne $oldline);
    }
    close DF or die $!;
}

sub log {
    print STDERR "rpmbuild-helper-desktop: @_\n";
}
