diff options
Diffstat (limited to 'libicuio')
-rw-r--r-- | libicuio/.gitignore | 6 | ||||
-rw-r--r-- | libicuio/README-DEV | 5 | ||||
-rw-r--r-- | libicuio/build/bootstrap.build | 2 | ||||
-rw-r--r-- | libicuio/build/export.build | 2 | ||||
-rw-r--r-- | libicuio/libicuio/.gitattributes | 1 | ||||
-rw-r--r-- | libicuio/libicuio/buildfile | 16 | ||||
-rw-r--r-- | libicuio/libicuio/ufile.cpp | 337 | ||||
-rw-r--r-- | libicuio/libicuio/ufile.cpp.patch | 15 | ||||
-rw-r--r-- | libicuio/manifest | 9 |
9 files changed, 387 insertions, 6 deletions
diff --git a/libicuio/.gitignore b/libicuio/.gitignore index 4c4fec7..d4a1da2 100644 --- a/libicuio/.gitignore +++ b/libicuio/.gitignore @@ -3,11 +3,17 @@ *.d *.t *.i +*.i.* *.ii +*.ii.* *.o *.obj +*.gcm +*.pcm +*.ifc *.so *.so.* +*.dylib *.dll *.a *.lib diff --git a/libicuio/README-DEV b/libicuio/README-DEV index 0e048ef..8cd01d9 100644 --- a/libicuio/README-DEV +++ b/libicuio/README-DEV @@ -5,3 +5,8 @@ See ../README-DEV for general notes on ICU packaging. Symlink the required upstream directories into libicuio/: $ ln -s ../../upstream/icu4c/source/io libicuio + +Fix the 'unable to find numeric literal operator' GCC 11 error: + +$ cp libicuio/io/ufile.cpp libicuio +$ patch -p0 <libicuio/ufile.cpp.patch diff --git a/libicuio/build/bootstrap.build b/libicuio/build/bootstrap.build index ef574c9..06b4637 100644 --- a/libicuio/build/bootstrap.build +++ b/libicuio/build/bootstrap.build @@ -1,4 +1,4 @@ -# file : build/root.build +# file : build/bootstrap.build # license : Unicode License; see accompanying LICENSE file project = libicuio diff --git a/libicuio/build/export.build b/libicuio/build/export.build index d40d387..a7e9429 100644 --- a/libicuio/build/export.build +++ b/libicuio/build/export.build @@ -1,4 +1,4 @@ -# file : build/root.build +# file : build/export.build # license : Unicode License; see accompanying LICENSE file $out_root/ diff --git a/libicuio/libicuio/.gitattributes b/libicuio/libicuio/.gitattributes new file mode 100644 index 0000000..2a80cb7 --- /dev/null +++ b/libicuio/libicuio/.gitattributes @@ -0,0 +1 @@ +io symlink=dir diff --git a/libicuio/libicuio/buildfile b/libicuio/libicuio/buildfile index 1334d2f..a400b40 100644 --- a/libicuio/libicuio/buildfile +++ b/libicuio/libicuio/buildfile @@ -4,7 +4,9 @@ import intf_libs = libicui18n%lib{icui18n} import intf_libs += libicuuc%lib{icuuc} -lib{icuio}: {hxx cxx}{**} $intf_libs +patched = ufile + +lib{icuio}: io/hxx{**} io/cxx{** -{$patched}} cxx{$patched} $intf_libs tclass = $cxx.target.class tsys = $cxx.target.system @@ -44,11 +46,21 @@ cxx.poptions =+ "-I$src_base/io" obja{*}: cxx.poptions += -DU_STATIC_IMPLEMENTATION -switch $cxx.class, $tsys +switch $cxx.class { case 'gcc' + { cxx.coptions += -fvisibility=hidden + # Disable warnings that pop up with -Wall -Wextra. Upstream doesn't seem + # to care about these and it is not easy to disable specific warnings in a + # way that works across compilers/version (some -Wno-* options are only + # recognized in newer versions). There are still some warnings left that + # appear for certain platforms/compilers. We pass them through but disable + # treating them as errors. + # + cxx.coptions += -Wno-all -Wno-extra -Wno-error + } case 'msvc' cxx.coptions += /utf-8 /Zc:wchar_t /GF /Gy \ /wd4996 # Disable warnings that pop up with /W3. diff --git a/libicuio/libicuio/ufile.cpp b/libicuio/libicuio/ufile.cpp new file mode 100644 index 0000000..2c00d21 --- /dev/null +++ b/libicuio/libicuio/ufile.cpp @@ -0,0 +1,337 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +****************************************************************************** +* +* Copyright (C) 1998-2015, International Business Machines +* Corporation and others. All Rights Reserved. +* +****************************************************************************** +* +* File ufile.cpp +* +* Modification History: +* +* Date Name Description +* 11/19/98 stephen Creation. +* 03/12/99 stephen Modified for new C API. +* 06/16/99 stephen Changed T_LocaleBundle to u_locbund +* 07/19/99 stephen Fixed to use ucnv's default codepage. +****************************************************************************** +*/ + +#include "unicode/platform.h" + +#include "locmap.h" +#include "unicode/ustdio.h" + +#if !UCONFIG_NO_CONVERSION + +#include <stdlib.h> + +#include "ufile.h" +#include "unicode/uloc.h" +#include "unicode/ures.h" +#include "unicode/ucnv.h" +#include "unicode/ustring.h" +#include "cstring.h" +#include "cmemory.h" + +#if U_PLATFORM_USES_ONLY_WIN32_API && !defined(fileno) +/* Windows likes to rename Unix-like functions */ +#define fileno _fileno +#endif + +static UFILE* +finit_owner(FILE *f, + const char *locale, + const char *codepage, + UBool takeOwnership + ) +{ + UErrorCode status = U_ZERO_ERROR; + UFILE *result; + if(f == NULL) { + return 0; + } + result = (UFILE*) uprv_malloc(sizeof(UFILE)); + if(result == NULL) { + return 0; + } + + uprv_memset(result, 0, sizeof(UFILE)); + result->fFileno = fileno(f); + result->fFile = f; + + result->str.fBuffer = result->fUCBuffer; + result->str.fPos = result->fUCBuffer; + result->str.fLimit = result->fUCBuffer; + +#if !UCONFIG_NO_FORMATTING + /* if locale is 0, use the default */ + if(u_locbund_init(&result->str.fBundle, locale) == 0) { + /* DO NOT FCLOSE HERE! */ + uprv_free(result); + return 0; + } +#endif + + /* If the codepage is not "" use the ucnv_open default behavior */ + if(codepage == NULL || *codepage != '\0') { + result->fConverter = ucnv_open(codepage, &status); + } + /* else result->fConverter is already memset'd to NULL. */ + + if(U_SUCCESS(status)) { + result->fOwnFile = takeOwnership; + } + else { +#if !UCONFIG_NO_FORMATTING + u_locbund_close(&result->str.fBundle); +#endif + /* DO NOT fclose here!!!!!! */ + uprv_free(result); + result = NULL; + } + + return result; +} + +U_CAPI UFILE* U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ +u_finit(FILE *f, + const char *locale, + const char *codepage) +{ + return finit_owner(f, locale, codepage, FALSE); +} + +U_CAPI UFILE* U_EXPORT2 +u_fadopt(FILE *f, + const char *locale, + const char *codepage) +{ + return finit_owner(f, locale, codepage, TRUE); +} + +U_CAPI UFILE* U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ +u_fopen(const char *filename, + const char *perm, + const char *locale, + const char *codepage) +{ + UFILE *result; + FILE *systemFile = fopen(filename, perm); + if(systemFile == 0) { + return 0; + } + + result = finit_owner(systemFile, locale, codepage, TRUE); + + if (!result) { + /* Something bad happened. + Maybe the converter couldn't be opened. */ + fclose(systemFile); + } + + return result; /* not a file leak */ +} + +U_CAPI UFILE* U_EXPORT2 +u_fopen_u(const UChar *filename, + const char *perm, + const char *locale, + const char *codepage) +{ + UFILE *result; + char buffer[256]; + + u_austrcpy(buffer, filename); + + result = u_fopen(buffer, perm, locale, codepage); +#if U_PLATFORM_USES_ONLY_WIN32_API + /* Try Windows API _wfopen if the above fails. */ + if (!result) { + // TODO: test this code path, including wperm. + wchar_t wperm[40] = {}; + size_t retVal; + mbstowcs_s(&retVal, wperm, UPRV_LENGTHOF(wperm), perm, _TRUNCATE); + FILE *systemFile = _wfopen((const wchar_t *)filename, wperm); + if (systemFile) { + result = finit_owner(systemFile, locale, codepage, TRUE); + } + if (!result) { + /* Something bad happened. + Maybe the converter couldn't be opened. */ + fclose(systemFile); + } + } +#endif + return result; /* not a file leak */ +} + +U_CAPI UFILE* U_EXPORT2 +u_fstropen(UChar *stringBuf, + int32_t capacity, + const char *locale) +{ + UFILE *result; + + if (capacity < 0) { + return NULL; + } + + result = (UFILE*) uprv_malloc(sizeof(UFILE)); + /* Null pointer test */ + if (result == NULL) { + return NULL; /* Just get out. */ + } + uprv_memset(result, 0, sizeof(UFILE)); + result->str.fBuffer = stringBuf; + result->str.fPos = stringBuf; + result->str.fLimit = stringBuf+capacity; + +#if !UCONFIG_NO_FORMATTING + /* if locale is 0, use the default */ + if(u_locbund_init(&result->str.fBundle, locale) == 0) { + /* DO NOT FCLOSE HERE! */ + uprv_free(result); + return 0; + } +#endif + + return result; +} + +U_CAPI UBool U_EXPORT2 +u_feof(UFILE *f) +{ + UBool endOfBuffer; + if (f == NULL) { + return TRUE; + } + endOfBuffer = (UBool)(f->str.fPos >= f->str.fLimit); + if (f->fFile != NULL) { + return endOfBuffer && feof(f->fFile); + } + return endOfBuffer; +} + +U_CAPI void U_EXPORT2 +u_fflush(UFILE *file) +{ + ufile_flush_translit(file); + ufile_flush_io(file); + if (file->fFile) { + fflush(file->fFile); + } + else if (file->str.fPos < file->str.fLimit) { + *(file->str.fPos++) = 0; + } + /* TODO: flush input */ +} + +U_CAPI void +u_frewind(UFILE *file) +{ + u_fflush(file); + ucnv_reset(file->fConverter); + if (file->fFile) { + rewind(file->fFile); + file->str.fLimit = file->fUCBuffer; + file->str.fPos = file->fUCBuffer; + } + else { + file->str.fPos = file->str.fBuffer; + } +} + +U_CAPI void U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ +u_fclose(UFILE *file) +{ + if (file) { + u_fflush(file); + ufile_close_translit(file); + + if(file->fOwnFile) + fclose(file->fFile); + +#if !UCONFIG_NO_FORMATTING + u_locbund_close(&file->str.fBundle); +#endif + + ucnv_close(file->fConverter); + uprv_free(file); + } +} + +U_CAPI FILE* U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ +u_fgetfile( UFILE *f) +{ + return f->fFile; +} + +#if !UCONFIG_NO_FORMATTING + +U_CAPI const char* U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ +u_fgetlocale( UFILE *file) +{ + return file->str.fBundle.fLocale; +} + +U_CAPI int32_t U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ +u_fsetlocale(UFILE *file, + const char *locale) +{ + u_locbund_close(&file->str.fBundle); + + return u_locbund_init(&file->str.fBundle, locale) == 0 ? -1 : 0; +} + +#endif + +U_CAPI const char* U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ +u_fgetcodepage(UFILE *file) +{ + UErrorCode status = U_ZERO_ERROR; + const char *codepage = NULL; + + if (file->fConverter) { + codepage = ucnv_getName(file->fConverter, &status); + if(U_FAILURE(status)) + return 0; + } + return codepage; +} + +U_CAPI int32_t U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ +u_fsetcodepage( const char *codepage, + UFILE *file) +{ + UErrorCode status = U_ZERO_ERROR; + int32_t retVal = -1; + + /* We use the normal default codepage for this system, and not the one for the locale. */ + if ((file->str.fPos == file->str.fBuffer) && (file->str.fLimit == file->str.fBuffer)) { + ucnv_close(file->fConverter); + file->fConverter = ucnv_open(codepage, &status); + if(U_SUCCESS(status)) { + retVal = 0; + } + } + return retVal; +} + + +U_CAPI UConverter * U_EXPORT2 /* U_CAPI ... U_EXPORT2 added by Peter Kirk 17 Nov 2001 */ +u_fgetConverter(UFILE *file) +{ + return file->fConverter; +} +#if !UCONFIG_NO_FORMATTING +U_CAPI const UNumberFormat* U_EXPORT2 u_fgetNumberFormat(UFILE *file) +{ + return u_locbund_getNumberFormat(&file->str.fBundle, UNUM_DECIMAL); +} +#endif + +#endif diff --git a/libicuio/libicuio/ufile.cpp.patch b/libicuio/libicuio/ufile.cpp.patch new file mode 100644 index 0000000..9397298 --- /dev/null +++ b/libicuio/libicuio/ufile.cpp.patch @@ -0,0 +1,15 @@ +--- libicuio/io/ufile.cpp 2019-12-23 14:38:40.255889178 +0300 ++++ libicuio/ufile.cpp 2021-11-22 10:50:17.658962827 +0300 +@@ -21,12 +21,6 @@ + */ + + #include "unicode/platform.h" +-#if defined(__GNUC__) && !defined(__clang__) && defined(__STRICT_ANSI__) +-// g++, fileno isn't defined if __STRICT_ANSI__ is defined. +-// clang fails to compile the <string> header unless __STRICT_ANSI__ is defined. +-// __GNUC__ is set by both gcc and clang. +-#undef __STRICT_ANSI__ +-#endif + + #include "locmap.h" + #include "unicode/ustdio.h" diff --git a/libicuio/manifest b/libicuio/manifest index 51590c3..a0b1011 100644 --- a/libicuio/manifest +++ b/libicuio/manifest @@ -1,6 +1,6 @@ : 1 name: libicuio -version: 65.1.0+4 +version: 65.1.0+10 upstream-version: 65.1 project: icu summary: ICU input/output C/C++ library @@ -13,9 +13,14 @@ src-url: https://git.build2.org/cgit/packaging/icu/icu/tree/libicuio/ package-url: https://git.build2.org/cgit/packaging/icu/ email: icu-support@lists.sourceforge.net ; Mailing list. package-email: packaging@build2.org ; Mailing list. -build-email: builds@build2.org +build-error-email: builds@build2.org builds: all depends: * build2 >= 0.12.0 depends: * bpkg >= 0.12.0 depends: libicuuc == $ depends: libicui18n == $ + +# System package mapping. +# +debian-name: libicu-dev +fedora-name: libicu-devel |