Compare commits

..

2 Commits

Author SHA1 Message Date
sdv%sparc.spb.su
53866ece4f workaround for bug=30927
git-svn-id: svn://10.0.0.236/branches/M15-patch@72213 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-14 11:34:36 +00:00
(no author)
350be55313 This commit was manufactured by cvs2svn to create branch 'M15-patch'.
git-svn-id: svn://10.0.0.236/branches/M15-patch@52901 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-06 02:47:16 +00:00
23 changed files with 105 additions and 5673 deletions

View File

@@ -0,0 +1,105 @@
/*
The contents of this file are subject to the Mozilla Public
License Version 1.1 (the "License"); you may not use this file
except in compliance with the License. You may obtain a copy of
the License at http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
implied. See the License for the specific language governing
rights and limitations under the License.
The Original Code is mozilla.org code.
The Initial Developer of the Original Code is Sun Microsystems,
Inc. Portions created by Sun are
Copyright (C) 1999 Sun Microsystems, Inc. All
Rights Reserved.
Contributor(s):
*/
#ifndef __JavaDOMGlobals_h__
#define __JavaDOMGlobals_h__
#include "jni.h"
#include "prclist.h"
#include "nsError.h"
#ifdef ERROR
#undef ERROR
#endif
class nsISupports;
class nsIDOMNode;
struct PRLogModuleInfo;
struct PRLock;
class JavaDOMGlobals {
public:
static jclass attrClass;
static jclass cDataSectionClass;
static jclass commentClass;
static jclass documentClass;
static jclass documentFragmentClass;
static jclass documentTypeClass;
static jclass domImplementationClass;
static jclass elementClass;
static jclass entityClass;
static jclass entityReferenceClass;
static jclass namedNodeMapClass;
static jclass nodeClass;
static jclass nodeListClass;
static jclass notationClass;
static jclass processingInstructionClass;
static jclass textClass;
static jfieldID nodePtrFID;
static jfieldID nodeListPtrFID;
static jfieldID domImplementationPtrFID;
static jfieldID nodeTypeAttributeFID;
static jfieldID nodeTypeCDataSectionFID;
static jfieldID nodeTypeCommentFID;
static jfieldID nodeTypeDocumentFragmentFID;
static jfieldID nodeTypeDocumentFID;
static jfieldID nodeTypeDocumentTypeFID;
static jfieldID nodeTypeElementFID;
static jfieldID nodeTypeEntityFID;
static jfieldID nodeTypeEntityReferenceFID;
static jfieldID nodeTypeNotationFID;
static jfieldID nodeTypeProcessingInstructionFID;
static jfieldID nodeTypeTextFID;
static jclass domExceptionClass;
static jmethodID domExceptionInitMID;
static jclass runtimeExceptionClass;
static jmethodID runtimeExceptionInitMID;
static const char* const DOM_EXCEPTION_MESSAGE[];
typedef enum ExceptionType { EXCEPTION_RUNTIME,
EXCEPTION_DOM } ExceptionType;
static PRLogModuleInfo* log;
static PRCList garbage;
static PRLock* garbageLock;
static PRInt32 javaMaxInt;
static void Initialize(JNIEnv *env);
static void Destroy(JNIEnv *env);
static jobject CreateNodeSubtype(JNIEnv *env,
nsIDOMNode *node);
static void AddToGarbage(nsISupports* domObject);
static void TakeOutGarbage();
static void ThrowException(JNIEnv *env,
const char * message = NULL,
nsresult rv = NS_OK,
ExceptionType exceptionType = EXCEPTION_RUNTIME);
};
#endif /* __JavaDOMGlobals_h__ */

View File

@@ -1,26 +0,0 @@
To install a fresh tinderbox:
1) Checkout the latest copy of the tinderbox scripts
cd /builds/cvs; cvs -z3 co mozilla/tools/tinderbox
2) Change to the location that you wish to run the tinderbox from.
cd /builds/tinderbox
3) Create links from the cvs directory to your build directory
ln -s /builds/cvs/mozilla/tools/tinderbox/*.pl .
4) Create your tinderbox config file
perl ./build-seamonkey.pl --example-config > tinder-config.pl
5) Create your mozconfig build file in the current dir
mozilla -remote http://webtools.mozilla.org/build/config.cgi
6) Customize your tinderbox configuration
vi tinder-config.pl
7) Test your tinderbox configuration on the test tree
perl ./build-seamonkey.pl --depend -t MozillaTest
8) Once you are satisfied with the results run your tinderbox
perl ./build-seamonkey.pl --depend

View File

@@ -1,74 +0,0 @@
mozilla/tools/tinderbox
===================
This directory is for the scripts associated with the client-side of
tinderbox (scripts to checkout, build, and report the status of the tree
to a tinderbox server).
Table of Contents
=================
* README
This file.
* build-seamonkey.pl
A perl script to drive the client side of tinderbox (unix variants).
usage:
build-seamonkey.pl [--clobber | --depend] [-t TreeName] [--testonly] [--once]
* bloatdiff.pl
Script used to process leak data in the logs.
* build-seamonkey-util.pl
Core unix tinderbox stuff.
* post-mozilla-sample.pl
Example of post-build test script
* tinder-defaults.pl
Default script variables.
* gettime.pl
Wrapper to get hires time, if available.
* tinderbox
Wrapper script to start unix builds.
* install-links
Create links to a tinderbox install directory.
Tinderbox example for SeaMonkey build
=====================================
Here is an example of how to set up a "SeaMonkey" tinderbox
build of mozilla.
# Create tinderbox source files in mozilla,
# then SeaMonkey directory where mozilla tree will live.
cvs co mozilla/tools/tinderbox
mkdir SeaMonkey
cd SeaMonkey; ../mozilla/tools/tinderbox/install-links
#
# Create tinder-config.pl file in SeaMonkey directory.
# Copy one from an existing build, or create a sample one and edit it:
#
./build-seamonkey.pl --example-config > tinder-config.pl
#
# mozconfig. If you have configure options, add them to a
# file named "mozconfig" in the SeaMonkey directory.
# Again, you can copy one from a build, or create one.
# For a default stock build, this file is not needed or
# can be blank.
#
# Start the tinderbox! From the SeaMonkey directory:
./tinderbox depend start
# You can watch the build run the first time with:
tail -f <objdir>/<logname>

View File

@@ -1,332 +0,0 @@
#!/usr/bin/perl -w
#
# Munges the output from
# XPCOM_MEM_BLOAT_LOG=1; mozilla-bin -f bloaturls.txt
# so that it does some summary and stats stuff.
#
# To show leak test results for a set of changes, do something like this:
#
# XPCOM_MEM_BLOAT_LOG=1
# mozilla -f bloaturls.txt > a.out
# **make change**
# mozilla -f bloaturls.txt > b.out
# bloatdiff.pl a.out b.out
#
$OLDFILE = $ARGV[0];
$NEWFILE = $ARGV[1];
$LABEL = $ARGV[2];
sub processFile {
my ($filename, $map, $prevMap) = @_;
open(FH, $filename);
while (<FH>) {
if (m{
^\s*(\d+)\s # Line number
([\w:]+)\s+ # Name
(-?\d+)\s+ # Size
(-?\d+)\s+ # Leaked
(-?\d+)\s+ # Objects Total
(-?\d+)\s+ # Objects Rem
\(\s*(-?[\d.]+)\s+ # Objects Mean
\+/-\s+
([\w.]+)\)\s+ # Objects StdDev
(-?\d+)\s+ # Reference Total
(-?\d+)\s+ # Reference Rem
\(\s*(-?[\d.]+)\s+ # Reference Mean
\+/-\s+
([\w\.]+)\) # Reference StdDev
}x) {
$$map{$2} = { name => $2,
size => $3,
leaked => $4,
objTotal => $5,
objRem => $6,
objMean => $7,
objStdDev => $8,
refTotal => $9,
refRem => $10,
refMean => $11,
refStdDev => $12,
bloat => $3 * $5 # size * objTotal
};
} else {
# print "failed to parse: $_\n";
}
}
close(FH);
}
%oldMap = ();
processFile($OLDFILE, \%oldMap);
%newMap = ();
processFile($NEWFILE, \%newMap);
################################################################################
$inf = 9999999.99;
sub getLeaksDelta {
my ($key) = @_;
my $oldLeaks = $oldMap{$key}{leaked} || 0;
my $newLeaks = $newMap{$key}{leaked};
my $percentLeaks = 0;
if ($oldLeaks == 0) {
if ($newLeaks != 0) {
# there weren't any leaks before, but now there are!
$percentLeaks = $inf;
}
}
else {
$percentLeaks = ($newLeaks - $oldLeaks) / $oldLeaks * 100;
}
# else we had no record of this class before
return ($newLeaks - $oldLeaks, $percentLeaks);
}
################################################################################
sub getBloatDelta {
my ($key) = @_;
my $newBloat = $newMap{$key}{bloat};
my $percentBloat = 0;
my $oldSize = $oldMap{$key}{size} || 0;
my $oldTotal = $oldMap{$key}{objTotal} || 0;
my $oldBloat = $oldTotal * $oldSize;
if ($oldBloat == 0) {
if ($newBloat != 0) {
# this class wasn't used before, but now it is
$percentBloat = $inf;
}
}
else {
$percentBloat = ($newBloat - $oldBloat) / $oldBloat * 100;
}
# else we had no record of this class before
return ($newBloat - $oldBloat, $percentBloat);
}
################################################################################
foreach $key (keys %newMap) {
my ($newLeaks, $percentLeaks) = getLeaksDelta($key);
my ($newBloat, $percentBloat) = getBloatDelta($key);
$newMap{$key}{leakDelta} = $newLeaks;
$newMap{$key}{leakPercent} = $percentLeaks;
$newMap{$key}{bloatDelta} = $newBloat;
$newMap{$key}{bloatPercent} = $percentBloat;
}
################################################################################
# Print a value of bytes out in a reasonable
# KB, MB, or GB form. Copied from build-seamonkey-util.pl, sorry. -mcafee
sub PrintSize($) {
# print a number with 3 significant figures
sub PrintNum($) {
my ($num) = @_;
my $rv;
if ($num < 1) {
$rv = sprintf "%.3f", ($num);
} elsif ($num < 10) {
$rv = sprintf "%.2f", ($num);
} elsif ($num < 100) {
$rv = sprintf "%.1f", ($num);
} else {
$rv = sprintf "%d", ($num);
}
}
my ($size) = @_;
my $rv;
if ($size > 1000000000) {
$rv = PrintNum($size / 1000000000.0) . "G";
} elsif ($size > 1000000) {
$rv = PrintNum($size / 1000000.0) . "M";
} elsif ($size > 1000) {
$rv = PrintNum($size / 1000.0) . "K";
} else {
$rv = PrintNum($size);
}
}
print "Bloat/Leak Delta Report\n";
print "--------------------------------------------------------------------------------------\n";
print "Current file: $NEWFILE\n";
print "Previous file: $OLDFILE\n";
print "----------------------------------------------leaks------leaks%------bloat------bloat%\n";
printf "%-40s %10s %10.2f%% %10s %10.2f%%\n",
("TOTAL",
$newMap{"TOTAL"}{leaked}, $newMap{"TOTAL"}{leakPercent},
$newMap{"TOTAL"}{bloat}, $newMap{"TOTAL"}{bloatPercent});
################################################################################
sub percentStr {
my ($p) = @_;
if ($p == $inf) {
return "-";
}
else {
return sprintf "%10.2f%%", $p;
}
}
# NEW LEAKS
@keys = sort { $newMap{$b}{leakPercent} <=> $newMap{$a}{leakPercent} } keys %newMap;
my $needsHeading = 1;
my $total = 0;
foreach $key (@keys) {
my $percentLeaks = $newMap{$key}{leakPercent};
my $leaks = $newMap{$key}{leaked};
if ($percentLeaks > 0 && $key !~ /TOTAL/) {
if ($needsHeading) {
printf "--NEW-LEAKS-----------------------------------leaks------leaks%%-----------------------\n";
$needsHeading = 0;
}
printf "%-40s %10s %10s\n", ($key, $leaks, percentStr($percentLeaks));
$total += $leaks;
}
}
if (!$needsHeading) {
printf "%-40s %10s\n", ("TOTAL", $total);
}
# FIXED LEAKS
@keys = sort { $newMap{$b}{leakPercent} <=> $newMap{$a}{leakPercent} } keys %newMap;
$needsHeading = 1;
$total = 0;
foreach $key (@keys) {
my $percentLeaks = $newMap{$key}{leakPercent};
my $leaks = $newMap{$key}{leaked};
if ($percentLeaks < 0 && $key !~ /TOTAL/) {
if ($needsHeading) {
printf "--FIXED-LEAKS---------------------------------leaks------leaks%%-----------------------\n";
$needsHeading = 0;
}
printf "%-40s %10s %10s\n", ($key, $leaks, percentStr($percentLeaks));
$total += $leaks;
}
}
if (!$needsHeading) {
printf "%-40s %10s\n", ("TOTAL", $total);
}
# NEW BLOAT
@keys = sort { $newMap{$b}{bloatPercent} <=> $newMap{$a}{bloatPercent} } keys %newMap;
$needsHeading = 1;
$total = 0;
foreach $key (@keys) {
my $percentBloat = $newMap{$key}{bloatPercent};
my $bloat = $newMap{$key}{bloat};
if ($percentBloat > 0 && $key !~ /TOTAL/) {
if ($needsHeading) {
printf "--NEW-BLOAT-----------------------------------bloat------bloat%%-----------------------\n";
$needsHeading = 0;
}
printf "%-40s %10s %10s\n", ($key, $bloat, percentStr($percentBloat));
$total += $bloat;
}
}
if (!$needsHeading) {
printf "%-40s %10s\n", ("TOTAL", $total);
}
# ALL LEAKS
@keys = sort { $newMap{$b}{leaked} <=> $newMap{$a}{leaked} } keys %newMap;
$needsHeading = 1;
$total = 0;
foreach $key (@keys) {
my $leaks = $newMap{$key}{leaked};
my $percentLeaks = $newMap{$key}{leakPercent};
if ($leaks > 0) {
if ($needsHeading) {
printf "--ALL-LEAKS-----------------------------------leaks------leaks%%-----------------------\n";
$needsHeading = 0;
}
printf "%-40s %10s %10s\n", ($key, $leaks, percentStr($percentLeaks));
if ($key !~ /TOTAL/) {
$total += $leaks;
}
}
}
if (!$needsHeading) {
# printf "%-40s %10s\n", ("TOTAL", $total);
}
# ALL BLOAT
@keys = sort { $newMap{$b}{bloat} <=> $newMap{$a}{bloat} } keys %newMap;
$needsHeading = 1;
$total = 0;
foreach $key (@keys) {
my $bloat = $newMap{$key}{bloat};
my $percentBloat = $newMap{$key}{bloatPercent};
if ($bloat > 0) {
if ($needsHeading) {
printf "--ALL-BLOAT-----------------------------------bloat------bloat%%-----------------------\n";
$needsHeading = 0;
}
printf "%-40s %10s %10s\n", ($key, $bloat, percentStr($percentBloat));
if ($key !~ /TOTAL/) {
$total += $bloat;
}
}
}
if (!$needsHeading) {
# printf "%-40s %10s\n", ("TOTAL", $total);
}
# NEW CLASSES
@keys = sort { $newMap{$b}{bloatDelta} <=> $newMap{$a}{bloatDelta} } keys %newMap;
$needsHeading = 1;
my $ltotal = 0;
my $btotal = 0;
foreach $key (@keys) {
my $leaks = $newMap{$key}{leaked};
my $bloat = $newMap{$key}{bloat};
my $percentBloat = $newMap{$key}{bloatPercent};
if ($percentBloat == $inf && $key !~ /TOTAL/) {
if ($needsHeading) {
printf "--CLASSES-NOT-REPORTED-LAST-TIME--------------leaks------bloat------------------------\n";
$needsHeading = 0;
}
printf "%-40s %10s %10s\n", ($key, $leaks, $bloat);
if ($key !~ /TOTAL/) {
$ltotal += $leaks;
$btotal += $bloat;
}
}
}
if (!$needsHeading) {
printf "%-40s %10s %10s\n", ("TOTAL", $ltotal, $btotal);
}
# OLD CLASSES
@keys = sort { ($oldMap{$b}{bloat} || 0) <=> ($oldMap{$a}{bloat} || 0) } keys %oldMap;
$needsHeading = 1;
$ltotal = 0;
$btotal = 0;
foreach $key (@keys) {
if (!defined($newMap{$key})) {
my $leaks = $oldMap{$key}{leaked};
my $bloat = $oldMap{$key}{bloat};
if ($needsHeading) {
printf "--CLASSES-THAT-WENT-AWAY----------------------leaks------bloat------------------------\n";
$needsHeading = 0;
}
printf "%-40s %10s %10s\n", ($key, $leaks, $bloat);
if ($key !~ /TOTAL/) {
$ltotal += $leaks;
$btotal += $bloat;
}
}
}
if (!$needsHeading) {
printf "%-40s %10s %10s\n", ("TOTAL", $ltotal, $btotal);
}
print "--------------------------------------------------------------------------------------\n";

View File

@@ -1,488 +0,0 @@
#!/usr/bin/perl
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
#
# This script gets called after a full mozilla build & test.
# Use this to build and test an embedded or commercial branding of Mozilla.
#
# ./build-seamonkey-utils.pl will call PostMozilla::main() after
# a successful build and testing of mozilla. This package can report
# status via the $TinderUtils::build_status variable. Yeah this is a hack,
# but it works for now. Feel free to improve this mechanism to properly
# return values & stuff. -mcafee
#
# Things to do:
# * Get pull by branch working
#
#
use strict;
use File::Path; # for rmtree();
package PostMozilla;
sub checkout {
my ($mozilla_build_dir) = @_;
# chdir to build directory
chdir "$mozilla_build_dir";
# Next, do the checkout:
print "Settings::CVS = $Settings::CVS\n";
my $status = TinderUtils::run_shell_command("$Settings::CVS checkout mozilla/camino");
# hack in the camino prefs, if needed
return $status;
}
sub ReadHeapDumpToHash($$)
{
my($dumpfile, $hashref) = @_;
local(*DUMP_FILE);
open(DUMP_FILE, "< $dumpfile") || die "Can't open heap output file $dumpfile\n";
my $section = 0;
my $zone = "";
my $default_zone_bytes = 0;
while (<DUMP_FILE>)
{
my($line) = $_;
chomp($line);
if ($line =~ /^\#/ || $line =~ /^\s*$/ || $line =~ /------------------------/) { # ignore comments and empty lines
next;
}
# use the 'All zones' lines as section markers
if ($line =~ /^All zones:/) {
$section ++;
next;
}
if ($section == 2) # we're in the detailed section
{
if ($line =~ /^Zone ([^_]+).+\((\d+).+\)/)
{
$zone = $1;
if ($zone eq "DefaultMallocZone") {
$default_zone_bytes = $2;
}
TinderUtils::print_log(" $line\n");
next;
}
if ($zone eq "DefaultMallocZone")
{
if ($line =~ /(\w+)\s*=\s*(\d+)\s*\((\d+).+\)/)
{
my(%entry_hash) = ("count", $2,
"bytes", $3);
$hashref->{$1} = \%entry_hash;
}
elsif ($line =~ /^<not.+>\s*=\s*(\d+)\s*\((\d+).+\)/)
{
my(%entry_hash) = ("count", $1,
"bytes", $2);
$hashref->{"malloc_block"} = \%entry_hash;
}
}
}
}
close(DUMP_FILE);
return $default_zone_bytes;
}
sub DumpHash($)
{
my($hashref) = @_;
print "Dumping values\n";
my($key);
foreach $key (keys %{$hashref})
{
my($value) = $hashref->{$key};
print "Class $key count $value->{'count'} bytes $value->{'bytes'}\n";
}
}
sub ClassEntriesEqual($$)
{
my($hashone, $hashtwo) = @_;
return ($hashone->{"count"} == $hashtwo->{"count"}) and ($hashone->{"bytes"} == $hashtwo->{"bytes"})
}
sub DumpHashDiffs($$)
{
my($beforehash, $afterhash) = @_;
my($name_width) = 50;
my($print_format) = "%10s %-${name_width}s %8d %8d\n";
TinderUtils::print_log(sprintf "%10s %-${name_width}s %8s %8s\n", "", "Class", "Count", "Bytes");
TinderUtils::print_log("--------------------------------------------------------------------------------\n");
my($key);
foreach $key (keys %{$beforehash})
{
my($beforevalue) = $beforehash->{$key};
if (exists $afterhash->{$key})
{
my($aftervalue) = $afterhash->{$key};
if (!ClassEntriesEqual($beforevalue, $aftervalue))
{
my($count_change) = $aftervalue->{"count"} - $beforevalue->{"count"};
my($bytes_change) = $aftervalue->{"bytes"} - $beforevalue->{"bytes"};
if ($bytes_change > 0) {
TinderUtils::print_log(sprintf $print_format, "Leaked", $key, $count_change, $bytes_change);
} else {
TinderUtils::print_log(sprintf $print_format, "Freed", $key, $count_change, $bytes_change);
}
}
}
else
{
#$before_only{$key} = $beforevalue;
TinderUtils::print_log(sprintf $print_format, "Freed", $key, $beforevalue->{'count'}, $beforevalue->{'bytes'});
}
}
# now look for things only in the after cache
foreach $key (keys %{$afterhash})
{
my($value) = $afterhash->{$key};
if (!exists $beforehash->{$key})
{
#$after_only{$key} = $value;
TinderUtils::print_log(sprintf $print_format, "Leaked", $key, $value->{'count'}, $value->{'bytes'});
}
}
TinderUtils::print_log("--------------------------------------------------------------------------------\n");
}
sub ParseHeapOutput($$)
{
my($beforedump, $afterdump) = @_;
TinderUtils::print_log("Before window open:\n");
my %before_data;
my $before_heap = ReadHeapDumpToHash($beforedump, \%before_data);
TinderUtils::print_log("After window open and close:\n");
my %after_data;
my $after_heap = ReadHeapDumpToHash($afterdump, \%after_data);
# DumpHash(\%before_data);
# DumpHash(\%after_data);
TinderUtils::print_log("Open/close window leaks:\n");
DumpHashDiffs(\%before_data, \%after_data);
my $heap_diff = $after_heap - $before_heap;
TinderUtils::print_log("TinderboxPrint:<acronym title=\"Per-window leaks\">Lw:".TinderUtils::PrintSize($heap_diff, 3)."B</acronym>\n");
}
sub CaminoWindowLeaksTest($$$$$)
{
my ($test_name, $build_dir, $binary, $args, $timeout_secs) = @_;
my($status) = 'success';
my $beforefile = "/tmp/nav_before_heap.dat";
my $afterfile = "/tmp/nav_after_heap.dat";
my $run_test = 1; # useful for testing parsing code
if ($run_test)
{
my $close_window_script =<<END_SCRIPT;
tell application "Camino"
delay 5
close the first window
end tell
END_SCRIPT
my $new_window_script =<<END_SCRIPT;
tell application "Camino"
Get URL "about:blank"
delay 20
close the first window
end tell
END_SCRIPT
TinderUtils::print_log("Window leak test\n");
my $binary_basename = File::Basename::basename($binary);
my $binary_dir = File::Basename::dirname($binary);
my $binary_log = "$build_dir/$test_name.log";
my $cmd = $binary_basename;
my $pid = TinderUtils::fork_and_log($build_dir, $binary_dir, $cmd, $binary_log);
# close the existing window
system("echo '$close_window_script' | osascript");
# open and close few window to get to a stable point
system("echo '$new_window_script' | osascript");
# dump before data
system("heap $pid > $beforefile");
# run the test
system("echo '$new_window_script' | osascript");
# dump after data
system("heap $pid > $afterfile");
my $result = TinderUtils::wait_for_pid($pid, $timeout_secs);
}
ParseHeapOutput($beforefile, $afterfile);
return $status;
}
sub main {
my ($mozilla_build_dir) = @_;
TinderUtils::print_log("Starting camino build.\n");
# Tell camino to unbuffer stdio, otherwise when we kill the child process
# stdout & stderr won't get flushed.
$ENV{MOZ_UNBUFFERED_STDIO} = 1;
# Pending a config file, stuff things here.
my $post_status = 'success'; # Success until we report a failure.
my $status = 0; # 0 = success
# Control tests from here, sorry no config file yet.
my $camino_alive_test = 1;
my $camino_test8_test = 1;
my $camino_layout_performance_test = 1;
my $camino_startup_test = 1;
my $camino_window_leaks_test = 0;
my $safari_layout_performance_test = 0;
my $camino_clean_profile = 1;
# Build flags
my $camino_build_static = 0;
my $camino_build_opt = 1;
my $camino_dir = "$mozilla_build_dir/mozilla/camino";
my $embedding_dir = "$mozilla_build_dir/mozilla/embedding/config";
my $camino_binary = "Camino";
unless ($Settings::TestOnly) {
# Checkout/update the camino code.
$status = checkout($mozilla_build_dir);
TinderUtils::print_log("Status from checkout: $status\n");
if ($status != 0) {
$post_status = 'busted';
}
# Build camino if we passed the checkout command.
if ($post_status ne 'busted') {
#
# Build embedding/config.
#
chdir $embedding_dir;
if ($status == 0) {
$status = TinderUtils::run_shell_command("make");
TinderUtils::print_log("Status from make: $status\n");
}
#
# Build camino.
#
chdir $camino_dir;
if ($status == 0) {
TinderUtils::print_log("Deleting binary...\n");
TinderUtils::DeleteBinary("$camino_dir/build/Camino.app/Contents/MacOS/$camino_binary");
# Always do a clean build; gecko dependencies don't work correctly
# for Camino.
TinderUtils::print_log("Clobbering camino...\n");
TinderUtils::run_shell_command("make clean");
$status = TinderUtils::run_shell_command("make");
TinderUtils::print_log("Status from pbxbuild: $status\n");
}
TinderUtils::print_log("Testing build status...\n");
if ($status != 0) {
TinderUtils::print_log("busted, pbxbuild status non-zero\n");
$post_status = 'busted';
} elsif (not TinderUtils::BinaryExists("$camino_dir/build/Camino.app/Contents/MacOS/$camino_binary")) {
TinderUtils::print_log("Error: binary not found: $camino_dir/build/Camino.app/Contents/MacOS/$camino_binary\n");
$post_status = 'busted';
} else {
$post_status = 'success';
}
}
}
#
# Tests...
#
# Clean profile out, if set.
# Assume Camino always uses ~/Library/Application Support/Chimera/Profiles/default for now.
if ($camino_clean_profile) {
# Warning: workaround camino bug, delete whole Camino dir.
my $chim_profile_dir = "$ENV{HOME}/Library/Application Support/Chimera";
#my $chim_profile_dir = "$ENV{HOME}/Library/Application Support/Chimera/Profiles/default";
TinderUtils::print_log("Deleting $chim_profile_dir...\n");
print "Deleting $chim_profile_dir...\n";
File::Path::rmtree([$chim_profile_dir], 0, 0);
if (-e "$chim_profile_dir") {
TinderUtils::print_log("Error: rmtree('$chim_profile_dir') failed\n");
}
# Re-create profile. We have no -CreateProfile, so we instead
# run the AliveTest first.
}
# AliveTest for camino, about:blank
if ($camino_alive_test and $post_status eq 'success') {
$post_status = TinderUtils::AliveTest("CaminoAliveTest",
"$camino_dir/build/Camino.app/Contents/MacOS",
["Camino", "-url", "about:blank"],
45);
}
# Find the prefs file, remember we have the secret/random salt dir,
# e.g. /Users/cltbld/Library/Application Support/Chimera/Profiles/default/dyrs1ar8.slt/prefs.js
# so File::Path::find will find the prefs.js file.
#
my $pref_file = "prefs.js";
my $start_dir = "/Users/cltbld/Library/Application Support/Chimera/Profiles/default";
my $found = undef;
my $sub = sub {$pref_file = $File::Find::name, $found++ if $pref_file eq $_};
File::Find::find($sub, $start_dir); # Find prefs.js, write this to $pref_file.
# Set up performance prefs.
if ($pref_file and ($camino_layout_performance_test or 1)) {
# Some tests need browser.dom.window.dump.enabled set to true, so
# that JS dump() will work in optimized builds.
if (system("\\grep -s browser.dom.window.dump.enabled $pref_file > /dev/null")) {
TinderUtils::print_log("Setting browser.dom.window.dump.enabled\n");
open PREFS, ">>$pref_file" or die "can't open $pref_file ($?)\n";
print PREFS "user_pref(\"browser.dom.window.dump.enabled\", true);\n";
close PREFS;
} else {
TinderUtils::print_log("Already set browser.dom.window.dump.enabled\n");
}
# Set security prefs to allow us to close our own window,
# pageloader test (and possibly other tests) needs this on.
if (system("\\grep -s dom.allow_scripts_to_close_windows $pref_file > /dev/null")) {
TinderUtils::print_log("Setting dom.allow_scripts_to_close_windows to true.\n");
open PREFS, ">>$pref_file" or die "can't open $pref_file ($?)\n";
print PREFS "user_pref(\"dom.allow_scripts_to_close_windows\", true);\n";
close PREFS;
} else {
TinderUtils::print_log("Already set dom.allow_scripts_to_close_windows\n");
}
}
# LayoutTest8
# resource:///res/samples/test8.html
if ($camino_test8_test and $post_status eq 'success') {
if(0) {
open STDOUT, ">/tmp/foo";
open STDERR, ">&/tmp/foo";
select STDOUT; $| = 1; # make STDOUT unbuffered
select STDERR; $| = 1; # make STDERR unbuffered
print STDERR "hello, world\n";
chdir("$camino_dir/build/Camino.app/Contents/MacOS");
exec "./Camino -url \"http://lxr.mozilla.org/seamonkey/source/webshell/tests/viewer/samples/test8.html\"";
#exec "foo";
} else {
$post_status = TinderUtils::AliveTest("CaminoLayoutTest8Test",
"$camino_dir/build/Camino.app/Contents/MacOS",
["Camino", "-url", "http://lxr.mozilla.org/seamonkey/source/webshell/tests/viewer/samples/test8.html"],
20);
}
}
# Pageload test.
if ($camino_layout_performance_test and $post_status eq 'success') {
$post_status =
TinderUtils::LayoutPerformanceTest("CaminoLayoutPerformanceTest",
"$camino_dir/build/Camino.app/Contents/MacOS",
["Camino", "-url"]);
}
# Pageload test -- Safari.
if ($safari_layout_performance_test) {
TinderUtils::run_system_cmd("/Applications/Utilities/Safari.app/Contents/MacOS/Safari-wrap.pl http://$Settings::pageload_server/page-loader/loader.pl?delay=1000%26nocache=0%26maxcyc=4%26timeout=$Settings::LayoutPerformanceTestPageTimeout%26auto=1", 30);
# This is a hack.
TinderUtils::run_system_cmd("sync; sleep 400", 405);
TinderUtils::run_system_cmd("/Applications/Utilities/Safari.app/Contents/MacOS/Safari-wrap.pl quit", 30);
TinderUtils::print_log "TinderboxPrint:" .
"<a title=\"Avg of the median per url pageload time\" href=\"http://$Settings::results_server/graph/query.cgi?testname=pageload&tbox=" . ::hostname() . "-aux&autoscale=1&days=7&avg=1\">~Tp" . "</a>\n";
}
# Startup test.
if ($camino_startup_test and $post_status eq 'success') {
$post_status =
TinderUtils::StartupPerformanceTest("CaminoStartupPerformanceTest",
"Camino",
"$camino_dir/build/Camino.app/Contents/MacOS",
["-url"],
"file:$camino_dir/../../../startup-test.html");
}
if ($camino_window_leaks_test and $post_status eq 'success') {
$post_status = CaminoWindowLeaksTest("CaminoWindowLeakTest",
"$camino_dir/build/Camino.app/Contents/MacOS/",
"./Camino",
"-url \"http://www.mozilla.org\"",
20);
}
# Pass our status back to calling script.
return $post_status;
}
# Need to end with a true value, (since we're using "require").
1;

View File

@@ -1,148 +0,0 @@
#!/usr/bin/perl
#
#
# This script gets called after a full mozilla build & test.
# Use this to build and test an embedded or commercial branding of Mozilla.
#
# ./build-seamonkey-utils.pl will call PostMozilla::main() after
# a successful build and testing of mozilla. This package can report
# status via the $TinderUtils::build_status variable. Yeah this is a hack,
# but it works for now. Feel free to improve this mechanism to properly
# return values & stuff. -mcafee
#
# Things to do:
# * Get pull by branch working
#
#
use strict;
package PostMozilla;
sub checkout {
my ($mozilla_build_dir) = @_;
# chdir to build directory
chdir "$mozilla_build_dir";
# Hack to get around po/ChangeLog cvs conflict bug in gettext lib.
my $status = TinderUtils::run_shell_command("\\rm -f galeon/po/ChangeLog");
# Checkout galeon source. First set up cvsroot:
# Both of these as of 10/2001 are kinda flakey:
# $ENV{CVSROOT} = ":pserver:anonymous\@anoncvs.gnome.org:/cvs/gnome";
# $ENV{CVSROOT} = ":pserver:anonymous@cvs.galeon.sourceforge.net:/cvsroot/galeon";
#
# Asked for direct cvs access and got it:
$ENV{CVSROOT} = ":pserver:mcafee\@cvs.gnome.org:/cvs/gnome";
# Next, actually do the checkout:
my $status = TinderUtils::run_shell_command("$Settings::CVS checkout galeon");
# hack in the galeon prefs, if needed
return $status;
}
sub main {
my ($mozilla_build_dir) = @_;
TinderUtils::print_log "Post-Mozilla build goes here.\n";
# Pending a config file, stuff things here.
my $post_status = 'success'; # Success until we report a failure.
my $status = 0; # 0 = success
my $galeon_alive_test = 1;
my $galeon_test8_test = 1;
my $galeon_dir = "$mozilla_build_dir/galeon";
my $galeon_binary = "galeon-bin";
# Checkout/update the galeon code.
$status = checkout($mozilla_build_dir);
TinderUtils::print_log "Status from checkout: $status\n";
if ($status != 0) {
$post_status = 'busted';
}
# Build galeon if we passed the checkout command.
if ($post_status ne 'busted') {
# Build galeon.
chdir $galeon_dir;
# Make sure we have a configure
unless (-e "configure" and $post_status ne 'busted') {
$status = TinderUtils::run_shell_command("./autogen.sh");
TinderUtils::print_log "Status from autogen: $status\n";
}
# Not sure how to only do this when we need to.
# Force a configure for now.
if ($status == 0) {
TinderUtils::print_log "configuring...\n";
$status = TinderUtils::run_shell_command("./configure --sysconfdir=/etc --with-mozilla-libs=$mozilla_build_dir/mozilla/dist/bin --with-mozilla-includes=$mozilla_build_dir/mozilla/dist/include --with-nspr-includes=$mozilla_build_dir/mozilla/dist/include/nspr --with-mozilla-home=$mozilla_build_dir/mozilla/dist/bin");
TinderUtils::print_log "Status from configure: $status\n";
}
if ($status == 0) {
TinderUtils::print_log "Deleting, gmake...\n";
TinderUtils::DeleteBinary("$galeon_dir/src/$galeon_binary");
my $foo = Cwd::getcwd();
TinderUtils::print_log "cwd = $foo\n";
$status = TinderUtils::run_shell_command("gmake");
TinderUtils::print_log "Status from gmake: $status\n";
}
TinderUtils::print_log "Testing build status...\n";
if ($status != 0) {
TinderUtils::print_log "busted, gmake status non-zero\n";
$post_status = 'busted';
} elsif (not TinderUtils::BinaryExists("$galeon_dir/src/$galeon_binary")) {
TinderUtils::print_log "Error: binary not found: $galeon_dir/src/$galeon_binary\n";
$post_status = 'busted';
} else {
$post_status = 'success';
}
}
#
# Need a way to bypass initial setup dialog stuff, or
# we'll need to manually run this by hand the first time.
#
# Also, have to set crash_recovery=0 in ~/.gnome/galeon to avoid
# getting the crash dialog after the alive test times out.
#
# Test galeon, about:blank
if ($galeon_alive_test and $post_status eq 'success') {
$post_status = TinderUtils::AliveTest("GaleonAliveTest",
"$galeon_dir/src",
["galeon", "about:blank"],
45);
}
# Test galeon, test8
if ($galeon_test8_test and $post_status eq 'success') {
$post_status = TinderUtils::AliveTest("GaleonTest8Test",
"$galeon_dir/src",
["galeon", "resource:///res/samples/test8.html"],
45);
}
# Startup test
if ($galeon_startup_test and $post_status eq 'success') {
TinderUtils::StartupPerformanceTest("GaleonStartupPerformanceTest",
"galeon",
"$galeon_dir/src",
["", "$galeon_dir/src/../../../startup-test.html"]);
}
# Pass our status back to calling script.
return $post_status;
}
# Need to end with a true value, (since we're using "require").
1;

File diff suppressed because it is too large Load Diff

View File

@@ -1,338 +0,0 @@
#!d:/nstools/bin/perl5
use Cwd;
$build_depend=1; #depend or clobber
$build_tree = '';
$build_tag = '';
$build_name = '';
$build_continue = 0;
$build_sleep=10;
$no32 = 0;
$original_path = $ENV{'PATH'};
$early_exit = 1;
$doawt11 = 0;
$do_clobber = '';
$client_param = '';
&parse_args;
if( $build_test ){
$build_sleep=1;
}
$dirname = ($build_depend?'dep':'clob');
$logfile = "${dirname}.log";
if( $build_depend ){
$clobber_str = 'depend';
}
else {
$clobber_str = 'clobber_all';
}
mkdir("$dirname", 0777);
chdir("$dirname") || die "couldn't cd to $dirname";
$start_dir = cwd;
$start_dir =~ s/\//\\/ ;
$last_time = 0;
print "starting dir is: $start_dir\n";
while( $early_exit ){
chdir("$start_dir");
if( time - $last_time < (60 * $build_sleep) ){
$sleep_time = (60 * $build_sleep) - (time - $last_time);
print "\n\nSleeping $sleep_time seconds ...\n";
sleep( $sleep_time );
}
$last_time = time;
$start_time = time;
$start_time = adjust_start_time($start_time);
$start_time_str = `unix_date +"%m/%d/%Y %H:%M"`;
chop($start_time_str);
# call setup_env here in the loop, to update MOZ_DATE with each pass.
# setup_env uses start_time_str for MOZ_DATE.
&setup_env;
$cur_dir = cwd;
$cur_dir =~ s/\//\\/ ;
if( $cur_dir ne $start_dir ){
print "startdir: $start_dir, curdir $cur_dir\n";
die "curdir != startdir";
}
if ($build_test) {
$early_exit = 0; # stops this while loop after one pass.
}
# strip_conf fails to strip any variables from the real environemnt
# &strip_config;
&do_build(1,$do_clobber);
# &restore_config;
}
sub setup32 {
local ($awt) = @_;
$ENV{"MOZ_BITS"} = '32';
$ENV{"WINOS"} = 'WINNT';
$ENV{"STANDALONE_IMAGE_LIB"} = '1';
$ENV{"MODULAR_NETLIB"} = '1';
$ENV{"OS_TARGET"} = 'WIN95';
$ENV{"PATH"} = $original_path;
$ENV{"_MSC_VER"} = '1200';
$moz_src = $ENV{'MOZ_SRC'} = $start_dir;
$build_name = 'Win32 VC6.0' . ($build_depend?'Depend':'Clobber');
$do_clobber = $clobber_str;
$logname = "win32.log";
}
sub do_build {
local ($pull, $do_clobber) = @_;
print "pull = $pull, do_clobber = $do_clobber\n";
&start_build;
print "opening log file ${logname}\n";
open( LOG, ">${logname}" ) || print "can't open $logname\n";
print LOG "current dir is: $cur_dir\n";
&print_env;
$build_status = 0;
if( $pull ){
if ( $build_tag eq '' ){
# print LOG "cvs -d %MOZ_CVSROOT% co -A mozilla/config 2>&1 |\n";
# open( PULL, "cvs -d %MOZ_CVSROOT% co -A mozilla/config 2>&1 |") || print "couldn't execute cvs\n";;
print LOG "cvs -d $moz_cvsroot co -A mozilla/client.mak 2>&1 |\n";
open( PULL, "cvs -d $moz_cvsroot co -A mozilla/client.mak 2>&1 |") || print "couldn't execute cvs\n";;
} else{
print LOG "cvs -d $moz_cvsroot co -A -r $build_tag mozilla/config 2>&1 |\n";
open( PULL, "cvs -d $moz_cvsroot co -A -r $build_tag mozilla/config 2>&1 |") || print "couldn't execute cvs\n";;
print LOG "cvs -d $moz_cvsroot co -A -r $build_tag mozilla/client.mak 2>&1 |\n";
open( PULL, "cvs -d $moz_cvsroot co -A -r $build_tag mozilla/client.mak 2>&1 |") || print "couldn't execute cvs\n";;
}
# tee the output
while( <PULL> ){
print $_;
print LOG $_;
}
close( PULL );
$build_status = $?;
}
chdir("$moz_src/mozilla") || die "couldn't chdir to '$moz_src/mozilla'";
# if( $do_clobber ne '' ){
# print LOG "nmake -f client.mak $do_clobber |\n";
# print "nmake -f client.mak $do_clobber |\n";
# open( CLOBBER, "nmake -f client.mak $do_clobber 2>&1 |") || print "couldn't execute nmake\n";;
# tee the output
# while( <CLOBBER> ){
# print $_;
# print LOG $_;
# }
# close( CLOBBER );
# }
if (!$pull) {
$client_param = $do_clobber . ' build_all';
}
else {
$client_param = 'pull_all ' . $do_clobber . ' build_all';
}
print LOG "nmake -f client.mak $client_param 2>&1 |\n";
open( BUILD, "nmake -f client.mak $client_param 2>&1 |");
# tee the output
while( <BUILD> ){
print $_;
print LOG $_;
}
close( BUILD );
$build_status |= $?;
$build_status_str = ( $build_status ? 'busted' : 'success' );
print LOG "\n";
print LOG "tinderbox: tree: $build_tree\n";
print LOG "tinderbox: builddate: $start_time\n";
print LOG "tinderbox: status: $build_status_str\n";
print LOG "tinderbox: build: $build_name\n";
print LOG "tinderbox: errorparser: windows\n";
print LOG "tinderbox: buildfamily: windows\n";
close( LOG );
chdir("$start_dir");
system( "$nstools\\bin\\blat ${logname} -t tinderbox-daemon\@cvs-mirror.mozilla.org" );
# we should save at least one log back
system("copy ${logname} last-${logname}");
}
sub cvs_time {
local( $ret_time );
($sec,$minute,$hour,$mday,$mon,$year) = localtime( $_[0] );
$mon++; # month is 0 based.
sprintf("%02d/%02d/%04d %02d:%02d:00",
$mon,$mday,$year,$hour,$minute );
}
sub start_build {
open( LOG, ">logfile" );
print LOG "\n";
print LOG "tinderbox: tree: $build_tree\n";
print LOG "tinderbox: builddate: $start_time\n";
print LOG "tinderbox: status: building\n";
print LOG "tinderbox: build: $build_name\n";
print LOG "tinderbox: errorparser: windows\n";
print LOG "tinderbox: buildfamily: windows\n";
print LOG "\n";
close( LOG );
system("$nstools\\bin\\blat logfile -t tinderbox-daemon\@cvs-mirror.mozilla.org" );
}
sub parse_args {
local($i);
if( @ARGV == 0 ){
&usage;
}
$i = 0;
while( $i < @ARGV ){
if( $ARGV[$i] eq '--depend' ){
$build_depend = 1;
}
elsif ( $ARGV[$i] eq '--clobber' ){
$build_depend = 0;
}
elsif ( $ARGV[$i] eq '--continue' ){
$build_continue = 1;
}
elsif ( $ARGV[$i] eq '--test' ){
$build_test = 1;
}
elsif ( $ARGV[$i] eq '-tag' ){
$i++;
$build_tag = $ARGV[$i];
if( $build_tag eq '' || $build_tag eq '-t'){
&usage;
}
}
elsif ( $ARGV[$i] eq '-t' ){
$i++;
$build_tree = $ARGV[$i];
if( $build_tree eq '' ){
&usage;
}
}
$i++;
}
if( $build_tree eq '' ){
&usage;
}
}
sub usage {
die "usage: buildit.pl [--depend | --clobber] [--continue] [--test] [-tag TAGNAME] -t TREENAME\n";
}
sub setup_env {
local($p);
# $ENV{"MOZ_DEBUG"} = '1';
$ENV{"MOZ_MFC"} = '1';
$ENV{"CVSROOT"} = ':pserver:cltbld%netscape.com@cvs.mozilla.org:/cvsroot';
$moz_cvsroot = $ENV{"CVSROOT"};
# $ENV{"MOZ_EDITOR"} = '1';
$ENV{"VERBOSE"} = '1';
$ENV{"NGLAYOUT_PLUGINS"} = '1';
$nstools = $ENV{"MOZ_TOOLS"};
if( $nstools eq '' ){
print "warning: environment variable MOZ_TOOLS not set\n";
$ENV{"MOZ_TOOLS"} = 'C:\nstools';
$nstools = $ENV{"MOZ_TOOLS"};
print "using MOZ_TOOLS = $nstools \n";
}
# $msdev = $ENV{"MOZ_MSDEV"} = 'c:\msdev';
# if( $msdev eq '' ){
# die "error: environment variable MOZ_MSDEV not set\n";
# }
# $msvc = $ENV{"MOZ_MSVC"} = 'c:\msvc';
# if( $msvc eq '' ){
# die "error: environment variable MOZ_VC not set\n";
# }
if ( $build_tag ne '' ) {
$ENV{"MOZ_BRANCH"} = $build_tag;
}
$moz_src = $ENV{"MOZ_SRC"} = $start_dir;
# $ENV{"INCLUDE"}='c:\devstudio\vc\lib;C:\DevStudio\VC\INCLUDE;C:\DevStudio\VC\MFC\INCLUDE;C:\DevStudio\VC\lib;C:\DevStudio\VC\ATL\INCLUDE';
# $ENV{"LIB"}='C:\DevStudio\VC\MFC\LIB;C:\DevStudio\VC\lib';
# $ENV{"PATH"}='C:\DevStudio\SharedIDE\BIN;C:\DevStudio\VC\bin;C:\DevStudio\VC\lib;C:\DevStudio\VC\BIN\WINNT;.;%MOZ_TOOLS%\perl5\bin;C:\WINNT\system32;C:\WINNT;c:\usr\local\bin;%MOZ_TOOLS%\bin';
##
## We should pull by date to avoid mid-checkin disasters
##
$ENV{"MOZ_DATE"} = $start_time_str;
&setup32
}
sub print_env {
local( $k, $v);
print LOG "\nEnvironment\n";
print "\nEnvironment\n";
for $k (sort keys %ENV){
$v = $ENV{$k};
print LOG " $k=$v\n";
print " $k=$v\n";
}
print LOG "\n";
print "\n";
system 'set';
}
sub strip_config {
$save_compname=$ENV{"COMPUTERNAME"};
$save_userdomain=$ENV{"USERDOMAIN"};
$save_username=$ENV{"USERNAME"};
$save_userprofile=$ENV{"USERPROFILE"};
}
sub restore_config {
$ENV{"COMPUTERNAME"}=$save_compname;
$ENV{"USERDOMAIN"}=$save_userdomain;
$ENV{"USERNAME"}=$save_username;
$ENV{"MSDevDir"}=$save_userprofile;
&print_env;
}
sub adjust_start_time {
# Allows the start time to match up with the update times of a mirror.
my ($start_time) = @_;
# Since we are not pulling for cvs-mirror anymore, just round times
# to 1 minute intervals to make them nice and even.
my $cycle = 1 * 60; # Updates every 1 minutes.
my $begin = 0 * 60; # Starts 0 minutes after the hour.
my $lag = 0 * 60; # Takes 0 minute to update.
return int(($start_time - $begin - $lag) / $cycle) * $cycle + $begin;
}

View File

@@ -1,36 +0,0 @@
#!/usr/bin/perl -w
require 5.003;
# This script has split some functions off into a util
# script so they can be re-used by other scripts.
require "build-seamonkey-util.pl";
use strict;
# "use strict" complains if we do not define these.
# They are not initialized here. The default values are after "__END__".
$TreeSpecific::name = $TreeSpecific::checkout_target = $TreeSpecific::checkout_clobber_target = $::Version = undef;
$::Version = '$Revision: 1.100 $ ';
{
TinderUtils::Setup();
tree_specific_overides();
TinderUtils::Build();
}
# End of main
#======================================================================
sub tree_specific_overides {
$TreeSpecific::name = 'mozilla';
$TreeSpecific::checkout_target = '';
$TreeSpecific::checkout_clobber_target = "checkout realclean build";
}

View File

@@ -1,18 +0,0 @@
# Turning on security
#
ac_add_options --enable-crypto
#
# Add all extensions
#
ac_add_options --enable-extensions=all
#
# Optimized
#
ac_add_options --enable-optimize
ac_add_options --disable-debug
#
# Bloat stats/optimized needs these:
#
#ac_add_options --enable-logrefcnt
#ac_add_options --enable-perf-metrics
#

View File

@@ -1,38 +0,0 @@
#- tinder-config.pl - Tinderbox configuration file.
#- Uncomment the variables you need to set.
#- The default values are the same as the commented variables
#- PLEASE FILL THIS IN WITH YOUR PROPER EMAIL ADDRESS
$BuildAdministrator = 'mcafee@mocha.com';
#- You'll need to change these to suit your machine's needs
$DisplayServer = ':0.0'; # costarica:0.0
#- Until you get the script working. When it works,
#- change to the tree you're actually building
$BuildTree = 'MozillaTest';
#$BuildTree = 'SeaMonkey';
$AliveTest = 1;
$ViewerTest = 0;
$BloatTest = 0;
$BloatTest2 = 0;
$DomToTextConversionTest = 0;
$EmbedTest = 0;
$MailNewsTest = 0;
$LayoutPerformanceTest = 0;
$StartupPerformanceTest = 0;
$MozProfileName = "default";
$BloatTestTimeout = 240; # seconds
$LayoutPerformanceTestTimeout = 1400; # seconds
$StartupPerformanceTestTimeout = 60; # seconds
# Testing...
# $TestOnly = 1;
# $ObjDir = 'obj-i686-unknown-linux-gnu';
$UserComment = "Sample tinder-config.pl, changeme!";
# Need to end with a true value
1;

View File

@@ -1,63 +0,0 @@
#- tinder-config.pl - Tinderbox configuration file.
#- Uncomment the variables you need to set.
#- The default values are the same as the commented variables.
#- PLEASE FILL THIS IN WITH YOUR PROPER EMAIL ADDRESS
$BuildAdministrator = "mcafee\@netscape.com";
#- You'll need to change these to suit your machine's needs
$DisplayServer = 'costarica.mcom.com:0.0';
#- Default values of command-line opts
#-
$BuildDepend = 1; # Depend or Clobber
$ReportStatus = 1; # Send results to server, or not
$ReportFinalStatus = 1; # Finer control over $ReportStatus.
$UseTimeStamp = 0; # Use the CVS 'pull-by-timestamp' option, or not
#$BuildOnce = 0; # Build once, don't send results to server
#$RunTest = 1; # Run the smoke tests on successful build, or not
#$TestOnly = 0; # Only run tests, don't pull/build
# Tests
$AliveTest = 1;
$ViewerTest = 1;
$BloatTest = 1;
$DomToTextConversionTest = 1;
$MailNewsTest = 0;
#$MozConfigFileName = 'mozconfig';
#$MozProfileName = 'default';
$BloatTestTimeout = 240;
$DomTestTimeout = 45;
#- Set these to what makes sense for your system
$Make = 'gmake'; # Must be GNU make
#$MakeOverrides = '';
$mail = '/bin/mail';
$CVS = 'cvs -q';
$CVSCO = 'checkout -P';
#- Set these proper values for your tinderbox server
$Tinderbox_server = 'tinderbox-daemon@tinderbox.mozilla.org';
#-
#- The rest should not need to be changed
#-
#- Minimum wait period from start of build to start of next build in minutes.
#$BuildSleep = 10;
#- Until you get the script working. When it works,
#- change to the tree you're actually building
$BuildTree = 'SeaMonkey-Branch';
#$BuildName = '';
$BuildTag = 'MOZILLA_0_9_1_BRANCH';
#$BuildConfigDir = 'mozilla/config';
#$Topsrcdir = 'mozilla';
#$BinaryName = 'mozilla-bin';
#$ShellOverride = ''; # Only used if the default shell is too stupid
#$ConfigureArgs = '';
#$ConfigureEnvArgs = '';
#$Compiler = 'gcc';
#$NSPRArgs = '';
#$ShellOverride = '';

View File

@@ -1,73 +0,0 @@
#!/usr/bin/perl
#
# Use high resolution routines if installed (on win32 or linux), using
# eval as try/catch block around import of modules. Otherwise, just use 'time()'.
#
# 'Win32::API' <http://www.activestate.com/PPMPackages/zips/5xx-builds-only/Win32-API.zip>
# 'Time::HiRes' <http://search.cpan.org/search?dist=Time-HiRes>
# (also: http://rpmfind.net/linux/rpm2html/search.php?query=perl-Time-HiRes)
#
package Time::PossiblyHiRes;
use strict;
#use Time::HiRes qw(gettimeofday);
my $getLocalTime; # for win32
my $lpSystemTime = pack("SSSSSSSS"); # for win32
my $timesub; # code ref
# returns 12 char string "'s'x9.'m'x3" which is milliseconds since epoch,
# although resolution may vary depending on OS and installed packages
sub getTime () {
return &$timesub
if $timesub;
$timesub = sub { time() . "000"; }; # default
return &$timesub
if $^O eq "MacOS"; # don't know a better way on Mac
if ($^O eq "MSWin32") {
eval "use Win32::API;";
$timesub = sub {
# pass pointer to struct, void return
$getLocalTime =
eval "new Win32::API('kernel32', 'GetLocalTime', [qw{P}], qw{V});"
unless $getLocalTime;
$getLocalTime->Call($lpSystemTime);
my @t = unpack("SSSSSSSS", $lpSystemTime);
sprintf("%9s%03s", time(), pop @t);
} if !$@;
}
# ass-u-me if not mac/win32, then we're on a unix flavour
else {
eval "use Time::HiRes qw(gettimeofday);";
$timesub = sub {
my @t = gettimeofday();
$t[0]*1000 + int($t[1]/1000);
} if !$@;
}
return &$timesub;
}
#
#
# Test script to compare with low-res time:
#
# require "gettime.pl";
#
# use POSIX qw(strftime);
#
# print "hires time = " . Time::PossiblyHiRes::getTime() . "\n";
# print "lowres time = " . time() . "\n";
#
# end package
1;

View File

@@ -1,14 +0,0 @@
#! /bin/csh -f
#
# Create links to install tinderbox stuff.
#
ln -s ../mozilla/tools/tinderbox/tinderbox
ln -s ../mozilla/tools/tinderbox/build-seamonkey.pl
ln -s ../mozilla/tools/tinderbox/build-seamonkey-util.pl
ln -s ../mozilla/tools/tinderbox/gettime.pl
ln -s ../mozilla/tools/tinderbox/bloatdiff.pl
ln -s ../mozilla/tools/tinderbox/tinder-defaults.pl
ln -s ../mozilla/tools/tinderbox/reportdata.pl

View File

@@ -1,75 +0,0 @@
#!/usr/bin/perl
# vim:sw=4:et:ts=4:ai:
use strict;
sub PrintUsage() {
die <<END_USAGE
usage: $0 [options]
Options:
--example-config Instead of running, print an example
'multi-config.pl' to help get started.
END_USAGE
}
sub PrintExample() {
print <<END_EXAMPLE
# multi-config.pl
\$BuildSleep = 10; # minutes
\$Tinderboxes = [ { tree => "SeaMonkey", args => "--depend --mozconfig mozconfig" }, { tree => "SeaMonkey-Branch", args => "--depend --mozconfig mozconfig" } ];
END_EXAMPLE
;
exit;
}
sub HandleArgs() {
return if ($#ARGV == -1);
PrintUsage() if ($#ARGV != 0 || $ARGV[0] ne "--example-config");
PrintExample();
}
sub LoadConfig() {
if (-r 'multi-config.pl') {
no strict 'vars';
open CONFIG, 'multi-config.pl' or
print "can't open multi-config.pl, $?\n";
while (<CONFIG>) {
package Settings;
eval;
}
close CONFIG;
} else {
warn "Error: Need tinderbox config file, multi-config.pl\n";
exit;
}
}
sub Run() {
my $start_time = 0;
while (1) {
# $BuildSleep is the minimum amount of time a build is allowed to take.
# It prevents sending too many messages to the tinderbox server when
# something is broken.
my $sleep_time = ($Settings::BuildSleep * 60) - (time() - $start_time);
if ($sleep_time > 0) {
print "\n\nSleeping $sleep_time seconds ...\n";
sleep $sleep_time;
}
$start_time = time();
foreach my $treeentry (@{$Settings::Tinderboxes}) {
chdir($treeentry->{tree}) or
die "Tree $treeentry->{tree} does not exist";
system("./build-seamonkey.pl --once $treeentry->{args}");
chdir("..");
}
}
}
HandleArgs();
LoadConfig();
Run();

View File

@@ -1,179 +0,0 @@
#!/usr/bin/perl
#
#
# This script gets called after a full mozilla build & test.
# Use this to build and test an embedded or commercial branding of Mozilla.
#
# Edit, and rename this file to post-mozilla.pl to activate.
# ./build-seamonkey-utils.pl will call PostMozilla::main() after
# a successful build and testing of mozilla. This package can report
# status via the $TinderUtils::build_status variable. Yeah this is a hack,
# but it works for now. Feel free to improve this mechanism to properly
# return values & stuff. -mcafee
#
# Contributors:
# leaf@mozilla.org - release processing/packaging/uploading
# Assumptions:
# no objdir
# ssh-agent running or empty passphrase RSA key
#
use strict;
package PostMozilla;
sub print_log {
my ($text) = @_;
print LOG $text;
print $text;
}
# Cache builds in a dated directory if:
# * The hour of the day is $Settings::build_hour or higher
# (set in tinder-config.pl)
# -and-
# * the "last-built" file indicates a day before today's date
#
sub cacheit {
my ($c_hour, $c_yday, $target_hour, $last_build_day) = @_;
TinderUtils::print_log "current hour = $c_hour\n";
TinderUtils::print_log "target hour = $target_hour\n";
TinderUtils::print_log "current julian day = $c_yday\n";
TinderUtils::print_log "last build julian day = $last_build_day\n";
if (($c_hour > $target_hour) &&
(($last_build_day < $c_yday) || ($c_yday == 0))) {
return 1;
} else {
return 0;
}
}
sub returnStatus{
# build-anvil-util.pl expects an array, if no package is uploaded,
# a single-element array with 'busted', 'testfailed', or 'success' works.
my ($logtext, @status) = @_;
TinderUtils::print_log "$logtext\n";
return @status;
}
sub pushit {
my ($ssh_server,$upload_path,$upload_target) = @_;
# need to convert the path in case we're using activestate perl
# check for platform
#my $upload_target_dos = `cygpath -w $upload_target`;
#chop($upload_target_dos);
unless ( -e $upload_target) {
TinderUtils::print_log "No $upload_target to upload\n";
return 0;
}
#for leaf
TinderUtils::run_shell_command "ssh -1 -i /home/leaf/.ssh/cltbld/.ssh/identity -l cltbld $ssh_server mkdir -p $upload_path";
TinderUtils::run_shell_command "scp -i /home/leaf/.ssh/cltbld/.ssh/identity -oProtocol=1 -r $upload_target cltbld\@$ssh_server:$upload_path";
TinderUtils::run_shell_command "ssh -1 -i /home/leaf/.ssh/cltbld/.ssh/identity -l cltbld $ssh_server chmod -R 755 $upload_path/$upload_target";
# for cltbld
#TinderUtils::run_shell_command "ssh -1 -l cltbld $ssh_server mkdir -p $upload_path";
#TinderUtils::run_shell_command "scp -oProtocol=1 $upload_target cltbld\@$ssh_server:$upload_path";
#TinderUtils::run_shell_command "ssh -1 -l cltbld $ssh_server chmod -R 755 $upload_path";
return 1;
}
sub process_talkback {
# this is where we
# * generate a master.ini
# * upload symbol-files
# * shove talkback files into dist for packaging.
#
}
sub make_packages {
my ($build_dir, $build_date) = @_;
my $save_dir = `pwd`;
#DEBUG_LEAF
print_log "current directory is $save_dir\n";
print_log "cd to $build_dir/$Settings::Topsrcdir/xpinstall\n";
#end DEBUG_LEAF
chdir "$build_dir/$Settings::Topsrcdir/xpinstall";
$ENV{"INSTALLER_URL"} = "http://ftp.mozilla.org/pub/mozilla.org/pub/mozilla/tinderbox-builds/$build_date";
system "make installer";
# if ($DEBUG_LEAF) {
print_log "post |make installer|\n";
# DEBUG_LEAF
chdir $save_dir;
}
sub push_to_stage {
my ($build_dir, $build_date) = @_;
my $save_dir = `pwd`;
chdir "$build_dir/$Settings::Topsrcdir/installer";
mkdir $build_date;
system "cp sea/* $build_date";
system "cp stub/* $build_date";
system "cp -r raw/xpi $build_date/linux-xpi";
pushit ("stage.mozilla.org", "/home/ftp/pub/mozilla/tinderbox-builds", $build_date);
chdir $save_dir;
}
sub pad_digit {
my ($digit) = @_;
if ($digit < 10) { return "0" . $digit };
return $digit;
}
sub main {
# Get build directory from caller.
my ($mozilla_build_dir) = @_;
#
# (0: $sec, 1: $min, 2: $hour, 3: $mday, 4: $mon, 5: $year,
# 6: $wday, 7: $yday, 8: $isdst)
my ($hour, $mday, $mon, $year, $yday) = (localtime (time)) [2,3,4,5,7];
$year = $year + 1900;
$mon = $mon + 1;
$hour = pad_digit ($hour);
$mday = pad_digit ($mday);
$mon = pad_digit ($mon);
my $build_date = "$year-$mon-$mday-$hour";
#
my $last_build_day = -1;
if ( -e "$mozilla_build_dir/last-built"){
($last_build_day) = (localtime((stat "$mozilla_build_dir/last-built")[9]))[7];
}
print_log "build dir is $mozilla_build_dir \n";
TinderUtils::print_log "Post-Mozilla build goes here.\n";
# someday, we'll have talkback
#process_talkback;
make_packages ($mozilla_build_dir, $build_date);
if (cacheit($hour, $yday, "8", $last_build_day)) {
push_to_stage ($mozilla_build_dir, $build_date);
unlink "$mozilla_build_dir/last-built";
open BLAH, ">$mozilla_build_dir/last-built";
close BLAH;
}
# Report some kind of status to parent script.
#
# {'busted', 'testfailed', 'success'}
#
# Report a fake success, for example's sake.
# Eventually return an array
&returnStatus (('success'));
}
# Need to end with a true value, (since we're using "require").
1;

View File

@@ -1,46 +0,0 @@
#!/usr/bin/perl
#
#
# This script gets called after a full mozilla build & test.
# Use this to build and test an embedded or commercial branding of Mozilla.
#
# Edit, and rename this file to post-mozilla.pl to activate.
# ./build-seamonkey-utils.pl will call PostMozilla::main() after
# a successful build and testing of mozilla. This package can report
# status via the $TinderUtils::build_status variable. Yeah this is a hack,
# but it works for now. Feel free to improve this mechanism to properly
# return values & stuff. -mcafee
#
use strict;
package PostMozilla;
sub main {
# Get build directory from caller.
my ($mozilla_build_dir) = @_;
TinderUtils::print_log "Post-Mozilla build goes here.\n";
#
# Build script goes here.
#
# Report some kind of status to parent script.
#
# {'busted', 'testfailed', 'success'}
#
# Report a fake success, for example's sake.
# we return a list because sometimes we pass back a status *and*
# a url to a binary location, e.g.:
# return ('success', 'http://upload.host.org/path/to/binary');
# tinderbox processes the binary url and links to it in the log.
return ('success');
}
# Need to end with a true value, (since we're using "require").
1;

View File

@@ -1,362 +0,0 @@
#!/usr/bin/perl -w
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
###################################################################
# Report Summary Generator for ARMS v2.0 by Vladimir Ermakov
###################################################################
# This file parses through a results file and generates a
# test summary giving the following info:
# # of tcs passed
# # of tcs failed
# # of tcs died
# % of pass and fail
# List of testcases that failed.
# Separates the results into suites with a convinient quick link
# at the top of the page
###################################################################
# Questions Coments go to vladimire@netscape.com
###################################################################
sub PrintUsage {
die <<END_USAGE
usage: $0 <filename> ["express"]
END_USAGE
}
if ($#ARGV < 0) {
PrintUsage();
}
my $DATAFILE = $ARGV[0];
my $MODE;
if($#ARGV > 0) {
$MODE = $ARGV[1];
} else {
$MODE = "";
}
my $express = 0;
if($MODE eq "express") {
$express = 1;
}
my $ngdir = "http://geckoqa.mcom.com/ngdriver/"; #$input->url(-base=>1) . "/ngdriver/";
my $ngsuites = $ngdir . "suites/";
my $conffile = "ngdriver.conf";
my $HTMLreport = "";
unless ($express) {
print "Content-type: text/html\n\n";
}
&generateResults;
$File{'SuiteList'} = \@suiteArray;
&generateHTML;
$File{'Project'} = "Buffy";
print $HTMLreport;
sub generateResults
{
if (!open(INFILE,$DATAFILE)) {
print "DATAFILE = $DATAFILE\n";
print "<H3> Cannot open $?, $!</H3>\n";
return -1;
}
$File{'tcsPass'} = 0;
$File{'tcsFail'} = 0;
$File{'tcsDied'} = 0;
$File{'tcsTotal'} = 0;
$line = <INFILE>;
while ($line) {
my %Suite = ();
my @diedArray = ();
$Suite{'DiedList'} = \@diedArray;
my @testArray = ();
$Suite{'FailedList'} = \@testArray;
# Skip to first anchor.
while (!($line =~ /<A NAME=".*?">/i) && $line) {
$line = <INFILE>; # Go to next line.
}
# First anchor.
$line =~ /<A NAME="(.*?)"><H1>(.*?)<\/H1>/i;
my $name = $1;
my $title =$2;
$Suite{'Name'} = $name;
$Suite{'Title'} = $title;
$Suite{'tcsPass'} = 0;
$Suite{'tcsFail'} = 0;
$Suite{'tcsDied'} = 0;
$Suite{'tcsTotal'} = 0;
do
{
while ($line && !($line =~ /<TC>/i) && !($line =~ /<A name=".*?">/i)) {
$line = <INFILE>;
}
if ($line && ($line =~ /<A name=\"(.*?)\">/i) && ($1 eq $Suite{'Name'})) {
$line = <INFILE>;
}
# TC = test case.
if ($line && ($line =~ /<TC>/i)) {
while ($line && !($line =~ /<ENDTC>/i)) {
$line1 = <INFILE>;
if ($line1 =~ /<TC>/i) {
print "<H1>SOMETHING WRONG!</H1><BR>"; next; next;
}
$line .= $line1;
}
my ($tfName, $tcStat);
my @lines = split /<->/, $line;
$tfName = $lines[1];
$tcStat = $lines[3];
# D=died, P=pass, F=failure
if ($tcStat eq 'D') {
$Suite{'tcsDied'} += 1;
push(@diedArray,$line);
}
if ($tcStat eq 'P') {
$Suite{'tcsPass'} += 1;
$Suite{'tcsTotal'} += 1;
}
if ($tcStat eq 'F') {
push(@testArray,$line);
$Suite{'tcsFail'} += 1;
$Suite{'tcsTotal'} += 1;
}
$line = <INFILE>;
}
} while ($line && !($line =~ /<A NAME=".*?">/i) && $line);
$File{'tcsPass'} += $Suite{'tcsPass'};
$File{'tcsFail'} += $Suite{'tcsFail'};
$File{'tcsTotal'} += $Suite{'tcsTotal'};
$File{'tcsDied'} += $Suite{'tcsDied'};
push(@suiteArray,\%Suite);
}
close INFILE;
1;
}
sub generateHTML
{
my $prjExtension;
my %extList;
my $os = `uname -s`; # Cheap OS id for now
my %Matrices;
# Hard-coded from ngdriver.conf, I didn't want extra files in tree.
$extList{"mb"} = "http://cemicrobrowser.web.aol.com/bugReportDetail.php?RID=%";
$extList{"bs"} = "http://bugscape.nscp.aoltw.net/show_bug.cgi?id=%";
$extList{"bz"} = "http://bugzilla.mozilla.org/show_bug.cgi?id=%";
$extList{"bzx"} = "http://bugzilla.mozilla.org/show_bug.cgi?id=%";
$prjExtension = "bz"; # Buffy hard-coded here.
$Matricies{"dom-core"} = "http://geckoqa.mcom.com/browser/standards/dom1/tcmatrix/index.html";
$Matricies{"dom-html"} = "http://geckoqa.mcom.com/browser/standards/dom1/tcmatrix/index.html";
$Matricies{"domevents"} = "http://geckoqa.mcom.com/browser/standards/dom1/tcmatrix/index.html";
$Matricies{"javascript"} = "http://geckoqa.mcom.com/browser/standards/javascript/tcmatrix/index.html";
$Matricies{"forms"} = "http://geckoqa.mcom.com/browser/standards/form_submission/tcmatrix/index.html";
$Matricies{"formsec"} = "http://geckoqa.mcom.com/browser/standards/form_submission/tcmatrix/index.html";
unless ($express) {
$HTMLreport .= <<END_PRINT;
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test Result Summary on $File{'Platform'}</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<center><u><font color="#990000"><h3>AUTOMATED TEST RESULTS</h3></font></u></center><br>
<center>
<table border="0" cols="3" width="90%">
<tbody>
<tr align="Left" valign="CENTER">
<td width="250" valign="Middle"><b>OS: </b><font color="#990000">$os</script></font></td>
</tr>
</tbody>
</table>
</center>
<hr>
<h3><u>The Following Test Suites Were Run:</u></h3>
<UL>
END_PRINT
for (my $var = 0;$File{'SuiteList'}->[$var]->{'Name'};$var++) {
if (my $href = $Matrices{$File{'SuiteList'}->[$var]->{'Name'}}) {
$HTMLreport .= "<li><a href=\"$href\">$File{'SuiteList'}->[$var]->{'Title'}</a></li>\n";
} else {
$HTMLreport .= "<li><a href=\"$ngsuites$File{'SuiteList'}->[$var]->{'Name'}\">$File{'SuiteList'}->[$var]->{'Title'}</a></li>\n";
}
}
$HTMLreport .= <<END_PRINT;
</UL>
<h3><u>Test Result Summary:</u></h3>
END_PRINT
} # !express
$HTMLreport .= <<END_PRINT;
<table border=2 cellspacing=0>
<tr valign=top bgcolor=#CCCCCC>
<td bgcolor=#999999>&nbsp;</td>
<td>Passed</td>
<td>Failed</td>
<td>Total</td>
<td>Died</td>
<td>% Passed</td>
<td>% Failed</td>
</tr>
END_PRINT
for (my $var = 0;$File{'SuiteList'}->[$var]->{'Name'};$var++) {
$curSuite = $File{'SuiteList'}->[$var];
$HTMLreport .= "<tr valign=top>\n";
if($express) {
$HTMLreport .= "<td>$curSuite->{'Title'}</td>\n";
} else {
$HTMLreport .= "<td bgcolor=#cccccc><a href=\"#$curSuite->{'Name'}\">$curSuite->{'Title'}</a></td>\n";
}
$HTMLreport .= "<td>$File{'SuiteList'}->[$var]->{'tcsPass'}</td>\n";
$HTMLreport .= "<td>$File{'SuiteList'}->[$var]->{'tcsFail'}</td>\n";
$HTMLreport .= "<td>$File{'SuiteList'}->[$var]->{'tcsTotal'}</td>\n";
$HTMLreport .= "<td>${@{$File{'SuiteList'}}[$var]}{'tcsDied'}</td>\n";
my $pctPass = $File{'SuiteList'}->[$var]->{'tcsPass'} / $File{'SuiteList'}->[$var]->{'tcsTotal'};
$pctPass = int($pctPass*10000)/100;
$HTMLreport .= "<td>$pctPass</td>\n";
my $pctFail = $File{'SuiteList'}->[$var]->{'tcsFail'} / $File{'SuiteList'}->[$var]->{'tcsTotal'};
$pctFail = int($pctFail*10000)/100;
$HTMLreport .= "<td>$pctFail</td>\n";
$HTMLreport .= "</tr>\n";
}
$HTMLreport .= <<END_PRINT;
<tr valign=top bgcolor=#FFFFCC>
<td>Total:</td>
<td>$File{'tcsPass'}</td>
<td>$File{'tcsFail'}</td>
<td>$File{'tcsTotal'}</td>
<td>$File{'tcsDied'}</td>
END_PRINT
my $pctPass = $File{'tcsPass'} / $File{'tcsTotal'};
$pctPass = int($pctPass*10000)/100;
my $pctFail = $File{'tcsFail'} / $File{'tcsTotal'};
$pctFail = int($pctFail*10000)/100;
$HTMLreport .= <<END_PRINT;
<td>$pctPass</td>
<td>$pctFail</td>
</tr>
</table>
END_PRINT
unless ($express) {
$HTMLreport .= <<END_PRINT;
<h3>Failed Testcases:</h3>
END_PRINT
my $curSuite;
for (my $var=0;$File{'SuiteList'}->[$var]->{'Name'};$var++) {
$curSuite = $File{'SuiteList'}->[$var];
$HTMLreport .= <<END_PRINT;
<hr>
<h2>
<a NAME="$curSuite->{'Name'}"></a><u><font color="#666600">$curSuite->{'Title'}</font></u></h2>
<b><u>Died:</u></b>
<table>
END_PRINT
for (my $dcnt = 0;$curFile = $File{'SuiteList'}->[$var]->{'DiedList'}->[$dcnt];$dcnt++) {
($none,$fName) = split(/<->/,$curFile);
$HTMLreport .= "<tr><td style=\"color: red;\"><A href='$ngsuites$curSuite->{'Name'}/$fName' target=\"new\">$fName</A></td></tr>\n";
}
$HTMLreport .= "</table><BR>\n";
$HTMLreport .= "<b><u>Failures:</u></b><br>";
$HTMLreport .= "<table BORDER CELLSPACING=0><TR>\n";
for ($fcnt = 0;$curFile = $File{'SuiteList'}->[$var]->{'FailedList'}->[$fcnt];$fcnt++) {
($none,$fName,$fDesc,$fStat,$fBug,$fExpected,$fActual) = split(/<->/,$curFile);
$HTMLreport.= "<TR><TD><A href=\"$ngsuites$curSuite->{'Name'}/$fName\" target=\"_new\">$fName</A></TD><TD>";
# Quiet perl warnings about unused variables.
my $tmp; $tmp = $fStat; $tmp = $fActual; $tmp = $fExpected;
#
# TEMPRORAY DISABLED.
#
my @bugList = split(/[\s+]|,/,$fBug);
my $bug = "";
my $index = 0;
while ($bugList[$index]) {
if ($bugList[$index] =~ /(\d+)$prjExtension/i) {
$bugList[$index] =~ s/(\d+)($prjExtension)/makelink($1,$extList{$2})/ige;
$bug .= $bugList[$index];
}
$index++;
}
$HTMLreport.= "$bug</TD><TD>$fDesc</TD></TR>\n";
# $fBug =~ s/(\d+)($prjExtension)/makelink($1,$extList{$2})/ige;
# $HTMLreport.= "$fBug</TD><TD>$fDesc</TD></TR>\n";
}
$HTMLreport .= "</table>\n";
}
$HTMLreport .= <<END_PRINT;
</BODY>
</HTML>
END_PRINT
} # !express
1;
}
sub makelink
{
$bugNum = $_[0];
$bugLnk = $_[1];
$bugLnk =~ s/%/$bugNum/ig;
$bugLnk = "<A href=\"$bugLnk\">$bugNum</A>";
return $bugLnk;
}
1;

View File

@@ -1,165 +0,0 @@
#!/usr/bin/perl
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# Graph tree-open status, via tbox graph server.
#
# Location of this file. Make sure that hand-runs and crontab-runs
# of this script read/write the same data.
my $script_dir = "/builds/tinderbox/mozilla/tools/tinderbox";
my $graph_server = "coffee";
# Send data to graph server via HTTP.
require "$script_dir/reportdata.pl";
use Sys::Hostname; # for ::hostname()
sub PrintUsage {
die <<END_USAGE
Usage:
$0 <ip or hostname>
END_USAGE
}
# Return true if httpd server is up.
sub is_http_alive() {
my $url = "http://$ARGV[0]";
my $rv = 0; # Assume false.
my $res =
eval q{
use LWP::UserAgent;
use HTTP::Request;
my $ua = LWP::UserAgent->new;
$ua->timeout(10); # seconds
my $req = HTTP::Request->new(GET => $url);
my $res = $ua->request($req);
return $res;
};
if ($@) {
warn "GET Failed: $@";
#print "GET Failed.\n";
} else {
# Debug.
#print "GET Succeeded: \n";
#print "status:\n", $res->status_line, "\n";
#print "content:\n", $res->content, "\n";
#print "GET Succeeded.\n";
# This will be non-zero if http get went through ok.
if($res->content) {
$rv = 1;
} else {
$rv = 0;
}
}
return $rv;
}
# main
{
my $alive_time = 0; # Hours http has been up.
my $alive = 0;
my $timefile = "$script_dir/http_alive_timefiles/$ARGV[0]";
# make sure directory exists
unless (-d $timefile) {
mkdir "$script_dir/http_alive_timefiles";
}
PrintUsage() if $#ARGV == -1;
$alive = is_http_alive();
if ($alive) {
print "$ARGV[0] is alive\n";
#
# Record alive time.
#
# Was zero before, report zero here, write out the
# time for next cycle.
if (not (-e "$timefile")) {
print "no timefile found.\n";
open TIMEFILE, ">$timefile";
print TIMEFILE time();
close TIMEFILE;
} else {
# Timefile found, compute difference and report that number.
print "found timefile: $timefile!\n";
my $time_http_started = 0;
my $now = 0;
open TIMEFILE, "$timefile";
while (<TIMEFILE>) {
chomp;
$time_http_started = $_;
}
close TIMEFILE;
print "time_http_started = $time_http_started\n";
$now = time();
print "now = $now\n";
# Report time in hours.
$alive_time = ($now - $time_http_started)/3600;
print "alive_time (hours) = $alive_time\n";
# Clamp time to 20 hours so we don't get huge spikes for
# extended open times (weekends)
if ($alive_time > 20.0) {
$alive_time = 20.0;
}
}
} else {
print "$ARGV[0] is not responding.\n";
# Delete timefile if there is one.
if (-e "$timefile") {
unlink("$timefile");
}
}
# Shorten some machine names.
my $short_name = "$ARGV[0]";
$short_name =~ s/.websys.aol.com//g;
ReportData::send_results_to_server($graph_server,
"$alive_time",
::hostname(),
"http_alive",
"$ARGV[0]");
my $status = "";
if($alive) {
$status = "success";
} else {
$status = "busted";
}
# Hard-coded for now.
my $graph_url = "http://$graph_server/graph/query.cgi?tbox=$ARGV[0]&testname=http_alive&autoscale=&size=&days=7&units=hours&ltype=&points=&avg=&showpoint=";
ReportData::send_tbox_packet("tinderbox-daemon\@warp.mcom.com",
"Talkback",
$status,
"TinderboxPrint:<a title=\"Hours httpd:80 has been alive.\" href=\"$graph_url\">Ta</a>",
"$ARGV[0]",
"$short_name HTTP Alive Test");
}

View File

@@ -1,160 +0,0 @@
#!/usr/bin/perl
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# Graph tree-open status, via tbox graph server.
#
# Location of this file. Make sure that hand-runs and crontab-runs
# of this script read/write the same data.
my $script_dir = "/builds/tinderbox/mozilla/tools/tinderbox";
# Send data to graph server via HTTP.
require "$script_dir/reportdata.pl";
use Sys::Hostname; # for ::hostname()
my $sheriff_string;
sub is_tree_open {
my $tbox_url = "http://tinderbox.mozilla.org/showbuilds.cgi?tree=SeaMonkey";
# Dump tbox page source into a file.
print "HTTP...";
system ("wget", "-q", "-O", "$script_dir/tbox.source", $tbox_url);
print "done\n";
my $rv = 0;
$sheriff_string = "";
# Scan file, looking for line that starts with <a NAME="open">
open TBOX_FILE, "$script_dir/tbox.source";
while (<TBOX_FILE>) {
# Scan for open string
if(/^<a NAME="open">/) {
# look for "open" string
if (/open<\/font>$/) {
print "open\n";
$rv = 1;
} else {
print "closed\n";
$rv = 0;
}
}
# Scan for sheriff string & save it off for HTTP submit later.
if(/^<br><a NAME="sheriff"><\/a>/) {
chomp;
$sheriff_string = $_;
# Strip out content to save space.
# Strip out permanent content.
$sheriff_string =~ s/^<br><a NAME="sheriff"><\/a>//;
# Crude attempt at reducing the random html that shows up here.
# Order is important, pick off easy tags, then make it legal cgi,
# then shorten it up.
$sheriff_string =~ s/<[pP]>//g;
$sheriff_string =~ s/\015//g; # ^M
$sheriff_string =~ s/<br>//g;
$sheriff_string =~ s/<\/a>//g;
$sheriff_string =~ s/<//g;
$sheriff_string =~ s/>//g;
$sheriff_string =~ s/"/ /g;
$sheriff_string =~ s/\///g;
$sheriff_string =~ s/\\//g;
$sheriff_string =~ s/#/[lb]/g;
$sheriff_string =~ s/mailto://g;
$sheriff_string =~ s/[aA][iI][mM]://g;
$sheriff_string =~ s/[iI][rR][cC]://g;
$sheriff_string =~ s/a href//g;
$sheriff_string =~ s/[sS]heriff//g;
$sheriff_string =~ s/[mM]onday//g;
$sheriff_string =~ s/[tT]uesday//g;
$sheriff_string =~ s/[wW]ednesday//g;
$sheriff_string =~ s/[tT]hursday//g;
$sheriff_string =~ s/[fF]riday//g;
$sheriff_string =~ s/[wW]eekend//g;
$sheriff_string =~ s/^[tT]he //g;
$sheriff_string =~ s/\/a//g;
$sheriff_string =~ s/netscape.com/nscp/g;
$sheriff_string =~ s/mozilla.org/moz/g;
$sheriff_string =~ s/ is / /g;
$sheriff_string =~ s/ for / /g;
$sheriff_string =~ s/ on / /g;
$sheriff_string =~ s/ in / /g;
$sheriff_string =~ s/ = / /g;
$sheriff_string =~ s/ - / /g;
$sheriff_string = substr($sheriff_string,0,60);
print "sheriff string = $sheriff_string\n";
}
}
close TBOX_FILE;
# Clean up.
unlink("$script_dir/tbox.source");
return $rv;
}
# main
{
my $time_since_open = 0;
my $timefile = "$script_dir/treeopen_timefile";
# Get tree status.
if(is_tree_open()) {
# Record tree open time if not set.
if (not (-e "$timefile")) {
open TIMEFILE, ">$timefile";
print TIMEFILE time();
close TIMEFILE;
} else {
# Timefile found, compute difference and report that number.
print "found timefile: $timefile!\n";
my $time_tree_opened = 0;
my $now = 0;
open TIMEFILE, "$timefile";
while (<TIMEFILE>) {
chomp;
$time_tree_opened = $_;
}
close TIMEFILE;
print "time_tree_opened = $time_tree_opened\n";
$now = time();
print "now = $now\n";
# Report time in hours.
$time_since_open = ($now - $time_tree_opened)/3600;
print "time_since_open (hours) = $time_since_open\n";
# Clamp time to 20 hours so we don't get huge spikes for
# extended open times (weekends)
if($time_since_open > 20.0) {
$time_since_open = 20.0;
}
}
} else {
# tree is closed, leave tree_open_time at zero.
# Delete timefile if there is one.
if (-e "$timefile") {
unlink("$timefile");
}
}
ReportData::send_results_to_server("tegu.mozilla.org",
"$time_since_open",
"$sheriff_string",
"treeopen", ::hostname());
}

View File

@@ -1,84 +0,0 @@
#!/usr/bin/perl
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# Utils used by tests to send data to graph server, or tinderbox.
#
require 5.003;
use strict;
$::Version = '$Revision: 1.3 $ ';
package ReportData;
# Send data to graph cgi via HTTP.
sub send_results_to_server {
my ($server, $value, $data, $testname, $tbox) = @_;
my $tmpurl = "http://$server/graph/collect.cgi";
$tmpurl .= "?value=$value&data=$data&testname=$testname&tbox=$tbox";
print "send_results_to_server(): \n";
print "tmpurl = $tmpurl\n";
# libwww-perl has process control problems on windows,
# spawn wget instead.
if ($Settings::OS =~ /^WIN/) {
system ("wget", "-o", "/dev/null", $tmpurl);
print "send_results_to_server() succeeded.\n";
} else {
my $res = eval q{
use LWP::UserAgent;
use HTTP::Request;
my $ua = LWP::UserAgent->new;
$ua->timeout(10); # seconds
my $req = HTTP::Request->new(GET => $tmpurl);
my $res = $ua->request($req);
return $res;
};
if ($@) {
warn "Failed to submit startup results: $@";
print "send_results_to_server() failed.\n";
} else {
print "Results submitted to server: \n",
$res->status_line, "\n", $res->content, "\n";
print "send_results_to_server() succeeded.\n";
}
}
}
# Fake a tinderbox message.
sub send_tbox_packet {
my ($server_email, $tree, $status,
$log, $machine, $build_name) = @_;
my $foo;
my $now = time();
$foo .= <<END_PRINT;
tinderbox: tree: $tree
tinderbox: builddate: $now
tinderbox: status: $status
tinderbox: build: $build_name
tinderbox: errorparser: unix
tinderbox: buildfamily: unix
tinderbox: END
END_PRINT
$foo .= $log;
print "foo = \n$foo\n";
open MSG, ">msg.$machine";
print MSG $foo;
close MSG;
system "/bin/mail $server_email " . "< msg.$machine";
unlink "msg.$machine";
}

View File

@@ -1,170 +0,0 @@
#- PLEASE FILL THIS IN WITH YOUR PROPER EMAIL ADDRESS
#$BuildAdministrator = "$ENV{USER}\@$ENV{HOST}";
$BuildAdministrator = ($ENV{USER} || "cltbld") . "\@" . ($ENV{HOST} || "dhcp");
#- You'll need to change these to suit your machine's needs
$DisplayServer = ':0.0';
#- Default values of command-line opts
#-
$BuildDepend = 1; # Depend or Clobber
$BuildDebug = 0; # Debug or Opt (Darwin)
$ReportStatus = 1; # Send results to server, or not
$ReportFinalStatus = 1; # Finer control over $ReportStatus.
$UseTimeStamp = 1; # Use the CVS 'pull-by-timestamp' option, or not
$BuildOnce = 0; # Build once, don't send results to server
$TestOnly = 0; # Only run tests, don't pull/build
$BuildEmbed = 0; # After building seamonkey, go build embed app.
$SkipMozilla = 0; # Use to debug post-mozilla.pl scripts.
# Tests
$CleanProfile = 0;
$ResetHomeDirForTests = 1;
$ProductName = "Mozilla";
$RunMozillaTests = 1; # Allow turning off of all tests if needed.
$RegxpcomTest = 1;
$AliveTest = 1;
$JavaTest = 0;
$ViewerTest = 0;
$BloatTest = 0; # warren memory bloat test
$BloatTest2 = 0; # dbaron memory bloat test, require tracemalloc
$DomToTextConversionTest = 0;
$XpcomGlueTest = 0;
$CodesizeTest = 0; # Z, require mozilla/tools/codesighs
$EmbedCodesizeTest = 0; # mZ, require mozilla/tools/codesigns
$MailBloatTest = 0;
$EmbedTest = 0; # Assumes you wanted $BuildEmbed=1
$LayoutPerformanceTest = 0; # Tp
$QATest = 0;
$XULWindowOpenTest = 0; # Txul
$StartupPerformanceTest = 0; # Ts
# Release Build options
# requires an appropriate post-mozilla.pl
$ReleaseBuild = 0; # Make a release build?
$package_creation_path = "mozilla/xpinstall/packager";
$package_location = "mozilla/dist/install";
$ftp_path = "/home/ftp/pub/mozilla/tinderbox-builds";
$url_path = "http://ftp.mozilla.org/pub/mozilla.org/mozilla/tinderbox-builds";
$build_hour = "8";
$ssh_server = "stage.mozilla.org";
$ssh_user = "cltbld";
# end Release Build options
$TestsPhoneHome = 0; # Should test report back to server?
$results_server = "axolotl.mozilla.org"; # was tegu
$pageload_server = "spider"; # localhost
#
# Timeouts, values are in seconds.
#
$CreateProfileTimeout = 45;
$RegxpcomTestTimeout = 15;
$AliveTestTimeout = 45;
$ViewerTestTimeout = 45;
$EmbedTestTimeout = 45;
$BloatTestTimeout = 120; # seconds
$MailBloatTestTimeout = 120; # seconds
$JavaTestTimeout = 45;
$DomTestTimeout = 45; # seconds
$XpcomGlueTestTimeout = 15;
$CodesizeTestTimeout = 900; # seconds
$CodesizeTestType = "auto"; # {"auto"|"base"}
$LayoutPerformanceTestTimeout = 1200; # entire test, seconds
$QATestTimeout = 1200; # entire test, seconds
$LayoutPerformanceTestPageTimeout = 30000; # each page, ms
$StartupPerformanceTestTimeout = 60; # seconds
$XULWindowOpenTestTimeout = 150; # seconds
$MozConfigFileName = 'mozconfig';
$UseMozillaProfile = 1;
$MozProfileName = 'default';
#- Set these to what makes sense for your system
$Make = 'gmake'; # Must be GNU make
$MakeOverrides = '';
$mail = '/bin/mail';
$CVS = 'cvs -q';
$CVSCO = 'checkout -P';
# win32 usually doesn't have /bin/mail
$blat = 'c:/nstools/bin/blat';
$use_blat = 0;
# Set moz_cvsroot to something like:
# :pserver:$ENV{USER}%netscape.com\@cvs.mozilla.org:/cvsroot
# :pserver:anonymous\@cvs-mirror.mozilla.org:/cvsroot
#
# Note that win32 may not need \@, depends on ' or ".
# :pserver:$ENV{USER}%netscape.com@cvs.mozilla.org:/cvsroot
$moz_cvsroot = $ENV{CVSROOT};
#- Set these proper values for your tinderbox server
$Tinderbox_server = 'tinderbox-daemon@tinderbox.mozilla.org';
# Allow for non-client builds, e.g. camino.
$moz_client_mk = 'client.mk';
# Allow for non-client builds, e.g. camino.
$moz_client_mk = 'client.mk';
#- Set if you want to build in a separate object tree
$ObjDir = '';
# Extra build name, if needed.
$BuildNameExtra = '';
# User comment, eg. ip address for dhcp builds.
# ex: $UserComment = "ip = 208.12.36.108";
$UserComment = 0;
#-
#- The rest should not need to be changed
#-
#- Minimum wait period from start of build to start of next build in minutes.
$BuildSleep = 10;
#- Until you get the script working. When it works,
#- change to the tree you're actually building
$BuildTree = 'MozillaTest';
$BuildName = '';
$BuildTag = '';
$BuildConfigDir = 'mozilla/config';
$Topsrcdir = 'mozilla';
$BinaryName = 'mozilla-bin';
#
# For embedding app, use:
$EmbedBinaryName = 'TestGtkEmbed';
$EmbedDistDir = 'dist/bin'
$ShellOverride = ''; # Only used if the default shell is too stupid
$ConfigureArgs = '';
$ConfigureEnvArgs = '';
$Compiler = 'gcc';
$NSPRArgs = '';
$ShellOverride = '';
# allow override of timezone value (for win32 POSIX::strftime)
$Timezone = '';
# Reboot the OS at the end of build-and-test cycle. This is primarily
# intended for Win9x, which can't last more than a few cycles before
# locking up (and testing would be suspect even after a couple of cycles).
# Right now, there is only code to force the reboot for Win9x, so even
# setting this to 1, will not have an effect on other platforms. Setting
# up win9x to automatically logon and begin running tinderbox is left
# as an exercise to the reader.
$RebootSystem = 0;

View File

@@ -1,118 +0,0 @@
#!/bin/sh
#
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is Mozilla Communicator.
#
# The Initial Developer of the Original Code is Chris McAfee.
# Portions created by Chris McAfee are
# Copyright (C) The Mozilla Organization.
# All Rights Reserved.
#
# Contributor(s): Chris McAfee <mcafee@netscape.com>
#
#
# Tinderbox control script.
#
# Assumes that at most two tinderboxes are running
# simultaneously, depend and clobber.
#
# Assumes that if mozconfig exists, use it. Format:
# mk_add_options MOZ_MAKE_FLAGS=j8
# ac_add_options --disable-debug
# ac_add_options --enable-optimize
#
tinderbox_usage() {
echo "Usage: tinderbox [depend|clobber|multi] {start|stop|status|restart}"
exit 1
}
if [ $# != 2 ]; then
echo "Wrong number of arguments."
tinderbox_usage
fi
build_type="$1"
build_action="$2"
# Depend or clobber build?
if [ "$build_type" != "depend" -a \
"$build_type" != "clobber" -a \
"$build_type" != "multi" ]; then
echo "Unknown option: $1"
tinderbox_usage
fi
# See how we were called.
case "$build_action" in
start)
if test -f $build_type.pid; then
echo "$build_type build already running with PID "`cat $build_type.pid`
else
echo "Starting $build_type tinderbox..."
# Say if we found post-mozilla.pl
if test -f post-mozilla.pl; then
echo "Found post-mozilla.pl"
fi
# Grab and use mozconfig if it exists.
if test "$build_type" = "multi"; then
nohup ./multi-tinderbox.pl &
elif test -f mozconfig; then
echo "Found mozconfig..."
nohup ./build-seamonkey.pl --$build_type --mozconfig mozconfig &
elif test -f .mozconfig; then
echo "Found .mozconfig..."
nohup ./build-seamonkey.pl --$build_type --mozconfig .mozconfig &
else
nohup ./build-seamonkey.pl --$build_type &
fi
# Write out PID so we can shut things down later.
# This needs to be right after the ./build-seamonkey.pl call to
# get the right PID.
echo "PID $!"
echo $! > $build_type.pid
\rm -f nohup.out
fi
;;
stop)
if test -f $build_type.pid; then
pid=`cat $build_type.pid`
echo "Shutting down $build_type tinderbox, PID = $pid"
kill $pid
\rm $build_type.pid
else
echo "$build_type is not running."
fi
echo
;;
status)
if test -f $build_type.pid; then
echo "$build_type build is running with PID of "`cat $build_type.pid`
else
echo "$build_type build is not running."
fi
;;
restart)
echo "Restarting $build_type tinderbox:"
$0 $build_type stop
$0 $build_type start
;;
*)
tinderbox_usage
exit 1
esac
exit 0