Author: jkeenan
Date: Sun Mar 25 09:39:07 2007
New Revision: 17734
Modified:
branches/reconfigure/Configure.pl
Log:
Much functionality refactored out into Parrot::Configure::Messages, ::Options,
and ::Step::List.
Modified: branches/reconfigure/Configure.pl
==============================================================================
--- branches/reconfigure/Configure.pl (original)
+++ branches/reconfigure/Configure.pl Sun Mar 25 09:39:07 2007
@@ -1,7 +1,71 @@
#! perl
-
# Copyright (C) 2001-2006, The Perl Foundation.
# $Id$
+use 5.006_001;
+use strict;
+use warnings;
+use Data::Dumper;
+use lib 'lib';
+
+use Parrot::BuildUtil;
+use Parrot::Configure;
+use Parrot::Configure::Options qw( process_options );
+use Parrot::Configure::Messages qw(
+ print_introduction
+ print_conclusion
+);
+use Parrot::Configure::Step::List qw( get_steps_list );
+
+# These globals are accessed in config/init/defaults.pm
+our $parrot_version = Parrot::BuildUtil::parrot_version();
+our @parrot_version = Parrot::BuildUtil::parrot_version();
+
+$| = 1; # $OUTPUT_AUTOFLUSH = 1;
+
+# Install Option text was taken from:
+#
+# autoconf (GNU Autoconf) 2.59
+# Written by David J. MacKenzie and Akim Demaille.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# Installation directories:
+
+my $args = process_options( {
+ argv => [ @ARGV ],
+ script => $0,
+ parrot_version => $parrot_version,
+ svnid => '$Id$',
+} );
+
+my %args = %$args;
+
+print_introduction($parrot_version);
+
+my $conf = Parrot::Configure->new;
+$conf->add_steps(get_steps_list());
+
+$conf->options->set(%args);
+
+if ( exists $args{step} ) {
+ $conf->data()->slurp();
+ $conf->runstep( $args{step} );
+ print "\n";
+ exit(0);
+}
+else {
+
+ # Run the actual steps
+ $conf->runsteps or exit(1);
+}
+
+# tell users what to do next
+print_conclusion($conf->data->get('make'));
+
+exit(0);
+
+################### DOCUMENTATION ###################
=head1 NAME
@@ -262,301 +326,6 @@
=cut
-use 5.006_001;
-use strict;
-use warnings;
-use lib 'lib';
-
-use English qw( -no_match_vars );
-use Parrot::BuildUtil;
-use Parrot::Configure;
-
-# These globals are accessed in config/init/defaults.pm
-our $parrot_version = Parrot::BuildUtil::parrot_version();
-our @parrot_version = Parrot::BuildUtil::parrot_version();
-
-$OUTPUT_AUTOFLUSH = 1;
-
-# Install Option text was taken from:
-#
-# autoconf (GNU Autoconf) 2.59
-# Written by David J. MacKenzie and Akim Demaille.
-#
-# Copyright (C) 2003 Free Software Foundation, Inc.
-# This is free software; see the source for copying conditions. There is NO
-# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# Installation directories:
-
-# Handle options
-
-my @valid_opts = qw(ask bindir cage cc ccflags ccwarn cgoto cxx datadir
- debugging define exec-prefix execcapable floatval gc help icu-config
- icudatadir icuheaders icushared includedir infodir inline intval
- jitcapable ld ldflags lex libdir libexecdir libs link linkflags
- localstatedir m maintainer mandir miniparrot nomanicheck oldincludedir
- opcode ops optimize parrot_is_shared pmc prefix profile sbindir
- sharedstatedir step sysconfdir verbose verbose-step=N version without-gdbm
- without-gmp without-icu yacc);
-
-my %args;
-for (@ARGV) {
- my ( $key, $value ) = m/--([-\w]+)(?:=(.*))?/;
- $key = 'help' unless defined $key;
- $value = 1 unless defined $value;
-
- unless ( grep $key eq $_, @valid_opts ) {
- die qq/Invalid option $key. See "perl Configure.pl --help" for valid
options\n/;
- }
-
- for ($key) {
- m/version/ && do {
- my $svnid = '$Id$';
- print <<"END";
-Parrot Version $parrot_version Configure 2.0
-$svnid
-END
- exit;
- };
-
- m/help/ && do {
- print <<"EOT";
-$0 - Parrot Configure 2.0
-
-General Options:
-
- --help Show this text
- --version Show version information
- --verbose Output extra information
- --verbose=2 Output every setting change
- --verbose-step=N Set verbose for step N only
- --verbose-step=regex Set verbose for step matching description
- --nomanicheck Don't check the MANIFEST
- --step=(gen::languages)
- Execute a single configure step
-
- --ask Have Configure ask for commonly-changed info
-
-Compile Options:
-
- --debugging=0 Disable debugging, default = 1
- --inline Compiler supports inline
- --optimize Optimized compile
- --optimize=flags Add given optimizer flags
- --parrot_is_shared Link parrot dynamically
- --m=32 Build 32bit executable on 64-bit architecture.
- --profile Turn on profiled compile (gcc only for now)
- --cage [CAGE] compile includes many additional warnings
-
- --cc=(compiler) Use the given compiler
- --ccflags=(flags) Use the given compiler flags
- --ccwarn=(flags) Use the given compiler warning flags
- --cxx=(compiler) Use the given C++ compiler
- --libs=(libs) Use the given libraries
- --link=(linker) Use the given linker
- --linkflags=(flags) Use the given linker flags
- --ld=(linker) Use the given loader for shared libraries
- --ldflags=(flags) Use the given loader flags for shared libraries
- --lex=(lexer) Use the given lexical analyzer generator
- --yacc=(parser) Use the given parser generator
-
- --define=inet_aton Quick hack to use inet_aton instead of inet_pton
-
-Parrot Options:
-
- --intval=(type) Use the given type for INTVAL
- --floatval=(type) Use the given type for FLOATVAL
- --opcode=(type) Use the given type for opcodes
- --ops=(files) Use the given ops files
- --pmc=(files) Use the given PMC files
-
- --cgoto=0 Don't build cgoto core - recommended when short of mem
- --jitcapable Use JIT
- --execcapable Use JIT to emit a native executable
- --gc=(type) Determine the type of garbage collection
- type=(gc|libc|malloc|malloc-trace) default is gc
-
-External Library Options:
-
- --without-gmp Build parrot without GMP support
- --without-gdbm Build parrot without GDBM support
-
-ICU Options:
-
- For using a system ICU, these options can be used:
-
- --icu-config=/path/to/icu-config
- Location of the script used for ICU autodetection.
- You just need to specify this option if icu-config
- is not in you PATH.
-
- --icu-config=none can be used to disable the autodetection feature.
- It will also be disabled if you specify any other
- of the following ICU options.
-
- If you do not have a full ICU installation:
-
- --without-icu Build parrot without ICU support
- --icuheaders=(path) Location of ICU headers without /unicode
- --icushared=(flags) Full linker command to create shared libraries
- --icudatadir=(path) Directory to locate ICU's data file(s)
-
-Other Options (may not be implemented):
-
- --maintainer Create imcc's parser and lexer files. Needs a working
- parser and lexer.
- --miniparrot Build parrot assuming only pure ANSI C is available
-
-Install Options:
-
- --prefix=PREFIX install architecture-independent files in PREFIX
- [/usr/local]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
- By default, `make install' will install all the files in
- `/usr/local/bin', `/usr/local/lib' etc. You can specify
- an installation prefix other than `/usr/local' using `--prefix',
- for instance `--prefix=\$HOME'.
-
- For better control, use the options below.
-
- Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data
[PREFIX/share]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data
[PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --infodir=DIR info documentation [PREFIX/info]
- --mandir=DIR man documentation [PREFIX/man]
-
-EOT
- exit;
- };
- $args{$key} = $value;
- }
-}
-
-$args{debugging} = 1 unless ( ( exists $args{debugging} ) && !$args{debugging}
);
-$args{maintainer} = 1 if defined $args{lex} or defined $args{yacc};
-
-print <<"END";
-Parrot Version $parrot_version Configure 2.0
-Copyright (C) 2001-2007, The Perl Foundation.
-
-Hello, I'm Configure. My job is to poke and prod your system to figure out
-how to build Parrot. The process is completely automated, unless you passed in
-the `--ask' flag on the command line, in which case it'll prompt you for a few
-pieces of info.
-
-Since you're running this program, you obviously have Perl 5--I'll be pulling
-some defaults from its configuration.
-END
-
-# EDIT HERE TO ADD NEW TESTS
-my @steps = qw(
- init::manifest
- init::defaults
- init::install
- init::miniparrot
- init::hints
- init::headers
- inter::progs
- inter::make
- inter::lex
- inter::yacc
- auto::gcc
- auto::msvc
- init::optimize
- inter::shlibs
- inter::libparrot
- inter::charset
- inter::encoding
- inter::types
- inter::ops
- inter::pmc
- auto::alignptrs
- auto::headers
- auto::sizes
- auto::byteorder
- auto::va_ptr
- auto::pack
- auto::format
- auto::isreg
- auto::jit
- gen::cpu
- auto::funcptr
- auto::cgoto
- auto::inline
- auto::gc
- auto::memalign
- auto::signal
- auto::socklen_t
- auto::env
- auto::aio
- auto::gmp
- auto::readline
- auto::gdbm
- auto::snprintf
- auto::perldoc
- auto::python
- auto::bc
- auto::m4
- auto::cpu
- gen::icu
- gen::revision
- gen::config_h
- gen::core_pmcs
- gen::parrot_include
- gen::languages
- gen::makefiles
- gen::platform
- gen::config_pm
-);
-
-my $conf = Parrot::Configure->new;
-{
-
- # RT#41201 $Parrot::Configure::Step::conf is a temporary hack
- no warnings qw(once);
- $Parrot::Configure::Step::conf = $conf;
-}
-$conf->add_steps(@steps);
-$conf->options->set(%args);
-
-if ( exists $args{step} ) {
- $conf->data()->slurp();
- $conf->runstep( $args{step} );
- print "\n";
- exit(0);
-}
-else {
-
- # Run the actual steps
- $conf->runsteps or exit(1);
-}
-
-# tell users what to do next
-my $make = $conf->data->get('make');
-
-print <<"END";
-
-Okay, we're done!
-
-You can now use `$make' to build your Parrot.
-(NOTE: do not use `$make -j <n>'!)
-After that, you can use `$make test' to run the test suite.
-
-Happy Hacking,
- The Parrot Team
-
-END
-
-exit(0);
# Local Variables:
# mode: cperl