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);

Reply via email to