#!/usr/bonsaitools/bin/perl -- # -*- Mode: perl; indent-tabs-mode: nil -*- # # The contents of this file are subject to the Netscape 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/NPL/ # # 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 this file as it was released upon February 18, 1999. # # The Initial Developer of the Original Code is Netscape Communications # Corporation. Portions created by Netscape are # Copyright (C) 1998 Netscape Communications Corporation. All # Rights Reserved. # # Contributor(s): # config.cgi - Configure a mozilla build. # Outputs a form of configure options. # On submit, the cgi prints out a shell script that the user can # save to configure their build. # Send comments, improvements, bugs to Benjamin Smedberg use CGI; $query = new CGI; $field_separator = '<>'; $configure_in = 'configure-mirror/mozilla/configure.in'; $CVSROOT = ':pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot'; $ENV{PATH} = "$ENV{PATH}:/opt/cvs-tools/bin:/usr/local/bin"; # for cvs & m4 %default = ( 'MOZ_CO_MODULE', '', 'MOZ_CVS_FLAGS', '', 'MOZ_CO_FLAGS', '', 'MOZ_OBJDIR', '@TOPSRCDIR@/obj-@CONFIG_GUESS@' ); # Set up pull by date use POSIX qw(strftime); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $default{MOZ_CO_DATE} = strftime("%d %b %Y %H:%M %Z", $sec,$min,$hour,$mday,$mon,$year); %fillin = %default; $fillin{MOZ_MAKE_FLAGS}='-j4'; if ($query->param()) { &parse_params; if ($query->param("MOZ_CO_PROJECT").$query->param("MOZ_CO_MODULE") eq "") { show_error("You must specify at least one of MOZ_CO_PROJECT or MOZ_CO_MODULE."); exit 0; } if ($query->param("--enable-application") eq "") { show_error("You must specify an application for --enable-application"); exit 0; } if ($query->param(preview) eq "1") { print "Content-type: text/html\n\n"; &print_script_preview; exit 0; } elsif ($query->param(saveas) eq "1") { print "Content-type: text/saveas\n\n"; print $query->param(code-to-save); exit 0; } } print "Content-type: text/html\n\n"; &print_configure_form; ## End main program ######################################################### sub parse_params { if ($query->param('pull_by_date') eq 'on') { my $pull_date = $query->param('pull_date'); $query->param(-name=>'MOZ_CO_DATE', -values=>[ $pull_date ]); } if ($query->param('parallel_build') eq 'on') { my $gmake_flags = $query->param('gmake_flags'); $query->param(-name=>'MOZ_MAKE_FLAGS', -values=>[ $gmake_flags ]); } if ($query->param('MOZ_OBJDIR') eq 'fillin') { my $objdir = $query->param('objdir_fillin'); $query->param(-name=>'MOZ_OBJDIR', -values=>[ $objdir ]); } foreach $param ($query->param()) { $fillin{$param} = $query->param($param) if defined($fillin{$param}); } } sub print_script_preview { my ($saveopts) = ''; foreach $param ($query->param()) { if ($param =~ /^(MOZ_|--)/) { next if $query->param($param) eq ''; $saveopts .= "$param=".$query->param($param).'&'; } } print qq( Configurator Script Preview

Configurator Script Preview

Check the script to make sure the options are correct. Then, save this script as \$HOME/.mozconfig.

); foreach $param ($query->param()) { if ($param =~ /^(MOZ_|--)/) { my $value = $query->param($param); $value =~ s/\s+$//; $value =~ s/^\s+//; next if $value eq ''; print "\n"; } } my $script = &print_script; $script =~ s/^[\n\s]*|[\n\s]*$//g; print qq(
$script

Save the script, then build the tree as follows,

  1. cvs co mozilla/client.mk
  2. cd mozilla
  3. gmake -f client.mk checkout
  4. gmake -f client.mk build

Questions? See the Configurator FAQ and the the build instructions.

Maintained by Benjamin Smedberg <benjamin@smedberg.us>
); } sub print_script { my $out = ''; $out .= "# Build configuration script\n"; $out = "#\n"; $out .= "# See http://www.mozilla.org/build/ for build instructions.\n"; $out .= "#\n"; $out .= "\n"; foreach $param ($query->param()) { if ($param =~ /^MOZ_/) { my @values = $query->param($param); my $value; if (scalar(@values) > 1) { $value = join(",", @values); } else { $value = $values[0]; } $value =~ s/\s+$//; $value =~ s/^\s+//; next if $value eq ''; $value = "\"$value\"" if $value =~ /\s/; $out .= "# Options for client.mk.\n" unless $have_client_mk_options; $out .= "mk_add_options $param=".$value."\n"; $have_client_mk_options = 1; } } $out .= "\n" if $have_client_mk_options; foreach $param ($query->param()) { if ($param =~ /^--/) { my $value = $query->param($param); next if $value eq ''; # Wrap in double quotes if $value contains a space. $value = "\"$value\"" if $value =~ /\s/; $out .= "# Options for 'configure' (same as command-line options).\n" if not $have_configure_options; $out .= "ac_add_options $param"; $out .= "=".$value if $value ne "yes"; $out .= "\n"; $have_configure_options = 1; } } if ($have_client_mk_options or $have_configure_options) { return $out; } else { return ''; } } sub print_configure_form { mkdir 'configure-mirror', 0777 if not -d 'configure-mirror'; system 'echo :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot Ay=0=a%0bZ | cat > configure-mirror/.cvspass' if not -f 'configure-mirror/.cvspass'; symlink 'config.cgi', '.mozconfig' if not -f '.mozconfig'; # Set the HOME variable to pick up '.cvspass' for cvs login system "cd configure-mirror && HOME=. cvs -d $CVSROOT co mozilla/configure.in > /dev/null 2>&1"; print qq( Mozilla Build Configurator

Unix Build Configurator

The mozilla Unix Build System has a few required build parameters, and additional optional parameters. This build configurator may help you to tweak the build options. You should read the build configuration overview before using this tool.

Options for client.mk

Check out options:

MOZ_CO_PROJECT: (select one or more)

MOZ_CO_MODULE: (extra modules)

CVS flags:
cvs  co 

  Pull by date 

Object Directory:

  (e.g. mozilla/obj-i686-pc-linux-gnu)
 mozilla Build in the source tree.

Make options:

 Parallel build using

Options for configure script

); my @unhandled_options = (); open(OPTIONS, "m4 webify-configure.m4 $configure_in|") or die "Error parsing configure.in\n"; undef @options; while ($line = ) { chomp $line; if ($line !~ m/^bool/ && $line !~ m/^string/ && $line !~ m/^header/ && $line !~ m/^unhandled/) { # Must be continuation comment $line =~ s/^\s+/ /; $oldline .= $line; } else { push @options, $oldline; $oldline = $line; } } push @options, $oldline; print ""; foreach $line (@options) { ($type, $prename, $name, $comment) = split /$field_separator/, $line; ($dummy,$dummy2,$help) = split /\s+/, $comment, 3; if ($type eq 'header') { &header_option($comment); } elsif ($type eq 'unhandled') { push @unhandled_options, $comment; } else { eval "&${type}_option(\"--$prename-$name\",\"$help\");"; } } header_option("Options not handled by Configurator" ." (Add them to the .mozconfig script by hand)"); foreach $comment (@unhandled_options) { $comment =~ s/\\\$/\$/g; my ($dummy,$option,$help) = split /\s+/, $comment, 3; print "
 $option    $help\n"; } print "
\n"; print qq(

Questions? See the Configurator FAQ.
Back to the Build Instructions

Maintained by Benjamin Smedberg <benjamin@smedbergs.us>
); print "\n\n\n"; } sub bool_option { my ($name, $help) = @_; print ""; print "param($name) eq 'yes'; print ">"; print "$name"; print "   $help"; } sub string_option { my ($name, $help) = @_; print "$name="; print "param($name); print ">"; print " $help\n"; } sub bool_or_string_option { my ($name, $help) = @_; print ""; print ""; print "$name"; print "$help\n"; print "$name="; print ""; print "$help\n"; } sub header_option { my ($header) = @_; print "" if $inTable; print qq(

$header

); $inTable = 1; } sub show_error { my ($msg) = @_; print "Content-type: text/html\n\n"; print qq( Mozilla Build Configurator - Error

Configuration Error

$msg

Go back ); }