#!/usr/bin/perl use File::Path; use File::Copy; use File::Glob ":glob"; use POSIX ":sys_wait_h"; $timeout = 60; $ENV{HOME}="/root" if !defined $ENV{HOME}; $ENV{TMP}="/tmp"; $ENV{MOZILLA_FIVE_HOME}="LIBDIR/seamonkey-SEAMONKEY_VERSION"; $ENV{LD_LIBRARY_PATH}="LIBDIR/seamonkey-SEAMONKEY_VERSION"; $ENV{MOZ_DISABLE_GNOME}="1"; umask 022; if ( -f "LIBDIR/seamonkey-SEAMONKEY_VERSION/regxpcom" ) { # remove all of the old files rmtree("LIBDIR/seamonkey-SEAMONKEY_VERSION/chrome/overlayinfo"); unlink <LIBDIR/seamonkey-SEAMONKEY_VERSION/chrome/*.rdf>; unlink("LIBDIR/seamonkey-SEAMONKEY_VERSION/component.reg"); unlink("LIBDIR/seamonkey-SEAMONKEY_VERSION/components/compreg.dat"); unlink("LIBDIR/seamonkey-SEAMONKEY_VERSION/components/xpti.dat"); # create a new clean path mkpath("LIBDIR/seamonkey-SEAMONKEY_VERSION/chrome/overlayinfo"); # rebuild the installed-chrome.txt file from the installed # languages if ( -f "LIBDIR/seamonkey-SEAMONKEY_VERSION/chrome/lang/installed-chrome.txt" ) { rebuild_lang_files(); } # run regxpcom $pid = fork(); # I am the child. if ($pid == 0) { exec("LIBDIR/seamonkey-SEAMONKEY_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/seamonkey-SEAMONKEY_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/seamonkey-SEAMONKEY_VERSION/chrome/installed-chrome.txt"); open (OUTPUT, "+>", "LIBDIR/seamonkey-SEAMONKEY_VERSION/chrome/installed-chrome.txt")|| die("Failed to open installed-chrome.txt: $!\n"); copy("LIBDIR/seamonkey-SEAMONKEY_VERSION/chrome/lang/installed-chrome.txt", \*OUTPUT); foreach (bsd_glob("LIBDIR/seamonkey-SEAMONKEY_VERSION/chrome/lang/lang-*.txt")) { copy($_, \*OUTPUT); } copy("LIBDIR/seamonkey-SEAMONKEY_VERSION/chrome/lang/default.txt", \*OUTPUT); }