3 # Copyright (C) 2001-2009, Parrot Foundation.
11 use Parrot
::Configure
;
12 use Parrot
::Configure
::Options
qw( process_options );
13 use Parrot
::Configure
::Options
::Test
;
14 use Parrot
::Configure
::Options
::Test
::Prepare
qw(
15 get_preconfiguration_tests
16 get_postconfiguration_tests
18 use Parrot
::Configure
::Messages
qw(
24 $| = 1; # $OUTPUT_AUTOFLUSH = 1;
26 # Install Option text was taken from:
28 # autoconf (GNU Autoconf) 2.59
29 # Written by David J. MacKenzie and Akim Demaille.
31 # Copyright (C) 2003 Free Software Foundation, Inc.
32 # This is free software; see the source for copying conditions. There is NO
33 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
35 # from Parrot::Configure::Options
36 my ($args, $steps_list_ref) = process_options
(
38 mode
=> (defined $ARGV[0] and $ARGV[0] =~ /^--file=/)
44 exit(1) unless defined $args;
46 my $opttest = Parrot
::Configure
::Options
::Test
->new($args);
48 # configuration tests will only be run if you requested them
49 # as command-line option
50 $opttest->run_configure_tests( get_preconfiguration_tests
() );
52 my $parrot_version = $Parrot::Configure
::Options
::Conf
::parrot_version
;
54 # from Parrot::Configure::Messages
55 print_introduction
($parrot_version);
57 # Update revision number if needed
58 Parrot
::Revision
::update
();
60 my $conf = Parrot
::Configure
->new();
62 $conf->add_steps( @
{ $steps_list_ref } );
64 # from Parrot::Configure::Data
65 $conf->options->set( %{$args} );
66 # save the command-line for make reconfig
67 $conf->data->set(configure_args
=> @ARGV ?
'"'.join("\" \"", map {qq($_)} @ARGV).'"'
70 # Log files created by Configure.pl in MANIFEST.configure.generated
71 $conf->{active_configuration
} = 1;
72 unlink 'MANIFEST.configure.generated';
74 # Run the actual steps from Parrot::Configure
75 $conf->runsteps or exit(1);
77 # build tests will only be run if you requested them
78 # as command-line option
79 $opttest->run_build_tests( get_postconfiguration_tests
() );
81 my $make = $conf->data->get('make');
82 # from Parrot::Configure::Messages
83 ( print_conclusion
( $conf, $make ) ) ?
exit 0 : exit 1;
85 ################### DOCUMENTATION ###################
89 Configure.pl - Parrot's configuration script
93 % perl Configure.pl [options]
97 % perl Configure.pl --file=/path/to/configuration/directives
101 This is Parrot's configuration program. It should be run to create
102 the necessary system-specific files before building Parrot.
104 We now offer two interfaces to configuration:
108 =item * Command-Line Interface
110 All configuration options are placed on the command-line. You may request
111 interactive configuration with the C<--ask> option. You may not use the
112 C<--file> option, as that is reserved for the Configuration-File interface.
114 =item * Configuration-File Interface
116 All configuration options are placed in a special configuration file whose
117 full path is invoked on the command-line as
118 C<--file=/path/to/configuration/directives> as the sole command-line option.
119 You may not request interactive configuration. For specific instructions, see
120 L</"CONFIGURATION-FILE INTERFACE"> below.
124 =head2 General Options
130 Prints out a description of the options and exits.
134 Prints out the version number of Configure.pl and exits.
138 Tells Configure.pl to output extra information about the configuration data it
143 Tells Configure.pl to output information about i<every> setting added or
146 =item C<--verbose-step={N|regex}>
148 Run C<--verbose=2> for step number C<N> or matching description.
152 Tells Configure.pl to halt completely if any configuration step fails.
154 =item C<--fatal-step={init::alpha,inter::beta,auto::gamma}>
156 Tells Configure.pl to halt completely if any configuration step in
157 comma-delimited string individually fails.
159 =item C<--nomanicheck>
161 Tells Configure.pl not to run the MANIFEST check.
165 Sets the location where parrot will be installed.
169 This turns on the user prompts during configuration. Available only in
170 Command-Line interface. Not available in Configuration-File interface.
174 Run certain tests along with F<Configure.pl>:
178 =item C<--test=configure>
180 Run tests found in F<t/configure/> I<before> beginning configuration. These
181 tests demonstrate that Parrot's configuration tools will work properly once
182 configuration has begun.
184 =item C<--test=build>
186 Run tests found in F<t/steps/>, F<t/postconfigure/> and F<t/pharness>.
190 Run the tests described in C<--test=configure>, conduct configuration, then
191 run the tests described in C<--test=build>.
195 =item C<--configure_trace>
197 Store the results of each configuration step in a Storable F<.sto> file on
198 disk, for later analysis by F<Parrot::Configure::Trace> methods.
200 =item Operating system-specific configuration options
204 =item C<--hintsfile=filename>
206 Use filename as the hints file.
208 =item C<--darwin_no_fink>
210 On Darwin, do not probe for Fink libraries.
212 =item C<--darwin_no_macports>
214 On Darwin, do not probe for Macports libraries.
220 =head2 Compile Options
224 =item C<--debugging=0>
226 Debugging is turned on by default. Use this to disable it.
228 =item C<--parrot_is_shared>
230 Link parrot dynamically.
234 Create a 32-bit executable on 64-architectures like x86_64. This
235 option appends C<-m32> to compiler and linker programs and does
236 C<s/lib64/lib/g> on link flags.
238 This option is experimental. See F<config/init/defaults.pm> for more.
242 Turn on profiled compile (gcc only for now)
246 [CAGE] compile includes many additional warnings
250 Add Perl 5's C<$Config{optimize}> to the compiler flags.
252 =item C<--optimize=flags>
254 Add C<flags> to the compiler flags.
258 Tell Configure that the compiler supports C<inline>.
260 =item C<--cc=(compiler)>
262 Specify which compiler to use.
264 =item C<--ccflags=(flags)>
266 Use the given compiler flags.
268 =item C<--ccwarn=(flags)>
270 Use the given compiler warning flags.
272 =item C<--cxx=(compiler)>
274 Specify which C++ compiler to use (for ICU).
276 =item C<--libs=(libs)>
278 Use the given libraries.
280 =item C<--link=(linker)>
282 Specify which linker to use.
284 =item C<--linkflags=(flags)>
286 Use the given linker flags
288 =item C<--ld=(linker)>
290 Specify which loader to use for shared libraries.
292 =item C<--ldflags=(flags)>
294 Use the given loader flags for shared libraries
296 =item C<--disable-rpath>
298 Specify that rpath should not be included in linking flags. With this
299 configuration option, you must append the library build directory
300 (usually blib/lib) to the LD_LIBRARY_PATH environment variable (or your
301 platform equivalent). This option is primarily used for building Linux
304 =item C<--lex=(lexer)>
306 Specify which lexer to use.
308 =item C<--yacc=(parser)>
310 Specify which parser to use.
312 =item C<--define=val1[,val2]>
314 Generate "#define PARROT_DEF_VAL1 1" ... entries in has_header.h. Currently
315 needed to use inet_aton for systems that lack inet_pton:
319 =item C<--no-line-directives>
321 Disables the creation of C #line directives when generating C from PMCs and
322 ops. Useful when debugging internals.
326 =head2 Parrot Options
330 =item C<--intval=(type)>
332 Use the given type for C<INTVAL>.
334 =item C<--floatval=(type)>
336 Use the given type for C<FLOATVAL>.
338 =item C<--opcode=(type)>
340 Use the given type for opcodes.
342 =item C<--ops=(files)>
344 Use the given ops files.
348 Don't build cgoto core. This is recommended when you are short of memory.
350 =item C<--jitcapable>
354 =item C<--buildframes>
356 Dynamically build NCI call frames.
358 =item C<--execcapable>
360 Use JIT to emit a native executable.
364 =head2 International Components For Unicode (ICU) Options
368 =item C<--icu-config=/path/to/icu-config>
370 Use the specified icu-config script to determine the necessary ICU options.
372 Use --icu-config=none to disable the autodetect feature. Parrot will then be
375 B<Note:> If you specify another ICU option than --icu-config, the autodetection
376 functionality will be disabled.
378 =item C<--icushared=(linkeroption)>
380 Linker command to link against ICU library.
384 --icushared='-L /opt/openoffice/program -licudata -licuuc'
386 (The libs in openoffice are actually version 2.2 and do not work)
388 =item C<--icuheaders=(header_dir)>
390 Location of ICU header files without the /unicode suffix.
394 --icuheaders='/home/lt/icu/'
402 =item C<--maintainer>
404 Use this option if you want imcc's parser and lexer files to be generated.
405 Needs a working parser and lexer.
409 =head1 CONFIGURATION-FILE INTERFACE
411 In the Configuration-File interface, unlike the Command-Line interface, you
412 may delete configuration steps or run them in an order different from that
413 listed in Parrot::Configure::Step::List.
415 A configuration file is a plain-text file located somewhere in or under your
416 top-level Parrot directory. Unless indicated otherwise, all lines in this
417 file must have no leading whitespace. As in Perl 5, lines beginning with C<#>
418 marks are comments and are ignored during parsing of the file. Unlike Perl 5,
419 you may not begin comments in the middle of a line.
421 The configuration file must contain these three sections:
431 Section begins with line C<=variables> and must be followed by at least one
432 blank line. All other content in this section is optional.
436 Section may contain one or more I<key=value> pairs which assign strings to
437 variables much in the way that you would do in a shell script wrapping around
445 So if you typically invoked F<Configure.pl> by wrapping it in a shell script
446 for the purpose of setting environmental variables used in options, like this:
450 /usr/local/bin/perl Configure.pl \
456 ... you would now place the assignments to C<CC> and C<CX> in the
457 I<=variables> section of the configuration file (as above).
467 Section begins with line C<=general> and must be followed by at least one
468 blank line. All other content in this section is optional.
472 This section is the location recommended for listing options whose impact is
473 not conceptually limited to a single step. It is also the location where the
474 variables defined in the I<=variables> section are assigned to particular
475 Parrot configuration options. Entries in this section must be either
476 I<option=value> pairs or be options which will be assigned a true value.
484 Note that when the value is a variable defined in the I<=variables> section,
485 it must be preceded by a C<$> sign.
489 You I<may> list options here which are I<conceptually> limited to a single
490 configuration step. For example, if you wished to skip validation of the
491 F<MANIFEST> during configuration and to configure without ICU, you I<could>,
492 in this section, say:
497 However, as we shall quickly see, it's conceptually clearer to place these
498 values next to those configuration steps that actually use them.
508 Section begins with line C<=steps> and must be followed by at least one
509 blank line, in turn followed by the list of configuration steps, followed by
510 another blank line followed by a line C<=cut> (just like POD).
514 The order in which you list the steps is the order in which they will be
515 executed. If you delete a step from the canonical list or comment a step out,
516 it will not be executed.
524 In the above example, step C<auto::perldoc> will be completely skipped. You
525 will not see it listed as C<....skipped> in F<Configure.pl>'s output; it will
526 simply not be there at all.
530 This is the recommended location to call options whose impact is
531 I<conceptually> limited to a single configuration step. Type the
532 configuration step's name, type a whitespace, type the option (with no leading
533 C<-->) and repeat as needed for additional step-specific options.
535 init::manifest nomanicheck
540 This is also the location to call options whose impact is limited to one step
541 at a time but which may be applied to more than one configuration step. The
542 C<fatal-step> and C<verbose-step> options are the best examples of this case.
543 Rather than requesting verbose output from all configuration steps, you may,
544 for example, wish to designate only a few steps for verbose output:
547 init::hints verbose-step
549 inter::progs fatal-step
551 auto::gcc verbose-step
554 In the above example, F<Configure.pl> will grind to a halt if C<inter::progs>
555 does not complete successfully. You will get verbose output only from
556 C<init::hints> and C<auto::gcc>; the other 60+ steps will be terse.
560 Nothing prevents you from listing general options anywhere in this section.
562 init::manifest nomanicheck cc=$CC ld=/usr/bin/g++ verbose
566 That will work -- but why would you want to do something that messy?
574 Ignoring leading whitespace, this is an example of a correctly formed
591 init::manifest nomanicheck
594 init::hints verbose-step
655 You may see how this works in practice by calling:
657 perl Configure.pl --file=examples/config/file/configcompiler
661 perl Configure.pl --file=examples/config/file/configwithfatalstep
665 F<lib/Parrot/Configure.pm>,
666 F<lib/Parrot/Configure/Step.pm>, F<docs/configuration.pod>
672 # cperl-indent-level: 4
675 # vim: expandtab shiftwidth=4: