#!/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 '' . "\n" . '' . "\n"; scandir($dir); print OUT '' . "\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 ''; } $indent++; scandir(catdir("qrc", $path)); --$indent; if(!$indent) { print OUT "\n\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 "$link"; } else { print OUT "" . $link . ""; } } =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 "" . $path . ""; } else { print OUT "" . $path . ""; } } } closedir DIR; }