From 987cf30ad80c7c13f713aa8e4ca3e1dbf08e9d63 Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Thu, 30 Jul 2020 17:43:12 +0100 Subject: [PATCH] libctf, binutils: initial work towards libctf gettextization We gettextize under our package name, which we change to a more reasonable 'libctf'. Our internationalization support is mostly provided by ctf-intl.h, which is a copy of opcodes/opintl.h with the non-gettext_noop N_() expansion debracketed to avoid pedantic compiler warnings. The libctf error strings returned by ctf_errmsg are marked up for internationalization. (We also adjust binutils's Makefile a tiny bit to allow for the fact that libctf now uses functions from libintl.) binutils/ChangeLog 2020-08-27 Nick Alcock * Makefile.am (readelf_LDADD): Move $(LIBINTL) after $(LIBCTF_NOBFD). * Makefile.in: Regenerated. libctf/ChangeLog 2020-08-27 Nick Alcock * configure.ac: Adjust package name to simply 'libctf': arbitrarily declare this to be version 1.2.0. * Makefile.am (AM_CPPFLAGS): Add @INCINTL@. * Makefile.in: Regenerated. * configure: Regenerated. * ctf-intl.h: New file, lightly modified from opcodes/opintl.h. * ctf-impl.h: Include it. * ctf-error.r (_ctf_errlist_t): Mark strings as noop-translatable. (ctf_errmsg): Actually translate them. --- binutils/ChangeLog | 5 ++++ binutils/Makefile.am | 2 +- binutils/Makefile.in | 2 +- libctf/ChangeLog | 12 ++++++++ libctf/Makefile.am | 2 +- libctf/Makefile.in | 2 +- libctf/configure | 28 +++++++++--------- libctf/configure.ac | 2 +- libctf/ctf-error.c | 4 +-- libctf/ctf-impl.h | 1 + libctf/ctf-intl.h | 68 ++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 107 insertions(+), 21 deletions(-) create mode 100644 libctf/ctf-intl.h diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 7551db27d22..1106c687e28 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2020-08-27 Nick Alcock + + * Makefile.am (readelf_LDADD): Move $(LIBINTL) after $(LIBCTF_NOBFD). + * Makefile.in: Regenerated. + 2020-08-26 Nick Clifton PR 26405 diff --git a/binutils/Makefile.am b/binutils/Makefile.am index 94d7616c2e3..24f8423ebc5 100644 --- a/binutils/Makefile.am +++ b/binutils/Makefile.am @@ -253,7 +253,7 @@ objcopy_SOURCES = objcopy.c not-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS) strings_SOURCES = strings.c $(BULIBS) readelf_SOURCES = readelf.c version.c unwind-ia64.c dwarf.c $(ELFLIBS) -readelf_LDADD = $(LIBINTL) $(LIBCTF_NOBFD) $(LIBIBERTY) $(ZLIB) $(DEBUGINFOD_LIBS) +readelf_LDADD = $(LIBCTF_NOBFD) $(LIBINTL) $(LIBIBERTY) $(ZLIB) $(DEBUGINFOD_LIBS) elfedit_SOURCES = elfedit.c version.c $(ELFLIBS) elfedit_LDADD = $(LIBINTL) $(LIBIBERTY) diff --git a/binutils/Makefile.in b/binutils/Makefile.in index 5ddae25558d..fee05dfa84a 100644 --- a/binutils/Makefile.in +++ b/binutils/Makefile.in @@ -720,7 +720,7 @@ size_SOURCES = size.c $(BULIBS) objcopy_SOURCES = objcopy.c not-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS) strings_SOURCES = strings.c $(BULIBS) readelf_SOURCES = readelf.c version.c unwind-ia64.c dwarf.c $(ELFLIBS) -readelf_LDADD = $(LIBINTL) $(LIBCTF_NOBFD) $(LIBIBERTY) $(ZLIB) $(DEBUGINFOD_LIBS) +readelf_LDADD = $(LIBCTF_NOBFD) $(LIBINTL) $(LIBIBERTY) $(ZLIB) $(DEBUGINFOD_LIBS) elfedit_SOURCES = elfedit.c version.c $(ELFLIBS) elfedit_LDADD = $(LIBINTL) $(LIBIBERTY) strip_new_SOURCES = objcopy.c is-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS) diff --git a/libctf/ChangeLog b/libctf/ChangeLog index bbd807dddfd..34671a79431 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,3 +1,15 @@ +2020-08-27 Nick Alcock + + * configure.ac: Adjust package name to simply 'libctf': arbitrarily + declare this to be version 1.2.0. + * Makefile.am (AM_CPPFLAGS): Add @INCINTL@. + * Makefile.in: Regenerated. + * configure: Regenerated. + * ctf-intl.h: New file, lightly modified from opcodes/opintl.h. + * ctf-impl.h: Include it. + * ctf-error.r (_ctf_errlist_t): Mark strings as noop-translatable. + (ctf_errmsg): Actually translate them. + 2020-07-26 Eli Zaretskii PR binutils/25155: diff --git a/libctf/Makefile.am b/libctf/Makefile.am index 8b8f0a8cf83..d762b0abf11 100644 --- a/libctf/Makefile.am +++ b/libctf/Makefile.am @@ -28,7 +28,7 @@ ZLIB = @zlibdir@ -lz ZLIBINC = @zlibinc@ INCDIR = $(srcdir)/../include -AM_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../bfd -I../bfd +AM_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../bfd -I../bfd @INCINTL@ AM_CFLAGS = -std=gnu99 @ac_libctf_warn_cflags@ @warn@ @c_warn@ @WARN_PEDANTIC@ @WERROR@ $(ZLIBINC) if INSTALL_LIBBFD diff --git a/libctf/Makefile.in b/libctf/Makefile.in index 78de09ba10a..f43c0953e42 100644 --- a/libctf/Makefile.in +++ b/libctf/Makefile.in @@ -447,7 +447,7 @@ AUTOMAKE_OPTIONS = foreign no-texinfo.tex ZLIB = @zlibdir@ -lz ZLIBINC = @zlibinc@ INCDIR = $(srcdir)/../include -AM_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../bfd -I../bfd +AM_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../bfd -I../bfd @INCINTL@ AM_CFLAGS = -std=gnu99 @ac_libctf_warn_cflags@ @warn@ @c_warn@ @WARN_PEDANTIC@ @WERROR@ $(ZLIBINC) @INSTALL_LIBBFD_TRUE@lib_LTLIBRARIES = libctf.la libctf-nobfd.la @INSTALL_LIBBFD_FALSE@include_HEADERS = diff --git a/libctf/configure b/libctf/configure index a1f5b7ff09f..b7ca7cd5003 100755 --- a/libctf/configure +++ b/libctf/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libctf library 1.2.0-pre. +# Generated by GNU Autoconf 2.69 for libctf 1.2.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -585,10 +585,10 @@ MFLAGS= MAKEFLAGS= # Identity of this package. -PACKAGE_NAME='libctf library' -PACKAGE_TARNAME='libctf-library' -PACKAGE_VERSION='1.2.0-pre' -PACKAGE_STRING='libctf library 1.2.0-pre' +PACKAGE_NAME='libctf' +PACKAGE_TARNAME='libctf' +PACKAGE_VERSION='1.2.0' +PACKAGE_STRING='libctf 1.2.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1349,7 +1349,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libctf library 1.2.0-pre to adapt to many kinds of systems. +\`configure' configures libctf 1.2.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1397,7 +1397,7 @@ Fine tuning of the installation directories: --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/libctf-library] + --docdir=DIR documentation root [DATAROOTDIR/doc/libctf] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] @@ -1419,7 +1419,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libctf library 1.2.0-pre:";; + short | recursive ) echo "Configuration of libctf 1.2.0:";; esac cat <<\_ACEOF @@ -1532,7 +1532,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libctf library configure 1.2.0-pre +libctf configure 1.2.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1943,7 +1943,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libctf library $as_me 1.2.0-pre, which was +It was created by libctf $as_me 1.2.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4185,8 +4185,8 @@ fi # Define the identity of the package. - PACKAGE='libctf-library' - VERSION='1.2.0-pre' + PACKAGE='libctf' + VERSION='1.2.0' cat >>confdefs.h <<_ACEOF @@ -13944,7 +13944,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libctf library $as_me 1.2.0-pre, which was +This file was extended by libctf $as_me 1.2.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14010,7 +14010,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libctf library config.status 1.2.0-pre +libctf config.status 1.2.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/libctf/configure.ac b/libctf/configure.ac index f5ed973b10d..575da4677f3 100644 --- a/libctf/configure.ac +++ b/libctf/configure.ac @@ -19,7 +19,7 @@ dnl . dnl AC_PREREQ(2.64) -AC_INIT([libctf library], 1.2.0-pre) +AC_INIT([libctf], 1.2.0) AC_CONFIG_SRCDIR(ctf-impl.h) AC_CONFIG_MACRO_DIR(../config) AC_CONFIG_MACRO_DIR(../bfd) diff --git a/libctf/ctf-error.c b/libctf/ctf-error.c index 20971f4275b..9611e367fde 100644 --- a/libctf/ctf-error.c +++ b/libctf/ctf-error.c @@ -45,7 +45,7 @@ static const union _ctf_errlist_t } _ctf_errlist = { { -#define _CTF_STR(n, s) s, +#define _CTF_STR(n, s) N_(s), #include "ctf-error.h" #undef _CTF_STR } @@ -70,7 +70,7 @@ ctf_errmsg (int error) else str = (const char *) strerror (error); - return (str ? str : "Unknown error"); + return (str ? gettext (str) : _("Unknown error")); } int diff --git a/libctf/ctf-impl.h b/libctf/ctf-impl.h index 35320d46f66..faee039adc8 100644 --- a/libctf/ctf-impl.h +++ b/libctf/ctf-impl.h @@ -36,6 +36,7 @@ #include #include #include "hashtab.h" +#include "ctf-intl.h" #ifdef __cplusplus extern "C" diff --git a/libctf/ctf-intl.h b/libctf/ctf-intl.h new file mode 100644 index 00000000000..af74872544a --- /dev/null +++ b/libctf/ctf-intl.h @@ -0,0 +1,68 @@ +/* ctf-intl.h - libctf specific header for gettext code. + Copyright (C) 1998-2020 Free Software Foundation, Inc. + + Written by Tom Tromey + + This file is part of libctf. + + This library 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, or (at your option) + any later version. + + It 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 file; see the file COPYING. If not, write to the + Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#ifndef _CTF_INTL_H +#define _CTF_INTL_H + +#ifdef ENABLE_NLS +# include +/* Note the redefinition of gettext and ngettext here to use PACKAGE. + + This is because the code in this directory is used to build a + library which will be linked with code in other directories to form + programs. We want to maintain a separate translation file for this + directory however, rather than being forced to merge it with that + of any program linked to libopcodes. This is a library, so it + cannot depend on the catalog currently loaded. + + In order to do this, we have to make sure that when we extract + messages we use the LIBCTF domain rather than the domain of the + program that included the opcodes library, (eg OBJDUMP). Hence we + use dgettext (PACKAGE, String) and define PACKAGE to be 'libctf'. + (See the code in configure). */ +# undef gettext +# define gettext(Msgid) dgettext (PACKAGE, Msgid) +# undef ngettext +# define ngettext(Msgid1, Msgid2, n) dngettext (PACKAGE, Msgid1, Msgid2, n) +# define _(String) gettext (String) +# ifdef gettext_noop +# define N_(String) gettext_noop (String) +# else +# define N_(String) String +# endif +#else +# define gettext(Msgid) (Msgid) +# define dgettext(Domainname, Msgid) (Msgid) +# define dcgettext(Domainname, Msgid, Category) (Msgid) +# define ngettext(Msgid1, Msgid2, n) \ + (n == 1 ? Msgid1 : Msgid2) +# define dngettext(Domainname, Msgid1, Msgid2, n) \ + (n == 1 ? Msgid1 : Msgid2) +# define dcngettext(Domainname, Msgid1, Msgid2, n, Category) \ + (n == 1 ? Msgid1 : Msgid2) +# define textdomain(Domainname) do {} while (0) +# define bindtextdomain(Domainname, Dirname) do {} while (0) +# define _(String) (String) +# define N_(String) String +#endif + +#endif /* _CTF_INTL_H */ -- 2.30.2