On Sunday 03 April 2005 14:06, Ron Blaschke wrote: > I'd reckon once C<--without-icu> is in place, one should be able to > run > > $rm -rf icu > $perl Configure --without-icu --nomanicheck > > So it shouldn't really matter when exactly F<icu/> is removed. Hmm, okay. Thats indeed true.
I've attached the patch that implements --without-icu. Comments welcome. > Just my thoughts, > Ron jens
Index: Configure.pl =================================================================== RCS file: /cvs/public/parrot/Configure.pl,v retrieving revision 1.150 diff -u -w -r1.150 Configure.pl --- Configure.pl 17 Jan 2005 14:01:58 -0000 1.150 +++ Configure.pl 3 Apr 2005 13:39:13 -0000 @@ -359,6 +359,7 @@ 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) Index: config/gen/config_h.pl =================================================================== RCS file: /cvs/public/parrot/config/gen/config_h.pl,v retrieving revision 1.14 diff -u -w -r1.14 config_h.pl --- config/gen/config_h.pl 8 Mar 2005 22:52:07 -0000 1.14 +++ config/gen/config_h.pl 3 Apr 2005 13:39:13 -0000 @@ -30,7 +30,8 @@ genfile('config/gen/config_h/config_h.in', 'include/parrot/config.h', commentType => '/*', - ignorePattern => 'PARROT_CONFIG_DATE'); + ignorePattern => 'PARROT_CONFIG_DATE', + conditioned_lines => 1); genfile('config/gen/config_h/feature_h.in', 'include/parrot/feature.h', commentType => '/*', Index: config/gen/icu.pl =================================================================== RCS file: /cvs/public/parrot/config/gen/icu.pl,v retrieving revision 1.25 diff -u -w -r1.25 icu.pl --- config/gen/icu.pl 8 Mar 2005 22:52:07 -0000 1.25 +++ config/gen/icu.pl 3 Apr 2005 13:39:13 -0000 @@ -20,11 +20,11 @@ $description="Configuring ICU if requested..."; @args=qw(buildicu verbose icudatadir icuplatform icuconfigureargs - icushared icuheaders icu-config); + icushared icuheaders icu-config without-icu); sub runstep { my ($buildicu, $verbose, $icudatadir, $icuplatform, $icuconfigureargs, - $icushared, $icuheaders, $icuconfig) = @_; + $icushared, $icuheaders, $icuconfig, $without) = @_; my $icu_configure_command; my @icu_headers = qw(ucnv.h utypes.h uchar.h); my $autodetect = !defined($icudatadir) @@ -33,6 +33,14 @@ && !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" Index: config/gen/makefiles.pl =================================================================== RCS file: /cvs/public/parrot/config/gen/makefiles.pl,v retrieving revision 1.43 diff -u -w -r1.43 makefiles.pl --- config/gen/makefiles.pl 16 Mar 2005 22:09:04 -0000 1.43 +++ config/gen/makefiles.pl 3 Apr 2005 13:39:14 -0000 @@ -81,7 +81,7 @@ genfile('config/gen/makefiles/dynclasses.in', 'dynclasses/Makefile', commentType => '#', replace_slashes => 1, conditioned_lines => 1); genfile('config/gen/makefiles/dynclasses_pl.in', 'dynclasses/build.pl', - commentType => '#', replace_slashes => 0); + commentType => '#', replace_slashes => 0, conditioned_lines => 1); genfile('config/gen/makefiles/dynoplibs.in', 'dynoplibs/Makefile', commentType => '#', replace_slashes => 1); genfile('config/gen/makefiles/parrot_compiler.in', 'languages/parrot_compiler/Makefile', Index: config/gen/config_h/config_h.in =================================================================== RCS file: /cvs/public/parrot/config/gen/config_h/config_h.in,v retrieving revision 1.27 diff -u -w -r1.27 config_h.in --- config/gen/config_h/config_h.in 23 Mar 2005 21:28:06 -0000 1.27 +++ config/gen/config_h/config_h.in 3 Apr 2005 13:39:14 -0000 @@ -134,7 +134,8 @@ #define PARROT_CORE_CG_OPLIB_INIT Parrot_DynOp_core_cg_${MAJOR}_${MINOR}_${PATCH} #define PARROT_CORE_CGP_OPLIB_INIT Parrot_DynOp_core_cgp_${MAJOR}_${MINOR}_${PATCH} -#define DEFAULT_ICU_DATA_DIR "${icudatadir}" +#define PARROT_HAS_ICU ${has_icu} +#CONDITIONED_LINE(has_icu):#define DEFAULT_ICU_DATA_DIR "${icudatadir}" #define INTVAL_FMT "${intvalfmt}" #define FLOATVAL_FMT "${floatvalfmt}" Index: config/gen/makefiles/dynclasses_pl.in =================================================================== RCS file: /cvs/public/parrot/config/gen/makefiles/dynclasses_pl.in,v retrieving revision 1.12 diff -u -w -r1.12 dynclasses_pl.in --- config/gen/makefiles/dynclasses_pl.in 21 Feb 2005 10:54:39 -0000 1.12 +++ config/gen/makefiles/dynclasses_pl.in 3 Apr 2005 13:39:14 -0000 @@ -40,8 +40,9 @@ $PATHQUOTE = '"'; # Also need various libraries in the link line. - my $extraLibs = '${blib_lib_libparrot_a} ${blib_lib_libsicuuc_a} ' . - '${blib_lib_libsicudata_a} ${libs}'; + my $extraLibs = '${blib_lib_libparrot_a} '. +#CONDITIONED_LINE(has_icu): '${blib_lib_libsicuuc_a} ${blib_lib_libsicudata_a} ' . + '${libs}'; $extraLibs =~ s/blib/..\\blib/g; $extraLibs =~ s/\Q$(A)\E/.lib/g; $LD_LOAD_FLAGS =~ s/(-def:)/$extraLibs $1..\\/; Index: config/gen/makefiles/root.in =================================================================== RCS file: /cvs/public/parrot/config/gen/makefiles/root.in,v retrieving revision 1.288 diff -u -w -r1.288 root.in --- config/gen/makefiles/root.in 31 Mar 2005 11:23:04 -0000 1.288 +++ config/gen/makefiles/root.in 3 Apr 2005 13:39:15 -0000 @@ -318,7 +318,7 @@ # generated list of header files GENERAL_H_FILES = $(NONGEN_HEADERS) $(GEN_HEADERS) ${TEMP_cg_h} -ICU_H_FILES = ${icu_headers} +#CONDITIONED_LINE(has_icu):ICU_H_FILES = ${icu_headers} ALL_H_FILES = $(GENERAL_H_FILES) CHARSET_O_FILES = ${TEMP_charset_o} @@ -439,9 +439,10 @@ # libs LIBPARROT = ${blib_lib_libparrot_a} -LIBICUCORE = ${blib_lib_libsicuuc_a} -LIBICUDATA = ${blib_lib_libsicudata_a} -ALL_PARROT_LIBS = $(LIBPARROT) $(LIBICUCORE) $(LIBICUDATA) $(C_LIBS) +#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) # dynamic extensions DYNEXT_DIR = runtime/parrot/dynext Index: src/string.c =================================================================== RCS file: /cvs/public/parrot/src/string.c,v retrieving revision 1.244 diff -u -w -r1.244 string.c --- src/string.c 2 Mar 2005 17:00:51 -0000 1.244 +++ src/string.c 3 Apr 2005 13:39:20 -0000 @@ -286,7 +286,7 @@ */ Parrot_charsets_encodings_init(interpreter); - +#if PARROT_HAS_ICU /* DEFAULT_ICU_DATA_DIR is configured at build time, or it may be set through the $PARROT_ICU_DATA_DIR environment variable. Need a way to specify this via the command line as well. */ @@ -316,6 +316,7 @@ no_set: if (free_data_dir) mem_sys_free((void*)data_dir); /* cast away the constness */ +#endif } /* Index: src/string_primitives.c =================================================================== RCS file: /cvs/public/parrot/src/string_primitives.c,v retrieving revision 1.12 diff -u -w -r1.12 string_primitives.c --- src/string_primitives.c 2 Mar 2005 15:32:59 -0000 1.12 +++ src/string_primitives.c 3 Apr 2005 13:39:20 -0000 @@ -20,10 +20,14 @@ */ #include "parrot/parrot.h" +#if PARROT_HAS_ICU #include <unicode/ucnv.h> #include <unicode/utypes.h> #include <unicode/uchar.h> #include <unicode/ustring.h> +#else +#include <ctype.h> +#endif #include <assert.h> /* @@ -41,6 +45,7 @@ void string_set_data_directory(const char *dir) { +#if PARROT_HAS_ICU u_setDataDirectory(dir); /* Since u_setDataDirectory doesn't have a result code, we'll spot @@ -54,6 +59,10 @@ "string_set_data_directory: ICU data files not found" "(apparently) for directory [%s]", dir); } +#else + internal_exception(ICU_ERROR, + "string_set_data_directory: parrot compiled without ICU support" ); +#endif } /* @@ -73,6 +82,7 @@ string_fill_from_buffer(Interp *interpreter, const void *buffer, UINTVAL len, const char *encoding_name, STRING *s) { +#if PARROT_HAS_ICU UErrorCode icuError = U_ZERO_ERROR; UConverter *conv = NULL; UChar *target = NULL; @@ -140,6 +150,10 @@ /* temporary; need to promote to rep 4 if has non-BMP characters*/ s->bufused = (char *)target - (char *)s->strstart; string_compute_strlen(interpreter, s); +#else + internal_exception(ICU_ERROR, + "string_fill_from_buffer: parrot compiled without ICU support" ); +#endif } @@ -360,7 +374,13 @@ UINTVAL Parrot_char_digit_value(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_charDigitValue(character); +#else + if ((character >= 0x30) || (character <= 0x39)) + return character - 0x30; + return -1; +#endif } /* @@ -377,7 +397,11 @@ INTVAL Parrot_char_is_alnum(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_isalnum(character); +#else + return isalnum(character); +#endif } /* @@ -394,7 +418,11 @@ INTVAL Parrot_char_is_alpha(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_isalpha(character); +#else + return isalpha(character); +#endif } /* @@ -429,7 +457,11 @@ INTVAL Parrot_char_is_blank(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_isblank(character); +#else + return isblank(character); +#endif } /* @@ -446,7 +478,11 @@ INTVAL Parrot_char_is_cntrl(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_iscntrl(character); +#else + return iscntrl(character); +#endif } /* @@ -463,7 +499,11 @@ INTVAL Parrot_char_is_digit(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_isdigit(character); +#else + return isdigit(character); +#endif } /* @@ -481,7 +521,11 @@ INTVAL Parrot_char_is_graph(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_isgraph(character); +#else + return isgraph(character); +#endif } /* @@ -498,7 +542,11 @@ INTVAL Parrot_char_is_lower(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_islower(character); +#else + return islower(character); +#endif } /* @@ -515,7 +563,11 @@ INTVAL Parrot_char_is_print(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_isprint(character); +#else + return isprint(character); +#endif } /* @@ -532,7 +584,11 @@ INTVAL Parrot_char_is_punct(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_ispunct(character); +#else + return ispunct(character); +#endif } /* @@ -549,7 +605,11 @@ INTVAL Parrot_char_is_space(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_isspace(character); +#else + return isspace(character); +#endif } /* @@ -566,7 +626,11 @@ INTVAL Parrot_char_is_upper(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_isupper(character); +#else + return isupper(character); +#endif } /* @@ -583,7 +647,11 @@ INTVAL Parrot_char_is_xdigit(Interp *interpreter, UINTVAL character) { +#if PARROT_HAS_ICU return u_isxdigit(character); +#else + return isxdigit(character); +#endif } /*