Author: jrieks
Date: Mon Apr 11 05:33:42 2005
New Revision: 7802
Modified:
trunk/Configure.pl
trunk/config/gen/config_h/config_h.in
trunk/config/gen/icu.pl
trunk/config/gen/makefiles/dynclasses_pl.in
trunk/config/gen/makefiles/root.in
trunk/lib/Parrot/Configure/Step.pm
trunk/lib/Parrot/Test.pm
Log:
refactored config/gen/icu.pl:
- added capture_output to lib/Parrot/Configure/Step.pm
- renamed icuXXX in parrot's config to icu_XXX
- removed support for bundled icu
- configure output is now "Determining whether ICU is installed... yes/no."
- by default parrot is build without ICU support,
unless icu-config is found or icu configure parameters are used
- added check if the necessary ICU-headers are present
Modified: trunk/Configure.pl
==============================================================================
--- trunk/Configure.pl (original)
+++ trunk/Configure.pl Mon Apr 11 05:33:42 2005
@@ -364,12 +364,6 @@
--icushared=(flags) Full linker command to create shared libraries
--icudatadir=(path) Directory to locate ICU's data file(s)
- If you want to use the ICU version bundled with parrot:
-
- --icuplatform=(platform) Platform name to pass to ICU's runConfigureICU
- --icuconfigureargs=(args) Arguments to pass to ICU's configuration script
- --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
Modified: trunk/config/gen/config_h/config_h.in
==============================================================================
--- trunk/config/gen/config_h/config_h.in (original)
+++ trunk/config/gen/config_h/config_h.in Mon Apr 11 05:33:42 2005
@@ -135,7 +135,7 @@
#define PARROT_CORE_CGP_OPLIB_INIT
Parrot_DynOp_core_cgp_${MAJOR}_${MINOR}_${PATCH}
#define PARROT_HAS_ICU ${has_icu}
-#CONDITIONED_LINE(has_icu):#define DEFAULT_ICU_DATA_DIR "${icudatadir}"
+#CONDITIONED_LINE(has_icu):#define DEFAULT_ICU_DATA_DIR "${icu_datadir}"
#define INTVAL_FMT "${intvalfmt}"
#define FLOATVAL_FMT "${floatvalfmt}"
Modified: trunk/config/gen/icu.pl
==============================================================================
--- trunk/config/gen/icu.pl (original)
+++ trunk/config/gen/icu.pl Mon Apr 11 05:33:42 2005
@@ -16,85 +16,64 @@
use strict;
use vars qw($description @args);
use Cwd qw(cwd);
+use Parrot::Configure::Step qw(capture_output);
-$description="Configuring ICU if requested...";
+$description="Determining whether ICU is installed";
[EMAIL PROTECTED](buildicu verbose icudatadir icuplatform icuconfigureargs
- icushared icuheaders icu-config without-icu);
[EMAIL PROTECTED](verbose icudatadir icushared icuheaders icu-config
without-icu);
sub runstep {
- my ($buildicu, $verbose, $icudatadir, $icuplatform, $icuconfigureargs,
- $icushared, $icuheaders, $icuconfig, $without) = @_;
- my $icu_configure_command;
+ my ($verbose, $icudatadir, $icushared, $icuheaders, $icuconfig, $without) =
@_;
my @icu_headers = qw(ucnv.h utypes.h uchar.h);
my $autodetect = !defined($icudatadir)
- && !defined($icuplatform)
&& !defined($icushared)
&& !defined($icuheaders);
- print "\n" if $verbose;
- Configure::Data->set(
- has_icu => ($without ? 0 : 1),
- TEMP_icu_make => ""
- );
- if ($without) {
- print "not using icu.\n" if $verbose;
- return 0;
- }
-
- if (!$autodetect) {
- print "specified a icu config parameter,\nICU autodetection disabled.\n"
- if $verbose;
- } elsif (!defined $icuconfig || !$icuconfig) {
- my $notfound = 1;
-
- {
- # disable STDERR
- open OLDERR, ">&STDERR";
- open STDERR, ">d8e622ad2.log";
-
- # check if ICU is installed
- system("icu-config", "--exists");
- $notfound = ($? == -1);
- $notfound ||= ($? >> 8) != 0;
-
- # reenable STDERR
- close STDERR;
- unlink "d8e622ad2.log";
- open STDERR, ">&OLDERR";
+ unless ($without) {
+ if (!$autodetect) {
+ print "specified a icu config parameter,\nICU autodetection disabled.\n"
if $verbose;
+ } elsif (!defined $icuconfig || !$icuconfig) {
+ my (undef, $ret) = capture_output("icu-config", "--exists");
+
+ if (($ret == -1) || (($ret >> 8) != 0)) {
+ undef $icuconfig;
+ $autodetect = 0;
+ $without = 1;
+ } else {
+ $icuconfig = "icu-config";
+ print "icu-config found... good!\n" if $verbose;
+ }
}
-
- if ($notfound) {
- undef $icuconfig;
- print "icu-config not found.\n" if $verbose;
- } else {
- $icuconfig = "icu-config";
- print "icu-config found... good!\n" if $verbose;
+
+ if (!$without && $autodetect && $icuconfig && $icuconfig ne "none") {
+ my $slash = Configure::Data->get('slash');
+
+ # icu-config script to use
+ $icuconfig = "icu-config" if $icuconfig eq "1";
+
+ # ldflags
+ $icushared = capture_output("$icuconfig --ldflags");
+ if (defined $icushared) {
+ chomp $icushared;
+ $icushared =~ s/-licui18n//;
+ # $icushared =~ s/-licudata//;
+ }
+
+ # location of header files
+ $icuheaders = capture_output("$icuconfig --prefix");
+ if (defined $icuheaders) {
+ chomp $icuheaders;
+ $icuheaders .= "${slash}include";
+ }
+
+ # icu data dir
+ $icudatadir = capture_output("$icuconfig --icudatadir");
+ if (defined $icudatadir) {
+ chomp $icudatadir;
+ }
}
}
-
- if ($autodetect && $icuconfig && $icuconfig ne "none") {
- my $slash = Configure::Data->get('slash');
-
- # icu-config script to use
- $icuconfig = "icu-config" if $icuconfig eq "1";
-
- # ldflags
- $icushared = `$icuconfig --ldflags`;
- chomp $icushared;
- $icushared =~ s/-licui18n//;
- # $icushared =~ s/-licudata//;
-
- # location of header files
- $icuheaders = `$icuconfig --prefix`;
- chomp $icuheaders;
- $icuheaders .= "${slash}include";
-
- # icu data dir
- $icudatadir = `$icuconfig --icudatadir`;
- chomp $icudatadir;
- }
-
+
if ($verbose) {
print "icuconfig: $icuconfig\n" if defined $icuconfig;
print "icushared='$icushared'\n" if defined $icushared;
@@ -102,204 +81,65 @@
print "datadir='$icudatadir'\n" if defined $icudatadir;
}
- if (defined($icushared) && defined($icuheaders)) {
- $icuheaders =~ s![\\/]$!!;
- my $c_libs = Configure::Data->get('libs');
- $c_libs .= " $icushared";
- my $localicudatadir = "";
- $localicudatadir = $icudatadir if defined $icudatadir;
+ if ($without) {
Configure::Data->set(
- icu_headers => join(' ', map {"$icuheaders/unicode/$_"} @icu_headers),
- blib_lib_libsicuuc_a => '',
- blib_lib_libsicudata_a => '',
- libs => $c_libs,
- cc_inc => Configure::Data->get(qw(cc_inc))." -I$icuheaders",
- icudatadir => $localicudatadir,
- TEMP_icu_make => ''
+ has_icu => 0,
);
+ $Configure::Step::result = "no";
return;
}
- if( !defined $icudatadir )
- {
- Configure::Data->set(
- has_icu => 0,
- TEMP_icu_make => ""
- );
- print "not using icu.\n" if $verbose;
- return 0;
+ my $ok = 1;
+
+ unless (defined $icushared) {
+ warn "error: icushared not defined\n";
+ $ok = 0;
}
- if( defined $icuplatform )
- {
- $icu_configure_command = "sh ./runConfigureICU $icuplatform";
- }
- else
- {
- # Try to build ICU with the same compiler as parrot.
- # Also respect Configure.pl command-line arguments for c++.
- $icu_configure_command = "sh ./configure";
- my $cc = Configure::Data->get('cc');
- if ($cc ne '') {
- $icu_configure_command = "CC='$cc' $icu_configure_command";
- }
- my $cxx = Configure::Data->get('cxx');
- if ($cxx ne '') {
- $icu_configure_command = "CXX='$cxx' $icu_configure_command";
- }
- }
-
- Configure::Data->set( icudatadir => $icudatadir );
-
-# unless ($buildicu) {
-# print " [Skipped] " if $verbose;
-#
-# Configure::Data->set(
-# icu_headers => '',
-# blib_lib_libsicuuc_a => '',
-# blib_lib_libsicudata_a => '',
-# );
-# return;
-# }
-
-# print "\n";
-
- # MS VC++ and Intel C++ (on Windows) require special treatment.
- my ($cc) = Configure::Data->get(qw(cc));
- my $is_msvc = grep { $cc eq $_ } ( qw(cl cl.exe icl icl.exe) );
- if ($is_msvc && -e 'icu\source\allinone\allinone.dsw') {
- # We build from MS VC++ Project Files. If these do not have Win32 line
endings, it will
- # not accept them. Thus we need to ensure they do.
- my @dspfiles = ('icu\source\allinone\all\all.dsp',
'icu\source\common\common.dsp',
- 'icu\source\tools\ctestfw\ctestfw.dsp',
'icu\source\tools\gencmn\decmn.dsp',
- 'icu\source\tools\gencmn\gencmn.dsp',
'icu\source\tools\genrb\derb.dsp',
- 'icu\source\tools\genrb\genrb.dsp',
'icu\source\tools\genbrk\genbrk.dsp',
- 'icu\source\tools\genccode\genccode.dsp',
'icu\source\tools\gencnval\gencnval.dsp',
- 'icu\source\tools\genidna\genidna.dsp',
'icu\source\tools\gennames\gennames.dsp',
- 'icu\source\tools\gennorm\gennorm.dsp',
'icu\source\tools\genpname\genpname.dsp',
- 'icu\source\tools\genprops\genprops.dsp',
'icu\source\tools\gentest\gentest.dsp',
- 'icu\source\tools\gentz\gentz.dsp',
'icu\source\tools\genuca\genuca.dsp',
- 'icu\source\tools\makeconv\makeconv.dsp',
'icu\source\tools\pkgdata\pkgdata.dsp',
- 'icu\source\tools\toolutil\toolutil.dsp',
'icu\source\i18n\i18n.dsp',
- 'icu\source\stubdata\stubdata.dsp',
'icu\source\data\makedata.dsp',
- 'icu\source\allinone\allinone.dsw');
- foreach (@dspfiles) {
- open DSPFILE, "< $_" or die "Cannot open $_: $!\n";
- my $file = join('', <DSPFILE>);
- close DSPFILE;
- $file =~ s/([^\r])\n/$1\r\n/g;
- open DSPFILE, "> $_" or die "Cannot open $_: $!\n";;
- print DSPFILE $file;
- close DSPFILE;
+ unless (defined $icuheaders and -d $icuheaders) {
+ warn "error: icuheaders not defined or invalid\n";
+ $ok = 0;
+ } else {
+ $icuheaders =~ s![\\/]$!!;
+ foreach my $header ( @icu_headers ) {
+ $header = "$icuheaders/unicode/$header";
+ unless (-e $header) {
+ $ok = 0;
+ warn "error: ICU header '$header' not found\n";
+ }
}
-
- # Set up makefile entries.
- Configure::Data->set(
- buildicu => 1,
- icu_headers => 'blib\include\unicode\ucnv.h
blib\include\unicode\utypes.h blib\include\unicode\uchar.h',
- blib_lib_libsicuuc_a => 'blib\lib\libicuuc$(A)',
- blib_lib_libsicudata_a => 'blib\lib\libicudata$(A)',
- cc_inc => Configure::Data->get(qw(cc_inc)).' -I.\blib\include',
- TEMP_icu_make => <<'RULES',
-###############################################################################
-#
-# Build ICU:
-#
-###############################################################################
-
-icu : icu.dummy
-
-icu.dummy :
-
-icu.clean :
- msdev icu\source\allinone\allinone.dsw /MAKE "ALL" /CLEAN
-
-$(ICU_H_FILES) : $(LIBICUCORE)
-
-$(LIBICUCORE) $(LIBICUDATA) :
- msdev icu\source\allinone\allinone.dsw /MAKE "stubdata - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "common - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "i18n - Win32 Debug"
- xcopy /S /Y "icu\source\common" "icu\include\"
- msdev icu\source\allinone\allinone.dsw /MAKE "ctestfw - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "decmn - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "gencmn - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "derb - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "genrb - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "genbrk - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "genccode - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "gencnval - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "genidna - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "gennames - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "gennorm - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "genpname - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "genprops - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "gentest - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "gentz - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "genuca - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "makeconv - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "pkgdata - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "toolutil - Win32 Debug"
- msdev icu\source\allinone\allinone.dsw /MAKE "makedata - Win32 Debug"
- IF NOT EXIST blib\lib mkdir blib\lib
- copy icu\lib\icuucd$(A) $(LIBICUCORE)
- copy icu\lib\icudata$(A) $(LIBICUDATA)
- IF NOT EXIST blib\include mkdir blib\include
- IF NOT EXIST blib\include\unicode mkdir blib\include\unicode
- copy icu\include\unicode\*.h blib\include\unicode
- copy icu\bin\icuuc26d.dll .
- copy icu\bin\*.dll .
- IF NOT EXIST blib\lib\icu mkdir blib\lib\icu
- IF NOT EXIST blib\lib\icu\2.6.1 mkdir blib\lib\icu\2.6.1
- copy icu\source\data\out\*.dat blib\lib\icu\2.6.1
-RULES
- );
- return;
- }
-
- if( !defined $icuconfigureargs )
- {
- my $cwd = cwd();
-
- # Default to a configure line suggested by icu/README.parrot
- $icuconfigureargs = "--disable-layout --disable-tests
--disable-samples --quiet '--prefix=$cwd/blib' --enable-static --disable-shared
--disable-extras '--oldincludedir=$cwd/blib/old' --with-data-packaging=archive";
}
+ unless (defined $icudatadir and -d $icudatadir ) {
+ warn "error: icudatadir not defined or invalid\n";
+ $ok = 0;
+ } else {
+ $icudatadir =~ s![\\/]$!!;
+ }
+
+ die <<"HELP" unless $ok; # this text is also in Configure.PL!
+Something is wrong with your ICU installation!
+
+ If you do not have a full ICU installation:
+
+ --without-icu Build parrot without ICU support
+ --icu-config=(file) Location of icu-config
+ --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)
+HELP
+#'
+
Configure::Data->set(
- buildicu => 1,
- icu_headers => 'blib/include/unicode/ucnv.h blib/include/unicode/utypes.h
blib/include/unicode/uchar.h',
- blib_lib_libsicuuc_a => 'blib/lib/libicuuc$(A)',
- blib_lib_libsicudata_a => 'blib/lib/libicudata$(A)',
- cc_inc => Configure::Data->get(qw(cc_inc)).' -I./blib/include',
- TEMP_icu_make => <<"RULES",
-###############################################################################
-#
-# Build ICU:
-#
-###############################################################################
-
-icu : icu.dummy
-
-icu.dummy :
- \$(MAKE_C) icu/source
-
-icu.clean :
- \$(MAKE_C) icu/source clean
-
-\$(ICU_H_FILES) : \$(LIBICUCORE)
-
-\$(LIBICUCORE) \$(LIBICUDATA) :
- cd icu/source; $icu_configure_command $icuconfigureargs
- \$(MAKE_C) icu/source/stubdata install
- \$(MAKE_C) icu/source/common install
- \$(MAKE_C) icu/source/i18n
- \$(MAKE_C) icu/source/tools
- \$(MAKE_C) icu/source/data install ENABLE_STATIC=
- \$(RANLIB) \$(LIBICUCORE)
- \$(RANLIB) \$(LIBICUDATA)
+ has_icu => 1,
+ icu_shared => $icushared,
+ icu_cflags => "-I$icuheaders",
+ icu_headers => join( ' ', @icu_headers ),
+ icu_datadir => $icudatadir,
+ );
+
+ $Configure::Step::result = "yes";
-RULES
- );
}
1;
Modified: trunk/config/gen/makefiles/dynclasses_pl.in
==============================================================================
--- trunk/config/gen/makefiles/dynclasses_pl.in (original)
+++ trunk/config/gen/makefiles/dynclasses_pl.in Mon Apr 11 05:33:42 2005
@@ -40,9 +40,7 @@
$PATHQUOTE = '"';
# Also need various libraries in the link line.
- my $extraLibs = '${blib_lib_libparrot_a} '.
-#CONDITIONED_LINE(has_icu): '${blib_lib_libsicuuc_a}
${blib_lib_libsicudata_a} ' .
- '${libs}';
+ my $extraLibs = '${blib_lib_libparrot_a} ${libs}';
$extraLibs =~ s/blib/..\\blib/g;
$extraLibs =~ s/\Q$(A)\E/.lib/g;
$LD_LOAD_FLAGS =~ s/(-def:)/$extraLibs $1..\\/;
Modified: trunk/config/gen/makefiles/root.in
==============================================================================
--- trunk/config/gen/makefiles/root.in (original)
+++ trunk/config/gen/makefiles/root.in Mon Apr 11 05:33:42 2005
@@ -440,10 +440,8 @@
# libs
LIBPARROT = ${blib_lib_libparrot_a}
-#CONDITIONED_LINE(has_icu):LIBICUCORE = ${blib_lib_libsicuuc_a}
-#CONDITIONED_LINE(has_icu):LIBICUDATA = ${blib_lib_libsicudata_a}
-#CONDITIONED_LINE(has_icu):ALL_PARROT_LIBS = $(LIBPARROT) $(LIBICUCORE)
$(LIBICUDATA) $(C_LIBS)
-#INVERSE_CONDITIONED_LINE(has_icu):ALL_PARROT_LIBS = $(LIBPARROT) $(C_LIBS)
+#CONDITIONED_LINE(has_icu):ICU_SHARED = ${icu_shared}
+ALL_PARROT_LIBS = $(LIBPARROT) $(ICU_SHARED) $(C_LIBS)
# dynamic extensions
DYNEXT_DIR = runtime/parrot/dynext
@@ -626,7 +624,7 @@
@echo If the next line prints $(VERSION), it did help.
$(PARROT) parrot-config.imc VERSION DEVEL
-$(PARROT) : $(IMCC_DIR)/main$(O) $(GEN_HEADERS) $(LIBPARROT)
lib/Parrot/OpLib/core.pm $(LIBICUCORE) $(LIBICUDATA)
+$(PARROT) : $(IMCC_DIR)/main$(O) $(GEN_HEADERS) $(LIBPARROT)
lib/Parrot/OpLib/core.pm
$(LINK) $(LD_OUT)$(PARROT) $(LINKFLAGS) $(IMCC_DIR)/main$(O)
$(ALL_PARROT_LIBS)
lib_deps_object : $(O_FILES)
@@ -1056,9 +1054,6 @@
languages-clean :
$(MAKE_C) languages clean
-
-${TEMP_icu_make}
-
###############################################################################
#
# compiler implementation targets:
Modified: trunk/lib/Parrot/Configure/Step.pm
==============================================================================
--- trunk/lib/Parrot/Configure/Step.pm (original)
+++ trunk/lib/Parrot/Configure/Step.pm Mon Apr 11 05:33:42 2005
@@ -34,7 +34,7 @@
@EXPORT = ();
@EXPORT_OK = qw(prompt genfile copy_if_diff move_if_diff integrate
- cc_gen cc_build cc_run cc_clean cc_run_capture );
+ cc_gen cc_build cc_run cc_clean cc_run_capture capture_output);
%EXPORT_TAGS = (
inter => [qw(prompt integrate)],
@@ -419,6 +419,31 @@
Configure::Data->get( qw( o exe ) );
}
+=item C<capture_output($command)>
+
+Executes the given command. The command's output and its return status is
returned.
+B<STDERR> is redirected to F<test.out> during the execution.
+
+=cut
+
+sub capture_output {
+ my $command = join " ", @_;
+
+ # disable STDERR
+ open OLDERR, ">&STDERR";
+ open STDERR, ">test.out";
+
+ my $output = `$command`;
+ my $retval = ($? == -1) ? -1 : ($? >> 8);
+
+ # reenable STDERR
+ close STDERR;
+ open STDERR, ">&OLDERR";
+
+ return ($output, $retval) if wantarray;
+ return $output;
+}
+
=back
=head1 SEE ALSO
Modified: trunk/lib/Parrot/Test.pm
==============================================================================
--- trunk/lib/Parrot/Test.pm (original)
+++ trunk/lib/Parrot/Test.pm Mon Apr 11 05:33:42 2005
@@ -459,9 +459,7 @@
my $iculibs = "";
if ($PConfig{'has_icu'}) {
- $iculibs = $PConfig{blib_lib_libsicuuc_a} . " " .
- $PConfig{blib_lib_libsicudata_a};
- $iculibs =~ s/\$\(A\)/$PConfig{a}/g;
+ $iculibs = $PConfig{icu_shared};
}
my ($cmd, $exit_code);