#!/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 Steve Lamm (slamm@netscape.com). use CGI; $query = new CGI; $field_separator = '<>'; $configure_in = 'configure-mirror/mozilla/configure.in'; $chrome_color = '#F0A000'; $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', 'SeaMonkeyAll', 'MOZ_CO_BRANCH', 'HEAD', 'MOZ_OBJDIR', '@TOPSRCDIR@', 'MOZ_CVS_FLAGS', '-q -z 3', 'MOZ_CO_FLAGS', '-P', ); # 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; $default_objdir_fillin='@TOPSRCDIR@/obj-@CONFIG_GUESS@'; $fillin{MOZ_OBJDIR} = $default_objdir_fillin; $fillin{MOZ_MAKE_FLAGS}='-j4'; if ($query->param()) { &parse_params; 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 print_script(); 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 ); print qq(
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 $param =~ /^--/ and $value eq ''; next if $param =~ /^MOZ_/ and $value eq $default{$param}; print "\n"; } } my $script = &print_script; if ($script eq '') { print ""; print "No script needed. Only default values were selected.

\n"; print ""; } else { print qq(
$script
); } print qq(
Save the script, then build the tree as follows,
  1. cvs co mozilla/client.mk
2. cd mozilla
3. gmake -f client.mk
(default targets: checkout depend build)
 
If you do not want to use client.mk, then use your favorite build steps, and configure will pick up the options in your .mozconfig script.

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


Send questions or comments to <slamm\@netcape.com>.
); } sub print_script { my $out = ''; $out = "# sh\n"; $out .= "# Build configuration script\n"; $out .= "#\n"; $out .= "# See http://www.mozilla.org/build/unix.html for build instructions.\n"; $out .= "#\n"; $out .= "\n"; foreach $param ($query->param()) { if ($param =~ /^MOZ_/) { my $value = $query->param($param); $value =~ s/\s+$//; $value =~ s/^\s+//; next if $value eq $default{$param}; $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 =~ /^--/) { next if $query->param($param) eq ''; $out .= "# Options for 'configure' (same as command-line options).\n" if not $have_configure_options; $out .= "ac_add_options $param"; $out .= "=".$query->param($param) if $query->param($param) 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 Unix Build Configurator
Unix Build Configurator
The mozilla Unix Build System is designed to work free of any user set options. However, should you need to tweak an option, the Configurator is here to help.

This form produces a script that you can use to configure your build. The script saves you the trouble of setting environment variables for client.mk or typing command-line options for configure.

Options for "client.mk":
Check out options:
Check out module
CVS flags cvs   co 
  Pull by date
Object Directory:
  mozilla Build in the source tree. (default)
  ); print '(e.g. mozilla/obj-i686-pc-linux-gnu)' if $fillin{MOZ_OBJDIR} eq $default{MOZ_OBJDIR}; print qq(
Make options:
  Parallel build using

Options for "configure" script (updated on the fly):
\n"; print qq(
); 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; 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 "\n"; } print "
 $option   $help
Questions? See the Configurator FAQ.
Back to the Unix Build Instructions


Send questions or comments to <slamm\@netcape.com>. ); 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 "\n" if $inTable == 1; print qq( $header ); print "
\n"; $inTable = 1; }