import gettext-0.19.8.1-14.el8
This commit is contained in:
commit
0401db3ac6
1
.gettext.metadata
Normal file
1
.gettext.metadata
Normal file
@ -0,0 +1 @@
|
||||
e0fe90ede22f7f16bbde7bdea791a835f2773fc9 SOURCES/gettext-0.19.8.1.tar.xz
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
SOURCES/gettext-0.19.8.1.tar.xz
|
47
SOURCES/disable-gettext-runtime-test-lock.patch
Normal file
47
SOURCES/disable-gettext-runtime-test-lock.patch
Normal file
@ -0,0 +1,47 @@
|
||||
commit bd2c6ca2b7ae0be02d4bb85db79def454f3153fb
|
||||
Author: rpm-build <rpm-build>
|
||||
AuthorDate: Wed Dec 21 12:50:54 2016 +0100
|
||||
Commit: rpm-build <rpm-build>
|
||||
CommitDate: Wed Dec 21 12:52:36 2016 +0100
|
||||
|
||||
disable-gettext-runtime-test-lock.patch
|
||||
|
||||
diff --git a/gettext-runtime/tests/Makefile.am b/gettext-runtime/tests/Makefile.am
|
||||
index 88a0684..3a27b79 100644
|
||||
--- a/gettext-runtime/tests/Makefile.am
|
||||
+++ b/gettext-runtime/tests/Makefile.am
|
||||
@@ -19,7 +19,7 @@
|
||||
AUTOMAKE_OPTIONS = 1.11 gnits no-dependencies color-tests subdir-objects
|
||||
EXTRA_DIST =
|
||||
|
||||
-TESTS = test-lock
|
||||
+TESTS =
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I.. \
|
||||
diff --git a/gettext-runtime/tests/Makefile.in b/gettext-runtime/tests/Makefile.in
|
||||
index 4327733..5879146 100644
|
||||
--- a/gettext-runtime/tests/Makefile.in
|
||||
+++ b/gettext-runtime/tests/Makefile.in
|
||||
@@ -86,7 +86,7 @@ PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
-TESTS = test-lock$(EXEEXT)
|
||||
+TESTS =
|
||||
check_PROGRAMS = test-lock$(EXEEXT)
|
||||
subdir = tests
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
diff --git a/gettext-tools/gnulib-tests/Makefile.in b/gettext-tools/gnulib-tests/Makefile.in
|
||||
index 26becd9..4b9d0e4 100644
|
||||
--- a/gettext-tools/gnulib-tests/Makefile.in
|
||||
+++ b/gettext-tools/gnulib-tests/Makefile.in
|
||||
@@ -143,7 +143,7 @@ TESTS = test-set-mode-acl.sh test-set-mode-acl-1.sh \
|
||||
test-isnanl-nolibm$(EXEEXT) test-isnanl$(EXEEXT) \
|
||||
test-iswblank$(EXEEXT) test-langinfo$(EXEEXT) \
|
||||
test-linkedhash_list$(EXEEXT) test-locale$(EXEEXT) \
|
||||
- test-localename$(EXEEXT) test-lock$(EXEEXT) \
|
||||
+ test-localename$(EXEEXT) \
|
||||
test-log10$(EXEEXT) test-lseek.sh test-lstat$(EXEEXT) \
|
||||
test-malloca$(EXEEXT) test-math$(EXEEXT) test-mbrtowc1.sh \
|
||||
test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh \
|
43
SOURCES/gettext-0.19.8-its-segfault.patch
Normal file
43
SOURCES/gettext-0.19.8-its-segfault.patch
Normal file
@ -0,0 +1,43 @@
|
||||
From a0cab23332a254e3500cac2a3a984472d02180e5 Mon Sep 17 00:00:00 2001
|
||||
From: Bruno Haible <bruno@clisp.org>
|
||||
Date: Fri, 9 Dec 2016 21:04:31 +0100
|
||||
Subject: [PATCH] Fix crash of xgettext with --its option.
|
||||
|
||||
* gettext-tools/src/xgettext.c (main): Free contents of its_dirs only when it
|
||||
was initialized. Fixes bug introduced on 2016-05-16.
|
||||
---
|
||||
gettext-tools/src/xgettext.c | 11 +++++++----
|
||||
1 file changed, 7 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/gettext-tools/src/xgettext.c b/gettext-tools/src/xgettext.c
|
||||
index f848d76d1..a80ee51ac 100644
|
||||
--- a/gettext-tools/src/xgettext.c
|
||||
+++ b/gettext-tools/src/xgettext.c
|
||||
@@ -330,7 +330,7 @@ main (int argc, char *argv[])
|
||||
bool sort_by_msgid = false;
|
||||
bool sort_by_filepos = false;
|
||||
char **dirs;
|
||||
- char **its_dirs;
|
||||
+ char **its_dirs = NULL;
|
||||
char *explicit_its_filename = NULL;
|
||||
const char *file_name;
|
||||
const char *files_from = NULL;
|
||||
@@ -1016,9 +1016,12 @@ warning: file '%s' extension '%s' is unknown; will try C"), filename, extension)
|
||||
if (its_locating_rules)
|
||||
locating_rule_list_free (its_locating_rules);
|
||||
|
||||
- for (i = 0; its_dirs[i] != NULL; i++)
|
||||
- free (its_dirs[i]);
|
||||
- free (its_dirs);
|
||||
+ if (its_dirs != NULL)
|
||||
+ {
|
||||
+ for (i = 0; its_dirs[i] != NULL; i++)
|
||||
+ free (its_dirs[i]);
|
||||
+ free (its_dirs);
|
||||
+ }
|
||||
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
--
|
||||
2.14.3
|
||||
|
21
SOURCES/gettext-po-send-mail.patch
Normal file
21
SOURCES/gettext-po-send-mail.patch
Normal file
@ -0,0 +1,21 @@
|
||||
Index: gettext-0.19.8.1/gettext-tools/misc/po-mode.el
|
||||
===================================================================
|
||||
--- gettext-0.19.8.1.orig/gettext-tools/misc/po-mode.el
|
||||
+++ gettext-0.19.8.1/gettext-tools/misc/po-mode.el
|
||||
@@ -3518,10 +3518,12 @@ Write to your team? ('n' if writing to
|
||||
(re-search-forward
|
||||
(concat "^" (regexp-quote mail-header-separator) "\n"))
|
||||
(save-excursion
|
||||
- (insert-buffer-substring buffer)
|
||||
- (shell-command-on-region
|
||||
- (region-beginning) (region-end)
|
||||
- (concat po-gzip-uuencode-command " " name ".gz") t t))))))
|
||||
+ (save-restriction
|
||||
+ (narrow-to-region (point) (point))
|
||||
+ (insert-buffer-substring buffer)
|
||||
+ (shell-command-on-region
|
||||
+ (point-min) (point-max)
|
||||
+ (concat po-gzip-uuencode-command " " name ".gz") t t)))))))
|
||||
(message ""))
|
||||
|
||||
(defun po-confirm-and-quit ()
|
45
SOURCES/msghack.1
Normal file
45
SOURCES/msghack.1
Normal file
@ -0,0 +1,45 @@
|
||||
.TH MSGHACK "1" "June 2013" "msghack" "User Commands"
|
||||
.SH NAME
|
||||
msghack \- alter PO files in ways
|
||||
.SH SYNOPSIS
|
||||
.B msghack
|
||||
[\fIOPTION\fR] \fIfile.po \fR[\fIref.po\fR]
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
This program can be used to alter .po files in ways no sane mind would think about.
|
||||
.TP
|
||||
\fB\-o\fR
|
||||
result will be written to FILE
|
||||
.TP
|
||||
\fB\-\-invert\fR
|
||||
invert a po file by switching msgid and msgstr
|
||||
.TP
|
||||
\fB\-\-master\fR
|
||||
join any number of files in a master\-formatted catalog
|
||||
.TP
|
||||
\fB\-\-empty\fR
|
||||
empty the contents of the .po file, creating a .pot
|
||||
.TP
|
||||
\fB\-\-append\fR
|
||||
append entries from ref.po that don't exist in file.po
|
||||
.PP
|
||||
Note: It is just a replacement of msghack for backward support.
|
||||
.PP
|
||||
This program can be used to alter .po files in ways no sane mind would think about.
|
||||
.TP
|
||||
\fB\-o\fR
|
||||
result will be written to FILE
|
||||
.TP
|
||||
\fB\-\-invert\fR
|
||||
invert a po file by switching msgid and msgstr
|
||||
.TP
|
||||
\fB\-\-master\fR
|
||||
join any number of files in a master\-formatted catalog
|
||||
.TP
|
||||
\fB\-\-empty\fR
|
||||
empty the contents of the .po file, creating a .pot
|
||||
.TP
|
||||
\fB\-\-append\fR
|
||||
append entries from ref.po that don't exist in file.po
|
||||
.PP
|
||||
Note: It is just a replacement of msghack for backward support.
|
417
SOURCES/msghack.py
Executable file
417
SOURCES/msghack.py
Executable file
@ -0,0 +1,417 @@
|
||||
#!/usr/bin/python3
|
||||
## -*- coding: utf-8 -*-
|
||||
## Copyright (C) 2001, 2004, 2008, 2012 Red Hat, Inc.
|
||||
## Copyright (C) 2001 Trond Eivind Glomsrød <teg@redhat.com>
|
||||
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""
|
||||
A msghack replacement
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
class GTMessage:
|
||||
"""
|
||||
A class containing a message, its msgid and various references pointing at it
|
||||
"""
|
||||
|
||||
def __init__(self,id=None,message=None,refs=[]):
|
||||
"""
|
||||
The constructor for the GTMessage class
|
||||
@self The object instance
|
||||
@message The message
|
||||
@id The messageid associated with the object
|
||||
"""
|
||||
self._message=message.strip()
|
||||
self._id=id.strip()
|
||||
self._refs=[]
|
||||
for ref in refs:
|
||||
self._refs.append(ref)
|
||||
|
||||
def __str__(self):
|
||||
"""
|
||||
Return a string representation of the object
|
||||
@self The object instance
|
||||
"""
|
||||
res=""
|
||||
for ref in self._refs:
|
||||
res=res+ref+"\n"
|
||||
res=res+"msgid %s\nmsgstr %s\n" % (self._id,self._message)
|
||||
return res
|
||||
|
||||
def invertedStrings(self):
|
||||
"""
|
||||
Returns a string representation, but with msgid and msgstr inverted.
|
||||
Note: Don't invert the "" string
|
||||
@self The object instance
|
||||
"""
|
||||
res=""
|
||||
for ref in self._refs:
|
||||
res=res+ref+"\n"
|
||||
if not self._id=="\"\"":
|
||||
res=res+"msgid %s\nmsgstr %s\n" % (self._message,self._id)
|
||||
else:
|
||||
res=res+"msgid %s\nmsgstr %s\n" % (self._id,self._message)
|
||||
return res
|
||||
|
||||
def emptyMsgStrings(self):
|
||||
"""
|
||||
Return a string representation of the object, but leave the msgstr
|
||||
empty - create a pot file from a po file
|
||||
Note: Won't remove the "" string
|
||||
@self The object instance
|
||||
"""
|
||||
res=""
|
||||
for ref in self._refs:
|
||||
res=res+ref+"\n"
|
||||
if not self._id=="\"\"":
|
||||
res=res+"msgid %s\nmsgstr \"\"\n" % (self._id)
|
||||
else:
|
||||
res=res+"msgid %s\nmsgstr %s\n" % (self._id,self._message)
|
||||
return res
|
||||
|
||||
def compareMessage(self,msg):
|
||||
"""
|
||||
Return if the messages have identical msgids, 0 otherwise
|
||||
@self The object instance
|
||||
@msg The message to compare to
|
||||
"""
|
||||
|
||||
if self._id == msg._id:
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
class GTMasterMessage:
|
||||
"""
|
||||
A class containing a message, its msgid and various references pointing at it
|
||||
The difference between GTMessage and GTMasterMessage is that this class
|
||||
can do less operations, but is able to store multiple msgstrs with identifiers
|
||||
(usually language, like 'msgst(no)'
|
||||
"""
|
||||
|
||||
def __init__(self,id=None,refs=[]):
|
||||
"""
|
||||
The constructor for the GTMessage class
|
||||
@self The object instance
|
||||
@id The messageid associated with the object
|
||||
"""
|
||||
self._id=id
|
||||
self._refs=[]
|
||||
self._messages=[]
|
||||
for ref in refs:
|
||||
self._refs.append(ref)
|
||||
|
||||
def addMessage(self,message,identifier):
|
||||
"""
|
||||
Add a new message and identifier to the GTMasterMessage object
|
||||
@self The object instance
|
||||
@message The message to append
|
||||
@identifier The identifier of the message
|
||||
"""
|
||||
self._messages.append((identifier,message))
|
||||
|
||||
def __str__(self):
|
||||
"""
|
||||
Return a string representation of the object
|
||||
@self The object instance
|
||||
"""
|
||||
res=""
|
||||
for ref in self._refs:
|
||||
res=res+ref+"\n"
|
||||
res=res+"msgid %s\n" % self._id
|
||||
for message in self._messages:
|
||||
res=res+"msgstr(%s) %s\n" %(message[0],message[1])
|
||||
res=res+"\n"
|
||||
return res
|
||||
|
||||
class GTFile:
|
||||
"""
|
||||
A class containing the GTMessages contained in a file
|
||||
"""
|
||||
|
||||
def __init__(self,filename):
|
||||
"""
|
||||
The constructor of the GTMFile class
|
||||
@self The object instance
|
||||
@filename The file to initialize from
|
||||
"""
|
||||
self._filename=filename
|
||||
self._messages=[]
|
||||
self.readFile(filename)
|
||||
|
||||
def __str__(self):
|
||||
"""
|
||||
Return a string representation of the object
|
||||
@self The object instance
|
||||
"""
|
||||
res=""
|
||||
for message in self._messages:
|
||||
res=res+str(message)+"\n"
|
||||
return res
|
||||
|
||||
def invertedStrings(self):
|
||||
"""
|
||||
Return a string representation of the object, with msgid and msgstr
|
||||
swapped. Will remove duplicates...
|
||||
@self The object instance
|
||||
"""
|
||||
|
||||
msght={}
|
||||
msgar=[]
|
||||
|
||||
for message in self._messages:
|
||||
if message._id=='""' and len(msgar)==0:
|
||||
msgar.append(GTMessage(message._id,message._message,message._refs))
|
||||
continue
|
||||
msg=GTMessage(message._message,message._id,message._refs)
|
||||
if msg._id not in msght:
|
||||
msght[msg._id]=msg
|
||||
msgar.append(msg)
|
||||
else:
|
||||
msg2=msght[msg._id]
|
||||
for ref in msg._refs:
|
||||
msg2._refs.append(ref)
|
||||
res=""
|
||||
for message in msgar:
|
||||
res=res+str(message)+"\n"
|
||||
return res
|
||||
|
||||
def msgidDupes(self):
|
||||
"""
|
||||
Search for duplicates in the msgids.
|
||||
@self The object instance
|
||||
"""
|
||||
msgids={}
|
||||
res=""
|
||||
for message in self._messages:
|
||||
msgid=message._id
|
||||
if msgid in msgids:
|
||||
res=res+"Duplicate: %s\n" % (msgid)
|
||||
else:
|
||||
msgids[msgid]=1
|
||||
return res
|
||||
|
||||
def getMsgstr(self,msgid):
|
||||
"""
|
||||
Return the msgstr matching the given id. 'None' if missing
|
||||
@self The object instance
|
||||
@msgid The msgid key
|
||||
"""
|
||||
|
||||
for message in self._messages:
|
||||
if msgid == message._id:
|
||||
return message._message
|
||||
return None
|
||||
|
||||
def emptyMsgStrings(self):
|
||||
"""
|
||||
Return a string representation of the object, but leave the msgstr
|
||||
empty - create a pot file from a po file
|
||||
@self The object instance
|
||||
"""
|
||||
|
||||
res=""
|
||||
for message in self._messages:
|
||||
res=res+message.emptyMsgStrings()+"\n"
|
||||
return res
|
||||
|
||||
|
||||
def append(self,B):
|
||||
"""
|
||||
Append entries from dictionary B which aren't
|
||||
already present in this dictionary
|
||||
@self The object instance
|
||||
@B the dictionary to append messages from
|
||||
"""
|
||||
|
||||
for message in B._messages:
|
||||
if not self.getMsgstr(message._id):
|
||||
self._messages.append(message)
|
||||
|
||||
|
||||
def readFile(self,filename):
|
||||
"""
|
||||
Read the contents of a file into the GTFile object
|
||||
@self The object instance
|
||||
@filename The name of the file to read
|
||||
"""
|
||||
|
||||
file=open(filename,"r")
|
||||
msgid=""
|
||||
msgstr=""
|
||||
refs=[]
|
||||
lines=[]
|
||||
inmsgid=0
|
||||
inmsgstr=0
|
||||
templines=file.readlines()
|
||||
for line in templines:
|
||||
lines.append(line.strip())
|
||||
for line in lines:
|
||||
pos=line.find('"')
|
||||
pos2=line.rfind('"')
|
||||
if line and line[0]=="#":
|
||||
refs.append(line.strip())
|
||||
if inmsgstr==0 and line[:6]=="msgstr":
|
||||
msgstr=""
|
||||
inmsgstr=1
|
||||
inmsgid=0
|
||||
if inmsgstr==1:
|
||||
if pos==-1:
|
||||
inmsgstr=0
|
||||
#Handle entries with and without "" consistently
|
||||
if msgid[:2]=='""' and len(msgid)>4:
|
||||
msgid=msgid[2:]
|
||||
if msgstr[:2]=='""' and len(msgstr)>4:
|
||||
msgstr=msgstr[2:]
|
||||
message=GTMessage(msgid,msgstr,refs)
|
||||
self._messages.append(message)
|
||||
msgstr=""
|
||||
msgid=""
|
||||
refs=[]
|
||||
else:
|
||||
msgstr=msgstr+line[pos:pos2+1]+"\n"
|
||||
if inmsgid==0 and line[:5]=="msgid":
|
||||
msgid=""
|
||||
inmsgid=1
|
||||
if inmsgid==1:
|
||||
if pos==-1:
|
||||
inmsgid=0
|
||||
else:
|
||||
msgid=msgid+line[pos:pos2+1]+"\n"
|
||||
if msgstr and msgid:
|
||||
message=GTMessage(msgid,msgstr,refs)
|
||||
self._messages.append(message)
|
||||
|
||||
|
||||
class GTMaster:
|
||||
"""
|
||||
A class containing a master catalogue of gettext dictionaries
|
||||
"""
|
||||
|
||||
def __init__(self,dicts):
|
||||
"""
|
||||
The constructor for the GTMaster class
|
||||
@self The object instance
|
||||
@dicts An array of dictionaries to merge
|
||||
"""
|
||||
self._messages=[]
|
||||
self.createMaster(dicts)
|
||||
|
||||
def createMaster(self,dicts):
|
||||
"""
|
||||
Create the master catalogue
|
||||
@self The object instance
|
||||
@dicts An array of dictionaries to merge
|
||||
"""
|
||||
|
||||
self._master=dicts[0]
|
||||
self._dicts=dicts[1:]
|
||||
|
||||
for message in self._master._messages:
|
||||
gtm=GTMasterMessage(message._id,message._refs)
|
||||
gtm.addMessage(message._message,self._master._filename[:-3])
|
||||
for dict in self._dicts:
|
||||
res=dict.getMsgstr(message._id)
|
||||
if(res):
|
||||
gtm.addMessage(res,dict._filename[:-3])
|
||||
self._messages.append(gtm)
|
||||
|
||||
def __str__(self):
|
||||
"""
|
||||
Return a string representation of the object
|
||||
@self The object instance
|
||||
"""
|
||||
res=""
|
||||
for message in self._messages:
|
||||
res=res+str(message)+"\n"
|
||||
return res
|
||||
|
||||
def printUsage():
|
||||
"Print the usage messages"
|
||||
print("Usage: " + str(sys.argv[0]) + " [OPTION] file.po [ref.po]\n\
|
||||
This program can be used to alter .po files in ways no sane mind would think about.\n\
|
||||
-o result will be written to FILE\n\
|
||||
--invert invert a po file by switching msgid and msgstr\n\
|
||||
--master join any number of files in a master-formatted catalog\n\
|
||||
--empty empty the contents of the .po file, creating a .pot\n\
|
||||
--append append entries from ref.po that don't exist in file.po\n\
|
||||
\n\
|
||||
Note: It is just a replacement of msghack for backward support.\n")
|
||||
|
||||
|
||||
if __name__=="__main__":
|
||||
output=None
|
||||
res=None
|
||||
if("-o") in sys.argv:
|
||||
if (len(sys.argv)<=sys.argv.index("-o")+1):
|
||||
print("file.po and ref.po are not specified!\n")
|
||||
printUsage()
|
||||
exit(1)
|
||||
output=sys.argv[sys.argv.index("-o")+1]
|
||||
sys.argv.remove("-o")
|
||||
sys.argv.remove(output)
|
||||
if("--invert") in sys.argv:
|
||||
if (len(sys.argv)<=sys.argv.index("--invert")+1):
|
||||
print("file.po is not specified!\n")
|
||||
printUsage()
|
||||
exit(1)
|
||||
file=sys.argv[sys.argv.index("--invert")+1]
|
||||
gtf=GTFile(file)
|
||||
res1=gtf.msgidDupes()
|
||||
if res1:
|
||||
sys.stderr.write(res1)
|
||||
sys.exit(1)
|
||||
res=str(gtf.invertedStrings())
|
||||
elif("--empty") in sys.argv:
|
||||
if (len(sys.argv)<=sys.argv.index("--empty")+1):
|
||||
print("file.po is not specified!\n")
|
||||
printUsage()
|
||||
exit(1)
|
||||
file=sys.argv[sys.argv.index("--empty")+1]
|
||||
gtf=GTFile(file)
|
||||
res=str(gtf.emptyMsgStrings())
|
||||
elif("--master") in sys.argv:
|
||||
if (len(sys.argv)<=sys.argv.index("--master")+1):
|
||||
print("file.po is not specified!\n")
|
||||
printUsage()
|
||||
exit(1)
|
||||
loc=sys.argv.index("--master")+1
|
||||
gtfs=[]
|
||||
for file in sys.argv[loc:]:
|
||||
gtfs.append(GTFile(file))
|
||||
master=GTMaster(gtfs)
|
||||
res=str(master)
|
||||
elif("--append") in sys.argv:
|
||||
if (len(sys.argv)<=sys.argv.index("--append")+2):
|
||||
print("file.po and/or ref.po are not specified!\n")
|
||||
printUsage()
|
||||
exit(1)
|
||||
file=sys.argv[sys.argv.index("--append")+1]
|
||||
file2=sys.argv[sys.argv.index("--append")+2]
|
||||
gtf=GTFile(file)
|
||||
gtf2=GTFile(file2)
|
||||
gtf.append(gtf2)
|
||||
res=str(gtf)
|
||||
else:
|
||||
#print("Not implemented: "+str(sys.argv))
|
||||
printUsage()
|
||||
sys.exit(1)
|
||||
if not output:
|
||||
print(res)
|
||||
else:
|
||||
file=open(output,"w")
|
||||
file.write(res)
|
||||
sys.exit(0)
|
1037
SPECS/gettext.spec
Normal file
1037
SPECS/gettext.spec
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user