#!/usr/pkg/bin/perl

#
# Before run this script, you must chdir to ${WRKDIR}/mozilla/dist.
#
# You must check which file/dir remain after pkg_delete
# and adjust @genfilelist & @gendirlist
#
use File::Find;

@proglist = (
	'lib/@{MOZILLA}/${MOZILLA_BIN}',
	'lib/@{MOZILLA}/mangle',
	'lib/@{MOZILLA}/mozilla-xremote-client',
	'lib/@{MOZILLA}/nsinstall',
	'lib/@{MOZILLA}/regxpcom',
	'lib/@{MOZILLA}/shlibsign',
	'lib/@{MOZILLA}/xpcshell',
	'lib/@{MOZILLA}/xpicleanup',
	'lib/@{MOZILLA}/xpidl',
	'lib/@{MOZILLA}/xpt_dump',
	'lib/@{MOZILLA}/xpt_link'
);

@scriptlist = (
	'lib/@{MOZILLA}/mozilla-config',
	'lib/@{MOZILLA}/thunderbird-config',
	'lib/@{MOZILLA}/firefox-config'
);

@extralist = ('bin/@{MOZILLA}');

@genfilelist = (
	'lib/@{MOZILLA}/components/compreg.dat',
	'lib/@{MOZILLA}/chrome/chrome.rdf',
	'lib/@{MOZILLA}/components/xpti.dat'
);

@gendirlist = (
	'lib/@{MOZILLA}/chrome/overlayinfo/navigator/content',
	'lib/@{MOZILLA}/chrome/overlayinfo/navigator',
	'lib/@{MOZILLA}/chrome/overlayinfo/messenger/content',
	'lib/@{MOZILLA}/chrome/overlayinfo/messenger',
	'lib/@{MOZILLA}/chrome/overlayinfo/inspector/content',
	'lib/@{MOZILLA}/chrome/overlayinfo/inspector',
	'lib/@{MOZILLA}/chrome/overlayinfo/global/skin',
	'lib/@{MOZILLA}/chrome/overlayinfo/global',
	'lib/@{MOZILLA}/chrome/overlayinfo/editor/content',
	'lib/@{MOZILLA}/chrome/overlayinfo/editor',
	'lib/@{MOZILLA}/chrome/overlayinfo/cookie/content',
	'lib/@{MOZILLA}/chrome/overlayinfo/cookie',
	'lib/@{MOZILLA}/chrome/overlayinfo/communicator/content',
	'lib/@{MOZILLA}/chrome/overlayinfo/communicator',
	'lib/@{MOZILLA}/chrome/overlayinfo/chatzilla/content',
	'lib/@{MOZILLA}/chrome/overlayinfo/chatzilla',
	'lib/@{MOZILLA}/chrome/overlayinfo/browser/skin',
	'lib/@{MOZILLA}/chrome/overlayinfo/browser/content',
	'lib/@{MOZILLA}/chrome/overlayinfo/browser',
	'lib/@{MOZILLA}/chrome/overlayinfo'
);

@excludelist = (
	'lib/@{MOZILLA}/.autoreg',
	'lib/@{MOZILLA}/mozilla',
	'lib/@{MOZILLA}/mozilla-bin',
	'lib/@{MOZILLA}/firefox-bin',
	'lib/@{MOZILLA}/thunderbird-bin',
	'lib/@{MOZILLA}/MozillaFirebird',
	'lib/@{MOZILLA}/MozillaFirebird-bin',
	'lib/@{MOZILLA}/TestGtkEmbed',
	'lib/@{MOZILLA}/run-mozilla.sh',
	'lib/@{MOZILLA}/plugins/libnullplugin.so'
);

@extradsolist = (
	'${SUNOSLIB}lib/${MOZILLA}/libfreebl_hybrid_3.${SO_SUFFIX}',
	'${SUNOSLIB}lib/${MOZILLA}/libfreebl_pure32_3.${SO_SUFFIX}'
);

@dirlist = ();
@filelist = ();
@pub_inc_filelist = ();

#
# make directory list
#
sub dir_wanted {
	if (-d $_ ){
		push @dirlist, $File::Find::name;
	}
}

find(\&dir_wanted, bin, include, public);

#
# make file list
#
sub file_wanted {
	if (!-d $_  && -e $_){
		push @filelist, $File::Find::name;
	}
}

find(\&file_wanted, bin, include);

#
# make include file list under public
#
sub public_file_wanted {
	if (!-d $_  && -e $_){
		push @pub_inc_filelist, $File::Find::name;
	}
}

find(\&public_file_wanted, public);


#
# exclude files & dirs in *.jar
#
@jarfiles = (grep /\.jar$/, @filelist);
foreach $jarfile (@jarfiles) {
	$jarfile =~ s/\.jar$//;
	map { s,^$jarfile/.*$,, } @filelist;
	map { s,^$jarfile.*$,, } @dirlist;
}

#
# adjust path name
#
map { s,^bin/,lib/\@{MOZILLA}/,; s,^include/,include/\@{MOZILLA}/,}  @filelist;
map { s,^bin,lib/\@{MOZILLA},; s,^include,include/\@{MOZILLA},;  s,^public/,include/\@{MOZILLA}/,}  @dirlist;
map { s,^public/,include/\@{MOZILLA}/,}  @pub_inc_filelist;

#
# exclude files
#
foreach $file (@excludelist) {
        map { s/^$file$// } @filelist;
}

#
# make DSO list
#
@dsolist = (grep /\.so$/, @filelist);
map ${ s/\.so$/.\${SO_SUFFIX}/ }, @dsolist;
@filelist = (grep !/\.so$/, @filelist);

#
# make pkgconfig data list
#
#@pclist = (grep /\.pc$/, @filelist);
#@filelist = (grep !/\.pc$/, @filelist);

#
# make INCLUDE list
#
@includelist = (grep m,^include/,, @filelist);
@filelist = (grep !m,^include/,, @filelist);

#
# make program list
#
foreach $file (@proglist) {
	map { s/^$file$// } @filelist;
}

#
# make script list
#
foreach $file (@scriptlist) {
	map { s/^$file$// } @filelist;
}

#foreach $file (@filelist) {
#	print "$file\n";
#}
#
# replace @{MOZILLA} with ${MOZILLA}
#
@extralist = sort @extralist;
map { s/\@{MOZILLA}/\${MOZILLA}/ } @extralist;
@proglist = sort @proglist;
map { s/\@{MOZILLA}/\${MOZILLA}/ } @proglist;
@scriptlist = sort @scriptlist;
map { s/\@{MOZILLA}/\${MOZILLA}/ } @scriptlist;
@dsolist = sort @dsolist;
map { s/\@{MOZILLA}/\${MOZILLA}/ } @dsolist;
@filelist = sort @filelist;
map { s/\@{MOZILLA}/\${MOZILLA}/ } @filelist;
@includelist = sort @includelist;
map { s/\@{MOZILLA}/\${MOZILLA}/ } @includelist;
@pub_inc_filelist = sort @pub_inc_filelist;
map { s/\@{MOZILLA}/\${MOZILLA}/ } @pub_inc_filelist;
@genfilelist = sort @genfilelist;
map { s/\@{MOZILLA}/\${MOZILLA}/ } @genfilelist;
@gendirlist = sort @gendirlist;
map { s/\@{MOZILLA}/\${MOZILLA}/ } @gendirlist;
@dirlist = sort @dirlist;
map { s/\@{MOZILLA}/\${MOZILLA}/ } @dirlist;

#
# make PLIST
#
print '@comment $NetBSD$',"\n";

foreach $file (sort @extralist){
	print "$file\n";
}

print_section("PROGRAMS", @proglist);
print_section("SCRIPTS", sort @scriptlist);
print_section("DSO", sort @dsolist);
print_section("DATA", sort @filelist);
print_section("INCLUDE", sort @includelist);
print_section("INCLUDE-PUBLIC", sort @pub_inc_filelist);

print '@exec env LD_LIBRARY_PATH=%D/lib/${MOZILLA} MOZILLA_FIVE_HOME=%D/lib/${MOZILLA} %D/lib/${MOZILLA}/regxpcom', "\n";

foreach $file (sort @genfilelist){
	printf "\@unexec \${RM} %%D/$file\n";
}

print "\@comment begin DIRS\n";
foreach $dir (sort { $b cmp $a } @dirlist){
	printf "\@dirrm $dir\n" if $dir;
}
print "\@comment end DIRS\n";

sub print_section {
	$title = @_[0];
	shift;

	print "\@comment begin $title\n";
	foreach $item ( @_){
		print "$item\n" if $item;
	}
	print "\@comment end $title\n";
};

sub revcmp { $b <=> $a };
