]> xenbits.xensource.com Git - libvirt.git/commitdiff
po: provide custom make rules for po file management
authorDaniel P. Berrangé <berrange@redhat.com>
Tue, 3 Apr 2018 15:39:17 +0000 (16:39 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Thu, 19 Apr 2018 09:35:58 +0000 (10:35 +0100)
Historically we have relied on autopoint/gettextize to install a
standard po/Makefile.in.in. There is very limited scope for customizing
this and it also causes a bunch of extra stuff to be pulled into
configure.ac which potentially clashes with gnulib. Writing make rules
for po file management is no more difficult than any other rules libvirt
has, so stop using autopoint/gettextize.

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
15 files changed:
.gitignore
ABOUT-NLS [new symlink]
autogen.sh
bootstrap.conf
configure.ac
m4/virt-nls.m4 [new file with mode: 0644]
po/Makefile.am [new file with mode: 0644]
po/POTFILES [new file with mode: 0644]
po/POTFILES.in [deleted file]
po/README.md [new file with mode: 0644]
src/internal.h
src/libvirt-admin.c
src/libvirt.c
src/util/virgettext.c
tools/virt-host-validate.c

index dd00fc5ccf8a0e91e96cd5ada8256e04007a3fde..121c2caed1fb6f4dfe503e1e1eeb8fabe19f5c06 100644 (file)
@@ -37,7 +37,6 @@
 .memdump
 .sc-start-sc_*
 .ycm_extra_conf.py
-/ABOUT-NLS
 /AUTHORS
 /ChangeLog
 /GNUmakefile
 /maint.mk
 /mingw-libvirt.spec
 /mkinstalldirs
-/po/*
+/po/*gmo
 /proxy/
 /python/
 /run
@@ -211,6 +210,3 @@ tags
 !/gnulib/lib/Makefile.am
 !/gnulib/tests/Makefile.am
 !/m4/virt-*.m4
-!/po/*.po
-!/po/POTFILES.in
-!/po/libvirt.pot
diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 120000 (symlink)
index 0000000..b583e27
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1 @@
+po/README.md
\ No newline at end of file
index 1183b13083c2815c83768bb6a89ca60a50f5cba9..9afad8f9d556626927cd3aa4efcaebf8a4e40f69 100755 (executable)
@@ -127,8 +127,7 @@ if test -d .git || test -f .git; then
     expected_hash=$(cat "$state_file" 2>/dev/null)
     actual_hash=$(gnulib_hash "$no_git")
 
-    if test "$actual_hash" = "$expected_hash" && \
-       test -f po/Makevars && test -f AUTHORS; then
+    if test "$actual_hash" = "$expected_hash" && test -f AUTHORS; then
         # The gnulib hash matches our expectations, and all the files
         # that can only be generated through bootstrap are present:
         # we just need to run autoreconf. Unless we're performing a
index 0bfa7941f6fea4052e1d3efbdbdc5e282450ecd3..9559922fced71abea5596646e17a8015370c1da6 100644 (file)
@@ -58,7 +58,6 @@ getopt-posix
 getpass
 getpeername
 getsockname
-gettext-h
 gettimeofday
 gitlog-to-changelog
 gnumakefile
@@ -132,16 +131,6 @@ waitpid
 warnings
 '
 
-# Additional xgettext options to use.  Use "\\\newline" to break lines.
-XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
- --flag=virAsprintf:2:c-format\\\
- --from-code=UTF-8\\\
-'
-
-# This is not a GNU package, so the default bug address is invalid,
-# and the translation project is not in use.
-MSGID_BUGS_ADDRESS=libvir-list@redhat.com
-COPYRIGHT_HOLDER='Red Hat, Inc.'
 SKIP_PO=true
 
 # Enable copy-mode for MSYS/MinGW. MSYS' ln doesn't work well in the way
@@ -150,31 +139,6 @@ if test -n "$MSYSTEM"; then
     copy=true
 fi
 
-# If "AM_GNU_GETTEXT(external" or "AM_GNU_GETTEXT([external]"
-# appears in configure.ac, exclude some unnecessary files.
-# Without grep's -E option (not portable enough, pre-configure),
-# the following test is ugly.  Also, this depends on the existence
-# of configure.ac, not the obsolescent-named configure.in.  But if
-# you're using this infrastructure, you should care about such things.
-
-gettext_external=0
-grep '^[        ]*AM_GNU_GETTEXT(external\>' configure.ac > /dev/null &&
-  gettext_external=1
-grep '^[        ]*AM_GNU_GETTEXT(\[external\]' configure.ac > /dev/null &&
-  gettext_external=1
-
-if test $gettext_external = 1; then
-  # Gettext supplies these files, but we don't need them since
-  # we don't have an intl subdirectory.
-  excluded_files='
-      m4/glibc2.m4
-      m4/intdiv0.m4
-      m4/lcmessage.m4
-      m4/uintmax_t.m4
-      m4/ulonglong.m4
-      m4/visibility.m4
-  '
-fi
 
 # Tell gnulib to:
 #   require LGPLv2+
@@ -202,8 +166,6 @@ local_gl_dir=gnulib/local
 buildreq="\
 autoconf   2.59
 automake   1.9.6
-autopoint  -
-gettext    0.17
 git        1.5.5
 gzip       -
 libtool    -
index ae798faa545e413e85d47b8887c38435fad47dce..0aecf68c38e825d82264ffa3ba7c1e37bed66b08 100644 (file)
@@ -257,6 +257,7 @@ LIBVIRT_ARG_LIBSSH
 LIBVIRT_ARG_LIBXML
 LIBVIRT_ARG_MACVTAP
 LIBVIRT_ARG_NETCF
+LIBVIRT_ARG_NLS
 LIBVIRT_ARG_NSS
 LIBVIRT_ARG_NUMACTL
 LIBVIRT_ARG_OPENWSMAN
@@ -298,6 +299,7 @@ LIBVIRT_CHECK_LIBSSH
 LIBVIRT_CHECK_LIBXML
 LIBVIRT_CHECK_MACVTAP
 LIBVIRT_CHECK_NETCF
+LIBVIRT_CHECK_NLS
 LIBVIRT_CHECK_NUMACTL
 LIBVIRT_CHECK_NWFILTER
 LIBVIRT_CHECK_OPENWSMAN
@@ -732,33 +734,7 @@ if test "$enable_test_locking" = "yes"; then
 fi
 AM_CONDITIONAL([WITH_CIL],[test "$enable_test_locking" = "yes"])
 
-dnl Check for gettext - don't go any newer than what RHEL 5 supports
-dnl
-dnl save and restore CPPFLAGS around gettext check as the internal iconv
-dnl check might leave -I/usr/local/include in CPPFLAGS on FreeBSD resulting
-dnl in the build picking up previously installed libvirt/libvirt.h instead
-dnl of the correct one from the source tree.
-dnl compute the difference between save_CPPFLAGS and CPPFLAGS and append it
-dnl to INCLUDES in order to preserve changes made by gettext but in a place
-dnl that does not break the build
-save_CPPFLAGS="$CPPFLAGS"
-AM_GNU_GETTEXT_VERSION([0.17])
-AM_GNU_GETTEXT([external])
-GETTEXT_CPPFLAGS=
-if test "x$save_CPPFLAGS" != "x$CPPFLAGS"; then
- set dummy $CPPFLAGS; shift
- for var
- do
-   case " $var " in
-     " $save_CPPFLAGS ") ;;
-     *) GETTEXT_CPPFLAGS="$GETTEXT_CPPFLAGS $var" ;;
-   esac
- done
-fi
-CPPFLAGS="$save_CPPFLAGS"
-AC_SUBST([GETTEXT_CPPFLAGS])
-
-ALL_LINGUAS=`cd "$srcdir/po" > /dev/null && ls *.po | sed 's+\.po$++'`
+LIBVIRT_GETTEXT
 
 dnl Cygwin, MinGW and MSVC checks
 LIBVIRT_WIN_CHECK_COMMON
@@ -909,7 +885,7 @@ AC_CONFIG_FILES([\
         src/libvirt-qemu.pc \
         src/libvirt-lxc.pc \
         libvirt.spec mingw-libvirt.spec \
-        po/Makefile.in \
+        po/Makefile \
         include/libvirt/libvirt-common.h \
         examples/Makefile \
         tests/Makefile \
@@ -990,6 +966,7 @@ LIBVIRT_RESULT_LIBXL
 LIBVIRT_RESULT_LIBXML
 LIBVIRT_RESULT_MACVTAP
 LIBVIRT_RESULT_NETCF
+LIBVIRT_RESULT_NLS
 LIBVIRT_RESULT_NSS
 LIBVIRT_RESULT_NUMACTL
 LIBVIRT_RESULT_OPENWSMAN
diff --git a/m4/virt-nls.m4 b/m4/virt-nls.m4
new file mode 100644 (file)
index 0000000..f9fb27c
--- /dev/null
@@ -0,0 +1,71 @@
+dnl gettext utilities
+dnl
+dnl Copyright (C) 2018 Red Hat, Inc.
+dnl
+dnl This library is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Lesser General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2.1 of the License, or (at your option) any later version.
+dnl
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+dnl Lesser General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU Lesser General Public
+dnl License along with this library.  If not, see
+dnl <http://www.gnu.org/licenses/>.
+dnl
+
+AC_DEFUN([LIBVIRT_ARG_NLS],[
+  LIBVIRT_ARG_ENABLE([NLS], [NLS], [check])
+])
+
+AC_DEFUN([LIBVIRT_CHECK_NLS],[
+  if test "x$enable_nls" != "xno"
+  then
+    AC_CHECK_FUNC([gettext], [], [
+      AC_CHECK_LIB([intl], [gettext], [], [
+        if test "x$enable_nls" == "xcheck"
+       then
+         enable_nls=no
+       else
+          AC_MSG_ERROR([gettext() is required to build libvirt]")
+       fi
+      ])
+    ])
+  fi
+
+  if test "x$enable_nls" != "xno"
+  then
+    AC_CHECK_HEADERS([libintl.h], [enable_nls=yes],[
+      if test "x$enable_nls" == "xcheck"
+      then
+        enable_nls=no
+      else
+        AC_MSG_ERROR([libintl.h is required to build libvirt]")
+      fi
+    ])
+  fi
+
+  dnl GNU gettext tools (optional).
+  AC_CHECK_PROG([XGETTEXT], [xgettext], [xgettext], [no])
+  AC_CHECK_PROG([MSGFMT], [msgfmt], [msgfmt], [no])
+  AC_CHECK_PROG([MSGMERGE], [msgmerge], [msgmerge], [no])
+
+  dnl Check they are the GNU gettext tools.
+  AC_MSG_CHECKING([msgfmt is GNU tool])
+  if $MSGFMT --version >/dev/null 2>&1 && $MSGFMT --version | grep -q 'GNU gettext'; then
+    msgfmt_is_gnu=yes
+  else
+    msgfmt_is_gnu=no
+  fi
+  AC_MSG_RESULT([$msgfmt_is_gnu])
+  AM_CONDITIONAL([HAVE_GNU_GETTEXT_TOOLS],
+    [test "x$XGETTEXT" != "xno" && test "x$MSGFMT" != "xno" && \
+     test "x$MSGMERGE" != "xno" && test "x$msgfmt_is_gnu" != "xno"])
+])
+
+AC_DEFUN([LIBVIRT_RESULT_NLS],[
+  LIBVIRT_RESULT([NLS], [$enable_nls])
+])
diff --git a/po/Makefile.am b/po/Makefile.am
new file mode 100644 (file)
index 0000000..95e5ab7
--- /dev/null
@@ -0,0 +1,97 @@
+DOMAIN = $(PACKAGE_NAME)
+COPYRIGHT_HOLDER = The Libvirt authors
+MSGID_BUGS_ADDRESS = https://libvirt.org/bugs.html
+
+LANGS := \
+       af am anp ar as ast bal be bg bn_IN \
+       bn bo br brx bs ca cs cy da de_CH \
+       de el en_GB eo es et eu fa fi \
+       fr gl gu he hi hr hu ia \
+       id ilo is it ja ka kk km kn ko \
+       kw_GB kw@kkcor kw kw@uccor ky lt lv mai mk ml \
+       mn mr ms nb nds ne nl nn nso \
+       or pa pl pt_BR pt ro ru si sk sl \
+       sq sr@latin sr sv ta te tg th tr tw \
+       uk ur vi wba yo zh_CN zh_HK zh_TW zu
+
+
+POTFILE_DEPS := $(shell $(SED) 's,^,$(top_srcdir)/,' $(srcdir)/POTFILES)
+POTFILE := $(DOMAIN).pot
+POFILES := $(LANGS:%=%.po)
+GMOFILES := $(LANGS:%=%.gmo)
+
+EXTRA_DIST = \
+       POTFILES \
+       $(POTFILE) \
+       $(POFILES) \
+       $(GMOFILES)
+
+if HAVE_GNU_GETTEXT_TOOLS
+
+XGETTEXT_ARGS = \
+       --default-domain=$(DOMAIN) \
+       --from-code=utf-8 \
+       --add-comments=TRANSLATORS: \
+        --keyword=_ --keyword=N_ \
+       --copyright-holder='$(COPYRIGHT_HOLDER)' \
+       --package-name="$(PACKAGE_NAME)" \
+       --package-version="$(PACKAGE_VERSION)" \
+       --msgid-bugs-address="$(MSGID_BUGS_ADDRESS)" \
+       --directory=$(top_srcdir) \
+       $(NULL)
+
+SED_PO_FIXUP_ARGS = \
+       -e "s|text/plain; charset=CHARSET|text/plain; charset=UTF-8|g" \
+       -e "s|SOME DESCRIPTIVE TITLE|Libvirt package strings|g" \
+       -e "s|Copyright (C) YEAR|Copyright (C) $$(date +'%Y')|" \
+       $(NULL)
+
+
+# Although they're in EXTRA_DIST, we still need to
+# copy these again, because update-gmo will change
+# their content, and dist-hook runs after the
+# things in EXTRA_DIST are copied.
+dist-hook: $(GMOFILES)
+       cp -f $(POTFILE:%=$(srcdir)/%) $(distdir)/
+       cp -f $(POFILES:%=$(srcdir)/%) $(distdir)/
+       cp -f $(GMOFILES:%=$(srcdir)/%) $(distdir)/
+
+update-po: $(POFILES)
+
+update-gmo: $(GMOFILES)
+
+$(POTFILE): POTFILES $(POTFILE_DEPS)
+       $(XGETTEXT) -o $(srcdir)/$@-t $(XGETTEXT_ARGS) \
+         --files-from=$(abs_srcdir)/POTFILES
+       $(SED) $(SED_PO_FIXUP_ARGS) < $@-t > $@
+       rm -f $@-t
+
+%.po: $(POTFILE)
+       cd $(srcdir) && \
+         $(MSGMERGE) --backup=off --no-fuzzy-matching --update $@ $(POTFILE)
+
+%.gmo: %.po
+       rm -f $(srcdir)/$@ $@-t
+       $(MSGFMT) -c -o $@-t $(srcdir)/$<
+       mv $@-t $(srcdir)/$@
+
+.PRECIOUS: $(POTFILE) $(POFILES)
+
+endif HAVE_GNU_GETTEXT_TOOLS
+
+# Cannot use 'localedir' since this conflicts with autoconf.
+langinstdir = $(datadir)/locale
+
+install-data-hook: $(GMOFILES)
+       mkdir -p $(DESTDIR)$(langinstdir)
+       for lang in $(LANGS); do \
+         d=$(DESTDIR)$(langinstdir)/$$lang/LC_MESSAGES; \
+         mkdir -p $$d; \
+         install -m 0644 $(srcdir)/$$lang.gmo $$d/$(DOMAIN).mo; \
+       done
+
+uninstall-hook:
+       for lang in $(LANGS); do \
+         d=$(DESTDIR)$(langinstdir)/$$lang/LC_MESSAGES; \
+         rm -f $$d/$(DOMAIN).mo; \
+       done
diff --git a/po/POTFILES b/po/POTFILES
new file mode 100644 (file)
index 0000000..be28744
--- /dev/null
@@ -0,0 +1,326 @@
+gnulib/lib/gai_strerror.c
+gnulib/lib/getopt.c
+gnulib/lib/regcomp.c
+src/access/viraccessdriverpolkit.c
+src/access/viraccessmanager.c
+src/admin/admin_server.c
+src/admin/admin_server_dispatch.c
+src/admin/admin_server_dispatch_stubs.h
+src/bhyve/bhyve_capabilities.c
+src/bhyve/bhyve_command.c
+src/bhyve/bhyve_device.c
+src/bhyve/bhyve_domain.c
+src/bhyve/bhyve_driver.c
+src/bhyve/bhyve_monitor.c
+src/bhyve/bhyve_parse_command.c
+src/bhyve/bhyve_process.c
+src/conf/capabilities.c
+src/conf/cpu_conf.c
+src/conf/device_conf.c
+src/conf/domain_addr.c
+src/conf/domain_capabilities.c
+src/conf/domain_conf.c
+src/conf/domain_event.c
+src/conf/interface_conf.c
+src/conf/netdev_bandwidth_conf.c
+src/conf/netdev_vlan_conf.c
+src/conf/netdev_vport_profile_conf.c
+src/conf/network_conf.c
+src/conf/networkcommon_conf.c
+src/conf/node_device_conf.c
+src/conf/numa_conf.c
+src/conf/nwfilter_conf.c
+src/conf/nwfilter_params.c
+src/conf/object_event.c
+src/conf/secret_conf.c
+src/conf/snapshot_conf.c
+src/conf/storage_adapter_conf.c
+src/conf/storage_conf.c
+src/conf/virchrdev.c
+src/conf/virdomainobjlist.c
+src/conf/virnetworkobj.c
+src/conf/virnodedeviceobj.c
+src/conf/virnwfilterobj.c
+src/conf/virsavecookie.c
+src/conf/virsecretobj.c
+src/conf/virstorageobj.c
+src/cpu/cpu.c
+src/cpu/cpu_arm.c
+src/cpu/cpu_map.c
+src/cpu/cpu_ppc64.c
+src/cpu/cpu_s390.c
+src/cpu/cpu_x86.c
+src/datatypes.c
+src/driver.c
+src/esx/esx_driver.c
+src/esx/esx_network_driver.c
+src/esx/esx_storage_backend_iscsi.c
+src/esx/esx_storage_backend_vmfs.c
+src/esx/esx_storage_driver.c
+src/esx/esx_stream.c
+src/esx/esx_util.c
+src/esx/esx_vi.c
+src/esx/esx_vi_methods.c
+src/esx/esx_vi_types.c
+src/hyperv/hyperv_driver.c
+src/hyperv/hyperv_util.c
+src/hyperv/hyperv_wmi.c
+src/interface/interface_backend_netcf.c
+src/interface/interface_backend_udev.c
+src/internal.h
+src/libvirt-admin.c
+src/libvirt-domain-snapshot.c
+src/libvirt-domain.c
+src/libvirt-host.c
+src/libvirt-lxc.c
+src/libvirt-network.c
+src/libvirt-nodedev.c
+src/libvirt-nwfilter.c
+src/libvirt-qemu.c
+src/libvirt-secret.c
+src/libvirt-storage.c
+src/libvirt-stream.c
+src/libvirt.c
+src/libxl/libxl_capabilities.c
+src/libxl/libxl_conf.c
+src/libxl/libxl_domain.c
+src/libxl/libxl_driver.c
+src/libxl/libxl_migration.c
+src/locking/lock_daemon.c
+src/locking/lock_daemon_dispatch.c
+src/locking/lock_driver_lockd.c
+src/locking/lock_driver_sanlock.c
+src/locking/lock_manager.c
+src/locking/sanlock_helper.c
+src/logging/log_daemon.c
+src/logging/log_daemon_dispatch.c
+src/logging/log_handler.c
+src/logging/log_manager.c
+src/lxc/lxc_cgroup.c
+src/lxc/lxc_conf.c
+src/lxc/lxc_container.c
+src/lxc/lxc_controller.c
+src/lxc/lxc_domain.c
+src/lxc/lxc_driver.c
+src/lxc/lxc_fuse.c
+src/lxc/lxc_hostdev.c
+src/lxc/lxc_native.c
+src/lxc/lxc_process.c
+src/network/bridge_driver.c
+src/network/bridge_driver_linux.c
+src/network/leaseshelper.c
+src/node_device/node_device_driver.c
+src/node_device/node_device_hal.c
+src/node_device/node_device_udev.c
+src/nwfilter/nwfilter_dhcpsnoop.c
+src/nwfilter/nwfilter_driver.c
+src/nwfilter/nwfilter_ebiptables_driver.c
+src/nwfilter/nwfilter_gentech_driver.c
+src/nwfilter/nwfilter_learnipaddr.c
+src/openvz/openvz_conf.c
+src/openvz/openvz_driver.c
+src/openvz/openvz_util.c
+src/phyp/phyp_driver.c
+src/qemu/qemu_agent.c
+src/qemu/qemu_alias.c
+src/qemu/qemu_block.c
+src/qemu/qemu_capabilities.c
+src/qemu/qemu_cgroup.c
+src/qemu/qemu_command.c
+src/qemu/qemu_conf.c
+src/qemu/qemu_domain.c
+src/qemu/qemu_domain_address.c
+src/qemu/qemu_driver.c
+src/qemu/qemu_hostdev.c
+src/qemu/qemu_hotplug.c
+src/qemu/qemu_interface.c
+src/qemu/qemu_migration.c
+src/qemu/qemu_migration_cookie.c
+src/qemu/qemu_migration_params.c
+src/qemu/qemu_monitor.c
+src/qemu/qemu_monitor_json.c
+src/qemu/qemu_monitor_text.c
+src/qemu/qemu_parse_command.c
+src/qemu/qemu_process.c
+src/qemu/qemu_qapi.c
+src/remote/remote_client_bodies.h
+src/remote/remote_daemon.c
+src/remote/remote_daemon_config.c
+src/remote/remote_daemon_dispatch.c
+src/remote/remote_daemon_dispatch_stubs.h
+src/remote/remote_daemon_dispatch_qemu_stubs.h
+src/remote/remote_daemon_stream.c
+src/remote/remote_driver.c
+src/rpc/virkeepalive.c
+src/rpc/virnetclient.c
+src/rpc/virnetclientprogram.c
+src/rpc/virnetclientstream.c
+src/rpc/virnetdaemon.c
+src/rpc/virnetlibsshsession.c
+src/rpc/virnetmessage.c
+src/rpc/virnetsaslcontext.c
+src/rpc/virnetserver.c
+src/rpc/virnetserverclient.c
+src/rpc/virnetservermdns.c
+src/rpc/virnetserverprogram.c
+src/rpc/virnetserverservice.c
+src/rpc/virnetsocket.c
+src/rpc/virnetsshsession.c
+src/rpc/virnettlscontext.c
+src/secret/secret_driver.c
+src/security/security_apparmor.c
+src/security/security_dac.c
+src/security/security_driver.c
+src/security/security_manager.c
+src/security/security_selinux.c
+src/security/virt-aa-helper.c
+src/storage/parthelper.c
+src/storage/storage_backend.c
+src/storage/storage_backend_disk.c
+src/storage/storage_backend_fs.c
+src/storage/storage_backend_gluster.c
+src/storage/storage_backend_iscsi.c
+src/storage/storage_backend_logical.c
+src/storage/storage_backend_mpath.c
+src/storage/storage_backend_rbd.c
+src/storage/storage_backend_scsi.c
+src/storage/storage_backend_sheepdog.c
+src/storage/storage_backend_vstorage.c
+src/storage/storage_backend_zfs.c
+src/storage/storage_driver.c
+src/storage/storage_util.c
+src/test/test_driver.c
+src/uml/uml_conf.c
+src/uml/uml_driver.c
+src/util/iohelper.c
+src/util/viralloc.c
+src/util/virarptable.c
+src/util/viraudit.c
+src/util/virauth.c
+src/util/virauthconfig.c
+src/util/virbitmap.c
+src/util/virbuffer.c
+src/util/vircgroup.c
+src/util/virclosecallbacks.c
+src/util/vircommand.c
+src/util/virconf.c
+src/util/vircrypto.c
+src/util/virdbus.c
+src/util/virdnsmasq.c
+src/util/virerror.c
+src/util/virerror.h
+src/util/vireventpoll.c
+src/util/virfcp.c
+src/util/virfdstream.c
+src/util/virfile.c
+src/util/virfilecache.c
+src/util/virfirewall.c
+src/util/virfirmware.c
+src/util/virhash.c
+src/util/virhook.c
+src/util/virhostcpu.c
+src/util/virhostdev.c
+src/util/virhostmem.c
+src/util/viridentity.c
+src/util/virinitctl.c
+src/util/viriptables.c
+src/util/viriscsi.c
+src/util/virjson.c
+src/util/virkeyfile.c
+src/util/virlease.c
+src/util/virlockspace.c
+src/util/virlog.c
+src/util/virmacmap.c
+src/util/virmdev.c
+src/util/virnetdev.c
+src/util/virnetdevbandwidth.c
+src/util/virnetdevbridge.c
+src/util/virnetdevip.c
+src/util/virnetdevmacvlan.c
+src/util/virnetdevmidonet.c
+src/util/virnetdevopenvswitch.c
+src/util/virnetdevtap.c
+src/util/virnetdevveth.c
+src/util/virnetdevvportprofile.c
+src/util/virnetlink.c
+src/util/virnodesuspend.c
+src/util/virnuma.c
+src/util/virobject.c
+src/util/virpci.c
+src/util/virperf.c
+src/util/virpidfile.c
+src/util/virpolkit.c
+src/util/virportallocator.c
+src/util/virprocess.c
+src/util/virqemu.c
+src/util/virrandom.c
+src/util/virresctrl.c
+src/util/virrotatingfile.c
+src/util/virscsi.c
+src/util/virscsihost.c
+src/util/virscsivhost.c
+src/util/virsecret.c
+src/util/virsexpr.c
+src/util/virsocketaddr.c
+src/util/virstorageencryption.c
+src/util/virstoragefile.c
+src/util/virstoragefilebackend.c
+src/util/virstring.c
+src/util/virsysinfo.c
+src/util/virthreadjob.c
+src/util/virthreadpool.c
+src/util/virtime.c
+src/util/virtpm.c
+src/util/virtypedparam.c
+src/util/viruri.c
+src/util/virusb.c
+src/util/virutil.c
+src/util/virvhba.c
+src/util/virxml.c
+src/vbox/vbox_MSCOMGlue.c
+src/vbox/vbox_XPCOMCGlue.c
+src/vbox/vbox_common.c
+src/vbox/vbox_driver.c
+src/vbox/vbox_network.c
+src/vbox/vbox_snapshot_conf.c
+src/vbox/vbox_storage.c
+src/vbox/vbox_tmpl.c
+src/vmware/vmware_conf.c
+src/vmware/vmware_driver.c
+src/vmx/vmx.c
+src/vz/vz_driver.c
+src/vz/vz_sdk.c
+src/vz/vz_utils.c
+src/vz/vz_utils.h
+src/xenapi/xenapi_driver.c
+src/xenapi/xenapi_utils.c
+src/xenconfig/xen_common.c
+src/xenconfig/xen_sxpr.c
+src/xenconfig/xen_xl.c
+src/xenconfig/xen_xm.c
+tests/virpolkittest.c
+tools/libvirt-guests.sh.in
+tools/virsh-console.c
+tools/virsh-domain-monitor.c
+tools/virsh-domain.c
+tools/virsh-edit.c
+tools/virsh-host.c
+tools/virsh-interface.c
+tools/virsh-network.c
+tools/virsh-nodedev.c
+tools/virsh-nwfilter.c
+tools/virsh-pool.c
+tools/virsh-secret.c
+tools/virsh-snapshot.c
+tools/virsh-util.c
+tools/virsh-volume.c
+tools/virsh.c
+tools/virt-admin.c
+tools/virt-host-validate-bhyve.c
+tools/virt-host-validate-common.c
+tools/virt-host-validate-lxc.c
+tools/virt-host-validate-qemu.c
+tools/virt-host-validate.c
+tools/virt-login-shell.c
+tools/vsh.c
+tools/vsh.h
diff --git a/po/POTFILES.in b/po/POTFILES.in
deleted file mode 100644 (file)
index be28744..0000000
+++ /dev/null
@@ -1,326 +0,0 @@
-gnulib/lib/gai_strerror.c
-gnulib/lib/getopt.c
-gnulib/lib/regcomp.c
-src/access/viraccessdriverpolkit.c
-src/access/viraccessmanager.c
-src/admin/admin_server.c
-src/admin/admin_server_dispatch.c
-src/admin/admin_server_dispatch_stubs.h
-src/bhyve/bhyve_capabilities.c
-src/bhyve/bhyve_command.c
-src/bhyve/bhyve_device.c
-src/bhyve/bhyve_domain.c
-src/bhyve/bhyve_driver.c
-src/bhyve/bhyve_monitor.c
-src/bhyve/bhyve_parse_command.c
-src/bhyve/bhyve_process.c
-src/conf/capabilities.c
-src/conf/cpu_conf.c
-src/conf/device_conf.c
-src/conf/domain_addr.c
-src/conf/domain_capabilities.c
-src/conf/domain_conf.c
-src/conf/domain_event.c
-src/conf/interface_conf.c
-src/conf/netdev_bandwidth_conf.c
-src/conf/netdev_vlan_conf.c
-src/conf/netdev_vport_profile_conf.c
-src/conf/network_conf.c
-src/conf/networkcommon_conf.c
-src/conf/node_device_conf.c
-src/conf/numa_conf.c
-src/conf/nwfilter_conf.c
-src/conf/nwfilter_params.c
-src/conf/object_event.c
-src/conf/secret_conf.c
-src/conf/snapshot_conf.c
-src/conf/storage_adapter_conf.c
-src/conf/storage_conf.c
-src/conf/virchrdev.c
-src/conf/virdomainobjlist.c
-src/conf/virnetworkobj.c
-src/conf/virnodedeviceobj.c
-src/conf/virnwfilterobj.c
-src/conf/virsavecookie.c
-src/conf/virsecretobj.c
-src/conf/virstorageobj.c
-src/cpu/cpu.c
-src/cpu/cpu_arm.c
-src/cpu/cpu_map.c
-src/cpu/cpu_ppc64.c
-src/cpu/cpu_s390.c
-src/cpu/cpu_x86.c
-src/datatypes.c
-src/driver.c
-src/esx/esx_driver.c
-src/esx/esx_network_driver.c
-src/esx/esx_storage_backend_iscsi.c
-src/esx/esx_storage_backend_vmfs.c
-src/esx/esx_storage_driver.c
-src/esx/esx_stream.c
-src/esx/esx_util.c
-src/esx/esx_vi.c
-src/esx/esx_vi_methods.c
-src/esx/esx_vi_types.c
-src/hyperv/hyperv_driver.c
-src/hyperv/hyperv_util.c
-src/hyperv/hyperv_wmi.c
-src/interface/interface_backend_netcf.c
-src/interface/interface_backend_udev.c
-src/internal.h
-src/libvirt-admin.c
-src/libvirt-domain-snapshot.c
-src/libvirt-domain.c
-src/libvirt-host.c
-src/libvirt-lxc.c
-src/libvirt-network.c
-src/libvirt-nodedev.c
-src/libvirt-nwfilter.c
-src/libvirt-qemu.c
-src/libvirt-secret.c
-src/libvirt-storage.c
-src/libvirt-stream.c
-src/libvirt.c
-src/libxl/libxl_capabilities.c
-src/libxl/libxl_conf.c
-src/libxl/libxl_domain.c
-src/libxl/libxl_driver.c
-src/libxl/libxl_migration.c
-src/locking/lock_daemon.c
-src/locking/lock_daemon_dispatch.c
-src/locking/lock_driver_lockd.c
-src/locking/lock_driver_sanlock.c
-src/locking/lock_manager.c
-src/locking/sanlock_helper.c
-src/logging/log_daemon.c
-src/logging/log_daemon_dispatch.c
-src/logging/log_handler.c
-src/logging/log_manager.c
-src/lxc/lxc_cgroup.c
-src/lxc/lxc_conf.c
-src/lxc/lxc_container.c
-src/lxc/lxc_controller.c
-src/lxc/lxc_domain.c
-src/lxc/lxc_driver.c
-src/lxc/lxc_fuse.c
-src/lxc/lxc_hostdev.c
-src/lxc/lxc_native.c
-src/lxc/lxc_process.c
-src/network/bridge_driver.c
-src/network/bridge_driver_linux.c
-src/network/leaseshelper.c
-src/node_device/node_device_driver.c
-src/node_device/node_device_hal.c
-src/node_device/node_device_udev.c
-src/nwfilter/nwfilter_dhcpsnoop.c
-src/nwfilter/nwfilter_driver.c
-src/nwfilter/nwfilter_ebiptables_driver.c
-src/nwfilter/nwfilter_gentech_driver.c
-src/nwfilter/nwfilter_learnipaddr.c
-src/openvz/openvz_conf.c
-src/openvz/openvz_driver.c
-src/openvz/openvz_util.c
-src/phyp/phyp_driver.c
-src/qemu/qemu_agent.c
-src/qemu/qemu_alias.c
-src/qemu/qemu_block.c
-src/qemu/qemu_capabilities.c
-src/qemu/qemu_cgroup.c
-src/qemu/qemu_command.c
-src/qemu/qemu_conf.c
-src/qemu/qemu_domain.c
-src/qemu/qemu_domain_address.c
-src/qemu/qemu_driver.c
-src/qemu/qemu_hostdev.c
-src/qemu/qemu_hotplug.c
-src/qemu/qemu_interface.c
-src/qemu/qemu_migration.c
-src/qemu/qemu_migration_cookie.c
-src/qemu/qemu_migration_params.c
-src/qemu/qemu_monitor.c
-src/qemu/qemu_monitor_json.c
-src/qemu/qemu_monitor_text.c
-src/qemu/qemu_parse_command.c
-src/qemu/qemu_process.c
-src/qemu/qemu_qapi.c
-src/remote/remote_client_bodies.h
-src/remote/remote_daemon.c
-src/remote/remote_daemon_config.c
-src/remote/remote_daemon_dispatch.c
-src/remote/remote_daemon_dispatch_stubs.h
-src/remote/remote_daemon_dispatch_qemu_stubs.h
-src/remote/remote_daemon_stream.c
-src/remote/remote_driver.c
-src/rpc/virkeepalive.c
-src/rpc/virnetclient.c
-src/rpc/virnetclientprogram.c
-src/rpc/virnetclientstream.c
-src/rpc/virnetdaemon.c
-src/rpc/virnetlibsshsession.c
-src/rpc/virnetmessage.c
-src/rpc/virnetsaslcontext.c
-src/rpc/virnetserver.c
-src/rpc/virnetserverclient.c
-src/rpc/virnetservermdns.c
-src/rpc/virnetserverprogram.c
-src/rpc/virnetserverservice.c
-src/rpc/virnetsocket.c
-src/rpc/virnetsshsession.c
-src/rpc/virnettlscontext.c
-src/secret/secret_driver.c
-src/security/security_apparmor.c
-src/security/security_dac.c
-src/security/security_driver.c
-src/security/security_manager.c
-src/security/security_selinux.c
-src/security/virt-aa-helper.c
-src/storage/parthelper.c
-src/storage/storage_backend.c
-src/storage/storage_backend_disk.c
-src/storage/storage_backend_fs.c
-src/storage/storage_backend_gluster.c
-src/storage/storage_backend_iscsi.c
-src/storage/storage_backend_logical.c
-src/storage/storage_backend_mpath.c
-src/storage/storage_backend_rbd.c
-src/storage/storage_backend_scsi.c
-src/storage/storage_backend_sheepdog.c
-src/storage/storage_backend_vstorage.c
-src/storage/storage_backend_zfs.c
-src/storage/storage_driver.c
-src/storage/storage_util.c
-src/test/test_driver.c
-src/uml/uml_conf.c
-src/uml/uml_driver.c
-src/util/iohelper.c
-src/util/viralloc.c
-src/util/virarptable.c
-src/util/viraudit.c
-src/util/virauth.c
-src/util/virauthconfig.c
-src/util/virbitmap.c
-src/util/virbuffer.c
-src/util/vircgroup.c
-src/util/virclosecallbacks.c
-src/util/vircommand.c
-src/util/virconf.c
-src/util/vircrypto.c
-src/util/virdbus.c
-src/util/virdnsmasq.c
-src/util/virerror.c
-src/util/virerror.h
-src/util/vireventpoll.c
-src/util/virfcp.c
-src/util/virfdstream.c
-src/util/virfile.c
-src/util/virfilecache.c
-src/util/virfirewall.c
-src/util/virfirmware.c
-src/util/virhash.c
-src/util/virhook.c
-src/util/virhostcpu.c
-src/util/virhostdev.c
-src/util/virhostmem.c
-src/util/viridentity.c
-src/util/virinitctl.c
-src/util/viriptables.c
-src/util/viriscsi.c
-src/util/virjson.c
-src/util/virkeyfile.c
-src/util/virlease.c
-src/util/virlockspace.c
-src/util/virlog.c
-src/util/virmacmap.c
-src/util/virmdev.c
-src/util/virnetdev.c
-src/util/virnetdevbandwidth.c
-src/util/virnetdevbridge.c
-src/util/virnetdevip.c
-src/util/virnetdevmacvlan.c
-src/util/virnetdevmidonet.c
-src/util/virnetdevopenvswitch.c
-src/util/virnetdevtap.c
-src/util/virnetdevveth.c
-src/util/virnetdevvportprofile.c
-src/util/virnetlink.c
-src/util/virnodesuspend.c
-src/util/virnuma.c
-src/util/virobject.c
-src/util/virpci.c
-src/util/virperf.c
-src/util/virpidfile.c
-src/util/virpolkit.c
-src/util/virportallocator.c
-src/util/virprocess.c
-src/util/virqemu.c
-src/util/virrandom.c
-src/util/virresctrl.c
-src/util/virrotatingfile.c
-src/util/virscsi.c
-src/util/virscsihost.c
-src/util/virscsivhost.c
-src/util/virsecret.c
-src/util/virsexpr.c
-src/util/virsocketaddr.c
-src/util/virstorageencryption.c
-src/util/virstoragefile.c
-src/util/virstoragefilebackend.c
-src/util/virstring.c
-src/util/virsysinfo.c
-src/util/virthreadjob.c
-src/util/virthreadpool.c
-src/util/virtime.c
-src/util/virtpm.c
-src/util/virtypedparam.c
-src/util/viruri.c
-src/util/virusb.c
-src/util/virutil.c
-src/util/virvhba.c
-src/util/virxml.c
-src/vbox/vbox_MSCOMGlue.c
-src/vbox/vbox_XPCOMCGlue.c
-src/vbox/vbox_common.c
-src/vbox/vbox_driver.c
-src/vbox/vbox_network.c
-src/vbox/vbox_snapshot_conf.c
-src/vbox/vbox_storage.c
-src/vbox/vbox_tmpl.c
-src/vmware/vmware_conf.c
-src/vmware/vmware_driver.c
-src/vmx/vmx.c
-src/vz/vz_driver.c
-src/vz/vz_sdk.c
-src/vz/vz_utils.c
-src/vz/vz_utils.h
-src/xenapi/xenapi_driver.c
-src/xenapi/xenapi_utils.c
-src/xenconfig/xen_common.c
-src/xenconfig/xen_sxpr.c
-src/xenconfig/xen_xl.c
-src/xenconfig/xen_xm.c
-tests/virpolkittest.c
-tools/libvirt-guests.sh.in
-tools/virsh-console.c
-tools/virsh-domain-monitor.c
-tools/virsh-domain.c
-tools/virsh-edit.c
-tools/virsh-host.c
-tools/virsh-interface.c
-tools/virsh-network.c
-tools/virsh-nodedev.c
-tools/virsh-nwfilter.c
-tools/virsh-pool.c
-tools/virsh-secret.c
-tools/virsh-snapshot.c
-tools/virsh-util.c
-tools/virsh-volume.c
-tools/virsh.c
-tools/virt-admin.c
-tools/virt-host-validate-bhyve.c
-tools/virt-host-validate-common.c
-tools/virt-host-validate-lxc.c
-tools/virt-host-validate-qemu.c
-tools/virt-host-validate.c
-tools/virt-login-shell.c
-tools/vsh.c
-tools/vsh.h
diff --git a/po/README.md b/po/README.md
new file mode 100644 (file)
index 0000000..ba3d07c
--- /dev/null
@@ -0,0 +1,36 @@
+Libvirt Message Translation
+===========================
+
+Libvirt translatable messages are maintained using the GNU Gettext tools and
+file formats, in combination with the Zanata web service.
+
+Source repository
+=================
+
+The libvirt GIT repository stores the master "libvirt.pot" file and full "po"
+files for translations. The master "libvirt.pot" file can be re-generated using
+
+   make libvirt.pot
+
+The full po files can have their source locations and msgids updated using
+
+   make update-po
+
+Normally these updates are only done when either refreshing translations from
+Zanata, or when creating a new release.
+
+Zanata web service
+==================
+
+The translation of libvirt messages has been outsourced to the Fedora
+translation team using the Zanata web service:
+
+  https://fedora.zanata.org/project/view/libvirt
+
+As such, changes to translations will generally NOT be accepted as patches
+directly to libvirt GIT. Any changes made to "$LANG.mini.po" files in libvirt
+GIT will be overwritten and lost the next time content is imported from Zanata.
+
+The master "libvirt.pot" file is periodically pushed to Zanata to provide the
+translation team with content changes. New translated text is then periodically
+pulled down from Zanata to update the po files.
index 1760e3b69cb47004f7bf511bfbc8683a1e8ad5eb..47ff0479d232302284070c9c7af5ae7145990119 100644 (file)
@@ -26,6 +26,7 @@
 # include <verify.h>
 # include <stdbool.h>
 # include <stdint.h>
+# include <string.h>
 
 # if STATIC_ANALYSIS
 #  undef NDEBUG /* Don't let a prior NDEBUG definition cause trouble.  */
 /* The library itself needs to know enum sizes.  */
 # define VIR_ENUM_SENTINELS
 
-/* All uses of _() within the library should pick up translations from
- * libvirt's message files, rather than from the package that is
- * linking in the library.  Setting this macro before including
- * "gettext.h" means that gettext() (and _()) will properly expand to
- * dgettext.  */
-# define DEFAULT_TEXT_DOMAIN PACKAGE
-# include "gettext.h"
-# define _(str) gettext(str)
+# ifdef HAVE_LIBINTL_H
+#  define DEFAULT_TEXT_DOMAIN PACKAGE
+#  include <libintl.h>
+#  define _(str) dgettext(PACKAGE, str)
+# else /* HAVE_LIBINTL_H */
+#  define _(str) str
+# endif /* HAVE_LIBINTL_H */
 # define N_(str) str
 
 # include "libvirt/libvirt.h"
index a1a0d567a627693f7baf0a07a0145ee501c6e003..4d3f2415927d7942b45204672d041c38dacbfdc6 100644 (file)
@@ -64,8 +64,10 @@ virAdmGlobalInit(void)
 
     virLogSetFromEnv();
 
+#ifdef HAVE_LIBINTL_H
     if (!bindtextdomain(PACKAGE, LOCALEDIR))
         goto error;
+#endif /* HAVE_LIBINTL_H */
 
     if (!VIR_CLASS_NEW(remoteAdminPriv, virClassForObjectLockable()))
         goto error;
index 0b6bd6666ed710d86128665cde3e7f3359c6e248..0a81cbfb99b459b93b55e9d3bd012974df490a2c 100644 (file)
@@ -363,8 +363,10 @@ virGlobalInit(void)
         goto error;
 #endif
 
+#ifdef HAVE_LIBINTL_H
     if (!bindtextdomain(PACKAGE, LOCALEDIR))
         goto error;
+#endif /* HAVE_LIBINTL_H */
 
     /*
      * Note we must avoid everything except 'remote' driver
index c0135b4ea40e22566c096e14e97c9a321ce16d05..f583eaf8c4a1922e18126d2abfc6af4397ac9d1b 100644 (file)
@@ -37,6 +37,7 @@
 int
 virGettextInitialize(void)
 {
+#if HAVE_LIBINTL_H
     if (!setlocale(LC_ALL, "")) {
         perror("setlocale");
         /* failure to setup locale is not fatal */
@@ -51,6 +52,6 @@ virGettextInitialize(void)
         perror("textdomain");
         return -1;
     }
-
+#endif /* HAVE_LIBINTL_H */
     return 0;
 }
index 29d2482b6c045ace3fdd9635517fdbb42927fe37..1470bf1c7d9a62380983f47834c54739b2b6b54c 100644 (file)
@@ -23,7 +23,9 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <gettext.h>
+#ifdef HAVE_LIBINTL_H
+# include <libintl.h>
+#endif /* HAVE_LIBINTL_H */
 #include <getopt.h>
 
 #include "internal.h"