All of lore.kernel.org
 help / color / mirror / Atom feed
* Translate or not?
@ 2022-04-01  9:57 Petr Lautrbach
  2022-04-01  9:57 ` [PATCH] Split po/ translation files into the relevant sub-directories Petr Lautrbach
  0 siblings, 1 reply; 4+ messages in thread
From: Petr Lautrbach @ 2022-04-01  9:57 UTC (permalink / raw)
  To: selinux

Hello,

the translations in this project wasn't really updated since 2013. There was only a minor French
translation update in 2016.

OTOH Fedora project still provides translations which are used there
https://translate.fedoraproject.org/projects/selinux/

Also there's was a split back in 2016 which moved gui, python and sandbox out of
policycoreutils.

The following patch splits also the translations. And there's second patch
available in my github repository which updates the translations from
https://translate.fedoraproject.org/projects/selinux/ and which is too big
for this list:

https://github.com/bachradsusi/SELinuxProject-selinux/commit/afa35aea4a95089d9c99504e627fb573d836f7e8

Thanks,

Petr


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] Split po/ translation files into the relevant sub-directories
  2022-04-01  9:57 Translate or not? Petr Lautrbach
@ 2022-04-01  9:57 ` Petr Lautrbach
  2022-04-04 21:08   ` James Carter
  0 siblings, 1 reply; 4+ messages in thread
From: Petr Lautrbach @ 2022-04-01  9:57 UTC (permalink / raw)
  To: selinux; +Cc: Petr Lautrbach

When policycoreutils was split into policycoreutils/ python/ gui/ and sandbox/
sub-directories, po/ translation files stayed in policycoreutils/.

This commit splits original policycoreutils translations to
policycoreutils, selinux-python, selinux-gui, and selinux-sandbox.

See original Fedora issue https://github.com/fedora-selinux/selinux/issues/43

Signed-off-by: Petr Lautrbach <plautrba@redhat.com>
---
 gui/Makefile                                 |  4 +
 gui/booleansPage.py                          |  2 +-
 gui/domainsPage.py                           |  2 +-
 gui/fcontextPage.py                          |  2 +-
 gui/loginsPage.py                            |  2 +-
 gui/modulesPage.py                           |  2 +-
 gui/po/Makefile                              | 84 +++++++++++++++++++
 gui/po/POTFILES                              | 17 ++++
 gui/polgengui.py                             |  2 +-
 gui/portsPage.py                             |  2 +-
 gui/semanagePage.py                          |  2 +-
 gui/statusPage.py                            |  2 +-
 gui/system-config-selinux.py                 |  2 +-
 gui/usersPage.py                             |  2 +-
 policycoreutils/po/Makefile                  | 72 ++---------------
 policycoreutils/po/POTFILES                  |  9 +++
 python/Makefile                              |  2 +-
 python/chcat/chcat                           |  2 +-
 python/po/Makefile                           | 85 ++++++++++++++++++++
 python/po/POTFILES                           | 10 +++
 python/semanage/semanage                     |  2 +-
 python/semanage/seobject.py                  |  2 +-
 python/sepolgen/src/sepolgen/sepolgeni18n.py |  2 +-
 python/sepolicy/sepolicy.py                  |  2 +-
 python/sepolicy/sepolicy/__init__.py         |  2 +-
 python/sepolicy/sepolicy/generate.py         |  2 +-
 python/sepolicy/sepolicy/gui.py              |  2 +-
 python/sepolicy/sepolicy/interface.py        |  2 +-
 sandbox/Makefile                             |  3 +
 sandbox/po/Makefile                          | 84 +++++++++++++++++++
 sandbox/po/POTFILES                          |  1 +
 sandbox/sandbox                              |  2 +-
 32 files changed, 324 insertions(+), 89 deletions(-)
 create mode 100644 gui/po/Makefile
 create mode 100644 gui/po/POTFILES
 create mode 100644 policycoreutils/po/POTFILES
 create mode 100644 python/po/Makefile
 create mode 100644 python/po/POTFILES
 create mode 100644 sandbox/po/Makefile
 create mode 100644 sandbox/po/POTFILES

diff --git a/gui/Makefile b/gui/Makefile
index ca965c942912..4035fb21b8c9 100644
--- a/gui/Makefile
+++ b/gui/Makefile
@@ -22,6 +22,7 @@ system-config-selinux.ui \
 usersPage.py
 
 all: $(TARGETS) system-config-selinux.py polgengui.py
+	(cd po && $(MAKE) $@)
 
 install: all
 	-mkdir -p $(DESTDIR)$(MANDIR)/man8
@@ -54,7 +55,10 @@ install: all
 		install -m 644 sepolicy_$${i}.png $(DESTDIR)$(DATADIR)/icons/hicolor/$${i}x$${i}/apps/sepolicy.png; \
 	done
 	install -m 644 org.selinux.config.policy $(DESTDIR)$(DATADIR)/polkit-1/actions/
+	(cd po && $(MAKE) $@)
+
 clean:
+	(cd po && $(MAKE) $@)
 
 indent:
 
diff --git a/gui/booleansPage.py b/gui/booleansPage.py
index 7849bea26a06..dd12b6d6ab86 100644
--- a/gui/booleansPage.py
+++ b/gui/booleansPage.py
@@ -38,7 +38,7 @@ DISABLED = 2
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-gui"
 try:
     import gettext
     kwargs = {}
diff --git a/gui/domainsPage.py b/gui/domainsPage.py
index bad5140d8c59..6bbe4de5884f 100644
--- a/gui/domainsPage.py
+++ b/gui/domainsPage.py
@@ -30,7 +30,7 @@ from semanagePage import *
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-gui"
 try:
     import gettext
     kwargs = {}
diff --git a/gui/fcontextPage.py b/gui/fcontextPage.py
index d26aa1b405a9..52292cae01d2 100644
--- a/gui/fcontextPage.py
+++ b/gui/fcontextPage.py
@@ -47,7 +47,7 @@ class context:
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-gui"
 try:
     import gettext
     kwargs = {}
diff --git a/gui/loginsPage.py b/gui/loginsPage.py
index b67eb8bc42af..cbfb0cc23f65 100644
--- a/gui/loginsPage.py
+++ b/gui/loginsPage.py
@@ -29,7 +29,7 @@ from semanagePage import *
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-gui"
 try:
     import gettext
     kwargs = {}
diff --git a/gui/modulesPage.py b/gui/modulesPage.py
index 0584acf9b3a4..35a0129bab9c 100644
--- a/gui/modulesPage.py
+++ b/gui/modulesPage.py
@@ -30,7 +30,7 @@ from semanagePage import *
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-gui"
 try:
     import gettext
     kwargs = {}
diff --git a/gui/po/Makefile b/gui/po/Makefile
new file mode 100644
index 000000000000..7ccd48eb2422
--- /dev/null
+++ b/gui/po/Makefile
@@ -0,0 +1,84 @@
+#
+# Makefile for the PO files (translation) catalog
+#
+
+PREFIX ?= /usr
+
+# What is this package?
+NLSPACKAGE	= gui
+POTFILE		= $(NLSPACKAGE).pot
+INSTALL		= /usr/bin/install -c -p
+INSTALL_DATA	= $(INSTALL) -m 644
+INSTALL_DIR	= /usr/bin/install -d
+
+# destination directory
+INSTALL_NLS_DIR = $(PREFIX)/share/locale
+
+# PO catalog handling
+MSGMERGE	= msgmerge
+MSGMERGE_FLAGS	= -q
+XGETTEXT	= xgettext --default-domain=$(NLSPACKAGE)
+MSGFMT		= msgfmt
+
+# All possible linguas
+PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po)))
+
+# Only the files matching what the user has set in LINGUAS
+USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS))
+
+# if no valid LINGUAS, build all languages
+USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
+
+POFILES		= $(patsubst %,%.po,$(USE_LINGUAS))
+MOFILES		= $(patsubst %.po,%.mo,$(POFILES))
+POTFILES  = $(shell cat POTFILES)
+
+#default:: clean
+
+all::  $(MOFILES)
+
+$(POTFILE): $(POTFILES)
+	$(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES)
+	@if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
+	    rm -f $(NLSPACKAGE).po; \
+	else \
+	    mv -f $(NLSPACKAGE).po $(POTFILE); \
+	fi; \
+
+
+refresh-po: Makefile
+	for cat in $(POFILES); do \
+		lang=`basename $$cat .po`; \
+		if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \
+			mv -f $$lang.pot $$lang.po ; \
+			echo "$(MSGMERGE) of $$lang succeeded" ; \
+		else \
+			echo "$(MSGMERGE) of $$lang failed" ; \
+			rm -f $$lang.pot ; \
+		fi \
+	done
+
+clean:
+	@rm -fv *mo *~ .depend
+	@rm -rf tmp
+
+install: $(MOFILES)
+	@for n in $(MOFILES); do \
+	    l=`basename $$n .mo`; \
+	    $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \
+	    $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \
+	done
+
+%.mo: %.po
+	$(MSGFMT) -o $@ $<
+report:
+	@for cat in $(wildcard *.po); do \
+                echo -n "$$cat: "; \
+                msgfmt -v --statistics -o /dev/null $$cat; \
+        done
+
+.PHONY: missing depend
+
+relabel:
+
+test:
diff --git a/gui/po/POTFILES b/gui/po/POTFILES
new file mode 100644
index 000000000000..1795c5c1951b
--- /dev/null
+++ b/gui/po/POTFILES
@@ -0,0 +1,17 @@
+../booleansPage.py
+../domainsPage.py
+../fcontextPage.py
+../loginsPage.py
+../modulesPage.py
+../org.selinux.config.policy
+../polgengui.py
+../polgen.ui
+../portsPage.py
+../selinux-polgengui.desktop
+../semanagePage.py
+../sepolicy.desktop
+../statusPage.py
+../system-config-selinux.desktop
+../system-config-selinux.py
+../system-config-selinux.ui
+../usersPage.py
diff --git a/gui/polgengui.py b/gui/polgengui.py
index d284ded65279..01f541bafae8 100644
--- a/gui/polgengui.py
+++ b/gui/polgengui.py
@@ -63,7 +63,7 @@ def get_all_modules():
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-gui"
 try:
     import gettext
     kwargs = {}
diff --git a/gui/portsPage.py b/gui/portsPage.py
index 30f58383bc1d..a537ecc8c0a1 100644
--- a/gui/portsPage.py
+++ b/gui/portsPage.py
@@ -35,7 +35,7 @@ from semanagePage import *
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-gui"
 try:
     import gettext
     kwargs = {}
diff --git a/gui/semanagePage.py b/gui/semanagePage.py
index 4127804fbbee..5361d69c1313 100644
--- a/gui/semanagePage.py
+++ b/gui/semanagePage.py
@@ -22,7 +22,7 @@ from gi.repository import Gdk, Gtk
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-gui"
 try:
     import gettext
     kwargs = {}
diff --git a/gui/statusPage.py b/gui/statusPage.py
index 766854b19cba..a8f079b9b163 100644
--- a/gui/statusPage.py
+++ b/gui/statusPage.py
@@ -35,7 +35,7 @@ RELABELFILE = "/.autorelabel"
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-gui"
 try:
     import gettext
     kwargs = {}
diff --git a/gui/system-config-selinux.py b/gui/system-config-selinux.py
index 3f70122b87e8..8c46c987b974 100644
--- a/gui/system-config-selinux.py
+++ b/gui/system-config-selinux.py
@@ -45,7 +45,7 @@ import selinux
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-gui"
 try:
     import gettext
     kwargs = {}
diff --git a/gui/usersPage.py b/gui/usersPage.py
index 26794ed5c3f3..d15d4c5a71dd 100644
--- a/gui/usersPage.py
+++ b/gui/usersPage.py
@@ -29,7 +29,7 @@ from semanagePage import *
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-gui"
 try:
     import gettext
     kwargs = {}
diff --git a/policycoreutils/po/Makefile b/policycoreutils/po/Makefile
index 575e143122e6..5ff92bff6fdc 100644
--- a/policycoreutils/po/Makefile
+++ b/policycoreutils/po/Makefile
@@ -3,7 +3,6 @@
 #
 
 PREFIX ?= /usr
-TOP	 = ../..
 
 # What is this package?
 NLSPACKAGE	= policycoreutils
@@ -32,74 +31,13 @@ USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
 
 POFILES		= $(patsubst %,%.po,$(USE_LINGUAS))
 MOFILES		= $(patsubst %.po,%.mo,$(POFILES))
-POTFILES = \
-	../run_init/open_init_pty.c \
-	../run_init/run_init.c \
-	../semodule_link/semodule_link.c \
-	../audit2allow/audit2allow \
-	../semanage/seobject.py \
-	../setsebool/setsebool.c \
-	../newrole/newrole.c \
-	../load_policy/load_policy.c \
-	../sestatus/sestatus.c \
-	../semodule/semodule.c \
-	../setfiles/setfiles.c \
-	../semodule_package/semodule_package.c \
-	../semodule_deps/semodule_deps.c \
-	../semodule_expand/semodule_expand.c \
-	../scripts/chcat \
-	../scripts/fixfiles \
-	../restorecond/stringslist.c \
-	../restorecond/restorecond.h \
-	../restorecond/utmpwatcher.h \
-	../restorecond/stringslist.h \
-	../restorecond/restorecond.c \
-	../restorecond/utmpwatcher.c \
-	../gui/booleansPage.py \
-	../gui/fcontextPage.py \
-	../gui/loginsPage.py \
-	../gui/mappingsPage.py \
-	../gui/modulesPage.py \
-	../gui/polgen.glade \
-	../gui/polgengui.py \
-	../gui/portsPage.py \
-	../gui/semanagePage.py \
-	../gui/statusPage.py \
-	../gui/system-config-selinux.glade \
-	../gui/system-config-selinux.py \
-	../gui/usersPage.py \
-	../secon/secon.c \
-	booleans.py \
-	../sepolicy/sepolicy.py \
-	../sepolicy/sepolicy/communicate.py \
-	../sepolicy/sepolicy/__init__.py \
-	../sepolicy/sepolicy/network.py \
-	../sepolicy/sepolicy/generate.py \
-	../sepolicy/sepolicy/sepolicy.glade \
-	../sepolicy/sepolicy/gui.py \
-	../sepolicy/sepolicy/manpage.py \
-	../sepolicy/sepolicy/transition.py \
-	../sepolicy/sepolicy/templates/executable.py \
-	../sepolicy/sepolicy/templates/__init__.py \
-	../sepolicy/sepolicy/templates/network.py \
-	../sepolicy/sepolicy/templates/rw.py \
-	../sepolicy/sepolicy/templates/script.py \
-	../sepolicy/sepolicy/templates/semodule.py \
-	../sepolicy/sepolicy/templates/tmp.py \
-	../sepolicy/sepolicy/templates/user.py \
-	../sepolicy/sepolicy/templates/var_lib.py \
-	../sepolicy/sepolicy/templates/var_log.py \
-	../sepolicy/sepolicy/templates/var_run.py \
-	../sepolicy/sepolicy/templates/var_spool.py
+POTFILES  = $(shell cat POTFILES)
 
 #default:: clean
 
-all::  $(MOFILES)
+all:: $(POTFILE) $(MOFILES)
 
-booleans.py:
-	sepolicy booleans -a > booleans.py
-
-$(POTFILE): $(POTFILES) booleans.py
+$(POTFILE): $(POTFILES)
 	$(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES)
 	@if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
 	    rm -f $(NLSPACKAGE).po; \
@@ -107,8 +45,6 @@ $(POTFILE): $(POTFILES) booleans.py
 	    mv -f $(NLSPACKAGE).po $(POTFILE); \
 	fi; \
 
-update-po: Makefile $(POTFILE) refresh-po
-	@rm -f booleans.py
 
 refresh-po: Makefile
 	for cat in $(POFILES); do \
@@ -144,3 +80,5 @@ report:
 .PHONY: missing depend
 
 relabel:
+
+test:
diff --git a/policycoreutils/po/POTFILES b/policycoreutils/po/POTFILES
new file mode 100644
index 000000000000..12237dc61ee4
--- /dev/null
+++ b/policycoreutils/po/POTFILES
@@ -0,0 +1,9 @@
+../run_init/open_init_pty.c
+../run_init/run_init.c
+../setsebool/setsebool.c
+../newrole/newrole.c
+../load_policy/load_policy.c
+../sestatus/sestatus.c
+../semodule/semodule.c
+../setfiles/setfiles.c
+../secon/secon.c
diff --git a/python/Makefile b/python/Makefile
index 9b66d52fbd4d..00312dbdb5c6 100644
--- a/python/Makefile
+++ b/python/Makefile
@@ -1,4 +1,4 @@
-SUBDIRS = sepolicy audit2allow semanage sepolgen chcat
+SUBDIRS = sepolicy audit2allow semanage sepolgen chcat po
 
 all install relabel clean indent test:
 	@for subdir in $(SUBDIRS); do \
diff --git a/python/chcat/chcat b/python/chcat/chcat
index fdd2e46ee3f9..839ddd3b54b6 100755
--- a/python/chcat/chcat
+++ b/python/chcat/chcat
@@ -30,7 +30,7 @@ import getopt
 import selinux
 import seobject
 
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-python"
 try:
     import gettext
     kwargs = {}
diff --git a/python/po/Makefile b/python/po/Makefile
new file mode 100644
index 000000000000..05e49f0cc274
--- /dev/null
+++ b/python/po/Makefile
@@ -0,0 +1,85 @@
+#
+# Makefile for the PO files (translation) catalog
+#
+
+PREFIX ?= /usr
+
+# What is this package?
+NLSPACKAGE	= python
+POTFILE		= $(NLSPACKAGE).pot
+INSTALL		= /usr/bin/install -c -p
+INSTALL_DATA	= $(INSTALL) -m 644
+INSTALL_DIR	= /usr/bin/install -d
+
+# destination directory
+INSTALL_NLS_DIR = $(PREFIX)/share/locale
+
+# PO catalog handling
+MSGMERGE	= msgmerge
+MSGMERGE_FLAGS	= -q
+XGETTEXT	= xgettext --default-domain=$(NLSPACKAGE)
+MSGFMT		= msgfmt
+
+# All possible linguas
+PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po)))
+
+# Only the files matching what the user has set in LINGUAS
+USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS))
+
+# if no valid LINGUAS, build all languages
+USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
+
+POFILES		= $(patsubst %,%.po,$(USE_LINGUAS))
+MOFILES		= $(patsubst %.po,%.mo,$(POFILES))
+POTFILES  = $(shell cat POTFILES)
+
+#default:: clean
+
+all::  $(MOFILES)
+
+$(POTFILE): $(POTFILES) 
+	$(XGETTEXT) -L Python --keyword=_ --keyword=N_ $(POTFILES)
+	$(XGETTEXT) -j --keyword=_ --keyword=N_ ../sepolicy/sepolicy/sepolicy.glade
+	@if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
+	    rm -f $(NLSPACKAGE).po; \
+	else \
+	    mv -f $(NLSPACKAGE).po $(POTFILE); \
+	fi; \
+
+
+refresh-po: Makefile
+	for cat in $(POFILES); do \
+		lang=`basename $$cat .po`; \
+		if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \
+			mv -f $$lang.pot $$lang.po ; \
+			echo "$(MSGMERGE) of $$lang succeeded" ; \
+		else \
+			echo "$(MSGMERGE) of $$lang failed" ; \
+			rm -f $$lang.pot ; \
+		fi \
+	done
+
+clean:
+	@rm -fv *mo *~ .depend
+	@rm -rf tmp
+
+install: $(MOFILES)
+	@for n in $(MOFILES); do \
+	    l=`basename $$n .mo`; \
+	    $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \
+	    $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \
+	done
+
+%.mo: %.po
+	$(MSGFMT) -o $@ $<
+report:
+	@for cat in $(wildcard *.po); do \
+                echo -n "$$cat: "; \
+                msgfmt -v --statistics -o /dev/null $$cat; \
+        done
+
+.PHONY: missing depend
+
+relabel:
+
+test:
diff --git a/python/po/POTFILES b/python/po/POTFILES
new file mode 100644
index 000000000000..128eb870a69e
--- /dev/null
+++ b/python/po/POTFILES
@@ -0,0 +1,10 @@
+../audit2allow/audit2allow
+../chcat/chcat
+../semanage/semanage
+../semanage/seobject.py
+../sepolgen/src/sepolgen/interfaces.py
+../sepolicy/sepolicy/generate.py
+../sepolicy/sepolicy/gui.py
+../sepolicy/sepolicy/__init__.py
+../sepolicy/sepolicy/interface.py
+../sepolicy/sepolicy.py
diff --git a/python/semanage/semanage b/python/semanage/semanage
index ff9fb66b1411..12bb159ef649 100644
--- a/python/semanage/semanage
+++ b/python/semanage/semanage
@@ -30,7 +30,7 @@ import seobject
 import sys
 import traceback
 
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-python"
 try:
     import gettext
     kwargs = {}
diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
index 21adbf6eb74f..69e60db80060 100644
--- a/python/semanage/seobject.py
+++ b/python/semanage/seobject.py
@@ -29,7 +29,7 @@ import sys
 import stat
 import socket
 from semanage import *
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-python"
 import sepolicy
 from setools.policyrep import SELinuxPolicy
 from setools.typequery import TypeQuery
diff --git a/python/sepolgen/src/sepolgen/sepolgeni18n.py b/python/sepolgen/src/sepolgen/sepolgeni18n.py
index 998c4356415c..56ebd807c69c 100644
--- a/python/sepolgen/src/sepolgen/sepolgeni18n.py
+++ b/python/sepolgen/src/sepolgen/sepolgeni18n.py
@@ -19,7 +19,7 @@
 
 try: 
     import gettext
-    t = gettext.translation( 'yumex' )
+    t = gettext.translation( 'selinux-python' )
     _ = t.gettext
 except:
     def _(str):
diff --git a/python/sepolicy/sepolicy.py b/python/sepolicy/sepolicy.py
index 7b2230651099..32956e58f52e 100755
--- a/python/sepolicy/sepolicy.py
+++ b/python/sepolicy/sepolicy.py
@@ -28,7 +28,7 @@ import sepolicy
 from multiprocessing import Pool
 from sepolicy import get_os_version, get_conditionals, get_conditionals_format_text
 import argparse
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-python"
 try:
     import gettext
     kwargs = {}
diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
index e8654abbceb3..203ca25f4210 100644
--- a/python/sepolicy/sepolicy/__init__.py
+++ b/python/sepolicy/sepolicy/__init__.py
@@ -23,7 +23,7 @@ from setools.typeattrquery import TypeAttributeQuery
 from setools.typequery import TypeQuery
 from setools.userquery import UserQuery
 
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-python"
 try:
     import gettext
     kwargs = {}
diff --git a/python/sepolicy/sepolicy/generate.py b/python/sepolicy/sepolicy/generate.py
index 4e1ed4e9dc31..43180ca6fda4 100644
--- a/python/sepolicy/sepolicy/generate.py
+++ b/python/sepolicy/sepolicy/generate.py
@@ -48,7 +48,7 @@ import sepolgen.defaults as defaults
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-python"
 try:
     import gettext
     kwargs = {}
diff --git a/python/sepolicy/sepolicy/gui.py b/python/sepolicy/sepolicy/gui.py
index 1e86422b864a..c9ca158ddd09 100644
--- a/python/sepolicy/sepolicy/gui.py
+++ b/python/sepolicy/sepolicy/gui.py
@@ -41,7 +41,7 @@ import os
 import re
 import unicodedata
 
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-python"
 try:
     import gettext
     kwargs = {}
diff --git a/python/sepolicy/sepolicy/interface.py b/python/sepolicy/sepolicy/interface.py
index bdffb770f364..9d40aea1498d 100644
--- a/python/sepolicy/sepolicy/interface.py
+++ b/python/sepolicy/sepolicy/interface.py
@@ -30,7 +30,7 @@ __all__ = ['get_all_interfaces', 'get_interfaces_from_xml', 'get_admin', 'get_us
 ##
 ## I18N
 ##
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-python"
 try:
     import gettext
     kwargs = {}
diff --git a/sandbox/Makefile b/sandbox/Makefile
index 9da5e58db9e6..84cb5a39bf7e 100644
--- a/sandbox/Makefile
+++ b/sandbox/Makefile
@@ -13,6 +13,7 @@ override LDLIBS += -lselinux -lcap-ng
 SEUNSHARE_OBJS = seunshare.o
 
 all: sandbox seunshare sandboxX.sh start
+	(cd po && $(MAKE) $@)
 
 seunshare: $(SEUNSHARE_OBJS)
 
@@ -39,12 +40,14 @@ install: all
 	install -m 755 start $(DESTDIR)$(SHAREDIR)
 	-mkdir -p $(DESTDIR)$(SYSCONFDIR)
 	install -m 644 sandbox.conf $(DESTDIR)$(SYSCONFDIR)/sandbox
+	(cd po && $(MAKE) $@)
 
 test:
 	@$(PYTHON) test_sandbox.py -v
 
 clean:
 	-rm -f seunshare *.o *~
+	(cd po && $(MAKE) $@)
 
 indent:
 	../../scripts/Lindent $(wildcard *.[ch])
diff --git a/sandbox/po/Makefile b/sandbox/po/Makefile
new file mode 100644
index 000000000000..e75343649b67
--- /dev/null
+++ b/sandbox/po/Makefile
@@ -0,0 +1,84 @@
+#
+# Makefile for the PO files (translation) catalog
+#
+
+PREFIX ?= /usr
+
+# What is this package?
+NLSPACKAGE	= sandbox
+POTFILE		= $(NLSPACKAGE).pot
+INSTALL		= /usr/bin/install -c -p
+INSTALL_DATA	= $(INSTALL) -m 644
+INSTALL_DIR	= /usr/bin/install -d
+
+# destination directory
+INSTALL_NLS_DIR = $(PREFIX)/share/locale
+
+# PO catalog handling
+MSGMERGE	= msgmerge
+MSGMERGE_FLAGS	= -q
+XGETTEXT	= xgettext -L Python --default-domain=$(NLSPACKAGE)
+MSGFMT		= msgfmt
+
+# All possible linguas
+PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po)))
+
+# Only the files matching what the user has set in LINGUAS
+USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS))
+
+# if no valid LINGUAS, build all languages
+USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
+
+POFILES		= $(patsubst %,%.po,$(USE_LINGUAS))
+MOFILES		= $(patsubst %.po,%.mo,$(POFILES))
+POTFILES  = $(shell cat POTFILES)
+
+#default:: clean
+
+all:: $(POTFILE) $(MOFILES)
+
+$(POTFILE): $(POTFILES)
+	$(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES)
+	@if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
+	    rm -f $(NLSPACKAGE).po; \
+	else \
+	    mv -f $(NLSPACKAGE).po $(POTFILE); \
+	fi; \
+
+
+refresh-po: Makefile
+	for cat in $(POFILES); do \
+		lang=`basename $$cat .po`; \
+		if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \
+			mv -f $$lang.pot $$lang.po ; \
+			echo "$(MSGMERGE) of $$lang succeeded" ; \
+		else \
+			echo "$(MSGMERGE) of $$lang failed" ; \
+			rm -f $$lang.pot ; \
+		fi \
+	done
+
+clean:
+	@rm -fv *mo *~ .depend
+	@rm -rf tmp
+
+install: $(MOFILES)
+	@for n in $(MOFILES); do \
+	    l=`basename $$n .mo`; \
+	    $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \
+	    $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \
+	done
+
+%.mo: %.po
+	$(MSGFMT) -o $@ $<
+report:
+	@for cat in $(wildcard *.po); do \
+                echo -n "$$cat: "; \
+                msgfmt -v --statistics -o /dev/null $$cat; \
+        done
+
+.PHONY: missing depend
+
+relabel:
+
+test:
diff --git a/sandbox/po/POTFILES b/sandbox/po/POTFILES
new file mode 100644
index 000000000000..deff3f2f4656
--- /dev/null
+++ b/sandbox/po/POTFILES
@@ -0,0 +1 @@
+../sandbox
diff --git a/sandbox/sandbox b/sandbox/sandbox
index ca5f1e030a51..16c43b51eaaa 100644
--- a/sandbox/sandbox
+++ b/sandbox/sandbox
@@ -37,7 +37,7 @@ import sepolicy
 
 SEUNSHARE = "/usr/sbin/seunshare"
 SANDBOXSH = "/usr/share/sandbox/sandboxX.sh"
-PROGNAME = "policycoreutils"
+PROGNAME = "selinux-sandbox"
 try:
     import gettext
     kwargs = {}
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] Split po/ translation files into the relevant sub-directories
  2022-04-01  9:57 ` [PATCH] Split po/ translation files into the relevant sub-directories Petr Lautrbach
@ 2022-04-04 21:08   ` James Carter
  2022-04-06  9:32     ` Petr Lautrbach
  0 siblings, 1 reply; 4+ messages in thread
From: James Carter @ 2022-04-04 21:08 UTC (permalink / raw)
  To: Petr Lautrbach; +Cc: SElinux list

On Fri, Apr 1, 2022 at 11:45 AM Petr Lautrbach <plautrba@redhat.com> wrote:
>
> When policycoreutils was split into policycoreutils/ python/ gui/ and sandbox/
> sub-directories, po/ translation files stayed in policycoreutils/.
>
> This commit splits original policycoreutils translations to
> policycoreutils, selinux-python, selinux-gui, and selinux-sandbox.
>
> See original Fedora issue https://github.com/fedora-selinux/selinux/issues/43
>
> Signed-off-by: Petr Lautrbach <plautrba@redhat.com>

There is an extra space at the end of one of the lines as indicated
below, but that can be fixed when merged.

Acked-by: James Carter <jwcart2@gmail.com>

> ---
>  gui/Makefile                                 |  4 +
>  gui/booleansPage.py                          |  2 +-
>  gui/domainsPage.py                           |  2 +-
>  gui/fcontextPage.py                          |  2 +-
>  gui/loginsPage.py                            |  2 +-
>  gui/modulesPage.py                           |  2 +-
>  gui/po/Makefile                              | 84 +++++++++++++++++++
>  gui/po/POTFILES                              | 17 ++++
>  gui/polgengui.py                             |  2 +-
>  gui/portsPage.py                             |  2 +-
>  gui/semanagePage.py                          |  2 +-
>  gui/statusPage.py                            |  2 +-
>  gui/system-config-selinux.py                 |  2 +-
>  gui/usersPage.py                             |  2 +-
>  policycoreutils/po/Makefile                  | 72 ++---------------
>  policycoreutils/po/POTFILES                  |  9 +++
>  python/Makefile                              |  2 +-
>  python/chcat/chcat                           |  2 +-
>  python/po/Makefile                           | 85 ++++++++++++++++++++
>  python/po/POTFILES                           | 10 +++
>  python/semanage/semanage                     |  2 +-
>  python/semanage/seobject.py                  |  2 +-
>  python/sepolgen/src/sepolgen/sepolgeni18n.py |  2 +-
>  python/sepolicy/sepolicy.py                  |  2 +-
>  python/sepolicy/sepolicy/__init__.py         |  2 +-
>  python/sepolicy/sepolicy/generate.py         |  2 +-
>  python/sepolicy/sepolicy/gui.py              |  2 +-
>  python/sepolicy/sepolicy/interface.py        |  2 +-
>  sandbox/Makefile                             |  3 +
>  sandbox/po/Makefile                          | 84 +++++++++++++++++++
>  sandbox/po/POTFILES                          |  1 +
>  sandbox/sandbox                              |  2 +-
>  32 files changed, 324 insertions(+), 89 deletions(-)
>  create mode 100644 gui/po/Makefile
>  create mode 100644 gui/po/POTFILES
>  create mode 100644 policycoreutils/po/POTFILES
>  create mode 100644 python/po/Makefile
>  create mode 100644 python/po/POTFILES
>  create mode 100644 sandbox/po/Makefile
>  create mode 100644 sandbox/po/POTFILES
>
> diff --git a/gui/Makefile b/gui/Makefile
> index ca965c942912..4035fb21b8c9 100644
> --- a/gui/Makefile
> +++ b/gui/Makefile
> @@ -22,6 +22,7 @@ system-config-selinux.ui \
>  usersPage.py
>
>  all: $(TARGETS) system-config-selinux.py polgengui.py
> +       (cd po && $(MAKE) $@)
>
>  install: all
>         -mkdir -p $(DESTDIR)$(MANDIR)/man8
> @@ -54,7 +55,10 @@ install: all
>                 install -m 644 sepolicy_$${i}.png $(DESTDIR)$(DATADIR)/icons/hicolor/$${i}x$${i}/apps/sepolicy.png; \
>         done
>         install -m 644 org.selinux.config.policy $(DESTDIR)$(DATADIR)/polkit-1/actions/
> +       (cd po && $(MAKE) $@)
> +
>  clean:
> +       (cd po && $(MAKE) $@)
>
>  indent:
>
> diff --git a/gui/booleansPage.py b/gui/booleansPage.py
> index 7849bea26a06..dd12b6d6ab86 100644
> --- a/gui/booleansPage.py
> +++ b/gui/booleansPage.py
> @@ -38,7 +38,7 @@ DISABLED = 2
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-gui"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/gui/domainsPage.py b/gui/domainsPage.py
> index bad5140d8c59..6bbe4de5884f 100644
> --- a/gui/domainsPage.py
> +++ b/gui/domainsPage.py
> @@ -30,7 +30,7 @@ from semanagePage import *
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-gui"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/gui/fcontextPage.py b/gui/fcontextPage.py
> index d26aa1b405a9..52292cae01d2 100644
> --- a/gui/fcontextPage.py
> +++ b/gui/fcontextPage.py
> @@ -47,7 +47,7 @@ class context:
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-gui"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/gui/loginsPage.py b/gui/loginsPage.py
> index b67eb8bc42af..cbfb0cc23f65 100644
> --- a/gui/loginsPage.py
> +++ b/gui/loginsPage.py
> @@ -29,7 +29,7 @@ from semanagePage import *
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-gui"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/gui/modulesPage.py b/gui/modulesPage.py
> index 0584acf9b3a4..35a0129bab9c 100644
> --- a/gui/modulesPage.py
> +++ b/gui/modulesPage.py
> @@ -30,7 +30,7 @@ from semanagePage import *
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-gui"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/gui/po/Makefile b/gui/po/Makefile
> new file mode 100644
> index 000000000000..7ccd48eb2422
> --- /dev/null
> +++ b/gui/po/Makefile
> @@ -0,0 +1,84 @@
> +#
> +# Makefile for the PO files (translation) catalog
> +#
> +
> +PREFIX ?= /usr
> +
> +# What is this package?
> +NLSPACKAGE     = gui
> +POTFILE                = $(NLSPACKAGE).pot
> +INSTALL                = /usr/bin/install -c -p
> +INSTALL_DATA   = $(INSTALL) -m 644
> +INSTALL_DIR    = /usr/bin/install -d
> +
> +# destination directory
> +INSTALL_NLS_DIR = $(PREFIX)/share/locale
> +
> +# PO catalog handling
> +MSGMERGE       = msgmerge
> +MSGMERGE_FLAGS = -q
> +XGETTEXT       = xgettext --default-domain=$(NLSPACKAGE)
> +MSGFMT         = msgfmt
> +
> +# All possible linguas
> +PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po)))
> +
> +# Only the files matching what the user has set in LINGUAS
> +USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS))
> +
> +# if no valid LINGUAS, build all languages
> +USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
> +
> +POFILES                = $(patsubst %,%.po,$(USE_LINGUAS))
> +MOFILES                = $(patsubst %.po,%.mo,$(POFILES))
> +POTFILES  = $(shell cat POTFILES)
> +
> +#default:: clean
> +
> +all::  $(MOFILES)
> +
> +$(POTFILE): $(POTFILES)
> +       $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES)
> +       @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
> +           rm -f $(NLSPACKAGE).po; \
> +       else \
> +           mv -f $(NLSPACKAGE).po $(POTFILE); \
> +       fi; \
> +
> +
> +refresh-po: Makefile
> +       for cat in $(POFILES); do \
> +               lang=`basename $$cat .po`; \
> +               if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \
> +                       mv -f $$lang.pot $$lang.po ; \
> +                       echo "$(MSGMERGE) of $$lang succeeded" ; \
> +               else \
> +                       echo "$(MSGMERGE) of $$lang failed" ; \
> +                       rm -f $$lang.pot ; \
> +               fi \
> +       done
> +
> +clean:
> +       @rm -fv *mo *~ .depend
> +       @rm -rf tmp
> +
> +install: $(MOFILES)
> +       @for n in $(MOFILES); do \
> +           l=`basename $$n .mo`; \
> +           $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \
> +           $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \
> +       done
> +
> +%.mo: %.po
> +       $(MSGFMT) -o $@ $<
> +report:
> +       @for cat in $(wildcard *.po); do \
> +                echo -n "$$cat: "; \
> +                msgfmt -v --statistics -o /dev/null $$cat; \
> +        done
> +
> +.PHONY: missing depend
> +
> +relabel:
> +
> +test:
> diff --git a/gui/po/POTFILES b/gui/po/POTFILES
> new file mode 100644
> index 000000000000..1795c5c1951b
> --- /dev/null
> +++ b/gui/po/POTFILES
> @@ -0,0 +1,17 @@
> +../booleansPage.py
> +../domainsPage.py
> +../fcontextPage.py
> +../loginsPage.py
> +../modulesPage.py
> +../org.selinux.config.policy
> +../polgengui.py
> +../polgen.ui
> +../portsPage.py
> +../selinux-polgengui.desktop
> +../semanagePage.py
> +../sepolicy.desktop
> +../statusPage.py
> +../system-config-selinux.desktop
> +../system-config-selinux.py
> +../system-config-selinux.ui
> +../usersPage.py
> diff --git a/gui/polgengui.py b/gui/polgengui.py
> index d284ded65279..01f541bafae8 100644
> --- a/gui/polgengui.py
> +++ b/gui/polgengui.py
> @@ -63,7 +63,7 @@ def get_all_modules():
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-gui"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/gui/portsPage.py b/gui/portsPage.py
> index 30f58383bc1d..a537ecc8c0a1 100644
> --- a/gui/portsPage.py
> +++ b/gui/portsPage.py
> @@ -35,7 +35,7 @@ from semanagePage import *
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-gui"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/gui/semanagePage.py b/gui/semanagePage.py
> index 4127804fbbee..5361d69c1313 100644
> --- a/gui/semanagePage.py
> +++ b/gui/semanagePage.py
> @@ -22,7 +22,7 @@ from gi.repository import Gdk, Gtk
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-gui"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/gui/statusPage.py b/gui/statusPage.py
> index 766854b19cba..a8f079b9b163 100644
> --- a/gui/statusPage.py
> +++ b/gui/statusPage.py
> @@ -35,7 +35,7 @@ RELABELFILE = "/.autorelabel"
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-gui"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/gui/system-config-selinux.py b/gui/system-config-selinux.py
> index 3f70122b87e8..8c46c987b974 100644
> --- a/gui/system-config-selinux.py
> +++ b/gui/system-config-selinux.py
> @@ -45,7 +45,7 @@ import selinux
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-gui"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/gui/usersPage.py b/gui/usersPage.py
> index 26794ed5c3f3..d15d4c5a71dd 100644
> --- a/gui/usersPage.py
> +++ b/gui/usersPage.py
> @@ -29,7 +29,7 @@ from semanagePage import *
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-gui"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/policycoreutils/po/Makefile b/policycoreutils/po/Makefile
> index 575e143122e6..5ff92bff6fdc 100644
> --- a/policycoreutils/po/Makefile
> +++ b/policycoreutils/po/Makefile
> @@ -3,7 +3,6 @@
>  #
>
>  PREFIX ?= /usr
> -TOP     = ../..
>
>  # What is this package?
>  NLSPACKAGE     = policycoreutils
> @@ -32,74 +31,13 @@ USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
>
>  POFILES                = $(patsubst %,%.po,$(USE_LINGUAS))
>  MOFILES                = $(patsubst %.po,%.mo,$(POFILES))
> -POTFILES = \
> -       ../run_init/open_init_pty.c \
> -       ../run_init/run_init.c \
> -       ../semodule_link/semodule_link.c \
> -       ../audit2allow/audit2allow \
> -       ../semanage/seobject.py \
> -       ../setsebool/setsebool.c \
> -       ../newrole/newrole.c \
> -       ../load_policy/load_policy.c \
> -       ../sestatus/sestatus.c \
> -       ../semodule/semodule.c \
> -       ../setfiles/setfiles.c \
> -       ../semodule_package/semodule_package.c \
> -       ../semodule_deps/semodule_deps.c \
> -       ../semodule_expand/semodule_expand.c \
> -       ../scripts/chcat \
> -       ../scripts/fixfiles \
> -       ../restorecond/stringslist.c \
> -       ../restorecond/restorecond.h \
> -       ../restorecond/utmpwatcher.h \
> -       ../restorecond/stringslist.h \
> -       ../restorecond/restorecond.c \
> -       ../restorecond/utmpwatcher.c \
> -       ../gui/booleansPage.py \
> -       ../gui/fcontextPage.py \
> -       ../gui/loginsPage.py \
> -       ../gui/mappingsPage.py \
> -       ../gui/modulesPage.py \
> -       ../gui/polgen.glade \
> -       ../gui/polgengui.py \
> -       ../gui/portsPage.py \
> -       ../gui/semanagePage.py \
> -       ../gui/statusPage.py \
> -       ../gui/system-config-selinux.glade \
> -       ../gui/system-config-selinux.py \
> -       ../gui/usersPage.py \
> -       ../secon/secon.c \
> -       booleans.py \
> -       ../sepolicy/sepolicy.py \
> -       ../sepolicy/sepolicy/communicate.py \
> -       ../sepolicy/sepolicy/__init__.py \
> -       ../sepolicy/sepolicy/network.py \
> -       ../sepolicy/sepolicy/generate.py \
> -       ../sepolicy/sepolicy/sepolicy.glade \
> -       ../sepolicy/sepolicy/gui.py \
> -       ../sepolicy/sepolicy/manpage.py \
> -       ../sepolicy/sepolicy/transition.py \
> -       ../sepolicy/sepolicy/templates/executable.py \
> -       ../sepolicy/sepolicy/templates/__init__.py \
> -       ../sepolicy/sepolicy/templates/network.py \
> -       ../sepolicy/sepolicy/templates/rw.py \
> -       ../sepolicy/sepolicy/templates/script.py \
> -       ../sepolicy/sepolicy/templates/semodule.py \
> -       ../sepolicy/sepolicy/templates/tmp.py \
> -       ../sepolicy/sepolicy/templates/user.py \
> -       ../sepolicy/sepolicy/templates/var_lib.py \
> -       ../sepolicy/sepolicy/templates/var_log.py \
> -       ../sepolicy/sepolicy/templates/var_run.py \
> -       ../sepolicy/sepolicy/templates/var_spool.py
> +POTFILES  = $(shell cat POTFILES)
>
>  #default:: clean
>
> -all::  $(MOFILES)
> +all:: $(POTFILE) $(MOFILES)
>
> -booleans.py:
> -       sepolicy booleans -a > booleans.py
> -
> -$(POTFILE): $(POTFILES) booleans.py
> +$(POTFILE): $(POTFILES)
>         $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES)
>         @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
>             rm -f $(NLSPACKAGE).po; \
> @@ -107,8 +45,6 @@ $(POTFILE): $(POTFILES) booleans.py
>             mv -f $(NLSPACKAGE).po $(POTFILE); \
>         fi; \
>
> -update-po: Makefile $(POTFILE) refresh-po
> -       @rm -f booleans.py
>
>  refresh-po: Makefile
>         for cat in $(POFILES); do \
> @@ -144,3 +80,5 @@ report:
>  .PHONY: missing depend
>
>  relabel:
> +
> +test:
> diff --git a/policycoreutils/po/POTFILES b/policycoreutils/po/POTFILES
> new file mode 100644
> index 000000000000..12237dc61ee4
> --- /dev/null
> +++ b/policycoreutils/po/POTFILES
> @@ -0,0 +1,9 @@
> +../run_init/open_init_pty.c
> +../run_init/run_init.c
> +../setsebool/setsebool.c
> +../newrole/newrole.c
> +../load_policy/load_policy.c
> +../sestatus/sestatus.c
> +../semodule/semodule.c
> +../setfiles/setfiles.c
> +../secon/secon.c
> diff --git a/python/Makefile b/python/Makefile
> index 9b66d52fbd4d..00312dbdb5c6 100644
> --- a/python/Makefile
> +++ b/python/Makefile
> @@ -1,4 +1,4 @@
> -SUBDIRS = sepolicy audit2allow semanage sepolgen chcat
> +SUBDIRS = sepolicy audit2allow semanage sepolgen chcat po
>
>  all install relabel clean indent test:
>         @for subdir in $(SUBDIRS); do \
> diff --git a/python/chcat/chcat b/python/chcat/chcat
> index fdd2e46ee3f9..839ddd3b54b6 100755
> --- a/python/chcat/chcat
> +++ b/python/chcat/chcat
> @@ -30,7 +30,7 @@ import getopt
>  import selinux
>  import seobject
>
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-python"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/python/po/Makefile b/python/po/Makefile
> new file mode 100644
> index 000000000000..05e49f0cc274
> --- /dev/null
> +++ b/python/po/Makefile
> @@ -0,0 +1,85 @@
> +#
> +# Makefile for the PO files (translation) catalog
> +#
> +
> +PREFIX ?= /usr
> +
> +# What is this package?
> +NLSPACKAGE     = python
> +POTFILE                = $(NLSPACKAGE).pot
> +INSTALL                = /usr/bin/install -c -p
> +INSTALL_DATA   = $(INSTALL) -m 644
> +INSTALL_DIR    = /usr/bin/install -d
> +
> +# destination directory
> +INSTALL_NLS_DIR = $(PREFIX)/share/locale
> +
> +# PO catalog handling
> +MSGMERGE       = msgmerge
> +MSGMERGE_FLAGS = -q
> +XGETTEXT       = xgettext --default-domain=$(NLSPACKAGE)
> +MSGFMT         = msgfmt
> +
> +# All possible linguas
> +PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po)))
> +
> +# Only the files matching what the user has set in LINGUAS
> +USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS))
> +
> +# if no valid LINGUAS, build all languages
> +USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
> +
> +POFILES                = $(patsubst %,%.po,$(USE_LINGUAS))
> +MOFILES                = $(patsubst %.po,%.mo,$(POFILES))
> +POTFILES  = $(shell cat POTFILES)
> +
> +#default:: clean
> +
> +all::  $(MOFILES)
> +
> +$(POTFILE): $(POTFILES)

Extra space at the end of the line above.

> +       $(XGETTEXT) -L Python --keyword=_ --keyword=N_ $(POTFILES)
> +       $(XGETTEXT) -j --keyword=_ --keyword=N_ ../sepolicy/sepolicy/sepolicy.glade
> +       @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
> +           rm -f $(NLSPACKAGE).po; \
> +       else \
> +           mv -f $(NLSPACKAGE).po $(POTFILE); \
> +       fi; \
> +
> +
> +refresh-po: Makefile
> +       for cat in $(POFILES); do \
> +               lang=`basename $$cat .po`; \
> +               if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \
> +                       mv -f $$lang.pot $$lang.po ; \
> +                       echo "$(MSGMERGE) of $$lang succeeded" ; \
> +               else \
> +                       echo "$(MSGMERGE) of $$lang failed" ; \
> +                       rm -f $$lang.pot ; \
> +               fi \
> +       done
> +
> +clean:
> +       @rm -fv *mo *~ .depend
> +       @rm -rf tmp
> +
> +install: $(MOFILES)
> +       @for n in $(MOFILES); do \
> +           l=`basename $$n .mo`; \
> +           $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \
> +           $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \
> +       done
> +
> +%.mo: %.po
> +       $(MSGFMT) -o $@ $<
> +report:
> +       @for cat in $(wildcard *.po); do \
> +                echo -n "$$cat: "; \
> +                msgfmt -v --statistics -o /dev/null $$cat; \
> +        done
> +
> +.PHONY: missing depend
> +
> +relabel:
> +
> +test:
> diff --git a/python/po/POTFILES b/python/po/POTFILES
> new file mode 100644
> index 000000000000..128eb870a69e
> --- /dev/null
> +++ b/python/po/POTFILES
> @@ -0,0 +1,10 @@
> +../audit2allow/audit2allow
> +../chcat/chcat
> +../semanage/semanage
> +../semanage/seobject.py
> +../sepolgen/src/sepolgen/interfaces.py
> +../sepolicy/sepolicy/generate.py
> +../sepolicy/sepolicy/gui.py
> +../sepolicy/sepolicy/__init__.py
> +../sepolicy/sepolicy/interface.py
> +../sepolicy/sepolicy.py
> diff --git a/python/semanage/semanage b/python/semanage/semanage
> index ff9fb66b1411..12bb159ef649 100644
> --- a/python/semanage/semanage
> +++ b/python/semanage/semanage
> @@ -30,7 +30,7 @@ import seobject
>  import sys
>  import traceback
>
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-python"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
> index 21adbf6eb74f..69e60db80060 100644
> --- a/python/semanage/seobject.py
> +++ b/python/semanage/seobject.py
> @@ -29,7 +29,7 @@ import sys
>  import stat
>  import socket
>  from semanage import *
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-python"
>  import sepolicy
>  from setools.policyrep import SELinuxPolicy
>  from setools.typequery import TypeQuery
> diff --git a/python/sepolgen/src/sepolgen/sepolgeni18n.py b/python/sepolgen/src/sepolgen/sepolgeni18n.py
> index 998c4356415c..56ebd807c69c 100644
> --- a/python/sepolgen/src/sepolgen/sepolgeni18n.py
> +++ b/python/sepolgen/src/sepolgen/sepolgeni18n.py
> @@ -19,7 +19,7 @@
>
>  try:
>      import gettext
> -    t = gettext.translation( 'yumex' )
> +    t = gettext.translation( 'selinux-python' )
>      _ = t.gettext
>  except:
>      def _(str):
> diff --git a/python/sepolicy/sepolicy.py b/python/sepolicy/sepolicy.py
> index 7b2230651099..32956e58f52e 100755
> --- a/python/sepolicy/sepolicy.py
> +++ b/python/sepolicy/sepolicy.py
> @@ -28,7 +28,7 @@ import sepolicy
>  from multiprocessing import Pool
>  from sepolicy import get_os_version, get_conditionals, get_conditionals_format_text
>  import argparse
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-python"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
> index e8654abbceb3..203ca25f4210 100644
> --- a/python/sepolicy/sepolicy/__init__.py
> +++ b/python/sepolicy/sepolicy/__init__.py
> @@ -23,7 +23,7 @@ from setools.typeattrquery import TypeAttributeQuery
>  from setools.typequery import TypeQuery
>  from setools.userquery import UserQuery
>
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-python"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/python/sepolicy/sepolicy/generate.py b/python/sepolicy/sepolicy/generate.py
> index 4e1ed4e9dc31..43180ca6fda4 100644
> --- a/python/sepolicy/sepolicy/generate.py
> +++ b/python/sepolicy/sepolicy/generate.py
> @@ -48,7 +48,7 @@ import sepolgen.defaults as defaults
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-python"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/python/sepolicy/sepolicy/gui.py b/python/sepolicy/sepolicy/gui.py
> index 1e86422b864a..c9ca158ddd09 100644
> --- a/python/sepolicy/sepolicy/gui.py
> +++ b/python/sepolicy/sepolicy/gui.py
> @@ -41,7 +41,7 @@ import os
>  import re
>  import unicodedata
>
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-python"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/python/sepolicy/sepolicy/interface.py b/python/sepolicy/sepolicy/interface.py
> index bdffb770f364..9d40aea1498d 100644
> --- a/python/sepolicy/sepolicy/interface.py
> +++ b/python/sepolicy/sepolicy/interface.py
> @@ -30,7 +30,7 @@ __all__ = ['get_all_interfaces', 'get_interfaces_from_xml', 'get_admin', 'get_us
>  ##
>  ## I18N
>  ##
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-python"
>  try:
>      import gettext
>      kwargs = {}
> diff --git a/sandbox/Makefile b/sandbox/Makefile
> index 9da5e58db9e6..84cb5a39bf7e 100644
> --- a/sandbox/Makefile
> +++ b/sandbox/Makefile
> @@ -13,6 +13,7 @@ override LDLIBS += -lselinux -lcap-ng
>  SEUNSHARE_OBJS = seunshare.o
>
>  all: sandbox seunshare sandboxX.sh start
> +       (cd po && $(MAKE) $@)
>
>  seunshare: $(SEUNSHARE_OBJS)
>
> @@ -39,12 +40,14 @@ install: all
>         install -m 755 start $(DESTDIR)$(SHAREDIR)
>         -mkdir -p $(DESTDIR)$(SYSCONFDIR)
>         install -m 644 sandbox.conf $(DESTDIR)$(SYSCONFDIR)/sandbox
> +       (cd po && $(MAKE) $@)
>
>  test:
>         @$(PYTHON) test_sandbox.py -v
>
>  clean:
>         -rm -f seunshare *.o *~
> +       (cd po && $(MAKE) $@)
>
>  indent:
>         ../../scripts/Lindent $(wildcard *.[ch])
> diff --git a/sandbox/po/Makefile b/sandbox/po/Makefile
> new file mode 100644
> index 000000000000..e75343649b67
> --- /dev/null
> +++ b/sandbox/po/Makefile
> @@ -0,0 +1,84 @@
> +#
> +# Makefile for the PO files (translation) catalog
> +#
> +
> +PREFIX ?= /usr
> +
> +# What is this package?
> +NLSPACKAGE     = sandbox
> +POTFILE                = $(NLSPACKAGE).pot
> +INSTALL                = /usr/bin/install -c -p
> +INSTALL_DATA   = $(INSTALL) -m 644
> +INSTALL_DIR    = /usr/bin/install -d
> +
> +# destination directory
> +INSTALL_NLS_DIR = $(PREFIX)/share/locale
> +
> +# PO catalog handling
> +MSGMERGE       = msgmerge
> +MSGMERGE_FLAGS = -q
> +XGETTEXT       = xgettext -L Python --default-domain=$(NLSPACKAGE)
> +MSGFMT         = msgfmt
> +
> +# All possible linguas
> +PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po)))
> +
> +# Only the files matching what the user has set in LINGUAS
> +USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS))
> +
> +# if no valid LINGUAS, build all languages
> +USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
> +
> +POFILES                = $(patsubst %,%.po,$(USE_LINGUAS))
> +MOFILES                = $(patsubst %.po,%.mo,$(POFILES))
> +POTFILES  = $(shell cat POTFILES)
> +
> +#default:: clean
> +
> +all:: $(POTFILE) $(MOFILES)
> +
> +$(POTFILE): $(POTFILES)
> +       $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES)
> +       @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
> +           rm -f $(NLSPACKAGE).po; \
> +       else \
> +           mv -f $(NLSPACKAGE).po $(POTFILE); \
> +       fi; \
> +
> +
> +refresh-po: Makefile
> +       for cat in $(POFILES); do \
> +               lang=`basename $$cat .po`; \
> +               if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \
> +                       mv -f $$lang.pot $$lang.po ; \
> +                       echo "$(MSGMERGE) of $$lang succeeded" ; \
> +               else \
> +                       echo "$(MSGMERGE) of $$lang failed" ; \
> +                       rm -f $$lang.pot ; \
> +               fi \
> +       done
> +
> +clean:
> +       @rm -fv *mo *~ .depend
> +       @rm -rf tmp
> +
> +install: $(MOFILES)
> +       @for n in $(MOFILES); do \
> +           l=`basename $$n .mo`; \
> +           $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \
> +           $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \
> +       done
> +
> +%.mo: %.po
> +       $(MSGFMT) -o $@ $<
> +report:
> +       @for cat in $(wildcard *.po); do \
> +                echo -n "$$cat: "; \
> +                msgfmt -v --statistics -o /dev/null $$cat; \
> +        done
> +
> +.PHONY: missing depend
> +
> +relabel:
> +
> +test:
> diff --git a/sandbox/po/POTFILES b/sandbox/po/POTFILES
> new file mode 100644
> index 000000000000..deff3f2f4656
> --- /dev/null
> +++ b/sandbox/po/POTFILES
> @@ -0,0 +1 @@
> +../sandbox
> diff --git a/sandbox/sandbox b/sandbox/sandbox
> index ca5f1e030a51..16c43b51eaaa 100644
> --- a/sandbox/sandbox
> +++ b/sandbox/sandbox
> @@ -37,7 +37,7 @@ import sepolicy
>
>  SEUNSHARE = "/usr/sbin/seunshare"
>  SANDBOXSH = "/usr/share/sandbox/sandboxX.sh"
> -PROGNAME = "policycoreutils"
> +PROGNAME = "selinux-sandbox"
>  try:
>      import gettext
>      kwargs = {}
> --
> 2.35.1
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Split po/ translation files into the relevant sub-directories
  2022-04-04 21:08   ` James Carter
@ 2022-04-06  9:32     ` Petr Lautrbach
  0 siblings, 0 replies; 4+ messages in thread
From: Petr Lautrbach @ 2022-04-06  9:32 UTC (permalink / raw)
  To: SElinux list; +Cc: James Carter

James Carter <jwcart2@gmail.com> writes:

> On Fri, Apr 1, 2022 at 11:45 AM Petr Lautrbach <plautrba@redhat.com> wrote:
>>
>> When policycoreutils was split into policycoreutils/ python/ gui/ and sandbox/
>> sub-directories, po/ translation files stayed in policycoreutils/.
>>
>> This commit splits original policycoreutils translations to
>> policycoreutils, selinux-python, selinux-gui, and selinux-sandbox.
>>
>> See original Fedora issue https://github.com/fedora-selinux/selinux/issues/43
>>
>> Signed-off-by: Petr Lautrbach <plautrba@redhat.com>
>
> There is an extra space at the end of one of the lines as indicated
> below, but that can be fixed when merged.
>
> Acked-by: James Carter <jwcart2@gmail.com>
>


Merged with fixed extra space, thanks!


>> ---
>>  gui/Makefile                                 |  4 +
>>  gui/booleansPage.py                          |  2 +-
>>  gui/domainsPage.py                           |  2 +-
>>  gui/fcontextPage.py                          |  2 +-
>>  gui/loginsPage.py                            |  2 +-
>>  gui/modulesPage.py                           |  2 +-
>>  gui/po/Makefile                              | 84 +++++++++++++++++++
>>  gui/po/POTFILES                              | 17 ++++
>>  gui/polgengui.py                             |  2 +-
>>  gui/portsPage.py                             |  2 +-
>>  gui/semanagePage.py                          |  2 +-
>>  gui/statusPage.py                            |  2 +-
>>  gui/system-config-selinux.py                 |  2 +-
>>  gui/usersPage.py                             |  2 +-
>>  policycoreutils/po/Makefile                  | 72 ++---------------
>>  policycoreutils/po/POTFILES                  |  9 +++
>>  python/Makefile                              |  2 +-
>>  python/chcat/chcat                           |  2 +-
>>  python/po/Makefile                           | 85 ++++++++++++++++++++
>>  python/po/POTFILES                           | 10 +++
>>  python/semanage/semanage                     |  2 +-
>>  python/semanage/seobject.py                  |  2 +-
>>  python/sepolgen/src/sepolgen/sepolgeni18n.py |  2 +-
>>  python/sepolicy/sepolicy.py                  |  2 +-
>>  python/sepolicy/sepolicy/__init__.py         |  2 +-
>>  python/sepolicy/sepolicy/generate.py         |  2 +-
>>  python/sepolicy/sepolicy/gui.py              |  2 +-
>>  python/sepolicy/sepolicy/interface.py        |  2 +-
>>  sandbox/Makefile                             |  3 +
>>  sandbox/po/Makefile                          | 84 +++++++++++++++++++
>>  sandbox/po/POTFILES                          |  1 +
>>  sandbox/sandbox                              |  2 +-
>>  32 files changed, 324 insertions(+), 89 deletions(-)
>>  create mode 100644 gui/po/Makefile
>>  create mode 100644 gui/po/POTFILES
>>  create mode 100644 policycoreutils/po/POTFILES
>>  create mode 100644 python/po/Makefile
>>  create mode 100644 python/po/POTFILES
>>  create mode 100644 sandbox/po/Makefile
>>  create mode 100644 sandbox/po/POTFILES
>>
>> diff --git a/gui/Makefile b/gui/Makefile
>> index ca965c942912..4035fb21b8c9 100644
>> --- a/gui/Makefile
>> +++ b/gui/Makefile
>> @@ -22,6 +22,7 @@ system-config-selinux.ui \
>>  usersPage.py
>>
>>  all: $(TARGETS) system-config-selinux.py polgengui.py
>> +       (cd po && $(MAKE) $@)
>>
>>  install: all
>>         -mkdir -p $(DESTDIR)$(MANDIR)/man8
>> @@ -54,7 +55,10 @@ install: all
>>                 install -m 644 sepolicy_$${i}.png $(DESTDIR)$(DATADIR)/icons/hicolor/$${i}x$${i}/apps/sepolicy.png; \
>>         done
>>         install -m 644 org.selinux.config.policy $(DESTDIR)$(DATADIR)/polkit-1/actions/
>> +       (cd po && $(MAKE) $@)
>> +
>>  clean:
>> +       (cd po && $(MAKE) $@)
>>
>>  indent:
>>
>> diff --git a/gui/booleansPage.py b/gui/booleansPage.py
>> index 7849bea26a06..dd12b6d6ab86 100644
>> --- a/gui/booleansPage.py
>> +++ b/gui/booleansPage.py
>> @@ -38,7 +38,7 @@ DISABLED = 2
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-gui"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/gui/domainsPage.py b/gui/domainsPage.py
>> index bad5140d8c59..6bbe4de5884f 100644
>> --- a/gui/domainsPage.py
>> +++ b/gui/domainsPage.py
>> @@ -30,7 +30,7 @@ from semanagePage import *
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-gui"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/gui/fcontextPage.py b/gui/fcontextPage.py
>> index d26aa1b405a9..52292cae01d2 100644
>> --- a/gui/fcontextPage.py
>> +++ b/gui/fcontextPage.py
>> @@ -47,7 +47,7 @@ class context:
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-gui"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/gui/loginsPage.py b/gui/loginsPage.py
>> index b67eb8bc42af..cbfb0cc23f65 100644
>> --- a/gui/loginsPage.py
>> +++ b/gui/loginsPage.py
>> @@ -29,7 +29,7 @@ from semanagePage import *
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-gui"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/gui/modulesPage.py b/gui/modulesPage.py
>> index 0584acf9b3a4..35a0129bab9c 100644
>> --- a/gui/modulesPage.py
>> +++ b/gui/modulesPage.py
>> @@ -30,7 +30,7 @@ from semanagePage import *
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-gui"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/gui/po/Makefile b/gui/po/Makefile
>> new file mode 100644
>> index 000000000000..7ccd48eb2422
>> --- /dev/null
>> +++ b/gui/po/Makefile
>> @@ -0,0 +1,84 @@
>> +#
>> +# Makefile for the PO files (translation) catalog
>> +#
>> +
>> +PREFIX ?= /usr
>> +
>> +# What is this package?
>> +NLSPACKAGE     = gui
>> +POTFILE                = $(NLSPACKAGE).pot
>> +INSTALL                = /usr/bin/install -c -p
>> +INSTALL_DATA   = $(INSTALL) -m 644
>> +INSTALL_DIR    = /usr/bin/install -d
>> +
>> +# destination directory
>> +INSTALL_NLS_DIR = $(PREFIX)/share/locale
>> +
>> +# PO catalog handling
>> +MSGMERGE       = msgmerge
>> +MSGMERGE_FLAGS = -q
>> +XGETTEXT       = xgettext --default-domain=$(NLSPACKAGE)
>> +MSGFMT         = msgfmt
>> +
>> +# All possible linguas
>> +PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po)))
>> +
>> +# Only the files matching what the user has set in LINGUAS
>> +USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS))
>> +
>> +# if no valid LINGUAS, build all languages
>> +USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
>> +
>> +POFILES                = $(patsubst %,%.po,$(USE_LINGUAS))
>> +MOFILES                = $(patsubst %.po,%.mo,$(POFILES))
>> +POTFILES  = $(shell cat POTFILES)
>> +
>> +#default:: clean
>> +
>> +all::  $(MOFILES)
>> +
>> +$(POTFILE): $(POTFILES)
>> +       $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES)
>> +       @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
>> +           rm -f $(NLSPACKAGE).po; \
>> +       else \
>> +           mv -f $(NLSPACKAGE).po $(POTFILE); \
>> +       fi; \
>> +
>> +
>> +refresh-po: Makefile
>> +       for cat in $(POFILES); do \
>> +               lang=`basename $$cat .po`; \
>> +               if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \
>> +                       mv -f $$lang.pot $$lang.po ; \
>> +                       echo "$(MSGMERGE) of $$lang succeeded" ; \
>> +               else \
>> +                       echo "$(MSGMERGE) of $$lang failed" ; \
>> +                       rm -f $$lang.pot ; \
>> +               fi \
>> +       done
>> +
>> +clean:
>> +       @rm -fv *mo *~ .depend
>> +       @rm -rf tmp
>> +
>> +install: $(MOFILES)
>> +       @for n in $(MOFILES); do \
>> +           l=`basename $$n .mo`; \
>> +           $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \
>> +           $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \
>> +       done
>> +
>> +%.mo: %.po
>> +       $(MSGFMT) -o $@ $<
>> +report:
>> +       @for cat in $(wildcard *.po); do \
>> +                echo -n "$$cat: "; \
>> +                msgfmt -v --statistics -o /dev/null $$cat; \
>> +        done
>> +
>> +.PHONY: missing depend
>> +
>> +relabel:
>> +
>> +test:
>> diff --git a/gui/po/POTFILES b/gui/po/POTFILES
>> new file mode 100644
>> index 000000000000..1795c5c1951b
>> --- /dev/null
>> +++ b/gui/po/POTFILES
>> @@ -0,0 +1,17 @@
>> +../booleansPage.py
>> +../domainsPage.py
>> +../fcontextPage.py
>> +../loginsPage.py
>> +../modulesPage.py
>> +../org.selinux.config.policy
>> +../polgengui.py
>> +../polgen.ui
>> +../portsPage.py
>> +../selinux-polgengui.desktop
>> +../semanagePage.py
>> +../sepolicy.desktop
>> +../statusPage.py
>> +../system-config-selinux.desktop
>> +../system-config-selinux.py
>> +../system-config-selinux.ui
>> +../usersPage.py
>> diff --git a/gui/polgengui.py b/gui/polgengui.py
>> index d284ded65279..01f541bafae8 100644
>> --- a/gui/polgengui.py
>> +++ b/gui/polgengui.py
>> @@ -63,7 +63,7 @@ def get_all_modules():
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-gui"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/gui/portsPage.py b/gui/portsPage.py
>> index 30f58383bc1d..a537ecc8c0a1 100644
>> --- a/gui/portsPage.py
>> +++ b/gui/portsPage.py
>> @@ -35,7 +35,7 @@ from semanagePage import *
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-gui"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/gui/semanagePage.py b/gui/semanagePage.py
>> index 4127804fbbee..5361d69c1313 100644
>> --- a/gui/semanagePage.py
>> +++ b/gui/semanagePage.py
>> @@ -22,7 +22,7 @@ from gi.repository import Gdk, Gtk
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-gui"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/gui/statusPage.py b/gui/statusPage.py
>> index 766854b19cba..a8f079b9b163 100644
>> --- a/gui/statusPage.py
>> +++ b/gui/statusPage.py
>> @@ -35,7 +35,7 @@ RELABELFILE = "/.autorelabel"
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-gui"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/gui/system-config-selinux.py b/gui/system-config-selinux.py
>> index 3f70122b87e8..8c46c987b974 100644
>> --- a/gui/system-config-selinux.py
>> +++ b/gui/system-config-selinux.py
>> @@ -45,7 +45,7 @@ import selinux
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-gui"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/gui/usersPage.py b/gui/usersPage.py
>> index 26794ed5c3f3..d15d4c5a71dd 100644
>> --- a/gui/usersPage.py
>> +++ b/gui/usersPage.py
>> @@ -29,7 +29,7 @@ from semanagePage import *
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-gui"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/policycoreutils/po/Makefile b/policycoreutils/po/Makefile
>> index 575e143122e6..5ff92bff6fdc 100644
>> --- a/policycoreutils/po/Makefile
>> +++ b/policycoreutils/po/Makefile
>> @@ -3,7 +3,6 @@
>>  #
>>
>>  PREFIX ?= /usr
>> -TOP     = ../..
>>
>>  # What is this package?
>>  NLSPACKAGE     = policycoreutils
>> @@ -32,74 +31,13 @@ USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
>>
>>  POFILES                = $(patsubst %,%.po,$(USE_LINGUAS))
>>  MOFILES                = $(patsubst %.po,%.mo,$(POFILES))
>> -POTFILES = \
>> -       ../run_init/open_init_pty.c \
>> -       ../run_init/run_init.c \
>> -       ../semodule_link/semodule_link.c \
>> -       ../audit2allow/audit2allow \
>> -       ../semanage/seobject.py \
>> -       ../setsebool/setsebool.c \
>> -       ../newrole/newrole.c \
>> -       ../load_policy/load_policy.c \
>> -       ../sestatus/sestatus.c \
>> -       ../semodule/semodule.c \
>> -       ../setfiles/setfiles.c \
>> -       ../semodule_package/semodule_package.c \
>> -       ../semodule_deps/semodule_deps.c \
>> -       ../semodule_expand/semodule_expand.c \
>> -       ../scripts/chcat \
>> -       ../scripts/fixfiles \
>> -       ../restorecond/stringslist.c \
>> -       ../restorecond/restorecond.h \
>> -       ../restorecond/utmpwatcher.h \
>> -       ../restorecond/stringslist.h \
>> -       ../restorecond/restorecond.c \
>> -       ../restorecond/utmpwatcher.c \
>> -       ../gui/booleansPage.py \
>> -       ../gui/fcontextPage.py \
>> -       ../gui/loginsPage.py \
>> -       ../gui/mappingsPage.py \
>> -       ../gui/modulesPage.py \
>> -       ../gui/polgen.glade \
>> -       ../gui/polgengui.py \
>> -       ../gui/portsPage.py \
>> -       ../gui/semanagePage.py \
>> -       ../gui/statusPage.py \
>> -       ../gui/system-config-selinux.glade \
>> -       ../gui/system-config-selinux.py \
>> -       ../gui/usersPage.py \
>> -       ../secon/secon.c \
>> -       booleans.py \
>> -       ../sepolicy/sepolicy.py \
>> -       ../sepolicy/sepolicy/communicate.py \
>> -       ../sepolicy/sepolicy/__init__.py \
>> -       ../sepolicy/sepolicy/network.py \
>> -       ../sepolicy/sepolicy/generate.py \
>> -       ../sepolicy/sepolicy/sepolicy.glade \
>> -       ../sepolicy/sepolicy/gui.py \
>> -       ../sepolicy/sepolicy/manpage.py \
>> -       ../sepolicy/sepolicy/transition.py \
>> -       ../sepolicy/sepolicy/templates/executable.py \
>> -       ../sepolicy/sepolicy/templates/__init__.py \
>> -       ../sepolicy/sepolicy/templates/network.py \
>> -       ../sepolicy/sepolicy/templates/rw.py \
>> -       ../sepolicy/sepolicy/templates/script.py \
>> -       ../sepolicy/sepolicy/templates/semodule.py \
>> -       ../sepolicy/sepolicy/templates/tmp.py \
>> -       ../sepolicy/sepolicy/templates/user.py \
>> -       ../sepolicy/sepolicy/templates/var_lib.py \
>> -       ../sepolicy/sepolicy/templates/var_log.py \
>> -       ../sepolicy/sepolicy/templates/var_run.py \
>> -       ../sepolicy/sepolicy/templates/var_spool.py
>> +POTFILES  = $(shell cat POTFILES)
>>
>>  #default:: clean
>>
>> -all::  $(MOFILES)
>> +all:: $(POTFILE) $(MOFILES)
>>
>> -booleans.py:
>> -       sepolicy booleans -a > booleans.py
>> -
>> -$(POTFILE): $(POTFILES) booleans.py
>> +$(POTFILE): $(POTFILES)
>>         $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES)
>>         @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
>>             rm -f $(NLSPACKAGE).po; \
>> @@ -107,8 +45,6 @@ $(POTFILE): $(POTFILES) booleans.py
>>             mv -f $(NLSPACKAGE).po $(POTFILE); \
>>         fi; \
>>
>> -update-po: Makefile $(POTFILE) refresh-po
>> -       @rm -f booleans.py
>>
>>  refresh-po: Makefile
>>         for cat in $(POFILES); do \
>> @@ -144,3 +80,5 @@ report:
>>  .PHONY: missing depend
>>
>>  relabel:
>> +
>> +test:
>> diff --git a/policycoreutils/po/POTFILES b/policycoreutils/po/POTFILES
>> new file mode 100644
>> index 000000000000..12237dc61ee4
>> --- /dev/null
>> +++ b/policycoreutils/po/POTFILES
>> @@ -0,0 +1,9 @@
>> +../run_init/open_init_pty.c
>> +../run_init/run_init.c
>> +../setsebool/setsebool.c
>> +../newrole/newrole.c
>> +../load_policy/load_policy.c
>> +../sestatus/sestatus.c
>> +../semodule/semodule.c
>> +../setfiles/setfiles.c
>> +../secon/secon.c
>> diff --git a/python/Makefile b/python/Makefile
>> index 9b66d52fbd4d..00312dbdb5c6 100644
>> --- a/python/Makefile
>> +++ b/python/Makefile
>> @@ -1,4 +1,4 @@
>> -SUBDIRS = sepolicy audit2allow semanage sepolgen chcat
>> +SUBDIRS = sepolicy audit2allow semanage sepolgen chcat po
>>
>>  all install relabel clean indent test:
>>         @for subdir in $(SUBDIRS); do \
>> diff --git a/python/chcat/chcat b/python/chcat/chcat
>> index fdd2e46ee3f9..839ddd3b54b6 100755
>> --- a/python/chcat/chcat
>> +++ b/python/chcat/chcat
>> @@ -30,7 +30,7 @@ import getopt
>>  import selinux
>>  import seobject
>>
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-python"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/python/po/Makefile b/python/po/Makefile
>> new file mode 100644
>> index 000000000000..05e49f0cc274
>> --- /dev/null
>> +++ b/python/po/Makefile
>> @@ -0,0 +1,85 @@
>> +#
>> +# Makefile for the PO files (translation) catalog
>> +#
>> +
>> +PREFIX ?= /usr
>> +
>> +# What is this package?
>> +NLSPACKAGE     = python
>> +POTFILE                = $(NLSPACKAGE).pot
>> +INSTALL                = /usr/bin/install -c -p
>> +INSTALL_DATA   = $(INSTALL) -m 644
>> +INSTALL_DIR    = /usr/bin/install -d
>> +
>> +# destination directory
>> +INSTALL_NLS_DIR = $(PREFIX)/share/locale
>> +
>> +# PO catalog handling
>> +MSGMERGE       = msgmerge
>> +MSGMERGE_FLAGS = -q
>> +XGETTEXT       = xgettext --default-domain=$(NLSPACKAGE)
>> +MSGFMT         = msgfmt
>> +
>> +# All possible linguas
>> +PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po)))
>> +
>> +# Only the files matching what the user has set in LINGUAS
>> +USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS))
>> +
>> +# if no valid LINGUAS, build all languages
>> +USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
>> +
>> +POFILES                = $(patsubst %,%.po,$(USE_LINGUAS))
>> +MOFILES                = $(patsubst %.po,%.mo,$(POFILES))
>> +POTFILES  = $(shell cat POTFILES)
>> +
>> +#default:: clean
>> +
>> +all::  $(MOFILES)
>> +
>> +$(POTFILE): $(POTFILES)
>
> Extra space at the end of the line above.
>
>> +       $(XGETTEXT) -L Python --keyword=_ --keyword=N_ $(POTFILES)
>> +       $(XGETTEXT) -j --keyword=_ --keyword=N_ ../sepolicy/sepolicy/sepolicy.glade
>> +       @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
>> +           rm -f $(NLSPACKAGE).po; \
>> +       else \
>> +           mv -f $(NLSPACKAGE).po $(POTFILE); \
>> +       fi; \
>> +
>> +
>> +refresh-po: Makefile
>> +       for cat in $(POFILES); do \
>> +               lang=`basename $$cat .po`; \
>> +               if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \
>> +                       mv -f $$lang.pot $$lang.po ; \
>> +                       echo "$(MSGMERGE) of $$lang succeeded" ; \
>> +               else \
>> +                       echo "$(MSGMERGE) of $$lang failed" ; \
>> +                       rm -f $$lang.pot ; \
>> +               fi \
>> +       done
>> +
>> +clean:
>> +       @rm -fv *mo *~ .depend
>> +       @rm -rf tmp
>> +
>> +install: $(MOFILES)
>> +       @for n in $(MOFILES); do \
>> +           l=`basename $$n .mo`; \
>> +           $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \
>> +           $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \
>> +       done
>> +
>> +%.mo: %.po
>> +       $(MSGFMT) -o $@ $<
>> +report:
>> +       @for cat in $(wildcard *.po); do \
>> +                echo -n "$$cat: "; \
>> +                msgfmt -v --statistics -o /dev/null $$cat; \
>> +        done
>> +
>> +.PHONY: missing depend
>> +
>> +relabel:
>> +
>> +test:
>> diff --git a/python/po/POTFILES b/python/po/POTFILES
>> new file mode 100644
>> index 000000000000..128eb870a69e
>> --- /dev/null
>> +++ b/python/po/POTFILES
>> @@ -0,0 +1,10 @@
>> +../audit2allow/audit2allow
>> +../chcat/chcat
>> +../semanage/semanage
>> +../semanage/seobject.py
>> +../sepolgen/src/sepolgen/interfaces.py
>> +../sepolicy/sepolicy/generate.py
>> +../sepolicy/sepolicy/gui.py
>> +../sepolicy/sepolicy/__init__.py
>> +../sepolicy/sepolicy/interface.py
>> +../sepolicy/sepolicy.py
>> diff --git a/python/semanage/semanage b/python/semanage/semanage
>> index ff9fb66b1411..12bb159ef649 100644
>> --- a/python/semanage/semanage
>> +++ b/python/semanage/semanage
>> @@ -30,7 +30,7 @@ import seobject
>>  import sys
>>  import traceback
>>
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-python"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
>> index 21adbf6eb74f..69e60db80060 100644
>> --- a/python/semanage/seobject.py
>> +++ b/python/semanage/seobject.py
>> @@ -29,7 +29,7 @@ import sys
>>  import stat
>>  import socket
>>  from semanage import *
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-python"
>>  import sepolicy
>>  from setools.policyrep import SELinuxPolicy
>>  from setools.typequery import TypeQuery
>> diff --git a/python/sepolgen/src/sepolgen/sepolgeni18n.py b/python/sepolgen/src/sepolgen/sepolgeni18n.py
>> index 998c4356415c..56ebd807c69c 100644
>> --- a/python/sepolgen/src/sepolgen/sepolgeni18n.py
>> +++ b/python/sepolgen/src/sepolgen/sepolgeni18n.py
>> @@ -19,7 +19,7 @@
>>
>>  try:
>>      import gettext
>> -    t = gettext.translation( 'yumex' )
>> +    t = gettext.translation( 'selinux-python' )
>>      _ = t.gettext
>>  except:
>>      def _(str):
>> diff --git a/python/sepolicy/sepolicy.py b/python/sepolicy/sepolicy.py
>> index 7b2230651099..32956e58f52e 100755
>> --- a/python/sepolicy/sepolicy.py
>> +++ b/python/sepolicy/sepolicy.py
>> @@ -28,7 +28,7 @@ import sepolicy
>>  from multiprocessing import Pool
>>  from sepolicy import get_os_version, get_conditionals, get_conditionals_format_text
>>  import argparse
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-python"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
>> index e8654abbceb3..203ca25f4210 100644
>> --- a/python/sepolicy/sepolicy/__init__.py
>> +++ b/python/sepolicy/sepolicy/__init__.py
>> @@ -23,7 +23,7 @@ from setools.typeattrquery import TypeAttributeQuery
>>  from setools.typequery import TypeQuery
>>  from setools.userquery import UserQuery
>>
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-python"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/python/sepolicy/sepolicy/generate.py b/python/sepolicy/sepolicy/generate.py
>> index 4e1ed4e9dc31..43180ca6fda4 100644
>> --- a/python/sepolicy/sepolicy/generate.py
>> +++ b/python/sepolicy/sepolicy/generate.py
>> @@ -48,7 +48,7 @@ import sepolgen.defaults as defaults
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-python"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/python/sepolicy/sepolicy/gui.py b/python/sepolicy/sepolicy/gui.py
>> index 1e86422b864a..c9ca158ddd09 100644
>> --- a/python/sepolicy/sepolicy/gui.py
>> +++ b/python/sepolicy/sepolicy/gui.py
>> @@ -41,7 +41,7 @@ import os
>>  import re
>>  import unicodedata
>>
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-python"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/python/sepolicy/sepolicy/interface.py b/python/sepolicy/sepolicy/interface.py
>> index bdffb770f364..9d40aea1498d 100644
>> --- a/python/sepolicy/sepolicy/interface.py
>> +++ b/python/sepolicy/sepolicy/interface.py
>> @@ -30,7 +30,7 @@ __all__ = ['get_all_interfaces', 'get_interfaces_from_xml', 'get_admin', 'get_us
>>  ##
>>  ## I18N
>>  ##
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-python"
>>  try:
>>      import gettext
>>      kwargs = {}
>> diff --git a/sandbox/Makefile b/sandbox/Makefile
>> index 9da5e58db9e6..84cb5a39bf7e 100644
>> --- a/sandbox/Makefile
>> +++ b/sandbox/Makefile
>> @@ -13,6 +13,7 @@ override LDLIBS += -lselinux -lcap-ng
>>  SEUNSHARE_OBJS = seunshare.o
>>
>>  all: sandbox seunshare sandboxX.sh start
>> +       (cd po && $(MAKE) $@)
>>
>>  seunshare: $(SEUNSHARE_OBJS)
>>
>> @@ -39,12 +40,14 @@ install: all
>>         install -m 755 start $(DESTDIR)$(SHAREDIR)
>>         -mkdir -p $(DESTDIR)$(SYSCONFDIR)
>>         install -m 644 sandbox.conf $(DESTDIR)$(SYSCONFDIR)/sandbox
>> +       (cd po && $(MAKE) $@)
>>
>>  test:
>>         @$(PYTHON) test_sandbox.py -v
>>
>>  clean:
>>         -rm -f seunshare *.o *~
>> +       (cd po && $(MAKE) $@)
>>
>>  indent:
>>         ../../scripts/Lindent $(wildcard *.[ch])
>> diff --git a/sandbox/po/Makefile b/sandbox/po/Makefile
>> new file mode 100644
>> index 000000000000..e75343649b67
>> --- /dev/null
>> +++ b/sandbox/po/Makefile
>> @@ -0,0 +1,84 @@
>> +#
>> +# Makefile for the PO files (translation) catalog
>> +#
>> +
>> +PREFIX ?= /usr
>> +
>> +# What is this package?
>> +NLSPACKAGE     = sandbox
>> +POTFILE                = $(NLSPACKAGE).pot
>> +INSTALL                = /usr/bin/install -c -p
>> +INSTALL_DATA   = $(INSTALL) -m 644
>> +INSTALL_DIR    = /usr/bin/install -d
>> +
>> +# destination directory
>> +INSTALL_NLS_DIR = $(PREFIX)/share/locale
>> +
>> +# PO catalog handling
>> +MSGMERGE       = msgmerge
>> +MSGMERGE_FLAGS = -q
>> +XGETTEXT       = xgettext -L Python --default-domain=$(NLSPACKAGE)
>> +MSGFMT         = msgfmt
>> +
>> +# All possible linguas
>> +PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po)))
>> +
>> +# Only the files matching what the user has set in LINGUAS
>> +USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS))
>> +
>> +# if no valid LINGUAS, build all languages
>> +USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS))
>> +
>> +POFILES                = $(patsubst %,%.po,$(USE_LINGUAS))
>> +MOFILES                = $(patsubst %.po,%.mo,$(POFILES))
>> +POTFILES  = $(shell cat POTFILES)
>> +
>> +#default:: clean
>> +
>> +all:: $(POTFILE) $(MOFILES)
>> +
>> +$(POTFILE): $(POTFILES)
>> +       $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES)
>> +       @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \
>> +           rm -f $(NLSPACKAGE).po; \
>> +       else \
>> +           mv -f $(NLSPACKAGE).po $(POTFILE); \
>> +       fi; \
>> +
>> +
>> +refresh-po: Makefile
>> +       for cat in $(POFILES); do \
>> +               lang=`basename $$cat .po`; \
>> +               if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \
>> +                       mv -f $$lang.pot $$lang.po ; \
>> +                       echo "$(MSGMERGE) of $$lang succeeded" ; \
>> +               else \
>> +                       echo "$(MSGMERGE) of $$lang failed" ; \
>> +                       rm -f $$lang.pot ; \
>> +               fi \
>> +       done
>> +
>> +clean:
>> +       @rm -fv *mo *~ .depend
>> +       @rm -rf tmp
>> +
>> +install: $(MOFILES)
>> +       @for n in $(MOFILES); do \
>> +           l=`basename $$n .mo`; \
>> +           $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \
>> +           $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \
>> +       done
>> +
>> +%.mo: %.po
>> +       $(MSGFMT) -o $@ $<
>> +report:
>> +       @for cat in $(wildcard *.po); do \
>> +                echo -n "$$cat: "; \
>> +                msgfmt -v --statistics -o /dev/null $$cat; \
>> +        done
>> +
>> +.PHONY: missing depend
>> +
>> +relabel:
>> +
>> +test:
>> diff --git a/sandbox/po/POTFILES b/sandbox/po/POTFILES
>> new file mode 100644
>> index 000000000000..deff3f2f4656
>> --- /dev/null
>> +++ b/sandbox/po/POTFILES
>> @@ -0,0 +1 @@
>> +../sandbox
>> diff --git a/sandbox/sandbox b/sandbox/sandbox
>> index ca5f1e030a51..16c43b51eaaa 100644
>> --- a/sandbox/sandbox
>> +++ b/sandbox/sandbox
>> @@ -37,7 +37,7 @@ import sepolicy
>>
>>  SEUNSHARE = "/usr/sbin/seunshare"
>>  SANDBOXSH = "/usr/share/sandbox/sandboxX.sh"
>> -PROGNAME = "policycoreutils"
>> +PROGNAME = "selinux-sandbox"
>>  try:
>>      import gettext
>>      kwargs = {}
>> --
>> 2.35.1
>>


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-04-06 14:03 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-01  9:57 Translate or not? Petr Lautrbach
2022-04-01  9:57 ` [PATCH] Split po/ translation files into the relevant sub-directories Petr Lautrbach
2022-04-04 21:08   ` James Carter
2022-04-06  9:32     ` Petr Lautrbach

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.