#!/usr/bin/perl use File::Path; use File::Copy; use File::Glob ":glob"; use POSIX ":sys_wait_h"; $timeout = 60; %{ENV}->{"MOZILLA_FIVE_HOME"}="LIBDIR/mozilla-MOZILLA_VERSION"; %{ENV}->{"LD_LIBRARY_PATH"}="LIBDIR/mozilla-MOZILLA_VERSION"; umask 022; if ( -f "LIBDIR/mozilla-MOZILLA_VERSION/regxpcom" ) { # remove all of the old files rmtree("LIBDIR/mozilla-MOZILLA_VERSION/chrome/overlayinfo"); unlink ; unlink("LIBDIR/mozilla-MOZILLA_VERSION/component.reg"); unlink("LIBDIR/mozilla-MOZILLA_VERSION/components/compreg.dat"); unlink("LIBDIR/mozilla-MOZILLA_VERSION/components/xpti.dat"); # create a new clean path mkpath("LIBDIR/mozilla-MOZILLA_VERSION/chrome/overlayinfo"); # rebuild the installed-chrome.txt file from the installed # languages if ( -f "LIBDIR/mozilla-MOZILLA_VERSION/chrome/lang/installed-chrome.txt" ) { rebuild_lang_files(); } # run regxpcom $pid = fork(); # I am the child. if ($pid == 0) { exec("LIBDIR/mozilla-MOZILLA_VERSION/regxpcom > /dev/null 2> /dev/null"); } # I am the parent. else { my $timepassed = 0; do { $kid = waitpid($pid, &WNOHANG); sleep(1); $timepassed++; } until $kid == -1 || $timepassed > $timeout; # should we kill? if ($timepassed > $timeout) { kill (9, $pid); # kill -9 can leave threads hanging around system("/usr/bin/killall -9 regxpcom"); } } # and run regchrome for good measure $pid = fork(); # I am the child. if ($pid == 0) { exec("LIBDIR/mozilla-MOZILLA_VERSION/regchrome > /dev/null 2> /dev/null"); } # I am the parent. else { my $timepassed = 0; do { $kid = waitpid($pid, &WNOHANG); sleep(1); $timepassed++; } until $kid == -1 || $timepassed > $timeout; # should we kill? if ($timepassed > $timeout) { kill (9, $pid); # kill -9 can leave threads hanging around system("/usr/bin/killall -9 regchrome"); } } } sub rebuild_lang_files { unlink("LIBDIR/mozilla-MOZILLA_VERSION/chrome/installed-chrome.txt"); open (OUTPUT, "+>", "LIBDIR/mozilla-MOZILLA_VERSION/chrome/installed-chrome.txt")|| die("Failed to open installed-chrome.txt: $!\n"); copy("LIBDIR/mozilla-MOZILLA_VERSION/chrome/lang/installed-chrome.txt", \*OUTPUT); foreach (bsd_glob("LIBDIR/mozilla-MOZILLA_VERSION/chrome/lang/lang-*.txt")) { copy($_, \*OUTPUT); } copy("LIBDIR/mozilla-MOZILLA_VERSION/chrome/lang/default.txt", \*OUTPUT); }