diff --git a/src/ucd-tools/.gitignore b/src/ucd-tools/.gitignore index 8bf6902e..02672261 100644 --- a/src/ucd-tools/.gitignore +++ b/src/ucd-tools/.gitignore @@ -53,12 +53,15 @@ depcomp install-sh libtool ltmain.sh -m4/ missing Makefile Makefile.in stamp-h1 +m4/* +!m4/ax_check_compile_flag.m4 + # emscripten: + a.out.js a.out.js.mem diff --git a/src/ucd-tools/configure.ac b/src/ucd-tools/configure.ac index 9da5bfa4..399f99e9 100644 --- a/src/ucd-tools/configure.ac +++ b/src/ucd-tools/configure.ac @@ -41,6 +41,15 @@ AC_ARG_WITH([unicode-version], AC_SUBST(UCD_VERSION) +dnl ================================================================ +dnl Compiler warnings. +dnl +dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html +dnl ================================================================ + +AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="-Wmissing-prototypes $CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-Wreturn-type], [CFLAGS="-Wreturn-type $CFLAGS"]) + dnl ================================================================ dnl Generate output. dnl ================================================================ diff --git a/src/ucd-tools/m4/ax_check_compile_flag.m4 b/src/ucd-tools/m4/ax_check_compile_flag.m4 new file mode 100644 index 00000000..80c79114 --- /dev/null +++ b/src/ucd-tools/m4/ax_check_compile_flag.m4 @@ -0,0 +1,75 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 5 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS + diff --git a/src/ucd-tools/src/case.c b/src/ucd-tools/src/case.c index 14a5e9aa..9ab0223a 100644 --- a/src/ucd-tools/src/case.c +++ b/src/ucd-tools/src/case.c @@ -26,7 +26,7 @@ #include -/* Unicode Character Data 9.0.0 */ +/* Unicode Character Data 10.0.0 */ struct case_conversion_entry { diff --git a/src/ucd-tools/src/categories.c b/src/ucd-tools/src/categories.c index 4eade2eb..d0e2a4a8 100644 --- a/src/ucd-tools/src/categories.c +++ b/src/ucd-tools/src/categories.c @@ -58,7 +58,7 @@ #define Zs UCD_CATEGORY_Zs #define Ii UCD_CATEGORY_Ii -/* Unicode Character Data 9.0.0 */ +/* Unicode Character Data 10.0.0 */ static const uint8_t categories_Cn[256] = { @@ -3532,6 +3532,7 @@ ucd_category_group ucd_get_category_group_for_category(ucd_category c) case Zl: case Zp: case Zs: return UCD_CATEGORY_GROUP_Z; case Ii: + default: return UCD_CATEGORY_GROUP_I; } } diff --git a/src/ucd-tools/src/scripts.c b/src/ucd-tools/src/scripts.c index ae1a4893..573c137a 100644 --- a/src/ucd-tools/src/scripts.c +++ b/src/ucd-tools/src/scripts.c @@ -203,7 +203,7 @@ #define Zyyy UCD_SCRIPT_Zyyy #define Zzzz UCD_SCRIPT_Zzzz -/* Unicode Character Data 9.0.0 */ +/* Unicode Character Data 10.0.0 */ static const uint8_t scripts_Latn[256] = { diff --git a/src/ucd-tools/tests/printcdata.c b/src/ucd-tools/tests/printcdata.c index 1cb96929..36dd6b4b 100644 --- a/src/ucd-tools/tests/printcdata.c +++ b/src/ucd-tools/tests/printcdata.c @@ -33,7 +33,7 @@ static int iswblank(wint_t c) } #endif -void fput_utf8c(FILE *out, codepoint_t c) +static void fput_utf8c(FILE *out, codepoint_t c) { if (c < 0x80) fputc((uint8_t)c, out); @@ -57,7 +57,7 @@ void fput_utf8c(FILE *out, codepoint_t c) } } -int fget_utf8c(FILE *in, codepoint_t *c) +static int fget_utf8c(FILE *in, codepoint_t *c) { int ch = EOF; if ((ch = fgetc(in)) == EOF) return 0; @@ -90,7 +90,7 @@ int fget_utf8c(FILE *in, codepoint_t *c) return 1; } -void uprintf_codepoint(FILE *out, codepoint_t c, char mode) +static void uprintf_codepoint(FILE *out, codepoint_t c, char mode) { switch (mode) { @@ -112,7 +112,7 @@ void uprintf_codepoint(FILE *out, codepoint_t c, char mode) } } -void uprintf_is(FILE *out, codepoint_t c, char mode) +static void uprintf_is(FILE *out, codepoint_t c, char mode) { switch (mode) { @@ -155,7 +155,7 @@ void uprintf_is(FILE *out, codepoint_t c, char mode) } } -void uprintf(FILE *out, codepoint_t c, const char *format) +static void uprintf(FILE *out, codepoint_t c, const char *format) { while (*format) switch (*format) { @@ -221,7 +221,7 @@ void uprintf(FILE *out, codepoint_t c, const char *format) } } -void print_file(FILE *in, const char *format) +static void print_file(FILE *in, const char *format) { codepoint_t c = 0; while (fget_utf8c(in, &c)) diff --git a/src/ucd-tools/tests/printucddata.c b/src/ucd-tools/tests/printucddata.c index b592f820..9a623bf3 100644 --- a/src/ucd-tools/tests/printucddata.c +++ b/src/ucd-tools/tests/printucddata.c @@ -22,7 +22,7 @@ #include #include -void fput_utf8c(FILE *out, codepoint_t c) +static void fput_utf8c(FILE *out, codepoint_t c) { if (c < 0x80) fputc((uint8_t)c, out); @@ -46,7 +46,7 @@ void fput_utf8c(FILE *out, codepoint_t c) } } -int fget_utf8c(FILE *in, codepoint_t *c) +static int fget_utf8c(FILE *in, codepoint_t *c) { int ch = EOF; if ((ch = fgetc(in)) == EOF) return 0; @@ -79,7 +79,7 @@ int fget_utf8c(FILE *in, codepoint_t *c) return 1; } -void uprintf_codepoint(FILE *out, codepoint_t c, char mode) +static void uprintf_codepoint(FILE *out, codepoint_t c, char mode) { switch (mode) { @@ -101,7 +101,7 @@ void uprintf_codepoint(FILE *out, codepoint_t c, char mode) } } -void uprintf_is(FILE *out, codepoint_t c, char mode) +static void uprintf_is(FILE *out, codepoint_t c, char mode) { switch (mode) { @@ -144,7 +144,7 @@ void uprintf_is(FILE *out, codepoint_t c, char mode) } } -void uprintf(FILE *out, codepoint_t c, const char *format) +static void uprintf(FILE *out, codepoint_t c, const char *format) { while (*format) switch (*format) { @@ -210,7 +210,7 @@ void uprintf(FILE *out, codepoint_t c, const char *format) } } -void print_file(FILE *in, const char *format) +static void print_file(FILE *in, const char *format) { codepoint_t c = 0; while (fget_utf8c(in, &c)) diff --git a/src/ucd-tools/tools/categories.py b/src/ucd-tools/tools/categories.py index 43b46eb0..c189adf1 100755 --- a/src/ucd-tools/tools/categories.py +++ b/src/ucd-tools/tools/categories.py @@ -228,6 +228,7 @@ ucd_category_group ucd_get_category_group_for_category(ucd_category c) case Zl: case Zp: case Zs: return UCD_CATEGORY_GROUP_Z; case Ii: + default: return UCD_CATEGORY_GROUP_I; } }