Revision 1 (by moose, 2006/03/06 10:35:57) Initial Import
#!/usr/bin/perl

use strict;
use warnings;
use File::Spec;
use File::Spec::Functions qw/splitdir catdir/;

our $qrc = shift @ARGV;
our $dir = shift @ARGV;
our $indent = 0;

open OUT, ">$qrc" or die "failed to open $qrc for writing: $!\n";
print OUT '<!DOCTYPE RCC>' . "\n" . '<RCC version="1.0">' . "\n";

scandir($dir);

print OUT '</RCC>' . "\n";

sub scandir {
	my $dir = shift;
	local *DIR;
	if(!opendir DIR, $dir) {
		warn "failed to open $dir: $!\n";
		return;
	}

	for(readdir DIR) {
		my $path = catdir($dir,$_);
		next if /^\..*$/;
		next if /^.*\.(?:cpp|qrc)$/;
		next if /^.*~$/;
#		print $path ."\n";
		lstat $path;
		$path =~ s|^qrc/(.*)$|$1|;
		if(-d _) {
			if(!$indent) {
				print OUT '<qresource prefix="' . $_ . '">';
			}

			$indent++;
			scandir(catdir("qrc", $path));
			--$indent;

			if(!$indent) {
				print OUT "\n</qresource>\n";
			}
		}
=pod
		elsif(-l _) {
			my $link = readlink catdir("qrc", $path);

			print OUT "\n\t"x$indent;
			if($indent > 0) {
				my @dirs = splitdir($link);
				my $fn = pop @dirs;
				print OUT "<file alias=\"" . $fn . "\">$link</file>";
			} else {
				print OUT "<file alias=\"" . $path . "\">" . $link . "</file>";
			}
		}
=cut
		elsif(-f _ || -l _) {
			print OUT "\n" . ("\t"x$indent);
			if($indent > 0) {
				my @dirs = splitdir($path); shift @dirs;
				my $npath = catdir(@dirs);
				print OUT "<file alias=\"" . $npath . "\">" . $path . "</file>";
			} else {
				print OUT "<file alias=\"" . $path . "\">" . $path . "</file>";
			}
		}
	}

	closedir DIR;
}