feat(i18n): 添加多语言支持功能

- 新增国际化系统,支持中英文切换
- 添加语言选择对话框和语言切换按钮回调
- 扩展配置系统以支持语言设置存储
- 创建语言文件目录结构和占位文件
- 更新主窗口支持UI文本动态刷新
This commit is contained in:
2026-03-26 20:44:22 +08:00
parent 9a78b88c4a
commit 4fe7dc47e4
2343 changed files with 127697 additions and 9 deletions
@@ -0,0 +1,148 @@
<!-- Creator : groff version 1.22.3 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title>AUTOPOINT</title>
</head>
<body>
<h1 align="center">AUTOPOINT</h1>
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
<a href="#DESCRIPTION">DESCRIPTION</a><br>
<a href="#OPTIONS">OPTIONS</a><br>
<a href="#AUTHOR">AUTHOR</a><br>
<a href="#REPORTING BUGS">REPORTING BUGS</a><br>
<a href="#COPYRIGHT">COPYRIGHT</a><br>
<a href="#SEE ALSO">SEE ALSO</a><br>
<hr>
<h2>NAME
<a name="NAME"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">autopoint
- copies standard gettext infrastructure</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>autopoint</b>
[<i>OPTION</i>]...</p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Copies standard
gettext infrastructure files into a source package.</p>
<h2>OPTIONS
<a name="OPTIONS"></a>
</h2>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p style="margin-top: 1em"><b>--help</b></p></td>
<td width="2%"></td>
<td width="36%">
<p style="margin-top: 1em">print this help and exit</p></td>
<td width="42%">
</td></tr>
</table>
<p style="margin-left:11%;"><b>--version</b></p>
<p style="margin-left:22%;">print version information and
exit</p>
<p style="margin-left:11%;"><b>-f</b>,
<b>--force</b></p>
<p style="margin-left:22%;">force overwriting of files that
already exist</p>
<p style="margin-left:11%;"><b>-n</b>,
<b>--dry-run</b></p>
<p style="margin-left:22%;">print modifications but
don&rsquo;t perform them</p>
<h2>AUTHOR
<a name="AUTHOR"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Written by
Bruno Haible.</p>
<h2>REPORTING BUGS
<a name="REPORTING BUGS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Report bugs in
the bug tracker at
&lt;https://savannah.gnu.org/projects/gettext&gt; or by
email to &lt;bug-gettext@gnu.org&gt;.</p>
<h2>COPYRIGHT
<a name="COPYRIGHT"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Copyright
&copy; 2002-2026 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
&lt;https://gnu.org/licenses/gpl.html&gt; <br>
This is free software: you are free to change and
redistribute it. There is NO WARRANTY, to the extent
permitted by law.</p>
<h2>SEE ALSO
<a name="SEE ALSO"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">The full
documentation for <b>autopoint</b> is maintained as a
Texinfo manual. If the <b>info</b> and <b>autopoint</b>
programs are properly installed at your site, the
command</p>
<p style="margin-left:22%; margin-top: 1em"><b>info
autopoint</b></p>
<p style="margin-left:11%; margin-top: 1em">should give you
access to the complete manual.</p>
<hr>
</body>
</html>
@@ -0,0 +1,158 @@
<!-- Creator : groff version 1.22.3 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title>BIND_TEXTDOMAIN_CODESET</title>
</head>
<body>
<h1 align="center">BIND_TEXTDOMAIN_CODESET</h1>
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
<a href="#DESCRIPTION">DESCRIPTION</a><br>
<a href="#RETURN VALUE">RETURN VALUE</a><br>
<a href="#ERRORS">ERRORS</a><br>
<a href="#BUGS">BUGS</a><br>
<a href="#SEE ALSO">SEE ALSO</a><br>
<hr>
<h2>NAME
<a name="NAME"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">bind_textdomain_codeset
- set encoding of message translations</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>#include
&lt;libintl.h&gt;</b></p>
<p style="margin-left:11%; margin-top: 1em"><b>char *
bind_textdomain_codeset (const char *</b>
<i>domainname</i><b>, <br>
const char *</b> <i>codeset</i><b>);</b></p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">The
<b>bind_textdomain_codeset</b> function sets the output
codeset for message catalogs for domain
<i>domainname</i>.</p>
<p style="margin-left:11%; margin-top: 1em">A message
domain is a set of translatable <i>msgid</i> messages.
Usually, every software package has its own message
domain.</p>
<p style="margin-left:11%; margin-top: 1em">By default, the
<b>gettext</b> family of functions returns translated
messages in the locale&rsquo;s character encoding, which can
be retrieved as <b>nl_langinfo (CODESET)</b>. The need for
calling <b>bind_textdomain_codeset</b> arises for programs
which store strings in a locale independent way (e.g. UTF-8)
and want to avoid an extra character set conversion on the
returned translated messages.</p>
<p style="margin-left:11%; margin-top: 1em"><i>domainname</i>
must be a non-empty string.</p>
<p style="margin-left:11%; margin-top: 1em">If
<i>codeset</i> is not NULL, it must be a valid encoding name
which can be used for the <b>iconv_open</b> function. The
<b>bind_textdomain_codeset</b> function sets the output
codeset for message catalogs belonging to domain
<i>domainname</i> to <i>codeset</i>. The function makes
copies of the argument strings as needed.</p>
<p style="margin-left:11%; margin-top: 1em">If
<i>codeset</i> is NULL, the function returns the previously
set codeset for domain <i>domainname</i>. The default is
NULL, denoting the locale&rsquo;s character encoding.</p>
<h2>RETURN VALUE
<a name="RETURN VALUE"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">If successful,
the <b>bind_textdomain_codeset</b> function returns the
current codeset for domain <i>domainname</i>, after possibly
changing it. The resulting string is valid until the next
<b>bind_textdomain_codeset</b> call for the same
<i>domainname</i> and must not be modified or freed. If a
memory allocation failure occurs, it sets <b>errno</b> to
<b>ENOMEM</b> and returns NULL. If no codeset has been set
for domain <i>domainname</i>, it returns NULL.</p>
<h2>ERRORS
<a name="ERRORS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">The following
error can occur, among others:</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>ENOMEM</b></p></td>
<td width="2%"></td>
<td width="43%">
<p>Not enough memory available.</p></td>
<td width="35%">
</td></tr>
</table>
<h2>BUGS
<a name="BUGS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">The return type
ought to be <b>const char *</b>, but is <b>char *</b> to
avoid warnings in C code predating ANSI C.</p>
<h2>SEE ALSO
<a name="SEE ALSO"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>gettext</b>(3),
<b>dgettext</b>(3), <b>dcgettext</b>(3), <b>ngettext</b>(3),
<b>dngettext</b>(3), <b>dcngettext</b>(3),
<b>textdomain</b>(3), <b>nl_langinfo</b>(3),
<b>iconv_open</b>(3)</p>
<hr>
</body>
</html>
@@ -0,0 +1,154 @@
<!-- Creator : groff version 1.22.3 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title>BINDTEXTDOMAIN</title>
</head>
<body>
<h1 align="center">BINDTEXTDOMAIN</h1>
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
<a href="#DESCRIPTION">DESCRIPTION</a><br>
<a href="#RETURN VALUE">RETURN VALUE</a><br>
<a href="#ERRORS">ERRORS</a><br>
<a href="#BUGS">BUGS</a><br>
<a href="#SEE ALSO">SEE ALSO</a><br>
<hr>
<h2>NAME
<a name="NAME"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">bindtextdomain
- set directory containing message catalogs</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>#include
&lt;libintl.h&gt;</b></p>
<p style="margin-left:11%; margin-top: 1em"><b>char *
bindtextdomain (const char *</b> <i>domainname</i><b>, const
char *</b> <i>dirname</i><b>);</b></p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">The
<b>bindtextdomain</b> function sets the base directory of
the hierarchy containing message catalogs for a given
message domain.</p>
<p style="margin-left:11%; margin-top: 1em">A message
domain is a set of translatable <i>msgid</i> messages.
Usually, every software package has its own message domain.
The need for calling <b>bindtextdomain</b> arises because
packages are not always installed with the same prefix as
the &lt;libintl.h&gt; header and the libc/libintl
libraries.</p>
<p style="margin-left:11%; margin-top: 1em">Message
catalogs will be expected at the pathnames
<i>dirname</i>/<i>locale</i>/<i>category</i>/<i>domainname</i>.mo,
where <i>locale</i> is a locale name and <i>category</i> is
a locale facet such as <b>LC_MESSAGES</b>.</p>
<p style="margin-left:11%; margin-top: 1em"><i>domainname</i>
must be a non-empty string.</p>
<p style="margin-left:11%; margin-top: 1em">If
<i>dirname</i> is not NULL, the base directory for message
catalogs belonging to domain <i>domainname</i> is set to
<i>dirname</i>. The function makes copies of the argument
strings as needed. If the program wishes to call the
<b>chdir</b> function, it is important that <i>dirname</i>
be an absolute pathname; otherwise it cannot be guaranteed
that the message catalogs will be found.</p>
<p style="margin-left:11%; margin-top: 1em">If
<i>dirname</i> is NULL, the function returns the previously
set base directory for domain <i>domainname</i>.</p>
<h2>RETURN VALUE
<a name="RETURN VALUE"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">If successful,
the <b>bindtextdomain</b> function returns the current base
directory for domain <i>domainname</i>, after possibly
changing it. The resulting string is valid until the next
<b>bindtextdomain</b> call for the same <i>domainname</i>
and must not be modified or freed. If a memory allocation
failure occurs, it sets <b>errno</b> to <b>ENOMEM</b> and
returns NULL.</p>
<h2>ERRORS
<a name="ERRORS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">The following
error can occur, among others:</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>ENOMEM</b></p></td>
<td width="2%"></td>
<td width="43%">
<p>Not enough memory available.</p></td>
<td width="35%">
</td></tr>
</table>
<h2>BUGS
<a name="BUGS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">The return type
ought to be <b>const char *</b>, but is <b>char *</b> to
avoid warnings in C code predating ANSI C.</p>
<h2>SEE ALSO
<a name="SEE ALSO"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>gettext</b>(3),
<b>dgettext</b>(3), <b>dcgettext</b>(3), <b>ngettext</b>(3),
<b>dngettext</b>(3), <b>dcngettext</b>(3),
<b>textdomain</b>(3), <b>realpath</b>(3)</p>
<hr>
</body>
</html>
@@ -0,0 +1,8 @@
<HTML>
<BODY BGCOLOR="#FFFFFF">
<I>GNU.Gettext Namespace</I><P>
<A HREF="GNU_Gettext_GettextResourceManager.html" TARGET="contents">GettextResourceManager</A><BR>
<A HREF="GNU_Gettext_GettextResourceSet.html" TARGET="contents">GettextResourceSet</A><BR>
</BODY>
</HTML>
@@ -0,0 +1,305 @@
<HTML>
<HEAD>
<TITLE>GNU.Gettext.GettextResourceManager Class</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H3>GNU.Gettext.GettextResourceManager Class</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public class GettextResourceManager: System.Resources.ResourceManager</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Base Types</H4>
<BLOCKQUOTE>
System.Resources.ResourceManager<BR>
&nbsp;&nbsp;GettextResourceManager<P>
</BLOCKQUOTE>
<H4>Library</H4>
<BLOCKQUOTE>
GNU.Gettext
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Each instance of this class can be used to lookup translations for a
given resource name. For each <CODE>CultureInfo</CODE>, it performs the lookup
in several assemblies, from most specific over territory-neutral to
language-neutral.
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<H4>Members</H4>
<BLOCKQUOTE>
<P>
GettextResourceManager Constructors<P>
<A HREF="#GettextResourceManager%28System.String%29%20Constructor" TARGET="contents">GettextResourceManager(System.String) Constructor</A><BR>
<A HREF="#GettextResourceManager%28System.String%2C%20System.Reflection.Assembly%29%20Constructor" TARGET="contents">GettextResourceManager(System.String, System.Reflection.Assembly) Constructor</A><BR>
<P>
GettextResourceManager Methods<P>
<A HREF="#GettextResourceManager.GetPluralString%28System.String%2C%20System.String%2C%20long%2C%20System.Globalization.CultureInfo%29%20Method" TARGET="contents">GettextResourceManager.GetPluralString(System.String, System.String, long, System.Globalization.CultureInfo) Method</A><BR>
<A HREF="#GettextResourceManager.GetPluralString%28System.String%2C%20System.String%2C%20long%29%20Method" TARGET="contents">GettextResourceManager.GetPluralString(System.String, System.String, long) Method</A><BR>
<A HREF="#GettextResourceManager.GetString%28System.String%2C%20System.Globalization.CultureInfo%29%20Method" TARGET="contents">GettextResourceManager.GetString(System.String, System.Globalization.CultureInfo) Method</A><BR>
<A HREF="#GettextResourceManager.GetString%28System.String%29%20Method" TARGET="contents">GettextResourceManager.GetString(System.String) Method</A><BR>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceManager%28System.String%29%20Constructor"><H3>GettextResourceManager(System.String) Constructor</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public GettextResourceManager(System.String baseName);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Constructor.
</BLOCKQUOTE>
<H4>Parameters</H4>
<BLOCKQUOTE>
<DL>
<DT>baseName</DT>
<DD>the resource name, also the assembly base
name</DD>
</DL>
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceManager.html" TARGET="contents">GNU.Gettext.GettextResourceManager Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceManager%28System.String%2C%20System.Reflection.Assembly%29%20Constructor"><H3>GettextResourceManager(System.String, System.Reflection.Assembly) Constructor</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public GettextResourceManager(System.String baseName, System.Reflection.Assembly assembly);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Constructor.
</BLOCKQUOTE>
<H4>Parameters</H4>
<BLOCKQUOTE>
<DL>
<DT>baseName</DT>
<DD>the resource name, also the assembly base
name</DD>
</DL>
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceManager.html" TARGET="contents">GNU.Gettext.GettextResourceManager Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceManager.GetPluralString%28System.String%2C%20System.String%2C%20long%2C%20System.Globalization.CultureInfo%29%20Method"><H3>GettextResourceManager.GetPluralString(System.String, System.String, long, System.Globalization.CultureInfo) Method</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public virtual System.String GetPluralString(System.String msgid, System.String msgidPlural, long n, System.Globalization.CultureInfo culture);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Returns the translation of <I>msgid</I> and
<I>msgidPlural</I> in a given culture, choosing the right
plural form depending on the number <I>n</I>.
</BLOCKQUOTE>
<H4>Parameters</H4>
<BLOCKQUOTE>
<DL>
<DT>msgid</DT>
<DD>the key string to be translated, an ASCII
string</DD>
<DT>msgidPlural</DT>
<DD>the English plural of <I>msgid</I>,
an ASCII string</DD>
<DT>n</DT>
<DD>the number, should be &gt;= 0</DD>
</DL>
</BLOCKQUOTE>
<H4>Return Value</H4>
<BLOCKQUOTE>
the translation, or <I>msgid</I> or
<I>msgidPlural</I> if none is found
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceManager.html" TARGET="contents">GNU.Gettext.GettextResourceManager Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceManager.GetPluralString%28System.String%2C%20System.String%2C%20long%29%20Method"><H3>GettextResourceManager.GetPluralString(System.String, System.String, long) Method</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public virtual System.String GetPluralString(System.String msgid, System.String msgidPlural, long n);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Returns the translation of <I>msgid</I> and
<I>msgidPlural</I> in the current culture, choosing the
right plural form depending on the number <I>n</I>.
</BLOCKQUOTE>
<H4>Parameters</H4>
<BLOCKQUOTE>
<DL>
<DT>msgid</DT>
<DD>the key string to be translated, an ASCII
string</DD>
<DT>msgidPlural</DT>
<DD>the English plural of <I>msgid</I>,
an ASCII string</DD>
<DT>n</DT>
<DD>the number, should be &gt;= 0</DD>
</DL>
</BLOCKQUOTE>
<H4>Return Value</H4>
<BLOCKQUOTE>
the translation, or <I>msgid</I> or
<I>msgidPlural</I> if none is found
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceManager.html" TARGET="contents">GNU.Gettext.GettextResourceManager Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceManager.GetString%28System.String%2C%20System.Globalization.CultureInfo%29%20Method"><H3>GettextResourceManager.GetString(System.String, System.Globalization.CultureInfo) Method</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public override System.String GetString(System.String msgid, System.Globalization.CultureInfo culture);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Returns the translation of <I>msgid</I> in a given culture.
</BLOCKQUOTE>
<H4>Parameters</H4>
<BLOCKQUOTE>
<DL>
<DT>msgid</DT>
<DD>the key string to be translated, an ASCII
string</DD>
</DL>
</BLOCKQUOTE>
<H4>Return Value</H4>
<BLOCKQUOTE>
the translation of <I>msgid</I>, or
<I>msgid</I> if none is found
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceManager.html" TARGET="contents">GNU.Gettext.GettextResourceManager Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceManager.GetString%28System.String%29%20Method"><H3>GettextResourceManager.GetString(System.String) Method</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public override System.String GetString(System.String msgid);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Returns the translation of <I>msgid</I> in the current
culture.
</BLOCKQUOTE>
<H4>Parameters</H4>
<BLOCKQUOTE>
<DL>
<DT>msgid</DT>
<DD>the key string to be translated, an ASCII
string</DD>
</DL>
</BLOCKQUOTE>
<H4>Return Value</H4>
<BLOCKQUOTE>
the translation of <I>msgid</I>, or
<I>msgid</I> if none is found
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceManager.html" TARGET="contents">GNU.Gettext.GettextResourceManager Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
</BODY>
</HTML>
@@ -0,0 +1,356 @@
<HTML>
<HEAD>
<TITLE>GNU.Gettext.GettextResourceSet Class</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H3>GNU.Gettext.GettextResourceSet Class</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public class GettextResourceSet: System.Resources.ResourceSet</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Base Types</H4>
<BLOCKQUOTE>
System.Resources.ResourceSet<BR>
&nbsp;&nbsp;GettextResourceSet<P>
</BLOCKQUOTE>
<H4>Library</H4>
<BLOCKQUOTE>
GNU.Gettext
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Each instance of this class encapsulates a single PO file.
<P>
This API of this class is not meant to be used directly; use
<CODE>GettextResourceManager</CODE> instead.
<P>
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<H4>Members</H4>
<BLOCKQUOTE>
<P>
GettextResourceSet Constructors<P>
<A HREF="#GettextResourceSet%28%29%20Constructor" TARGET="contents">GettextResourceSet() Constructor</A><BR>
<A HREF="#GettextResourceSet%28System.Resources.IResourceReader%29%20Constructor" TARGET="contents">GettextResourceSet(System.Resources.IResourceReader) Constructor</A><BR>
<A HREF="#GettextResourceSet%28System.IO.Stream%29%20Constructor" TARGET="contents">GettextResourceSet(System.IO.Stream) Constructor</A><BR>
<A HREF="#GettextResourceSet%28System.String%29%20Constructor" TARGET="contents">GettextResourceSet(System.String) Constructor</A><BR>
<P>
GettextResourceSet Methods<P>
<A HREF="#GettextResourceSet.GetPluralString%20Method" TARGET="contents">GettextResourceSet.GetPluralString Method</A><BR>
<A HREF="#GettextResourceSet.GetString%28System.String%29%20Method" TARGET="contents">GettextResourceSet.GetString(System.String) Method</A><BR>
<A HREF="#GettextResourceSet.GetString%28System.String%2C%20bool%29%20Method" TARGET="contents">GettextResourceSet.GetString(System.String, bool) Method</A><BR>
<A HREF="#GettextResourceSet.PluralEval%20Method" TARGET="contents">GettextResourceSet.PluralEval Method</A><BR>
<P>
GettextResourceSet Properties<P>
<A HREF="#GettextResourceSet.Keys%20Property" TARGET="contents">GettextResourceSet.Keys Property</A><BR>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceSet%28%29%20Constructor"><H3>GettextResourceSet() Constructor</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>protected GettextResourceSet();</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Creates a new message catalog. When using this constructor, you
must override the <CODE>ReadResources</CODE> method, in order to initialize
the <CODE>Table</CODE> property. The message catalog will support plural
forms only if the <CODE>ReadResources</CODE> method installs values of type
<CODE>String[]</CODE> and if the <CODE>PluralEval</CODE> method is overridden.
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceSet.html" TARGET="contents">GNU.Gettext.GettextResourceSet Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceSet%28System.Resources.IResourceReader%29%20Constructor"><H3>GettextResourceSet(System.Resources.IResourceReader) Constructor</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public GettextResourceSet(System.Resources.IResourceReader reader);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Creates a new message catalog, by reading the string/value pairs from
the given <I>reader</I>. The message catalog will support
plural forms only if the reader can produce values of type
<CODE>String[]</CODE> and if the <CODE>PluralEval</CODE> method is overridden.
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceSet.html" TARGET="contents">GNU.Gettext.GettextResourceSet Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceSet%28System.IO.Stream%29%20Constructor"><H3>GettextResourceSet(System.IO.Stream) Constructor</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public GettextResourceSet(System.IO.Stream stream);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Creates a new message catalog, by reading the string/value pairs from
the given <I>stream</I>, which should have the format of
a <CODE>.resources</CODE> file. The message catalog will not support plural
forms.
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceSet.html" TARGET="contents">GNU.Gettext.GettextResourceSet Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceSet%28System.String%29%20Constructor"><H3>GettextResourceSet(System.String) Constructor</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public GettextResourceSet(System.String fileName);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Creates a new message catalog, by reading the string/value pairs from
the file with the given <I>fileName</I>. The file should
be in the format of a <CODE>.resources</CODE> file. The message catalog will
not support plural forms.
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceSet.html" TARGET="contents">GNU.Gettext.GettextResourceSet Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceSet.GetPluralString%20Method"><H3>GettextResourceSet.GetPluralString Method</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public virtual System.String GetPluralString(System.String msgid, System.String msgidPlural, long n);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Returns the translation of <I>msgid</I> and
<I>msgidPlural</I>, choosing the right plural form
depending on the number <I>n</I>.
</BLOCKQUOTE>
<H4>Parameters</H4>
<BLOCKQUOTE>
<DL>
<DT>msgid</DT>
<DD>the key string to be translated, an ASCII
string</DD>
<DT>msgidPlural</DT>
<DD>the English plural of <I>msgid</I>,
an ASCII string</DD>
<DT>n</DT>
<DD>the number, should be &gt;= 0</DD>
</DL>
</BLOCKQUOTE>
<H4>Return Value</H4>
<BLOCKQUOTE>
the translation, or <CODE>null</CODE> if none is found
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceSet.html" TARGET="contents">GNU.Gettext.GettextResourceSet Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceSet.GetString%28System.String%29%20Method"><H3>GettextResourceSet.GetString(System.String) Method</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public override System.String GetString(System.String msgid);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Returns the translation of <I>msgid</I>.
</BLOCKQUOTE>
<H4>Parameters</H4>
<BLOCKQUOTE>
<DL>
<DT>msgid</DT>
<DD>the key string to be translated, an ASCII
string</DD>
</DL>
</BLOCKQUOTE>
<H4>Return Value</H4>
<BLOCKQUOTE>
the translation of <I>msgid</I>, or <CODE>null</CODE> if
none is found
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceSet.html" TARGET="contents">GNU.Gettext.GettextResourceSet Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceSet.GetString%28System.String%2C%20bool%29%20Method"><H3>GettextResourceSet.GetString(System.String, bool) Method</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public override System.String GetString(System.String msgid, bool ignoreCase);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Returns the translation of <I>msgid</I>, with possibly
case-insensitive lookup.
</BLOCKQUOTE>
<H4>Parameters</H4>
<BLOCKQUOTE>
<DL>
<DT>msgid</DT>
<DD>the key string to be translated, an ASCII
string</DD>
</DL>
</BLOCKQUOTE>
<H4>Return Value</H4>
<BLOCKQUOTE>
the translation of <I>msgid</I>, or <CODE>null</CODE> if
none is found
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceSet.html" TARGET="contents">GNU.Gettext.GettextResourceSet Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceSet.PluralEval%20Method"><H3>GettextResourceSet.PluralEval Method</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>protected virtual long PluralEval(long n);</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Returns the index of the plural form to be chosen for a given number.
The default implementation is the Germanic plural formula:
zero for <I>n</I> == 1, one for <I>n</I> != 1.
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceSet.html" TARGET="contents">GNU.Gettext.GettextResourceSet Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
<HR>
<A NAME="GettextResourceSet.Keys%20Property"><H3>GettextResourceSet.Keys Property</H3>
<BLOCKQUOTE>
<TABLE COLS="1" ROWS="1" WIDTH="100%">
<TR><TD BGCOLOR="#C0C0C0"><PRE>public virtual System.Collections.ICollection Keys { get; }</PRE></TD></TR>
</TABLE>
</BLOCKQUOTE>
<H4>Summary</H4>
<BLOCKQUOTE>
Returns the keys of this resource set, i.e. the strings for which
<CODE>GetObject()</CODE> can return a non-null value.
</BLOCKQUOTE>
<H4>See Also</H4>
<BLOCKQUOTE>
<A HREF="GNU_Gettext_GettextResourceSet.html" TARGET="contents">GNU.Gettext.GettextResourceSet Class</A>, <A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A>
</BLOCKQUOTE>
</BODY>
</HTML>
@@ -0,0 +1,11 @@
<HTML>
<HEAD><TITLE>-</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF">
<H1>-</H1>
<BLOCKQUOTE>
<A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext Namespace</A><BR>
</BLOCKQUOTE>
</BODY>
</HTML>
@@ -0,0 +1,10 @@
<HTML>
<HEAD><TITLE>-</TITLE></HEAD>
<FRAMESET COLS="150,*">
<FRAMESET ROWS="50%,50%">
<FRAME SRC="namespaces.html" NAME="namespaces">
<FRAME SRC="GNU_Gettext.html" NAME="members">
</FRAMESET>
<FRAME SRC="begin.html" NAME="contents">
</FRAMESET>
</HTML>
@@ -0,0 +1,6 @@
<HTML>
<BODY BGCOLOR="#FFFFFF">
<I>Namespaces</I><P>
<A HREF="GNU_Gettext.html" TARGET="members">GNU.Gettext</A><BR>
</BODY>
</HTML>
@@ -0,0 +1,117 @@
This directory contains simple examples of the use of GNU gettext.
Each example is a simple "hello world" program with a very small message
catalog, written in a particular programming language for a particular
environment.
Example Language GUI Environment
hello-c C
hello-c-gnome2 C GNOME 2 (obsolete)
hello-c-gnome3 C GNOME 3.10 or later
hello-c-http C web browser
hello-c++ C++
hello-c++20 C++ 20
hello-c++-qt C++ Qt
hello-c++-kde C++ KDE
hello-c++-gnome2 C++ GNOME 2 (obsolete)
hello-c++-gnome3 C++ GNOME 3.10 or later
hello-c++-wxwidgets C++ wxWidgets
hello-objc ObjectiveC
hello-objc-gnustep ObjectiveC GNUstep
hello-objc-gnome2 ObjectiveC GNOME 2 (obsolete)
hello-python Python
hello-java Java
hello-java-awt Java AWT
hello-java-swing Java Swing
hello-java-qtjambi Java Qt
hello-csharp C#
hello-csharp-forms C# Forms
hello-guile Scheme
hello-clisp Lisp
hello-librep librep
hello-rust Rust
hello-go Go
hello-go-http Go web browser
hello-ruby Ruby
hello-sh Shell
hello-gawk awk
hello-pascal Pascal
hello-modula2 Modula-2
hello-d D
hello-ocaml OCaml
hello-smalltalk Smalltalk
hello-tcl Tcl
hello-tcl-tk Tcl Tk
hello-perl Perl
hello-php PHP
hello-ycp YCP libyui
Before building an example, you need to
1. Build and install the GNU gettext package, as described in the INSTALL
file.
2. cd to the example and do
./autogen.sh
3. Then you can build the example as usual:
./configure --prefix=/some/prefix
make
make install
and see it work by executing
/some/prefix/bin/hello
The po/ directories of the examples use different binary catalog formats and
Makefile types:
Example Binary catalog format Makefile type
hello-c .gmo Makefile.in.in
hello-c-gnome2 .gmo Makefile.in.in
hello-c-gnome3 .gmo Makefile.in.in
hello-c-http .gmo Makefile.in.in
hello-c++ .gmo Makefile.in.in
hello-c++20 .gmo Makefile.in.in
hello-c++-kde .gmo Makefile.in.in
hello-c++-gnome2 .gmo Makefile.in.in
hello-c++-gnome3 .gmo Makefile.in.in
hello-objc .gmo Makefile.in.in
hello-objc-gnome2 .gmo Makefile.in.in
hello-c++-wxwidgets .gmo Makefile.am
hello-python .gmo Makefile.am
hello-guile .gmo Makefile.am
hello-clisp .gmo Makefile.am
hello-librep .gmo Makefile.am
hello-rust .gmo Makefile.am
hello-go .gmo Makefile.am
hello-go-http .gmo Makefile.am
hello-ruby .gmo Makefile.am
hello-sh .gmo Makefile.am
hello-gawk .gmo Makefile.am
hello-pascal .gmo Makefile.am
hello-modula2 .gmo Makefile.am
hello-d .gmo Makefile.am
hello-ocaml .gmo Makefile.am
hello-smalltalk .gmo Makefile.am
hello-perl .gmo Makefile.am
hello-php .gmo Makefile.am
hello-ycp .gmo Makefile.am
hello-java .properties Makefile.am
hello-java-awt .properties Makefile.am
hello-java-swing .properties Makefile.am
hello-java-qtjambi .properties Makefile.am
hello-csharp .resources.dll Makefile.am
hello-csharp-forms .resources.dll Makefile.am
hello-tcl .msg Makefile.am
hello-tcl-tk .msg Makefile.am
hello-c++-qt .qm Makefile.am
hello-objc-gnustep .strings GNUmakefile
The Makefiles in the po/ directories make use of the variable assignment
operator != standardized by POSIX:2024
<https://pubs.opengroup.org/onlinepubs/9799919799/utilities/make.html>.
They thus require a 'make' implementation that supports this operator !=.
As of 2024, these are: GNU make >= 4.0, FreeBSD make, NetBSD make,
OpenBSD make. This means that building on specific platforms requires
use of GNU make:
- On macOS, use /opt/homebrew/bin/gmake.
- On Solaris 11 OpenIndiana, use /usr/bin/gmake = /usr/gnu/bin/make.
- On Solaris 11.4, install GNU make yourself.
- On AIX, use /opt/freeware/bin/make.
@@ -0,0 +1,34 @@
# csharp.m4
# serial 5
dnl Copyright (C) 2004-2005, 2009-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
# Sets CSHARP_CHOICE to the preferred C# implementation:
# 'mono' or 'dotnet' or 'any' or 'no'.
# Here
# - 'mono' means <https://en.wikipedia.org/wiki/Mono_(software)>.
# - 'dotnet' means the (newer) .NET <https://en.wikipedia.org/wiki/.NET>,
# *not* the .NET framework <https://en.wikipedia.org/wiki/.NET_Framework>.
AC_DEFUN([gt_CSHARP_CHOICE],
[
AC_MSG_CHECKING([for preferred C[#] implementation])
AC_ARG_ENABLE([csharp],
[ --enable-csharp[[=IMPL]] choose preferred C[#] implementation (mono, dotnet)],
[CSHARP_CHOICE="$enableval"],
CSHARP_CHOICE=any)
AC_SUBST([CSHARP_CHOICE])
AC_MSG_RESULT([$CSHARP_CHOICE])
case "$CSHARP_CHOICE" in
mono)
AC_DEFINE([CSHARP_CHOICE_MONO], [1],
[Define if mono is the preferred C# implementation.])
;;
dotnet)
AC_DEFINE([CSHARP_CHOICE_DOTNET], [1],
[Define if dotnet is the preferred C# implementation.])
;;
esac
])
@@ -0,0 +1,93 @@
# csharpcomp.m4
# serial 11
dnl Copyright (C) 2003-2005, 2007, 2009-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
# Prerequisites of csharpcomp.sh.
# Checks for a C# compiler.
# Sets at most one of HAVE_MCS, HAVE_DOTNET_SDK, HAVE_DOTNET_CSC, HAVE_CSC.
# Sets HAVE_CSHARPCOMP to nonempty if csharpcomp.sh will work.
# Also sets CSHARPCOMPFLAGS.
AC_DEFUN([gt_CSHARPCOMP],
[
AC_REQUIRE([gt_CSHARP_CHOICE])
AC_MSG_CHECKING([for C[#] compiler])
HAVE_CSHARPCOMP=1
pushdef([AC_MSG_CHECKING],[:])dnl
pushdef([AC_CHECKING],[:])dnl
pushdef([AC_MSG_RESULT],[:])dnl
AC_CHECK_PROG([HAVE_MCS_IN_PATH], [mcs], [yes])
AC_CHECK_PROG([HAVE_DOTNET_IN_PATH], [dotnet], [yes])
AC_CHECK_PROG([HAVE_CSC_IN_PATH], [csc], [yes])
popdef([AC_MSG_RESULT])dnl
popdef([AC_CHECKING])dnl
popdef([AC_MSG_CHECKING])dnl
for impl in "$CSHARP_CHOICE" mono dotnet sscli no; do
case "$impl" in
mono)
if test -n "$HAVE_MCS_IN_PATH" \
&& mcs --version >/dev/null 2>/dev/null \
&& mcs --version 2>/dev/null | grep Mono >/dev/null; then
HAVE_MCS=1
ac_result="mcs"
break
fi
;;
dotnet)
# The dotnet compiler is called "Roslyn".
# <https://en.wikipedia.org/wiki/Roslyn_(compiler)>
# There are two situations:
# - A dotnet SDK, that contains a 'dotnet' program and the Roslyn
# compiler as csc.dll.
# - An MSVC installation, that contains the Roslyn compiler as csc.exe
# (e.g. in C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\Roslyn\csc.exe).
# In the first case, the user only has to make sure that 'dotnet' is
# found in $PATH.
# In the second case, they need to make sure that both 'dotnet' and
# 'csc' are found in $PATH.
if test -n "$HAVE_DOTNET_IN_PATH" \
&& dotnet --list-runtimes >/dev/null 2>/dev/null \
&& test -n "`dotnet --list-sdks 2>/dev/null`"; then
HAVE_DOTNET_SDK=1
ac_result="dotnet"
break
else
if test -n "$HAVE_CSC_IN_PATH" \
&& csc -help 2>/dev/null | grep analyzer >/dev/null \
&& { if csc -help 2>/dev/null | grep -i chicken > /dev/null; then false; else true; fi; }; then
HAVE_DOTNET_CSC=1
ac_result="dotnet"
break
fi
fi
;;
sscli)
if test -n "$HAVE_CSC_IN_PATH" \
&& csc -help >/dev/null 2>/dev/null \
&& { if csc -help 2>/dev/null | grep -i chicken > /dev/null; then false; else true; fi; }; then
HAVE_CSC=1
ac_result="csc"
break
fi
;;
no)
HAVE_CSHARPCOMP=
ac_result="no"
break
;;
esac
done
AC_MSG_RESULT([$ac_result])
AC_SUBST([HAVE_MCS])
AC_SUBST([HAVE_DOTNET_SDK])
AC_SUBST([HAVE_DOTNET_CSC])
AC_SUBST([HAVE_CSC])
dnl Provide a default for CSHARPCOMPFLAGS.
if test -z "${CSHARPCOMPFLAGS+set}"; then
CSHARPCOMPFLAGS="-O -g"
fi
AC_SUBST([CSHARPCOMPFLAGS])
])
@@ -0,0 +1,247 @@
#!/bin/sh
# Compile a C# program.
# Copyright (C) 2003-2026 Free Software Foundation, Inc.
# Written by Bruno Haible <bruno@clisp.org>, 2003.
#
# 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 <https://www.gnu.org/licenses/>.
# This uses the same choices as csharpcomp.c, but instead of relying on the
# environment settings at run time, it uses the environment variables
# present at configuration time.
#
# This is a separate shell script, because the various C# compilers have
# different command line options.
#
# Usage: /bin/sh csharpcomp.sh [OPTION] SOURCE.cs ... RES.resource ...
# Options:
# -o PROGRAM.exe or -o LIBRARY.dll
# set the output assembly name
# -L DIRECTORY search for C# libraries also in DIRECTORY
# -l LIBRARY reference the C# library LIBRARY.dll
# -O optimize
# -g generate debugging information
# func_tmpdir
# creates a temporary directory.
# Sets variable
# - tmp pathname of freshly created temporary directory
func_tmpdir ()
{
# Use the environment variable TMPDIR, falling back to /tmp. This allows
# users to specify a different temporary directory, for example, if their
# /tmp is filled up or too small.
: "${TMPDIR=/tmp}"
{
# Use the mktemp program if available. If not available, hide the error
# message.
tmp=`(umask 077 && mktemp -d -q "$TMPDIR/gtXXXXXX") 2>/dev/null` &&
test -n "$tmp" && test -d "$tmp"
} ||
{
# Use a simple mkdir command. It is guaranteed to fail if the directory
# already exists. $RANDOM is bash specific and expands to empty in shells
# other than bash, ksh and zsh. Its use does not increase security;
# rather, it minimizes the probability of failure in a very cluttered /tmp
# directory.
tmp=$TMPDIR/gt$$-$RANDOM
(umask 077 && mkdir "$tmp")
} ||
{
echo "$0: cannot create a temporary directory in $TMPDIR" >&2
{ (exit 1); exit 1; }
}
}
# In order to construct a command that invokes csc, we need 'eval', because
# some of the arguments may contain spaces.
command_for_print=
command_for_eval=
options_csc_for_print=
options_csc_for_eval=
sources_csc_for_print=
sources_csc_for_eval=
# Protecting special characters, hiding them from 'eval':
# Double each backslash.
sed_protect_1='s/\\/\\\\/g'
# Escape each dollar, backquote, double-quote.
sed_protect_2a='s/\$/\\$/g'
sed_protect_2b='s/`/\\`/g'
sed_protect_2c='s/"/\\"/g'
# Add double-quotes at the beginning and end of the word.
sed_protect_3a='1s/^/"/'
sed_protect_3b='$s/$/"/'
func_add_word_to_command ()
{
command_for_print="${command_for_print:+$command_for_print }$1"
word_protected=`echo "$1" | sed -e "$sed_protect_1" -e "$sed_protect_2a" -e "$sed_protect_2b" -e "$sed_protect_2c" -e "$sed_protect_3a" -e "$sed_protect_3b"`
command_for_eval="${command_for_eval:+$command_for_eval }$word_protected"
}
func_add_word_to_options_csc ()
{
options_csc_for_print="${options_csc_for_print:+$options_csc_for_print }$1"
word_protected=`echo "$1" | sed -e "$sed_protect_1" -e "$sed_protect_2a" -e "$sed_protect_2b" -e "$sed_protect_2c" -e "$sed_protect_3a" -e "$sed_protect_3b"`
options_csc_for_eval="${options_csc_for_eval:+$options_csc_for_eval }$word_protected"
}
func_add_word_to_sources_csc ()
{
sources_csc_for_print="${sources_csc_for_print:+$sources_csc_for_print }$1"
word_protected=`echo "$1" | sed -e "$sed_protect_1" -e "$sed_protect_2a" -e "$sed_protect_2b" -e "$sed_protect_2c" -e "$sed_protect_3a" -e "$sed_protect_3b"`
sources_csc_for_eval="${sources_csc_for_eval:+$sources_csc_for_eval }$word_protected"
}
sed_quote_subst='s/\([|&;<>()$`"'"'"'*?[#~=% \\]\)/\\\1/g'
options_mcs=
sources=
func_add_word_to_options_csc "-nologo"
while test $# != 0; do
case "$1" in
-o)
case "$2" in
*.dll)
options_mcs="$options_mcs -target:library"
func_add_word_to_options_csc "-target:library"
;;
*.exe)
func_add_word_to_options_csc "-target:exe"
;;
esac
options_mcs="$options_mcs -out:"`echo "$2" | sed -e "$sed_quote_subst"`
# On Windows, assume that 'dotnet' and 'csc' are native Windows programs,
# not Cygwin programs.
arg="$2"
case "@build_os@" in
cygwin*)
arg=`cygpath -w "$arg"`
;;
esac
func_add_word_to_options_csc "-out:$arg"
shift
;;
-L)
options_mcs="$options_mcs -lib:"`echo "$2" | sed -e "$sed_quote_subst"`
# On Windows, assume that 'dotnet' and 'csc' are native Windows programs,
# not Cygwin programs.
arg="$2"
case "@build_os@" in
cygwin*)
arg=`cygpath -w "$arg"`
;;
esac
func_add_word_to_options_csc "-lib:$arg"
shift
;;
-l)
options_mcs="$options_mcs -reference:"`echo "$2" | sed -e "$sed_quote_subst"`
func_add_word_to_options_csc "-reference:$2.dll"
shift
;;
-O)
func_add_word_to_options_csc "-optimize+"
;;
-g)
options_mcs="$options_mcs -debug"
func_add_word_to_options_csc "-debug+"
;;
-*)
echo "csharpcomp: unknown option '$1'" 1>&2
exit 1
;;
*.resources)
options_mcs="$options_mcs -resource:"`echo "$1" | sed -e "$sed_quote_subst"`
# On Windows, assume that 'dotnet' and 'csc' are native Windows programs,
# not Cygwin programs.
arg="$1"
case "@build_os@" in
cygwin*)
arg=`cygpath -w "$arg"`
;;
esac
func_add_word_to_options_csc "-resource:$arg"
;;
*.cs)
sources="$sources "`echo "$1" | sed -e "$sed_quote_subst"`
# On Windows, assume that 'dotnet' and 'csc' are native Windows programs,
# not Cygwin programs.
arg="$1"
case "@build_os@" in
cygwin*)
arg=`cygpath -w "$arg"`
;;
esac
func_add_word_to_sources_csc "$arg"
;;
*)
echo "csharpcomp: unknown type of argument '$1'" 1>&2
exit 1
;;
esac
shift
done
if test -n "@HAVE_MCS@"; then
# mcs prints it errors and warnings to stdout, not stderr. Furthermore it
# adds a useless line "Compilation succeeded..." at the end. Correct both.
sed_drop_success_line='${
/^Compilation succeeded/d
}'
func_tmpdir
trap 'rm -rf "$tmp"' HUP INT QUIT TERM
test -z "$CSHARP_VERBOSE" || echo mcs $options_mcs $sources 1>&2
mcs $options_mcs $sources > "$tmp"/mcs.err
result=$?
sed -e "$sed_drop_success_line" < "$tmp"/mcs.err >&2
rm -rf "$tmp"
exit $result
else
if test -n "@HAVE_DOTNET_SDK@"; then
dotnet_runtime_dir=`dotnet --list-runtimes | sed -n -e 's/Microsoft.NETCore.App \([^ ]*\) \[\(.*\)\].*/\2\/\1/p' | sed -e 1q`
dotnet_sdk_dir=`dotnet --list-sdks | sed -e 's/\([^ ]*\) \[\(.*\)\].*/\2\/\1/p' | sed -e 1q`
# Add -lib and -reference options, so that the compiler finds Object, Console, String, etc.
arg="$dotnet_runtime_dir"
case "@build_os@" in
cygwin*)
arg=`cygpath -w "$arg"`
;;
esac
func_add_word_to_options_csc "-lib:$arg"
for file in `cd "$dotnet_runtime_dir" && echo [ABCDEFGHIJKLMNOPQRSTUVWXYZ]*.dll`; do
case "$file" in
*.Native.*) ;;
*) func_add_word_to_options_csc "-reference:$file" ;;
esac
done
func_add_word_to_command dotnet
csc="$dotnet_sdk_dir/Roslyn/bincore/csc.dll"
case "@build_os@" in
cygwin*)
csc=`cygpath -w "$csc"`
;;
esac
func_add_word_to_command "$csc"
test -z "$CSHARP_VERBOSE" || echo "$command_for_print $options_csc_for_print $sources_csc_for_print" 1>&2
eval "$command_for_eval $options_csc_for_eval $sources_csc_for_eval"
exit $?
else
if test -n "@HAVE_DOTNET_CSC@" || test -n "@HAVE_CSC@"; then
test -z "$CSHARP_VERBOSE" || echo "csc $options_csc_for_print $sources_csc_for_print" 1>&2
eval "csc $options_csc_for_eval $sources_csc_for_eval"
exit $?
else
echo 'C# compiler not found, try installing mono or dotnet, then reconfigure' 1>&2
exit 1
fi
fi
fi
@@ -0,0 +1,88 @@
# csharpexec.m4
# serial 10
dnl Copyright (C) 2003-2005, 2009-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
# Prerequisites of csharpexec.sh.
# Checks for a C# execution engine.
# gt_CSHARPEXEC or gt_CSHARPEXEC(testexecutable, its-directory)
# Sets at most one of HAVE_MONO, HAVE_DOTNET, HAVE_CLIX.
# Sets HAVE_CSHARPEXEC to nonempty if csharpexec.sh will work.
AC_DEFUN([gt_CSHARPEXEC],
[
AC_REQUIRE([gt_CSHARP_CHOICE])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_MSG_CHECKING([for C[#] program execution engine])
AC_EGREP_CPP([yes], [
#if defined _WIN32 || defined __EMX__ || defined __DJGPP__
yes
#endif
], MONO_PATH_SEPARATOR=';', MONO_PATH_SEPARATOR=':')
HAVE_CSHARPEXEC=1
pushdef([AC_MSG_CHECKING],[:])dnl
pushdef([AC_CHECKING],[:])dnl
pushdef([AC_MSG_RESULT],[:])dnl
AC_CHECK_PROG([HAVE_MONO_IN_PATH], [mono], [yes])
AC_CHECK_PROG([HAVE_DOTNET_IN_PATH], [dotnet], [yes])
AC_CHECK_PROG([HAVE_CLIX_IN_PATH], [clix], [yes])
popdef([AC_MSG_RESULT])dnl
popdef([AC_CHECKING])dnl
popdef([AC_MSG_CHECKING])dnl
for impl in "$CSHARP_CHOICE" mono dotnet no; do
case "$impl" in
mono)
if test -n "$HAVE_MONO_IN_PATH" \
&& mono --version >/dev/null 2>/dev/null \
m4_if([$1], , , [&& mono $2/$1 >/dev/null 2>/dev/null]); then
HAVE_MONO=1
ac_result="mono"
break
fi
;;
dotnet)
if test -n "$HAVE_DOTNET_IN_PATH" \
&& dotnet --list-runtimes >/dev/null 2>/dev/null; then
HAVE_DOTNET=1
ac_result="dotnet"
break
fi
;;
sscli)
if test -n "$HAVE_CLIX_IN_PATH" \
m4_if([$1], , , [&& clix $2/$1 >/dev/null 2>/dev/null]); then
HAVE_CLIX=1
case $host_os in
cygwin* | mingw* | windows* | pw32*)
CLIX_PATH_VAR=PATH
;;
darwin* | rhapsody*)
CLIX_PATH_VAR=DYLD_LIBRARY_PATH
;;
*)
CLIX_PATH_VAR=LD_LIBRARY_PATH
;;
esac
eval CLIX_PATH=\"\$CLIX_PATH_VAR\"
ac_result="clix"
break
fi
;;
no)
HAVE_CSHARPEXEC=
ac_result="no"
break
;;
esac
done
AC_MSG_RESULT([$ac_result])
AC_SUBST([MONO_PATH])
AC_SUBST([MONO_PATH_SEPARATOR])
AC_SUBST([CLIX_PATH_VAR])
AC_SUBST([CLIX_PATH])
AC_SUBST([HAVE_MONO])
AC_SUBST([HAVE_DOTNET])
AC_SUBST([HAVE_CLIX])
])
@@ -0,0 +1,213 @@
#!/bin/sh
# Execute a C# program.
# Copyright (C) 2003-2026 Free Software Foundation, Inc.
# Written by Bruno Haible <bruno@clisp.org>, 2003.
#
# 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 <https://www.gnu.org/licenses/>.
# This uses the same choices as csharpexec.c, but instead of relying on the
# environment settings at run time, it uses the environment variables
# present at configuration time.
#
# This is a separate shell script, because the various C# interpreters have
# different command line options.
#
# Usage: /bin/sh csharpexec.sh [OPTION] program.exe [ARGUMENTS]
# Options:
# -L DIRECTORY search for C# libraries also in DIRECTORY
# func_tmpdir
# creates a temporary directory.
# Sets variable
# - tmp pathname of freshly created temporary directory
func_tmpdir ()
{
# Use the environment variable TMPDIR, falling back to /tmp. This allows
# users to specify a different temporary directory, for example, if their
# /tmp is filled up or too small.
: "${TMPDIR=/tmp}"
{
# Use the mktemp program if available. If not available, hide the error
# message.
tmp=`(umask 077 && mktemp -d -q "$TMPDIR/gtXXXXXX") 2>/dev/null` &&
test -n "$tmp" && test -d "$tmp"
} ||
{
# Use a simple mkdir command. It is guaranteed to fail if the directory
# already exists. $RANDOM is bash specific and expands to empty in shells
# other than bash, ksh and zsh. Its use does not increase security;
# rather, it minimizes the probability of failure in a very cluttered /tmp
# directory.
tmp=$TMPDIR/gt$$-$RANDOM
(umask 077 && mkdir "$tmp")
} ||
{
echo "$0: cannot create a temporary directory in $TMPDIR" >&2
{ (exit 1); exit 1; }
}
}
libdirs_mono=
libdirs_dotnet=
prog=
while test $# != 0; do
case "$1" in
-L)
libdirs_mono="${libdirs_mono:+$libdirs_mono@MONO_PATH_SEPARATOR@}$2"
libdirs_dotnet="${libdirs_dotnet:+$libdirs_dotnet|}$2"
shift
;;
-*)
echo "csharpexec: unknown option '$1'" 1>&2
exit 1
;;
*)
prog="$1"
break
;;
esac
shift
done
if test -z "$prog"; then
echo "csharpexec: no program specified" 1>&2
exit 1
fi
case "$prog" in
*.exe) ;;
*)
echo "csharpexec: program is not a .exe" 1>&2
exit 1
;;
esac
if test -n "@HAVE_MONO@"; then
CONF_MONO_PATH='@MONO_PATH@'
if test -n "$libdirs_mono"; then
MONO_PATH="$libdirs_mono${CONF_MONO_PATH:+@MONO_PATH_SEPARATOR@$CONF_MONO_PATH}"
else
MONO_PATH="$CONF_MONO_PATH"
fi
export MONO_PATH
test -z "$CSHARP_VERBOSE" || echo mono "$@" 1>&2
exec mono "$@"
else
if test -n "@HAVE_DOTNET@"; then
# Invoke 'dotnet $prog ...'.
# Documentation:
# <https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet#options-for-running-an-application>
# This could be optimized on Windows platforms, because C# .exe files are
# directly executable there. But there's no point in optimizing specifically
# a non-free platform, especially since it would increase the test matrix.
shift
# On Windows, assume that 'dotnet' is a native Windows program, not a Cygwin program.
prog_arg="$prog"
case "@build_os@" in
cygwin*)
prog_arg=`cygpath -w "$prog"`
;;
esac
# Handle the -L options.
# The way this works is that we have to copy (or symlink) the DLLs into the
# directory where FOO.exe resides.
# Maybe there is another way to do this, but I haven't found it, trying
# - the --additionalprobingpath command-line option,
# - the additionalProbingPaths property in runtimeconfig.json,
# - adding a --deps deps.json option,
# cf. <https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet#options-for-running-an-application>
# and <https://github.com/dotnet/runtime/blob/main/docs/design/features/host-probing.md>.
tmpfiles=
if test -n "$libdirs_dotnet"; then
# Make sure the added DLLs are removed when this script terminates.
func_cleanup_tmpfiles()
{
saved_IFS="$IFS"
IFS='|'
for file in $tmpfiles; do
IFS="$saved_IFS"
rm -f "$file"
done
IFS="$saved_IFS"
}
trap func_cleanup_tmpfiles HUP INT QUIT PIPE TERM
trap 'exit_status=$?; func_cleanup_tmpfiles; exit $exit_status' EXIT
# Copy the DLLs.
prog_dir=`dirname "$prog"`
saved_IFS="$IFS"
IFS='|'
for dir in $libdirs_dotnet; do
IFS="$saved_IFS"
for file in `cd "$dir" && echo *.dll`; do
if test -f "$prog_dir/$file"; then
# A DLL of this name is already at the expected location.
:
else
tmpfiles="${tmpfiles:+$tmpfiles|}$prog_dir/$file"
cp "$dir/$file" "$prog_dir/$file" || exit 1
fi
done
done
IFS="$saved_IFS"
fi
if test -f "${prog%.exe}.runtimeconfig.json"; then
# There is already a FOO.runtimeconfig.json alongside FOO.exe.
dotnet exec "$prog_arg" "$@"
result=$?
else
# dotnet needs a FOO.runtimeconfig.json alongside FOO.exe in order to
# execute FOO.exe. Create a dummy one in a temporary directory
# (because the directory where FOO.exe sits is not necessarily writable).
# Documentation of this file format:
# <https://learn.microsoft.com/en-us/dotnet/core/runtime-config/>
func_tmpdir
runtimeconfig="$tmp"/runtimeconfig.json
dotnet --list-runtimes | sed -n -e 's/Microsoft.NETCore.App \([^ ]*\) .*/{ "runtimeOptions": { "framework": { "name": "Microsoft.NETCore.App", "version": "\1" } } }/p' > "$runtimeconfig"
runtimeconfig_arg="$runtimeconfig"
case "@build_os@" in
cygwin*)
runtimeconfig_arg=`cygpath -w "$runtimeconfig"`
;;
esac
test -z "$CSHARP_VERBOSE" || echo dotnet exec --runtimeconfig "$runtimeconfig_arg" "$prog_arg" "$@" 1>&2
dotnet exec --runtimeconfig "$runtimeconfig_arg" "$prog_arg" "$@"
result=$?
rm -f "$runtimeconfig"
rmdir "$tmp"
fi
exit $result
else
if test -n "@HAVE_CLIX@"; then
CONF_CLIX_PATH='@CLIX_PATH@'
if test -n "$libdirs_mono"; then
@CLIX_PATH_VAR@="$libdirs_mono${CONF_CLIX_PATH:+@MONO_PATH_SEPARATOR@$CONF_CLIX_PATH}"
else
@CLIX_PATH_VAR@="$CONF_CLIX_PATH"
fi
export @CLIX_PATH_VAR@
shift
# On Windows, assume that 'clix' is a native Windows program,
# not a Cygwin program.
case "@build_os@" in
cygwin*)
prog=`cygpath -w "$prog"`
;;
esac
test -z "$CSHARP_VERBOSE" || echo clix "$prog" "$@" 1>&2
exec clix "$prog" "$@"
else
echo 'C# virtual machine not found, try installing mono or dotnet, then reconfigure' 1>&2
exit 1
fi
fi
fi
@@ -0,0 +1,100 @@
# dcomp.m4
# serial 3
dnl Copyright (C) 2025-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
# There are three D implementations, see
# <https://en.wikipedia.org/wiki/D_(programming_language)#Implementations>
# <https://wiki.dlang.org/Compilers>
# <https://dub.pm/dub-reference/build_settings/#buildoptions>
# Although each has different possible options, a few options are accepted by
# all of the implementations: -c, -I, -g, -O. Some essential options, however,
# are different:
# gdc ldc2 dmd
# ---------- ------------------- ------------
# -oFILE -of=FILE, --of=FILE -of=FILE
# -lLIBRARY -L -lLIBRARY -L=-lLIBRARY
# -LDIR -L -LDIR -L=-LDIR
# -Wl,OPTION -L OPTION -L=OPTION
# Checks for a D implementation.
# Sets DC and DFLAGS (options that can be used with "$DC").
AC_DEFUN([gt_DCOMP],
[
AC_MSG_CHECKING([for D compiler])
pushdef([AC_MSG_CHECKING],[:])dnl
pushdef([AC_CHECKING],[:])dnl
pushdef([AC_MSG_RESULT],[:])dnl
AC_ARG_VAR([DC], [D compiler command])
AC_ARG_VAR([DFLAGS], [D compiler options])
dnl On OpenBSD, gdc is called 'egdc' and works less well than dmd.
dnl Like AC_CHECK_TOOLS([DC], [gdc ldc2 dmd egdc]) but check whether the
dnl compiler can actually compile a trivial program. We may simplify this
dnl once <https://savannah.gnu.org/support/index.php?111256> is implemented.
if test -z "$DC"; then
echo > empty.d
if test -n "${host_alias}"; then
if test -z "$DC"; then
DC="${host_alias}-gdc"
echo "$as_me:${as_lineno-$LINENO}: trying ${DC}..." >&AS_MESSAGE_LOG_FD
if ${DC} -c empty.d 2>&AS_MESSAGE_LOG_FD; then :; else DC= ; fi
fi
if test -z "$DC"; then
DC="${host_alias}-ldc2"
echo "$as_me:${as_lineno-$LINENO}: trying ${DC}..." >&AS_MESSAGE_LOG_FD
if ${DC} -c empty.d 2>&AS_MESSAGE_LOG_FD; then :; else DC= ; fi
fi
if test -z "$DC"; then
DC="${host_alias}-dmd"
echo "$as_me:${as_lineno-$LINENO}: trying ${DC}..." >&AS_MESSAGE_LOG_FD
if ${DC} -c empty.d 2>&AS_MESSAGE_LOG_FD; then :; else DC= ; fi
fi
if test -z "$DC"; then
DC="${host_alias}-egdc"
echo "$as_me:${as_lineno-$LINENO}: trying ${DC}..." >&AS_MESSAGE_LOG_FD
if ${DC} -c empty.d 2>&AS_MESSAGE_LOG_FD; then :; else DC= ; fi
fi
fi
if test -z "$DC"; then
DC="gdc"
echo "$as_me:${as_lineno-$LINENO}: trying ${DC}..." >&AS_MESSAGE_LOG_FD
if ${DC} -c empty.d 2>&AS_MESSAGE_LOG_FD; then :; else DC= ; fi
fi
if test -z "$DC"; then
DC="ldc2"
echo "$as_me:${as_lineno-$LINENO}: trying ${DC}..." >&AS_MESSAGE_LOG_FD
if ${DC} -c empty.d 2>&AS_MESSAGE_LOG_FD; then :; else DC= ; fi
fi
if test -z "$DC"; then
DC="dmd"
echo "$as_me:${as_lineno-$LINENO}: trying ${DC}..." >&AS_MESSAGE_LOG_FD
if ${DC} -c empty.d 2>&AS_MESSAGE_LOG_FD; then :; else DC= ; fi
fi
if test -z "$DC"; then
DC="egdc"
echo "$as_me:${as_lineno-$LINENO}: trying ${DC}..." >&AS_MESSAGE_LOG_FD
if ${DC} -c empty.d 2>&AS_MESSAGE_LOG_FD; then :; else DC= ; fi
fi
rm -f empty.d empty.o empty.obj
fi
popdef([AC_MSG_RESULT])dnl
popdef([AC_CHECKING])dnl
popdef([AC_MSG_CHECKING])dnl
if test -n "$DC"; then
ac_result="$DC"
else
ac_result="no"
fi
AC_MSG_RESULT([$ac_result])
AC_SUBST([DC])
if test -z "$DFLAGS" && test -n "$DC"; then
case `$DC --version | sed -e 's/ .*//' -e 1q` in
gdc | *-gdc | egdc | *-egdc | LDC*) DFLAGS="-g -O2" ;;
*) DFLAGS="-g -O" ;;
esac
fi
AC_SUBST([DFLAGS])
])
@@ -0,0 +1,139 @@
#!/bin/sh
# Compile a D program, library, or compilation unit.
# Copyright (C) 2025-2026 Free Software Foundation, Inc.
# Written by Bruno Haible <bruno@clisp.org>, 2025.
#
# 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 <https://www.gnu.org/licenses/>.
# Usage: /bin/sh dcomp.sh [OPTION] SOURCE.d ...
# where the supported OPTIONs are:
# -I DIR
# -c
# -g
# -O (mapped to -O or -O2, depending on implementation)
# -o FILE (for libtool compatibility)
# -lLIBRARY (for libtool compatibility)
# -LDIR (for libtool compatibility)
# -pthread (for libtool compatibility)
# -Wl,OPTION (for libtool compatibility)
# Find out which implementation we are using.
case `@DC@ --version | sed -e 's/ .*//' -e 1q` in
gdc | *-gdc | egdc | *-egdc) flavor=gdc ;;
LDC*) flavor=ldc ;;
DMD*) flavor=dmd ;;
*)
echo "Warning: implementation flavor of '"'@DC@'"' not recognized." 1>&2
flavor=dmd ;;
esac
# In order to construct a command that invokes the D compiler, we need 'eval',
# because some of the arguments may contain spaces.
options_for_print=
options_for_eval=
# Protecting special characters, hiding them from 'eval':
# Double each backslash.
sed_protect_1='s/\\/\\\\/g'
# Escape each dollar, backquote, double-quote.
sed_protect_2a='s/\$/\\$/g'
sed_protect_2b='s/`/\\`/g'
sed_protect_2c='s/"/\\"/g'
# Add double-quotes at the beginning and end of the word.
sed_protect_3a='1s/^/"/'
sed_protect_3b='$s/$/"/'
func_add_word_to_options ()
{
options_for_print="${options_for_print:+$options_for_print }$1"
word_protected=`echo "$1" | sed -e "$sed_protect_1" -e "$sed_protect_2a" -e "$sed_protect_2b" -e "$sed_protect_2c" -e "$sed_protect_3a" -e "$sed_protect_3b"`
options_for_eval="${options_for_eval:+$options_for_eval }$word_protected"
}
# Process the arguments.
next_is_arg_of=
for arg
do
if test -z "$next_is_arg_of"; then
case "$arg" in
-I | -l | -L)
echo "dcomp: Unsupported option: $arg. Combine with next argument." 1>&2
exit 1
;;
-I* | -c | -g)
func_add_word_to_options "$arg"
;;
-O)
case "$flavor" in
gdc | ldc) func_add_word_to_options "-O2" ;;
dmd) func_add_word_to_options "-O" ;;
esac
;;
-o) next_is_arg_of='o' ;;
-l* | -L* | -pthread)
case "$arg" in
-pthread) arg='-lpthread' ;;
esac
case "$flavor" in
gdc) func_add_word_to_options "$arg" ;;
ldc) func_add_word_to_options '-L'; func_add_word_to_options "$arg" ;;
dmd) func_add_word_to_options "-L=$arg" ;;
esac
;;
-Wl,*)
if test "$flavor" = gdc; then
func_add_word_to_options "$arg"
else
option=`echo "$arg" | sed -e 's/^-Wl,//'`
case "$flavor" in
ldc) func_add_word_to_options '-L'; func_add_word_to_options "$option" ;;
dmd) func_add_word_to_options "-L=$option" ;;
esac
fi
;;
-*)
echo "dcomp: Unsupported option: $arg" 1>&2
exit 1
;;
*)
# dmd rejects shared library file names such as libfoo.so.1.3:
# "Error: unrecognized file extension 3"
if test "$flavor" = dmd \
&& case `basename "$arg"` in lib*.so.*) true ;; *) false ;; esac; then
func_add_word_to_options "-L=$arg"
else
func_add_word_to_options "$arg"
fi
;;
esac
else
case "$next_is_arg_of" in
o)
case "$flavor" in
gdc) func_add_word_to_options '-o'; func_add_word_to_options "$arg" ;;
*) func_add_word_to_options "-of=$arg" ;;
esac
;;
esac
next_is_arg_of=
fi
done
if test -n "$next_is_arg_of"; then
echo "dcomp: missing argument to option -$next_is_arg_of" 1>&2
exit 1
fi
# Execute the command.
test -z "$D_VERBOSE" || echo "@DC@ @DFLAGS@ $options_for_print" 1>&2
eval "@DC@ @DFLAGS@ $options_for_eval"
exit $?
@@ -0,0 +1,127 @@
# gocomp.m4
# serial 1
dnl Copyright (C) 2025-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
# There are two Go implementations, that differ essentially only regarding
# the compiler and the used runtime version:
# * The golang Go is the original implementation, typically a little more
# up-to-date. It supports only the major computing platforms.
# * The GCC Go implementation is part of the GNU Compiler Collection.
# It lags behind a bit. It supports all platforms supported by GCC.
# The golang Go implementation produces smaller executables, and the
# binary packages needed for development are smaller as well.
#
# Therefore the preferred implementation is
# * golang where available,
# * GCC on the platforms where golang is not available. This includes in
# particular:
# - Linux/alpha, Linux/hppa, Linux/m68k, Linux/sparc, Linux/powerpc (32-bit)
# - GNU/Hurd
# - Solaris/sparc
# - Haiku
# Sets GO_CHOICE to the preferred Go compiler implementation:
# 'golang' or 'gcc' or 'any' or 'no'.
# Here
# - 'golang' means the original Go compiler.
# - 'gcc' means GCC Go compiler.
# The runtime library of both is the same (possibly in different versions,
# though).
AC_DEFUN([gt_GO_CHOICE],
[
AC_MSG_CHECKING([for preferred Go compiler])
AC_ARG_ENABLE([go],
[ --enable-go[[=IMPL]] choose preferred Go compiler (golang, gcc)],
[GO_CHOICE="$enableval"],
[GO_CHOICE=any])
AC_SUBST([GO_CHOICE])
AC_MSG_RESULT([$GO_CHOICE])
])
# How to run Go programs?
# Assume you want to distribute a Go program. In which form? And what are
# the dependencies to do so?
#
# There are three ways to do so:
#
# * Run the program by compiling it on-the-fly in a temporary directory
# and running it from there:
# ${GO} run foo.go
# You would distribute foo.go (very small).
# But the dependencies are large: the Go development environment.
# On Ubuntu 24.04 this is:
# - with 'golang': the package 'golang-go'
# 11 MB for /usr/lib/go-1.22/bin/go,
# 85 MB for /usr/lib/go-1.22/pkg/tool/linux_amd64/*
# = 96 MB in total
# - with 'gccgo': the package 'gccgo-13'
# 60 MB for /usr/lib/x86_64-linux-gnu/libgo.so.22.0.0,
# > 40 MB for /usr/libexec/gcc/x86_64-linux-gnu/13/go1
# and /usr/bin/x86_64-linux-gnu-go-13,
# 116 MB for /usr/lib/gcc/x86_64-linux-gnu/13/libgo.a
# = 216 MB in total.
#
# * You distribute the binary, linked against the shared Go runtime library.
# Running the program is just invoking that binary.
# On Ubuntu the dependencies are:
# - with 'golang': unsupported.
# - with 'gccgo': the package 'libgo22'
# 60 MB for /usr/lib/x86_64-linux-gnu/libgo.so.22.0.0
# = 60 MB in total.
#
# * You distribute the binary, linked statically with the needed parts
# of the Go runtime library:
# ${GO} build ${GOCOMPFLAGS} foo.go
# Running the program is just invoking that binary.
# On Ubuntu the dependencies are:
# - with 'golang': No dependencies; the binary is statically linked.
# The stripped executable's size is >= 1 MB.
# - with 'gccgo': No dependencies; the binary is statically linked
# (when using GOCOMPFLAGS='-static') or statically linked except for
# the standard C library (when using GOCOMPFLAGS='-static-libgo').
# The stripped executable's size is 5 MB or 6 MB, respectively.
# Distros generally prefer avoiding dynamic linking with libc,
# so let's use that.
#
# It is clear that the third approach will be preferred for small programs.
# Prerequisites of gocomp.sh.
# Checks for a Go implementation.
# Sets HAVE_GOCOMP to nonempty if gocomp.sh will work.
# Also sets GO and GOCOMPFLAGS (options that can be used with "$GO build").
AC_DEFUN([gt_GOCOMP],
[
AC_REQUIRE([gt_GO_CHOICE])
AC_MSG_CHECKING([for Go compiler])
HAVE_GOCOMP=1
pushdef([AC_MSG_CHECKING],[:])dnl
pushdef([AC_CHECKING],[:])dnl
pushdef([AC_MSG_RESULT],[:])dnl
dnl Prefer golang over gcc by default, because it produces much smaller
dnl executables (see above).
if test "$GO_CHOICE" = gcc; then
AC_PATH_PROGS([GO], [go-30 go-29 go-28 go-27 go-26 go-25 go-24 go-23 go-22 go-21 go-20 go-19 go-18 go-17 go-16 go-15 go-14 go-13 go-12 go-11 go-10 go-9 go-8 go-7 go-6 go-5 go])
else
AC_PATH_PROGS([GO], [go go-30 go-29 go-28 go-27 go-26 go-25 go-24 go-23 go-22 go-21 go-20 go-19 go-18 go-17 go-16 go-15 go-14 go-13 go-12 go-11 go-10 go-9 go-8 go-7 go-6 go-5])
fi
popdef([AC_MSG_RESULT])dnl
popdef([AC_CHECKING])dnl
popdef([AC_MSG_CHECKING])dnl
if test -n "$GO"; then
case "$GO" in
go | */go ) GOCOMPFLAGS= ;;
*) GOCOMPFLAGS='-gccgoflags=-static-libgo' ;;
esac
ac_result="$GO"
else
HAVE_GOCOMP=
ac_result="no"
fi
AC_MSG_RESULT([$ac_result])
AC_SUBST([GO])
AC_SUBST([GOCOMPFLAGS])
])
@@ -0,0 +1,32 @@
#!/bin/sh
# Compile a Go program.
# Copyright (C) 2025-2026 Free Software Foundation, Inc.
# Written by Bruno Haible <haible@clisp.cons.org>, 2025.
#
# 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 <https://www.gnu.org/licenses/>.
# Usage: /bin/sh gocomp.sh [OPTION] SOURCE.go ...
#
# Limitation: Go programs that make use of the C to Go interface ('cgo') are
# unsupported.
# Avoid error "CC environment variable is relative; must be absolute path"
# on native Windows. Cf.
# <https://github.com/golang/go/commit/aa161e799df7e1eba99d2be10271e76b6f758142>
unset CC
unset CXX
test -z "$GO_VERBOSE" || echo "@GO@ build @GOCOMPFLAGS@ $@"
exec @GO@ build @GOCOMPFLAGS@ "$@"
@@ -0,0 +1,477 @@
# javacomp.m4
# serial 27
dnl Copyright (C) 2001-2003, 2006-2007, 2009-2026 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
# Prerequisites of javacomp.sh.
# gt_JAVACOMP([source-version], [target-version])
# Sets HAVE_JAVACOMP to nonempty if javacomp.sh will allow Java source code
# according to source-version to be compiled to Java bytecode classes in the
# target-version format.
#
# source-version can be: support for
# 1.8 lambdas
# 9 private interface methods
# 10 type inference for local variables
# 11 'var' in parameters of lambda expressions
# ...
# (For reference, see <https://en.wikipedia.org/wiki/Java_version_history>.)
# If source-version 1.3 or 1.4 or 1.5 or 1.6 or 1.7 is requested, it gets mapped
# to 1.8, for backward compatibility. (Currently the minimum Java and javac
# version we need to support is Java 1.8, since older versions are
# out-of-support, see
# <https://en.wikipedia.org/wiki/Java_version_history#Release_table>.)
#
# target-version can be: classfile version:
# 1.8 52.0
# 9 53.0
# 10 54.0
# 11 55.0
# ... ...
# The classfile version of a .class file can be determined through the "file"
# command. More portably, the classfile major version can be determined through
# "od -A n -t d1 -j 7 -N 1 classfile".
# If a target-version below 1.8 is requested, it gets mapped to 1.8, for
# backward compatibility. (Currently the minimum Java and javac version we need
# to support is Java 1.8, since older versions are out-of-support, see
# <https://en.wikipedia.org/wiki/Java_version_history#Release_table>.)
#
# target-version can also be omitted. In this case, the required target-version
# is determined from the found JVM (see macro gt_JAVAEXEC):
# target-version for JVM
# 1.8 JDK/JRE 8
# 9 JDK/JRE 9
# 10 JDK/JRE 10
# 11 JDK/JRE 11
# ... ...
#
# Specifying target-version is useful when building a library (.jar) that is
# useful outside the given package. Omitting target-version is useful when
# building an application.
#
# It is unreasonable to ask for a target-version < source-version, such as
# - target-version < 1.4 with source-version >= 1.4, or
# - target-version < 1.5 with source-version >= 1.5, or
# - target_version < 1.6 with source_version >= 1.6, or
# - target_version < 1.7 with source_version >= 1.7, or
# - target_version < 1.8 with source_version >= 1.8, or
# - target_version < 9 with source_version >= 9, or
# - target_version < 10 with source_version >= 10, or
# - target_version < 11 with source_version >= 11, or
# - ...
# because even Sun's/Oracle's javac doesn't support these combinations.
#
# It is redundant to ask for a target-version > source-version, since the
# smaller target-version = source-version will also always work and newer JVMs
# support the older target-versions too.
AC_DEFUN([gt_JAVACOMP],
[
m4_if([$2], [], [AC_REQUIRE([gt_JAVAEXEC])], [])
AC_EGREP_CPP([yes], [
#if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
yes
#endif
], CLASSPATH_SEPARATOR=';', CLASSPATH_SEPARATOR=':')
source_version=$1
test -n "$source_version" || {
AC_MSG_ERROR([missing source-version argument to gt_@&t@JAVACOMP])
}
case "$source_version" in
1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7) source_version='1.8' ;;
esac
m4_if([$2], [],
[if test -n "$HAVE_JAVAEXEC"; then
dnl Use $CONF_JAVA to determine the JVM's version.
changequote(,)dnl
cat > conftestver.java <<EOF
public class conftestver {
public static void main (String[] args) {
System.out.println(System.getProperty("java.specification.version"));
}
}
EOF
changequote([,])dnl
dnl A precompiled version of conftestver.java, compiled with
dnl "javac -target 1.1". This avoids having to compile conftestver.java
dnl during each test for a suitable Java compiler.
dnl For the conversion from binary to this ASCII encapsulation, avoiding
dnl to assume the presence of uudecode, use the command
dnl $ od -A n -t o1 < conftestver.class | tr ' ' '\012'| sort | uniq | sed -e '/^$/d' -e 's,^,\\,' | tr -d '\012'
dnl and the long tr command in opposite direction.
dnl Finally move the position corresponding to \055 to the last position,
dnl to work around a coreutils-5.x bug.
echo 'yzwx!$!I!D,!)!3+!4!5*!6,!4!7,!8!9)!:)!;"!(MeienN"!$FGW"!%Ojab"!2QeibRohZblVYZgb"!%hYei"!9FXQfYpYKgYidKUnleidLGW"!,Ujol_bPegb"!3_jicnbmnpblJfYpY/!*!+)!</!=!>"!=fYpYJmkb_ece_YnejiJpblmeji/!?!@)!A/!B!C"!._jicnbmnpbl"!3fYpYKgYidKSZfb_n"!3fYpYKgYidKUqmnbh"!$jon"!8QfYpYKejKTleinUnlbYhL"!.dbnTljkblnq"!EFQfYpYKgYidKUnleidLGQfYpYKgYidKUnleidL"!6fYpYKejKTleinUnlbYh"!)kleingi"!8FQfYpYKgYidKUnleidLGW!D!(!)!!!!!#!"!*!+!"!,!!!@!"!"!!!&Hu!"r!!!"!.!!!(!"!!!"!+!/!0!"!,!!!F!#!"!!!/s!#5$v!%t!&r!!!"!.!!!,!#!!!$!.!%!"!1!!!#!2' \
| tr -d '\012\015' \
| tr '!"#$%&()*+,./0123456789:;<=>?@ABCDEFGHJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzI' '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\046\050\051\052\056\057\073\074\076\103\106\114\116\117\120\123\124\126\133\141\142\143\144\145\146\147\151\152\154\155\156\157\160\162\163\164\165\166\171\261\262\266\267\270\272\276\312\376\055' \
> conftestver.class
java_exec_version=`{
unset JAVA_HOME
echo "$as_me:__oline__: CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver" >&AS_MESSAGE_LOG_FD
CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver 2>&AS_MESSAGE_LOG_FD
}`
case "$java_exec_version" in
null)
dnl JDK 1.1.X returns null.
java_exec_version=1.1 ;;
esac
case "$java_exec_version" in
1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7)
AC_MSG_WARN([$CONF_JAVA is too old, cannot compile Java code for this old version any more])
target_version=1.8 ;;
changequote(,)dnl
1.8 | 9 | [1-9][0-9])
changequote([,])dnl
dnl Here we could choose any target_version between $source_version
dnl and the $java_exec_version. (If it is too small, it will be
dnl incremented below until it works.) Since we documented above that
dnl it is determined from the JVM, we do that:
target_version="$java_exec_version" ;;
*) AC_MSG_WARN([unknown target-version $target_version, please update gt_@&t@JAVACOMP macro])
target_version=1.8 ;;
esac
else
target_version="1.8"
fi
],
[target_version=$2
case "$target_version" in
1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7) target_version='1.8' ;;
esac
])
case "$source_version" in
changequote(,)dnl
1.8 | 9 | [1-9][0-9]) ;;
changequote([,])dnl
*) AC_MSG_ERROR([invalid source-version argument to gt_@&t@JAVACOMP: $source_version]) ;;
esac
case "$target_version" in
changequote(,)dnl
1.8 | 9 | [1-9][0-9]) ;;
changequote([,])dnl
*) AC_MSG_ERROR([invalid target-version argument to gt_@&t@JAVACOMP: $target_version]) ;;
esac
# Function to output the classfile version of a file (8th byte) in decimal.
if od -A x < /dev/null >/dev/null 2>/dev/null; then
# Use POSIX od.
func_classfile_version ()
{
od -A n -t d1 -j 7 -N 1 "[$]1"
}
else
# Use BSD hexdump.
func_classfile_version ()
{
dd if="[$]1" bs=1 count=1 skip=7 2>/dev/null | hexdump -e '1/1 "%3d "'
echo
}
fi
AC_MSG_CHECKING([for Java compiler])
dnl
dnl The support of Sun/Oracle javac for target-version and source-version:
dnl
dnl javac 1.8: -target 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 default: 1.8
dnl -source 1.3 1.4 1.5 1.6 1.7 1.8 default: 1.8
dnl -target 1.1/1.2/1.3 only possible with -source 1.3
dnl -target 1.4 only possible with -source 1.3/1.4
dnl -target 1.5 only possible with -source 1.3/1.4/1.5
dnl -target 1.6 only possible with -source 1.3/1.4/1.5/1.6
dnl -target 1.7 only possible with -source 1.3/1.4/1.5/1.6/1.7
dnl
dnl javac 9: -target 1.6 1.7 1.8 9 default: 9
dnl -source 1.6 1.7 1.8 9 default: 9
dnl -target 1.6 only possible with -source 1.6
dnl -target 1.7 only possible with -source 1.6/1.7
dnl -target 1.8 only possible with -source 1.6/1.7/1.8
dnl
dnl javac 10: -target 1.6 1.7 1.8 9 10 default: 10
dnl -source 1.6 1.7 1.8 9 10 default: 10
dnl -target 1.6 only possible with -source 1.6
dnl -target 1.7 only possible with -source 1.6/1.7
dnl -target 1.8 only possible with -source 1.6/1.7/1.8
dnl -target 9 only possible with -source 1.6/1.7/1.8/9
dnl
dnl and so on.
dnl This can be summarized in this table:
dnl
dnl javac classfile valid -source and obsolete -source
dnl version default version -target values and -target values
dnl ------- --------------- ----------------- ------------------
dnl 1.8 52.0 1.3 .. 1.8 1.3 .. 1.5
dnl 9 53.0 1.6 .. 9 1.6
dnl 10 54.0 1.6 .. 10 1.6
dnl 11 55.0 1.6 .. 11 1.6
dnl 12 56.0 1.7 .. 12 1.7
dnl 13 57.0 1.7 .. 13 1.7
dnl 14 58.0 1.7 .. 14 1.7
dnl 15 59.0 1.7 .. 15 1.7
dnl 16 60.0 1.7 .. 16 1.7
dnl 17 61.0 1.7 .. 17 1.7
dnl 18 62.0 1.7 .. 18 1.7
dnl 19 63.0 1.7 .. 19 1.7
dnl 20 64.0 1.8 .. 20 1.8
dnl
dnl The -source option value must be <= the -target option value.
dnl The minimal -source and -target option value produces an "is obsolete"
dnl warning (in javac 1.8 or newer). Additionally, if the -source option
dnl value is not the maximal possible one, i.e. not redundant, it produces a
dnl "bootstrap class path not set in conjunction with -source ..." warning
dnl (in javac 1.7 or newer).
dnl
dnl To get rid of these warnings, two options are available:
dnl * -nowarn. This option is supported since javac 1.6 at least. But
dnl it is overkill, because it would also silence warnings about the
dnl code being compiled.
dnl * -Xlint:-options. This option is supported since javac 1.6 at least.
dnl In javac 1.6 it is an undocumented no-op.
dnl We use -Xlint:-options and omit it only if we find that the compiler
dnl does not support it (which is unlikely).
dnl
dnl Canonicalize source_version and target_version, for easier arithmetic.
case "$source_version" in
1.*) source_version=`echo "$source_version" | sed -e 's/^1\.//'` ;;
esac
case "$target_version" in
1.*) target_version=`echo "$target_version" | sed -e 's/^1\.//'` ;;
esac
CONF_JAVAC=
HAVE_JAVAC_ENVVAR=
HAVE_JAVAC=
HAVE_JAVACOMP=
dnl Sanity check.
if expr $source_version '<=' $target_version >/dev/null; then
echo 'class conftest {}' > conftest.java
dnl If the user has set the JAVAC environment variable, use that, if it
dnl satisfies the constraints (possibly after adding -target and -source
dnl options).
if test -n "$JAVAC"; then
dnl Test whether $JAVAC is usable.
dnl At the same time, determine which option to use to inhibit warnings;
dnl see the discussion above.
nowarn_option=' -Xlint:-options'
if { rm -f conftest.class \
&& { echo "$as_me:__oline__: $JAVAC$nowarn_option -d . conftest.java" >&AS_MESSAGE_LOG_FD
$JAVAC$nowarn_option -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
} \
&& test -f conftest.class
} || { \
nowarn_option=
rm -f conftest.class \
&& { echo "$as_me:__oline__: $JAVAC$nowarn_option -d . conftest.java" >&AS_MESSAGE_LOG_FD
$JAVAC$nowarn_option -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
} \
&& test -f conftest.class
}; then
compiler_cfversion=`func_classfile_version conftest.class`
compiler_target_version=`expr $compiler_cfversion - 44`
dnl It is hard to determine the compiler_source_version. This would
dnl require a list of code snippets that can be compiled only with a
dnl specific '-source' option and up, and this list would need to grow
dnl every 6 months.
dnl Also, $JAVAC may already include a '-source' option.
dnl Therefore, pass a '-source' option always.
source_option=' -source '`case "$source_version" in 6|7|8) echo 1. ;; esac`"$source_version"
dnl And pass a '-target' option as well, if needed.
dnl (All supported javac versions support both, see the table above.)
if expr $target_version = $compiler_target_version >/dev/null; then
target_option=
else
target_option=' -target '`case "$target_version" in 6|7|8) echo 1. ;; esac`"$target_version"
fi
if { echo "$as_me:__oline__: $JAVAC$nowarn_option$source_option$target_option -d . conftest.java" >&AS_MESSAGE_LOG_FD
$JAVAC$nowarn_option$source_option$target_option -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
} \
&& test -f conftest.class; then
dnl The compiler directly supports the desired source_version and
dnl target_version. Perfect.
CONF_JAVAC="$JAVAC$nowarn_option$source_option$target_option"
HAVE_JAVAC_ENVVAR=1
HAVE_JAVACOMP=1
else
dnl If the desired source_version or target_version were too large
dnl for the compiler, there's nothing else we can do.
compiler_version=`echo "$as_me:__oline__: $JAVAC -version | sed -e 1q" >&AS_MESSAGE_LOG_FD
$JAVAC -version | sed -e 1q`
changequote(,)dnl
compiler_version=`echo "$compiler_version" | sed -e 's/^[^0-9]*\([0-9][0-9.]*\).*/\1/'`
changequote([,])dnl
case "$compiler_version" in
1.*) dnl Map 1.8.0_151 to 8.
compiler_version=`echo "$compiler_version" | sed -e 's/^1\.//' -e 's/\..*//'`
;;
*) dnl Map 9.0.4 to 9, 10.0.2 to 10, etc.
compiler_version=`echo "$compiler_version" | sed -e 's/\..*//'`
;;
esac
if expr $source_version '<=' "$compiler_version" >/dev/null \
&& expr $target_version '<=' "$compiler_version" >/dev/null; then
dnl Increase $source_version and $compiler_version until the
dnl compiler accepts these values. This is necessary to make
dnl e.g. $source_version = 6 work with Java 12 or newer, or
dnl $source_version = 7 work with Java 20 or newer.
try_source_version="$source_version"
try_target_version="$target_version"
while true; do
dnl Invariant: $try_source_version <= $try_target_version.
if expr $try_source_version = $try_target_version >/dev/null; then
try_target_version=`expr $try_target_version + 1`
fi
try_source_version=`expr $try_source_version + 1`
expr $try_source_version '<=' $compiler_version >/dev/null || break
source_option=' -source '`case "$try_source_version" in 8) echo 1. ;; esac`"$try_source_version"
if expr $try_target_version = $compiler_target_version >/dev/null; then
target_option=
else
target_option=' -target '`case "$try_target_version" in 8) echo 1. ;; esac`"$try_target_version"
fi
if { echo "$as_me:__oline__: $JAVAC$nowarn_option$source_option$target_option -d . conftest.java" >&AS_MESSAGE_LOG_FD
$JAVAC$nowarn_option$source_option$target_option -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
} \
&& test -f conftest.class; then
dnl The compiler supports the try_source_version and
dnl try_target_version. It's better than nothing.
CONF_JAVAC="$JAVAC$nowarn_option$source_option$target_option"
HAVE_JAVAC_ENVVAR=1
HAVE_JAVACOMP=1
break
fi
done
fi
fi
fi
fi
if test -z "$HAVE_JAVACOMP"; then
pushdef([AC_MSG_CHECKING],[:])dnl
pushdef([AC_CHECKING],[:])dnl
pushdef([AC_MSG_RESULT],[:])dnl
AC_CHECK_PROG([HAVE_JAVAC_IN_PATH], [javac], [yes])
popdef([AC_MSG_RESULT])dnl
popdef([AC_CHECKING])dnl
popdef([AC_MSG_CHECKING])dnl
if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_JAVAC_IN_PATH"; then
dnl Test whether javac is usable.
dnl At the same time, determine which option to use to inhibit warnings;
dnl see the discussion above.
nowarn_option=' -Xlint:-options'
if { rm -f conftest.class \
&& { echo "$as_me:__oline__: javac$nowarn_option -d . conftest.java" >&AS_MESSAGE_LOG_FD
javac$nowarn_option -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
} \
&& test -f conftest.class
} || { \
nowarn_option=
rm -f conftest.class \
&& { echo "$as_me:__oline__: javac$nowarn_option -d . conftest.java" >&AS_MESSAGE_LOG_FD
javac$nowarn_option -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
} \
&& test -f conftest.class
}; then
compiler_cfversion=`func_classfile_version conftest.class`
compiler_target_version=`expr $compiler_cfversion - 44`
dnl It is hard to determine the compiler_source_version. This would
dnl require a list of code snippets that can be compiled only with a
dnl specific '-source' option and up, and this list would need to grow
dnl every 6 months.
dnl Also, javac may point to a shell script that already includes a
dnl '-source' option.
dnl Therefore, pass a '-source' option always.
source_option=' -source '`case "$source_version" in 8) echo 1. ;; esac`"$source_version"
dnl And pass a '-target' option as well, if needed.
dnl (All supported javac versions support both, see the table above.)
if expr $target_version = $compiler_target_version >/dev/null; then
target_option=
else
target_option=' -target '`case "$target_version" in 8) echo 1. ;; esac`"$target_version"
fi
if { echo "$as_me:__oline__: javac$nowarn_option$source_option$target_option -d . conftest.java" >&AS_MESSAGE_LOG_FD
javac$nowarn_option$source_option$target_option -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
} \
&& test -f conftest.class; then
dnl The compiler directly supports the desired source_version and
dnl target_version. Perfect.
CONF_JAVAC="javac$nowarn_option$source_option$target_option"
HAVE_JAVAC=1
HAVE_JAVACOMP=1
else
dnl If the desired source_version or target_version were too large
dnl for the compiler, there's nothing else we can do.
compiler_version=`echo "$as_me:__oline__: javac -version | sed -e 1q" >&AS_MESSAGE_LOG_FD
javac -version | sed -e 1q`
changequote(,)dnl
compiler_version=`echo "$compiler_version" | sed -e 's/^[^0-9]*\([0-9][0-9.]*\).*/\1/'`
changequote([,])dnl
case "$compiler_version" in
1.*) dnl Map 1.8.0_151 to 8.
compiler_version=`echo "$compiler_version" | sed -e 's/^1\.//' -e 's/\..*//'`
;;
*) dnl Map 9.0.4 to 9, 10.0.2 to 10, etc.
compiler_version=`echo "$compiler_version" | sed -e 's/\..*//'`
;;
esac
if expr $source_version '<=' "$compiler_version" >/dev/null \
&& expr $target_version '<=' "$compiler_version" >/dev/null; then
dnl Increase $source_version and $compiler_version until the
dnl compiler accepts these values. This is necessary to make
dnl e.g. $source_version = 6 work with Java 12 or newer, or
dnl $source_version = 7 work with Java 20 or newer.
try_source_version="$source_version"
try_target_version="$target_version"
while true; do
dnl Invariant: $try_source_version <= $try_target_version.
if expr $try_source_version = $try_target_version >/dev/null; then
try_target_version=`expr $try_target_version + 1`
fi
try_source_version=`expr $try_source_version + 1`
expr $try_source_version '<=' $compiler_version >/dev/null || break
source_option=' -source '`case "$try_source_version" in 8) echo 1. ;; esac`"$try_source_version"
if expr $try_target_version = $compiler_target_version >/dev/null; then
target_option=
else
target_option=' -target '`case "$try_target_version" in 8) echo 1. ;; esac`"$try_target_version"
fi
if { echo "$as_me:__oline__: javac$nowarn_option$source_option$target_option -d . conftest.java" >&AS_MESSAGE_LOG_FD
javac$nowarn_option$source_option$target_option -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
} \
&& test -f conftest.class; then
dnl The compiler supports the try_source_version and
dnl try_target_version. It's better than nothing.
CONF_JAVAC="javac$nowarn_option$source_option$target_option"
HAVE_JAVAC=1
HAVE_JAVACOMP=1
break
fi
done
fi
fi
fi
fi
fi
rm -f conftest*.java conftest*.class
fi
if test -n "$HAVE_JAVACOMP"; then
ac_result="$CONF_JAVAC"
else
ac_result="no"
fi
AC_MSG_RESULT([$ac_result])
AC_SUBST([CONF_JAVAC])
AC_SUBST([CLASSPATH])
AC_SUBST([CLASSPATH_SEPARATOR])
AC_SUBST([HAVE_JAVAC_ENVVAR])
AC_SUBST([HAVE_JAVAC])
])
# Simulates gt_JAVACOMP when no Java support is desired.
AC_DEFUN([gt_JAVACOMP_DISABLED],
[
CONF_JAVAC=
HAVE_JAVAC_ENVVAR=
HAVE_JAVAC=
AC_SUBST([CONF_JAVAC])
AC_SUBST([HAVE_JAVAC_ENVVAR])
AC_SUBST([HAVE_JAVAC])
])
@@ -0,0 +1,54 @@
#!/bin/sh
# Compile a Java program.
# Copyright (C) 2001-2026 Free Software Foundation, Inc.
# Written by Bruno Haible <haible@clisp.cons.org>, 2001.
#
# 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 <https://www.gnu.org/licenses/>.
# This uses the same choices as javacomp.c, but instead of relying on the
# environment settings at run time, it uses the environment variables
# present at configuration time.
#
# This is a separate shell script, because it must be able to unset JAVA_HOME
# in some cases, which a simple shell command cannot do.
#
# The extra CLASSPATH must have been set prior to calling this script.
# Options that can be passed are -O, -g and "-d DIRECTORY".
CONF_JAVAC='@CONF_JAVAC@'
CONF_CLASSPATH='@CLASSPATH@'
if test -n "@HAVE_JAVAC_ENVVAR@"; then
# Combine given CLASSPATH and configured CLASSPATH.
if test -n "$CLASSPATH"; then
CLASSPATH="$CLASSPATH${CONF_CLASSPATH:+@CLASSPATH_SEPARATOR@$CONF_CLASSPATH}"
else
CLASSPATH="$CONF_CLASSPATH"
fi
export CLASSPATH
test -z "$JAVA_VERBOSE" || echo "$CONF_JAVAC $@" 1>&2
exec $CONF_JAVAC "$@"
else
unset JAVA_HOME
if test -n "@HAVE_JAVAC@"; then
# In this case, $CONF_JAVAC starts with "javac".
CLASSPATH="$CLASSPATH"
export CLASSPATH
test -z "$JAVA_VERBOSE" || echo "$CONF_JAVAC $@" 1>&2
exec $CONF_JAVAC "$@"
else
echo 'Java compiler not found, try setting $JAVAC, then reconfigure' 1>&2
exit 1
fi
fi
@@ -0,0 +1,93 @@
# javaexec.m4
# serial 11
dnl Copyright (C) 2001-2003, 2006, 2009-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
# Prerequisites of javaexec.sh.
# gt_JAVAEXEC or gt_JAVAEXEC(testclass, its-directory)
# Sets HAVE_JAVAEXEC to nonempty if javaexec.sh will work.
AC_DEFUN([gt_JAVAEXEC],
[
AC_MSG_CHECKING([for Java virtual machine])
AC_EGREP_CPP([yes], [
#if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
yes
#endif
], CLASSPATH_SEPARATOR=';', CLASSPATH_SEPARATOR=':')
CONF_JAVA=
HAVE_JAVA_ENVVAR=
HAVE_JAVA=
HAVE_JRE=
HAVE_JAVAEXEC=1
if test -n "$JAVA"; then
HAVE_JAVA_ENVVAR=1
CONF_JAVA="$JAVA"
else
pushdef([AC_MSG_CHECKING],[:])dnl
pushdef([AC_CHECKING],[:])dnl
pushdef([AC_MSG_RESULT],[:])dnl
AC_CHECK_PROG([HAVE_JAVA_IN_PATH], [java], [yes])
AC_CHECK_PROG([HAVE_JRE_IN_PATH], [jre], [yes])
popdef([AC_MSG_RESULT])dnl
popdef([AC_CHECKING])dnl
popdef([AC_MSG_CHECKING])dnl
m4_if([$1], , , [
gt_saved_CLASSPATH="$CLASSPATH"
CLASSPATH="$2"${CLASSPATH+"$CLASSPATH_SEPARATOR$CLASSPATH"}
])
export CLASSPATH
if test -n "$HAVE_JAVA_IN_PATH" \
&& java -version >/dev/null 2>/dev/null \
m4_if([$1], , , [&& {
echo "$as_me:__oline__: java $1" >&AS_MESSAGE_LOG_FD
java $1 >&AS_MESSAGE_LOG_FD 2>&1
}]); then
HAVE_JAVA=1
CONF_JAVA="java"
else
if test -n "$HAVE_JRE_IN_PATH" \
&& (jre >/dev/null 2>/dev/null || test $? = 1) \
m4_if([$1], , , [&& {
echo "$as_me:__oline__: jre $1" >&AS_MESSAGE_LOG_FD
jre $1 >&AS_MESSAGE_LOG_FD 2>&1
}]); then
HAVE_JRE=1
CONF_JAVA="jre"
else
HAVE_JAVAEXEC=
fi
fi
m4_if([$1], , , [
CLASSPATH="$gt_saved_CLASSPATH"
])
fi
if test -n "$HAVE_JAVAEXEC"; then
ac_result="$CONF_JAVA"
else
ac_result="no"
fi
AC_MSG_RESULT([$ac_result])
AC_SUBST([CONF_JAVA])
AC_SUBST([CLASSPATH])
AC_SUBST([CLASSPATH_SEPARATOR])
AC_SUBST([HAVE_JAVA_ENVVAR])
AC_SUBST([HAVE_JAVA])
AC_SUBST([HAVE_JRE])
])
# Simulates gt_JAVAEXEC when no Java support is desired.
AC_DEFUN([gt_JAVAEXEC_DISABLED],
[
CONF_JAVA=
HAVE_JAVA_ENVVAR=
HAVE_JAVA=
HAVE_JRE=
AC_SUBST([CONF_JAVA])
AC_SUBST([HAVE_JAVA_ENVVAR])
AC_SUBST([HAVE_JAVA])
AC_SUBST([HAVE_JRE])
])
@@ -0,0 +1,58 @@
#!/bin/sh
# Execute a Java program.
# Copyright (C) 2001-2026 Free Software Foundation, Inc.
# Written by Bruno Haible <haible@clisp.cons.org>, 2001.
#
# 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 <https://www.gnu.org/licenses/>.
# This uses the same choices as javaexec.c, but instead of relying on the
# environment settings at run time, it uses the environment variables
# present at configuration time.
#
# This is a separate shell script, because it must be able to unset JAVA_HOME
# in some cases, which a simple shell command cannot do.
#
# The extra CLASSPATH must have been set prior to calling this script.
CONF_JAVA='@CONF_JAVA@'
CONF_CLASSPATH='@CLASSPATH@'
if test -n "@HAVE_JAVA_ENVVAR@"; then
# Combine given CLASSPATH and configured CLASSPATH.
if test -n "$CLASSPATH"; then
CLASSPATH="$CLASSPATH${CONF_CLASSPATH:+@CLASSPATH_SEPARATOR@$CONF_CLASSPATH}"
else
CLASSPATH="$CONF_CLASSPATH"
fi
export CLASSPATH
test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@" 1>&2
exec $CONF_JAVA "$@"
else
unset JAVA_HOME
export CLASSPATH
if test -n "@HAVE_JAVA@"; then
# In this case, $CONF_JAVA is "java".
test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@" 1>&2
exec $CONF_JAVA "$@"
else
if test -n "@HAVE_JRE@"; then
# In this case, $CONF_JAVA is "jre".
test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@" 1>&2
exec $CONF_JAVA "$@"
else
echo 'Java virtual machine not found, try setting $JAVA, then reconfigure' 1>&2
exit 1
fi
fi
fi
@@ -0,0 +1,34 @@
# modula2comp.m4
# serial 1
dnl Copyright (C) 2025-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
# Checks for a Modula-2 implementation.
# Sets M2C and M2FLAGS (options that can be used with "$M2C").
AC_DEFUN([gt_MODULA2COMP],
[
AC_MSG_CHECKING([for GNU Modula-2 compiler])
pushdef([AC_MSG_CHECKING],[:])dnl
pushdef([AC_CHECKING],[:])dnl
pushdef([AC_MSG_RESULT],[:])dnl
AC_ARG_VAR([M2C], [Modula-2 compiler command])
AC_ARG_VAR([M2FLAGS], [Modula-2 compiler options])
AC_CHECK_TOOLS([M2C], [gm2])
popdef([AC_MSG_RESULT])dnl
popdef([AC_CHECKING])dnl
popdef([AC_MSG_CHECKING])dnl
if test -n "$M2C"; then
ac_result="$M2C"
else
ac_result="no"
fi
AC_MSG_RESULT([$ac_result])
AC_SUBST([M2C])
if test -z "$M2FLAGS" && test -n "$M2C"; then
M2FLAGS="-g -O2"
fi
AC_SUBST([M2FLAGS])
])
@@ -0,0 +1,19 @@
This example relies on:
- the GNOME libraries (libgnomeui, libgnome, libgnomesupport, libart_lgpl)
and their dependencies: imlib (libgdk_imlib), audiofile (libaudiofile),
esound (libesd), zlib (libz).
- the GTK libraries (libgtk, libgdk)
- the glib libraries (libglib, libgmodule)
- the X11 libraries
- the GTK / C++ bindings (libgtkmm, libgdkmm)
- the C++ signal/slot library (libsigc++)
- the C++ runtime libraries (libstdc++)
Installation:
./autogen.sh
./configure --prefix=/some/prefix
make
make install
Cleanup:
make distclean
./autoclean.sh
@@ -0,0 +1,29 @@
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Makefile configuration - processed by automake.
# General automake options.
AUTOMAKE_OPTIONS = foreign no-dependencies
ACLOCAL_AMFLAGS = -I m4
# The list of subdirectories containing Makefiles.
SUBDIRS = m4 po
# The list of programs that are built.
bin_PROGRAMS = hello
# The source files of the 'hello' program.
hello_SOURCES = hello.cc
# Define a C macro LOCALEDIR indicating where catalogs will be installed.
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
# Make sure the gnome.h include file is found.
AM_CPPFLAGS = $(GTKMM_CFLAGS) $(GNOME_INCLUDEDIR)
# Link time dependencies.
LDADD = $(GTKMM_LIBS) $(GNOME_LIBDIR) $(GNOMEUI_LIBS) @LIBINTL@
# Additional files to be distributed.
EXTRA_DIST = autogen.sh autoclean.sh
@@ -0,0 +1,44 @@
#!/bin/sh
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Script for cleaning all autogenerated files.
test ! -f Makefile || make distclean
rm -rf autom4te.cache
# Brought in by autopoint.
rm -f ABOUT-NLS
rm -f config.rpath
rm -f m4/gettext.m4
rm -f m4/build-to-host.m4
rm -f m4/host-cpu-c-abi.m4
rm -f m4/iconv.m4
rm -f m4/intlmacosx.m4
rm -f m4/lib-ld.m4
rm -f m4/lib-link.m4
rm -f m4/lib-prefix.m4
rm -f m4/nls.m4
rm -f m4/po.m4
rm -f m4/progtest.m4
rm -f po/Makefile.in.in
rm -f po/fetch-po
rm -f po/remove-potcdate.sed
# Generated by aclocal.
rm -f aclocal.m4
# Generated by autoconf.
rm -f configure
# Generated or brought in by automake.
rm -f Makefile.in
rm -f m4/Makefile.in
rm -f compile
rm -f install-sh
rm -f missing
rm -f config.guess
rm -f config.sub
rm -f po/*.pot
rm -f po/stamp-po
rm -f po/*.gmo
@@ -0,0 +1,29 @@
#!/bin/sh
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Script for regenerating all autogenerated files.
autopoint -f # was: gettextize -f -c
rm po/Makevars.template
rm po/Rules-quot
rm po/boldquot.sed
rm po/en@boldquot.header
rm po/en@quot.header
rm po/insert-header.sed
rm po/quot.sed
aclocal -I m4
autoconf
automake -a -c
cd po
for f in *.po; do
if test -r "$f"; then
lang=`echo $f | sed -e 's,\.po$,,'`
msgfmt -c -o $lang.gmo $lang.po
fi
done
cd ..
@@ -0,0 +1,24 @@
dnl Example for use of GNU gettext.
dnl This file is in the public domain.
dnl
dnl Configuration file - processed by autoconf.
AC_INIT([hello-c++-gnome2], [0], , [hello-c++-gnome2])
AC_CONFIG_SRCDIR([hello.cc])
AM_INIT_AUTOMAKE([1.11])
AC_PROG_CXX
GNOME_INIT
GTKMM_CFLAGS=`gtkmm-config --cflags`
AC_SUBST([GTKMM_CFLAGS])
GTKMM_LIBS=`gtkmm-config --libs`
AC_SUBST([GTKMM_LIBS])
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([1.0])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([m4/Makefile])
AC_CONFIG_FILES([po/Makefile.in])
AC_OUTPUT
@@ -0,0 +1,92 @@
/* Example for use of GNU gettext.
This file is in the public domain.
Source code of the C++ program. */
/* Get GNOME declarations. */
#include <gnome.h>
#include <gtk--.h>
/* Get getpid() declaration. */
#if defined _WIN32 && !defined __CYGWIN__
/* native Windows API */
# include <process.h>
# define getpid _getpid
#else
/* POSIX API */
# include <unistd.h>
#endif
static Gtk::Main *application;
static gint
quit_callback (GdkEventAny*)
{
application->quit ();
}
int
main (int argc, char *argv[])
{
Gtk::Window *window;
Gtk::VBox *panel;
Gtk::Label *label1;
Gtk::Alignment *label1aligned;
Gtk::Label *label2;
Gtk::Alignment *label2aligned;
Gtk::Button *button;
Gtk::HButtonBox *buttonbar;
/* Initializations. */
setlocale (LC_ALL, "");
application = new Gtk::Main (argc, argv);
textdomain ("hello-c++-gnome2");
bindtextdomain ("hello-c++-gnome2", LOCALEDIR);
/* Create the GUI elements. */
window = new Gtk::Window (GTK_WINDOW_TOPLEVEL);
window->set_title ("Hello example");
window->realize ();
window->delete_event.connect (SigC::slot (quit_callback));
label1 = new Gtk::Label (_("Hello, world!"));
label1aligned = new Gtk::Alignment (0.0, 0.5, 0, 0);
label1aligned->add (*label1);
label2 = new Gtk::Label (g_strdup_printf (_("This program is running as process number %d."), getpid ()));
label2aligned = new Gtk::Alignment (0.0, 0.5, 0, 0);
label2aligned->add (*label2);
button = new Gtk::Button ("OK");
button->clicked.connect (Gtk::Main::quit.slot()); //slot (quit_callback));
buttonbar = new Gtk::HButtonBox (GTK_BUTTONBOX_END);
buttonbar->pack_start (*button);
panel = new Gtk::VBox (false, GNOME_PAD_SMALL);
panel->pack_start (*label1aligned);
panel->pack_start (*label2aligned);
panel->pack_start (*buttonbar);
window->add (*panel);
/* Make the GUI elements visible. */
label1->show ();
label1aligned->show ();
label2->show ();
label2aligned->show ();
button->show ();
buttonbar->show ();
panel->show ();
window->show ();
/* Start the event loop. */
application->run ();
}
@@ -0,0 +1,6 @@
EXTRA_DIST = \
gettext.m4 build-to-host.m4 host-cpu-c-abi.m4 \
iconv.m4 intlmacosx.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 \
nls.m4 po.m4 progtest.m4 \
gnome.m4 gnome-gnorba-check.m4 gnome-orbit-check.m4 \
gtk.m4 gtk--.m4
@@ -0,0 +1,35 @@
dnl
dnl GNOME_GNORBA_HOOK (script-if-gnorba-found, failflag)
dnl
dnl if failflag is "failure" it aborts if gnorba is not found.
dnl
AC_DEFUN([GNOME_GNORBA_HOOK],[
GNOME_ORBIT_HOOK([],$2)
AC_CACHE_CHECK([for gnorba libraries],gnome_cv_gnorba_found,[
gnome_cv_gnorba_found=no
if test x$gnome_cv_orbit_found = xyes; then
GNORBA_CFLAGS="`gnome-config --cflags gnorba gnomeui`"
GNORBA_LIBS="`gnome-config --libs gnorba gnomeui`"
if test -n "$GNORBA_LIBS"; then
gnome_cv_gnorba_found=yes
fi
fi
])
AM_CONDITIONAL(HAVE_GNORBA, test x$gnome_cv_gnorba_found = xyes)
if test x$gnome_cv_orbit_found = xyes; then
$1
GNORBA_CFLAGS="`gnome-config --cflags gnorba gnomeui`"
GNORBA_LIBS="`gnome-config --libs gnorba gnomeui`"
AC_SUBST(GNORBA_CFLAGS)
AC_SUBST(GNORBA_LIBS)
else
if test x$2 = xfailure; then
AC_MSG_ERROR(gnorba library not installed or installation problem)
fi
fi
])
AC_DEFUN([GNOME_GNORBA_CHECK], [
GNOME_GNORBA_HOOK([],failure)
])
@@ -0,0 +1,33 @@
dnl
dnl GNOME_ORBIT_HOOK (script-if-orbit-found, failflag)
dnl
dnl if failflag is "failure" it aborts if orbit is not found.
dnl
AC_DEFUN([GNOME_ORBIT_HOOK],[
AC_PATH_PROG(ORBIT_CONFIG,orbit-config,no)
AC_PATH_PROG(ORBIT_IDL,orbit-idl,no)
AC_CACHE_CHECK([for working ORBit environment],gnome_cv_orbit_found,[
if test x$ORBIT_CONFIG = xno -o x$ORBIT_IDL = xno; then
gnome_cv_orbit_found=no
else
gnome_cv_orbit_found=yes
fi
])
AM_CONDITIONAL(HAVE_ORBIT, test x$gnome_cv_orbit_found = xyes)
if test x$gnome_cv_orbit_found = xyes; then
$1
ORBIT_CFLAGS=`orbit-config --cflags client server`
ORBIT_LIBS=`orbit-config --use-service=name --libs client server`
AC_SUBST(ORBIT_CFLAGS)
AC_SUBST(ORBIT_LIBS)
else
if test x$2 = xfailure; then
AC_MSG_ERROR(ORBit not installed or installation problem)
fi
fi
])
AC_DEFUN([GNOME_ORBIT_CHECK], [
GNOME_ORBIT_HOOK([],failure)
])
@@ -0,0 +1,128 @@
dnl
dnl GNOME_INIT_HOOK (script-if-gnome-enabled, [failflag], [additional-inits])
dnl
dnl if failflag is "fail" then GNOME_INIT_HOOK will abort if gnomeConf.sh
dnl is not found.
dnl
AC_DEFUN([GNOME_INIT_HOOK],[
AC_SUBST(GNOME_LIBS)
AC_SUBST(GNOMEUI_LIBS)
AC_SUBST(GNOMEGNORBA_LIBS)
AC_SUBST(GTKXMHTML_LIBS)
AC_SUBST(ZVT_LIBS)
AC_SUBST(GNOME_LIBDIR)
AC_SUBST(GNOME_INCLUDEDIR)
AC_ARG_WITH(gnome-includes,
[ --with-gnome-includes Specify location of GNOME headers],[
CFLAGS="$CFLAGS -I$withval"
])
AC_ARG_WITH(gnome-libs,
[ --with-gnome-libs Specify location of GNOME libs],[
LDFLAGS="$LDFLAGS -L$withval"
gnome_prefix=$withval
])
AC_ARG_WITH(gnome,
[ --with-gnome Specify prefix for GNOME files],
if test x$withval = xyes; then
want_gnome=yes
dnl Note that an empty true branch is not
dnl valid sh syntax.
ifelse([$1], [], :, [$1])
else
if test "x$withval" = xno; then
want_gnome=no
else
want_gnome=yes
LDFLAGS="$LDFLAGS -L$withval/lib"
CFLAGS="$CFLAGS -I$withval/include"
gnome_prefix=$withval/lib
fi
fi,
want_gnome=yes)
if test "x$want_gnome" = xyes; then
AC_PATH_PROG(GNOME_CONFIG,gnome-config,no)
if test "$GNOME_CONFIG" = "no"; then
no_gnome_config="yes"
else
AC_MSG_CHECKING(if $GNOME_CONFIG works)
if $GNOME_CONFIG --libs-only-l gnome >/dev/null 2>&1; then
AC_MSG_RESULT(yes)
GNOME_GNORBA_HOOK([],$2)
GNOME_LIBS="`$GNOME_CONFIG --libs-only-l gnome`"
GNOMEUI_LIBS="`$GNOME_CONFIG --libs-only-l gnomeui`"
GNOMEGNORBA_LIBS="`$GNOME_CONFIG --libs-only-l gnorba gnomeui`"
GTKXMHTML_LIBS="`$GNOME_CONFIG --libs-only-l gtkxmhtml`"
ZVT_LIBS="`$GNOME_CONFIG --libs-only-l zvt`"
GNOME_LIBDIR="`$GNOME_CONFIG --libs-only-L gnorba gnomeui`"
GNOME_INCLUDEDIR="`$GNOME_CONFIG --cflags gnorba gnomeui`"
$1
else
AC_MSG_RESULT(no)
no_gnome_config="yes"
fi
fi
if test x$exec_prefix = xNONE; then
if test x$prefix = xNONE; then
gnome_prefix=$ac_default_prefix/lib
else
gnome_prefix=$prefix/lib
fi
else
gnome_prefix=`eval echo \`echo $libdir\``
fi
if test "$no_gnome_config" = "yes"; then
AC_MSG_CHECKING(for gnomeConf.sh file in $gnome_prefix)
if test -f $gnome_prefix/gnomeConf.sh; then
AC_MSG_RESULT(found)
echo "loading gnome configuration from" \
"$gnome_prefix/gnomeConf.sh"
. $gnome_prefix/gnomeConf.sh
$1
else
AC_MSG_RESULT(not found)
if test x$2 = xfail; then
AC_MSG_ERROR(Could not find the gnomeConf.sh file that is generated by gnome-libs install)
fi
fi
fi
fi
if test -n "$3"; then
n="$3"
for i in $n; do
AC_MSG_CHECKING(extra library \"$i\")
case $i in
applets)
AC_SUBST(GNOME_APPLETS_LIBS)
GNOME_APPLETS_LIBS=`$GNOME_CONFIG --libs-only-l applets`
AC_MSG_RESULT($GNOME_APPLETS_LIBS);;
docklets)
AC_SUBST(GNOME_DOCKLETS_LIBS)
GNOME_DOCKLETS_LIBS=`$GNOME_CONFIG --libs-only-l docklets`
AC_MSG_RESULT($GNOME_DOCKLETS_LIBS);;
capplet)
AC_SUBST(GNOME_CAPPLET_LIBS)
GNOME_CAPPLET_LIBS=`$GNOME_CONFIG --libs-only-l capplet`
AC_MSG_RESULT($GNOME_CAPPLET_LIBS);;
*)
AC_MSG_RESULT(unknown library)
esac
done
fi
])
dnl
dnl GNOME_INIT ([additional-inits])
dnl
AC_DEFUN([GNOME_INIT],[
GNOME_INIT_HOOK([],fail,$1)
])
@@ -0,0 +1,195 @@
# Configure paths for GTK--
# Erik Andersen 30 May 1998
# Modified by Tero Pulkkinen (added the compiler checks... I hope they work..)
# Modified by Thomas Langen 16 Jan 2000 (corrected CXXFLAGS)
dnl Test for GTKMM, and define GTKMM_CFLAGS and GTKMM_LIBS
dnl to be used as follows:
dnl AM_PATH_GTKMM([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
dnl
AC_DEFUN([AM_PATH_GTKMM],
[dnl
dnl Get the cflags and libraries from the gtkmm-config script
dnl
AC_ARG_WITH(gtkmm-prefix,[ --with-gtkmm-prefix=PREFIX
Prefix where GTK-- is installed (optional)],
gtkmm_config_prefix="$withval", gtkmm_config_prefix="")
AC_ARG_WITH(gtkmm-exec-prefix,[ --with-gtkmm-exec-prefix=PREFIX
Exec prefix where GTK-- is installed (optional)],
gtkmm_config_exec_prefix="$withval", gtkmm_config_exec_prefix="")
AC_ARG_ENABLE(gtkmmtest, [ --disable-gtkmmtest Do not try to compile and run a test GTK-- program],
, enable_gtkmmtest=yes)
if test x$gtkmm_config_exec_prefix != x ; then
gtkmm_config_args="$gtkmm_config_args --exec-prefix=$gtkmm_config_exec_prefix"
if test x${GTKMM_CONFIG+set} != xset ; then
GTKMM_CONFIG=$gtkmm_config_exec_prefix/bin/gtkmm-config
fi
fi
if test x$gtkmm_config_prefix != x ; then
gtkmm_config_args="$gtkmm_config_args --prefix=$gtkmm_config_prefix"
if test x${GTKMM_CONFIG+set} != xset ; then
GTKMM_CONFIG=$gtkmm_config_prefix/bin/gtkmm-config
fi
fi
AC_PATH_PROG(GTKMM_CONFIG, gtkmm-config, no)
min_gtkmm_version=ifelse([$1], ,0.10.0,$1)
AC_MSG_CHECKING(for GTK-- - version >= $min_gtkmm_version)
AC_LANG_SAVE
no_gtkmm=""
if test "$GTKMM_CONFIG" = "no" ; then
no_gtkmm=yes
else
AC_LANG_CPLUSPLUS
GTKMM_CFLAGS=`$GTKMM_CONFIG $gtkmm_config_args --cflags`
GTKMM_LIBS=`$GTKMM_CONFIG $gtkmm_config_args --libs`
gtkmm_config_major_version=`$GTKMM_CONFIG $gtkmm_config_args --version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
gtkmm_config_minor_version=`$GTKMM_CONFIG $gtkmm_config_args --version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
gtkmm_config_micro_version=`$GTKMM_CONFIG $gtkmm_config_args --version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
if test "x$enable_gtkmmtest" = "xyes" ; then
ac_save_CXXFLAGS="$CXXFLAGS"
ac_save_LIBS="$LIBS"
CXXFLAGS="$CXXFLAGS $GTKMM_CFLAGS"
LIBS="$LIBS $GTKMM_LIBS"
dnl
dnl Now check if the installed GTK-- is sufficiently new. (Also sanity
dnl checks the results of gtkmm-config to some extent
dnl
rm -f conf.gtkmmtest
AC_TRY_RUN([
#include <gtk--.h>
#include <stdio.h>
#include <stdlib.h>
int
main ()
{
int major, minor, micro;
char *tmp_version;
system ("touch conf.gtkmmtest");
/* HP/UX 0 (%@#!) writes to sscanf strings */
tmp_version = g_strdup("$min_gtkmm_version");
if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
printf("%s, bad version string\n", "$min_gtkmm_version");
exit(1);
}
if ((gtkmm_major_version != $gtkmm_config_major_version) ||
(gtkmm_minor_version != $gtkmm_config_minor_version) ||
(gtkmm_micro_version != $gtkmm_config_micro_version))
{
printf("\n*** 'gtkmm-config --version' returned %d.%d.%d, but GTK-- (%d.%d.%d)\n",
$gtkmm_config_major_version, $gtkmm_config_minor_version, $gtkmm_config_micro_version,
gtkmm_major_version, gtkmm_minor_version, gtkmm_micro_version);
printf ("*** was found! If gtkmm-config was correct, then it is best\n");
printf ("*** to remove the old version of GTK--. You may also be able to fix the error\n");
printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
printf("*** required on your system.\n");
printf("*** If gtkmm-config was wrong, set the environment variable GTKMM_CONFIG\n");
printf("*** to point to the correct copy of gtkmm-config, and remove the file config.cache\n");
printf("*** before re-running configure\n");
}
/* GTK-- does not have the GTKMM_*_VERSION constants */
/*
else if ((gtkmm_major_version != GTKMM_MAJOR_VERSION) ||
(gtkmm_minor_version != GTKMM_MINOR_VERSION) ||
(gtkmm_micro_version != GTKMM_MICRO_VERSION))
{
printf("*** GTK-- header files (version %d.%d.%d) do not match\n",
GTKMM_MAJOR_VERSION, GTKMM_MINOR_VERSION, GTKMM_MICRO_VERSION);
printf("*** library (version %d.%d.%d)\n",
gtkmm_major_version, gtkmm_minor_version, gtkmm_micro_version);
}
*/
else
{
if ((gtkmm_major_version > major) ||
((gtkmm_major_version == major) && (gtkmm_minor_version > minor)) ||
((gtkmm_major_version == major) && (gtkmm_minor_version == minor) && (gtkmm_micro_version >= micro)))
{
return 0;
}
else
{
printf("\n*** An old version of GTK-- (%d.%d.%d) was found.\n",
gtkmm_major_version, gtkmm_minor_version, gtkmm_micro_version);
printf("*** You need a version of GTK-- newer than %d.%d.%d. The latest version of\n",
major, minor, micro);
printf("*** GTK-- is always available from ftp://ftp.gtk.org.\n");
printf("***\n");
printf("*** If you have already installed a sufficiently new version, this error\n");
printf("*** probably means that the wrong copy of the gtkmm-config shell script is\n");
printf("*** being found. The easiest way to fix this is to remove the old version\n");
printf("*** of GTK--, but you can also set the GTKMM_CONFIG environment to point to the\n");
printf("*** correct copy of gtkmm-config. (In this case, you will have to\n");
printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
printf("*** so that the correct libraries are found at run-time))\n");
}
}
return 1;
}
],, no_gtkmm=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
CXXFLAGS="$ac_save_CXXFLAGS"
LIBS="$ac_save_LIBS"
fi
fi
if test "x$no_gtkmm" = x ; then
AC_MSG_RESULT(yes)
ifelse([$2], , :, [$2])
else
AC_MSG_RESULT(no)
if test "$GTKMM_CONFIG" = "no" ; then
echo "*** The gtkmm-config script installed by GTK-- could not be found"
echo "*** If GTK-- was installed in PREFIX, make sure PREFIX/bin is in"
echo "*** your path, or set the GTKMM_CONFIG environment variable to the"
echo "*** full path to gtkmm-config."
echo "*** The gtkmm-config script was not available in GTK-- versions"
echo "*** prior to 0.9.12. Perhaps you need to update your installed"
echo "*** version to 0.9.12 or later"
else
if test -f conf.gtkmmtest ; then
:
else
echo "*** Could not run GTK-- test program, checking why..."
CXXFLAGS="$CXXFLAGS $GTKMM_CFLAGS"
LIBS="$LIBS $GTKMM_LIBS"
AC_TRY_LINK([
#include <gtk--.h>
#include <stdio.h>
], [ return ((gtkmm_major_version) || (gtkmm_minor_version) || (gtkmm_micro_version)); ],
[ echo "*** The test program compiled, but did not run. This usually means"
echo "*** that the run-time linker is not finding GTK-- or finding the wrong"
echo "*** version of GTK--. If it is not finding GTK--, you'll need to set your"
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
echo "*** to the installed location Also, make sure you have run ldconfig if that"
echo "*** is required on your system"
echo "***"
echo "*** If you have an old version installed, it is best to remove it, although"
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
[ echo "*** The test program failed to compile or link. See the file config.log for the"
echo "*** exact error that occured. This usually means GTK-- was incorrectly installed"
echo "*** or that you have moved GTK-- since it was installed. In the latter case, you"
echo "*** may want to edit the gtkmm-config script: $GTKMM_CONFIG" ])
CXXFLAGS="$ac_save_CXXFLAGS"
LIBS="$ac_save_LIBS"
fi
fi
GTKMM_CFLAGS=""
GTKMM_LIBS=""
ifelse([$3], , :, [$3])
fi
AC_LANG_RESTORE
AC_SUBST(GTKMM_CFLAGS)
AC_SUBST(GTKMM_LIBS)
rm -f conf.gtkmmtest
])
@@ -0,0 +1,194 @@
# Configure paths for GTK+
# Owen Taylor 97-11-3
dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS
dnl
AC_DEFUN([AM_PATH_GTK],
[dnl
dnl Get the cflags and libraries from the gtk-config script
dnl
AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)],
gtk_config_prefix="$withval", gtk_config_prefix="")
AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)],
gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="")
AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
, enable_gtktest=yes)
for module in . $4
do
case "$module" in
gthread)
gtk_config_args="$gtk_config_args gthread"
;;
esac
done
if test x$gtk_config_exec_prefix != x ; then
gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix"
if test x${GTK_CONFIG+set} != xset ; then
GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config
fi
fi
if test x$gtk_config_prefix != x ; then
gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix"
if test x${GTK_CONFIG+set} != xset ; then
GTK_CONFIG=$gtk_config_prefix/bin/gtk-config
fi
fi
AC_PATH_PROG(GTK_CONFIG, gtk-config, no)
min_gtk_version=ifelse([$1], ,0.99.7,$1)
AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
no_gtk=""
if test "$GTK_CONFIG" = "no" ; then
no_gtk=yes
else
GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags`
GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs`
gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
if test "x$enable_gtktest" = "xyes" ; then
ac_save_CFLAGS="$CFLAGS"
ac_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $GTK_CFLAGS"
LIBS="$GTK_LIBS $LIBS"
dnl
dnl Now check if the installed GTK is sufficiently new. (Also sanity
dnl checks the results of gtk-config to some extent
dnl
rm -f conf.gtktest
AC_TRY_RUN([
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
int
main ()
{
int major, minor, micro;
char *tmp_version;
system ("touch conf.gtktest");
/* HP/UX 9 (%@#!) writes to sscanf strings */
tmp_version = g_strdup("$min_gtk_version");
if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
printf("%s, bad version string\n", "$min_gtk_version");
exit(1);
}
if ((gtk_major_version != $gtk_config_major_version) ||
(gtk_minor_version != $gtk_config_minor_version) ||
(gtk_micro_version != $gtk_config_micro_version))
{
printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n",
$gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
gtk_major_version, gtk_minor_version, gtk_micro_version);
printf ("*** was found! If gtk-config was correct, then it is best\n");
printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
printf("*** required on your system.\n");
printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n");
printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n");
printf("*** before re-running configure\n");
}
#if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION)
else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
(gtk_minor_version != GTK_MINOR_VERSION) ||
(gtk_micro_version != GTK_MICRO_VERSION))
{
printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
printf("*** library (version %d.%d.%d)\n",
gtk_major_version, gtk_minor_version, gtk_micro_version);
}
#endif /* defined (GTK_MAJOR_VERSION) ... */
else
{
if ((gtk_major_version > major) ||
((gtk_major_version == major) && (gtk_minor_version > minor)) ||
((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
{
return 0;
}
else
{
printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
gtk_major_version, gtk_minor_version, gtk_micro_version);
printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
major, minor, micro);
printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
printf("***\n");
printf("*** If you have already installed a sufficiently new version, this error\n");
printf("*** probably means that the wrong copy of the gtk-config shell script is\n");
printf("*** being found. The easiest way to fix this is to remove the old version\n");
printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n");
printf("*** correct copy of gtk-config. (In this case, you will have to\n");
printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
printf("*** so that the correct libraries are found at run-time))\n");
}
}
return 1;
}
],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
CFLAGS="$ac_save_CFLAGS"
LIBS="$ac_save_LIBS"
fi
fi
if test "x$no_gtk" = x ; then
AC_MSG_RESULT(yes)
ifelse([$2], , :, [$2])
else
AC_MSG_RESULT(no)
if test "$GTK_CONFIG" = "no" ; then
echo "*** The gtk-config script installed by GTK could not be found"
echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in"
echo "*** your path, or set the GTK_CONFIG environment variable to the"
echo "*** full path to gtk-config."
else
if test -f conf.gtktest ; then
:
else
echo "*** Could not run GTK test program, checking why..."
CFLAGS="$CFLAGS $GTK_CFLAGS"
LIBS="$LIBS $GTK_LIBS"
AC_TRY_LINK([
#include <gtk/gtk.h>
#include <stdio.h>
], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ],
[ echo "*** The test program compiled, but did not run. This usually means"
echo "*** that the run-time linker is not finding GTK or finding the wrong"
echo "*** version of GTK. If it is not finding GTK, you'll need to set your"
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
echo "*** to the installed location Also, make sure you have run ldconfig if that"
echo "*** is required on your system"
echo "***"
echo "*** If you have an old version installed, it is best to remove it, although"
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
echo "***"
echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that"
echo "*** came with the system with the command"
echo "***"
echo "*** rpm --erase --nodeps gtk gtk-devel" ],
[ echo "*** The test program failed to compile or link. See the file config.log for the"
echo "*** exact error that occured. This usually means GTK was incorrectly installed"
echo "*** or that you have moved GTK since it was installed. In the latter case, you"
echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ])
CFLAGS="$ac_save_CFLAGS"
LIBS="$ac_save_LIBS"
fi
fi
GTK_CFLAGS=""
GTK_LIBS=""
ifelse([$3], , :, [$3])
fi
AC_SUBST(GTK_CFLAGS)
AC_SUBST(GTK_LIBS)
rm -f conf.gtktest
])
@@ -0,0 +1,5 @@
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Set of available languages.
af ast bg ca cs da de el eo es fi fr ga gl hr hu id it ja ka ky lv ms mt nb nl nn pl pt pt_BR ro ru sk sl sq sr sv ta tr uk vi zh_CN zh_HK zh_TW
@@ -0,0 +1,89 @@
# Makefile variables for PO directory in any package using GNU gettext.
#
# Copyright (C) 2003-2025 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation gives
# unlimited permission to use, copy, distribute, and modify it.
# Usually the message domain is the same as the package name.
DOMAIN = $(PACKAGE)
# These two variables depend on the location of this directory.
subdir = po
top_builddir = ..
# These options get passed to xgettext.
XGETTEXT_OPTIONS = \
--keyword=_ --flag=_:1:pass-c-format \
--keyword=N_ --flag=N_:1:pass-c-format \
--flag=g_log:3:c-format --flag=g_logv:3:c-format \
--flag=g_error:1:c-format --flag=g_message:1:c-format \
--flag=g_critical:1:c-format --flag=g_warning:1:c-format \
--flag=g_print:1:c-format \
--flag=g_printerr:1:c-format \
--flag=g_strdup_printf:1:c-format --flag=g_strdup_vprintf:1:c-format \
--flag=g_printf_string_upper_bound:1:c-format \
--flag=g_snprintf:3:c-format --flag=g_vsnprintf:3:c-format \
--flag=g_string_sprintf:2:c-format \
--flag=g_string_sprintfa:2:c-format \
--flag=g_scanner_error:2:c-format \
--flag=g_scanner_warn:2:c-format
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
# package. (Note that the msgid strings, extracted from the package's
# sources, belong to the copyright holder of the package.) Translators are
# expected to transfer the copyright for their translations to this person
# or entity, or to disclaim their copyright. The empty string stands for
# the public domain; in this case the translators are expected to disclaim
# their copyright.
COPYRIGHT_HOLDER = Yoyodyne, Inc.
# This tells whether or not to prepend "GNU " prefix to the package
# name that gets inserted into the header of the $(DOMAIN).pot file.
# Possible values are "yes", "no", or empty. If it is empty, try to
# detect it automatically by scanning the files in $(top_srcdir) for
# "GNU packagename" string.
PACKAGE_GNU = no
# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings:
# - Strings which are not entire sentences, see the maintainer guidelines
# in the GNU gettext documentation, section 'Preparing Strings'.
# - Strings which use unclear terms or require additional context to be
# understood.
# - Strings which make invalid assumptions about notation of date, time or
# money.
# - Pluralisation problems.
# - Incorrect English spelling.
# - Incorrect formatting.
# It can be your email address, or a mailing list address where translators
# can write to without being subscribed, or the URL of a web page through
# which the translators can contact you.
MSGID_BUGS_ADDRESS = bug-gettext@gnu.org
# This is the list of locale categories, beyond LC_MESSAGES, for which the
# message catalogs shall be used. It is usually empty.
EXTRA_LOCALE_CATEGORIES =
# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
# context. Possible values are "yes" and "no". Set this to yes if the
# package uses functions taking also a message context, like pgettext(), or
# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
USE_MSGCTXT = no
# These options get passed to msgmerge.
# Useful options are in particular:
# --previous to keep previous msgids of translated messages
MSGMERGE_OPTIONS =
# These options get passed to msginit.
# If you want to disable line wrapping when writing PO files, add
# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
# MSGINIT_OPTIONS.
MSGINIT_OPTIONS =
# This tells whether or not to forcibly update $(DOMAIN).pot and
# regenerate PO files on "make dist". Possible values are "yes" and
# "no". Set this to no if the POT file and PO files are maintained
# externally.
DIST_DEPENDS_ON_UPDATE_PO = yes
@@ -0,0 +1,5 @@
# Example for use of GNU gettext.
# This file is in the public domain.
#
# List of files which contain translatable strings.
hello.cc
@@ -0,0 +1,26 @@
# Afrikaans translation for Silky
# Copyright (C) 2004 Free Software Foundation, Inc.
# This file is distributed under the same license as the silky package.
# Hanlie Pretorius <hpretorius@pnp.co.za>, 2004.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2-0.13.1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2003-12-31 10:30+2\n"
"Last-Translator: Ysbeer <ysbeer@af.org.za>\n"
"Language-Team: Afrikaans <i18n@af.org.za>\n"
"Language: af\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hallo wêreld!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Hierdie program loop as prosesnommer %d."
@@ -0,0 +1,29 @@
# Asturian translation for hello-c++-gnome2
# Copyright (C) 2018 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Marquinos <maacub@gmail.com>, 2009.
# enolp <enolp@softastur.org>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.19.4.73\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2018-07-16 00:28+0100\n"
"Last-Translator: enolp <enolp@softastur.org>\n"
"Language-Team: Asturian <ubuntu-l10n-ast@lists.ubuntu.com>\n"
"Language: ast\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 2.0\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "¡Hola, mundu!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Esti programa ta executándose como procesu númberu %d."
@@ -0,0 +1,26 @@
# Bulgarian translations for hello-c++-gnome2 package.
# Copyright (C) 2010 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Roumen Petrov <transl@roumenpetrov.info>, 2010,2014,2015,2019,2023,2024,2025.
#
msgid ""
msgstr ""
"Project-Id-Version: GNU hello-c++-gnome2 0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-07-04 20:09+0200\n"
"Last-Translator: Roumen Petrov <transl@roumenpetrov.info>\n"
"Language-Team: Bulgarian <dict@ludost.net>\n"
"Language: bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Здравейте всички!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Програмата е пусната под процес номер %d."
@@ -0,0 +1,27 @@
# Catalan messages for GNU hello-c++-gnome2.
# Copyright (C) 2003, 2014, 2015 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Ivan Vilata i Balaguer <ivan@selidor.net>, 2003, 2014, 2015, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.22\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2023-07-07 08:36+0200\n"
"Last-Translator: Ivan Vilata i Balaguer <ivan@selidor.net>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hola, món!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Aquest programa està corrent amb el número de procés %d."
@@ -0,0 +1,29 @@
# The Czech translation for the gettext package.
# Copyright (C) 2011 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Marek Černocký <marek@manet.cz>, 2011.
# Petr Písař <petr.pisar@atlas.cz>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-07-04 19:55+02:00\n"
"Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Ahoj světe!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Tento program běží jako proces číslo %d."
@@ -0,0 +1,28 @@
# Danish messages for hello-c++-gnome2.
# Copyright (C) 2015 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Jan Djærv <jan.h.d@swipnet.se>, 2003, 2006.
# Keld Simonsen <keld@keldix.com>, 2011.
# Joe Hansen <joedalton2@yahoo.dk>, 2015.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.19.4.73\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2015-06-27 12:39+0100\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hej verden!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Dette program kører som proces nummer %d."
@@ -0,0 +1,32 @@
# German messages for hello-c++-gnome2.
# Copyright © 2003, 2013 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Bruno Haible <bruno@clisp.org>, 2003.
# Karl Eichwalder <ke@gnu.franken.de>, 2003.
# Jakob Kramer <jakob.kramer@gmx.de>, 2013.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2023, 2025 .
# Philipp Thomas <pth@suse.de>, 2015.
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-07-06 15:25+0200\n"
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 25.04.2\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hallo Welt!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Dieses Programm läuft mit der Prozess-Nummer %d."
@@ -0,0 +1,26 @@
# Greek translation of hello-c++-gnome2
# Copyright (C) 2005 Free Software Foundation, Inc.
# Simos Xenitellis <simos74@gmx.net>, 2005.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.14.1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2005-01-06 18:50+0000\n"
"Last-Translator: Simos Xenitellis <simos74@gmx.net>\n"
"Language-Team: Greek <nls@tux.hellug.gr>\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: KBabel 1.3.1\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Γεια σου, κόσμε!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Αυτό το πρόγραμμα εκτελείται με αριθμό διεργασίας %d."
@@ -0,0 +1,28 @@
# La teksto por la mesaĝoj de la programo "gettext".
# Copyright (C) 2006, 2016 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Edmund GRIMLEY EVANS <edmundo@rano.org>, 2006.
# Felipe CASTRO <fefcas@gmail.com>, 2016, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.22\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2023-06-23 19:00-0300\n"
"Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
"Language: eo\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 2.4.2\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Saluton, mondo!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Ĉi tiu programo rulas kiel procez-numero %d."
@@ -0,0 +1,30 @@
# Mensajes en español para GNU gettext.
# Copyright (C) 2014 Yoyodyne, Inc. (msgids)
#
# This file is distributed under the same license as the gettext package.
#
# Max de Mendizábal <max@upn.mx>, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004.
# Antonio Ceballos <aceballos@gmail.com>, 2014, 2015, 2023, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2-0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-07-04 18:07+0200\n"
"Last-Translator: Antonio Ceballos <aceballos@gmail.com>\n"
"Language-Team: Spanish <es@tp.org.es>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "¡Hola, mundo!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Este programa está corriendo como el proceso número %d."
@@ -0,0 +1,29 @@
# Finnish messages for GNU Gettext examples.
# This file is distributed under the same license as the gettext package.
# Copyright © 2007, 2014, 2015 Yoyodyne, Inc. (msgids)
# Lauri Nurmi <lanurmi@iki.fi>, 2007.
# Jorma Karvonen <karvonen.jorma@gmail.com>, 2014-2015.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.19.4.73\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2015-09-01 16:59+0300\n"
"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 1.5.4\n"
# Tämä nimenomainen käännös valittu GNU Hellon mukaisesti.
#: hello.cc:55
msgid "Hello, world!"
msgstr "Terve maailma!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Tämän ohjelman prosessinumero on %d."
@@ -0,0 +1,32 @@
# Messages français pour GNU gettext.
# Copyright (C) 2006 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Michel Robitaille <robitail@IRO.UMontreal.CA>, 2006.
# Christophe Combelles <ccomb@free.fr>, 2006
# Stéphane Aulery <lkppo@free.fr>, 2015
# Christian Wiatr <w9204-fs@yahoo.com>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.22\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2023-06-28 16:25+0200\n"
"Last-Translator: Christian Wiatr <w9204-fs@yahoo.com>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 2.4.2\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Bonjour, le monde !"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Ce programme est exécuté en tant que processus numéro %d."
@@ -0,0 +1,26 @@
# Irish translations for hello-c++-gnome2.
# Copyright (C) 2015 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Kevin Patrick Scannell <kscanne@gmail.com>, 2004, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.19.4.73\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2017-01-10 12:09-0500\n"
"Last-Translator: Kevin Patrick Scannell <kscanne@gmail.com>\n"
"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
"Language: ga\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Dia duit, a dhomhain!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Tá an clár seo ag rith mar phróiseas %d."
@@ -0,0 +1,31 @@
# Galician translation for hello-c++-gnome2 package.
# Copyright (C) 2010 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Leandro Regueiro <leandro.regueiro@gmail.com>, 2010-2014.
#
# Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas
# colaborar connosco, podes atopar máis información en <http://trasno.net>
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.19-rc1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2014-05-10 16:34+0100\n"
"Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n"
"Language-Team: Galician <proxecto@trasno.net>\n"
"Language: gl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Ola, mundo!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Este programa estase executando como o proceso número %d."
@@ -0,0 +1,33 @@
# Translation of hello-c++-gnome2 to Croatian.
# Copyright (C) 2003, 2004, 2014, 2015, 2019 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Permission is granted to freely copy and distribute
# this file and modified versions, provided that this
# header is not removed and modified versions are marked
# as such.
#
# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012.
# Božidar Putanec <bozidarp@yahoo.com>, 2018-2026.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: GNU hello-c++-gnome2 1.0-pre2\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2026-01-15 20:25-0800\n"
"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
"Language-Team: Croatian <lokalizacija@linux.hr>\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Pozdrav, svijete!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Ovaj program izvršava se kao proces broj %d."
@@ -0,0 +1,29 @@
# Hungarian translation for hello-c++-gnome2.
# This file is distributed under the same license as the gettext package.
# Copyright (C) 2014 Yoyodyne, Inc. (msgids)
#
# Tamás Kiss <atomi@inf.elte.hu>, 2005.
# Balázs Úr <urbalazs@gmail.com>, 2014, 2015.
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.19.4.73\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2015-06-23 20:31+0200\n"
"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 1.2\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hello, világ!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Ez a program a(z) %d folyamatazonosítóval fut."
@@ -0,0 +1,27 @@
# translation of hello-c++-gnome2-0.15-pre5.po to Indonesian
# Copyright (C) 2006 Yoyodyne, Inc.
# This file is distributed under the same license as the PACKAGE package.
#
# Tedi Heriyanto <tedi_heriyanto@yahoo.com>, 2006.
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2-0.15-pre5\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2006-09-27 20:19+0700\n"
"Last-Translator: Tedi Heriyanto <tedi_heriyanto@yahoo.com>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: KBabel 1.11.2\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hello, world!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Program ini berjalan sebagai proses nomor %d"
@@ -0,0 +1,29 @@
# Italian messages for hello-c++-gnome2.
# Copyright (C) 2005, 2006 Yoyodyne, Inc. (msgids)
# Copyright (C) 2024 Free Software Foundation, Inc.
# This file is distributed under the same license as the gettext package.
# Marco Colombo <m.colombo@ed.ac.uk>, 2005, 2006, 2015.
# Michele Locati <michele@locati.it>, 2024, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: GNU hello-c++-gnome2 0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-07-08 13:59+0200\n"
"Last-Translator: Michele Locati <michele@locati.it>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Ciao, mondo!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Questo programma è in esecuzione con numero di processo %d."
@@ -0,0 +1,26 @@
# Translation of `hello-c++-gnome2' messages to Japanese.
# Copyright (C) 2005, 2006, 2014, 2015, 2023, 2025 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Masahito Yamaga <ma@yama-ga.com>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: GNU hello-c++-gnome2 0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-07-05 08:24+0900\n"
"Last-Translator: Masahito Yamaga <ma@yama-ga.com>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "世界よ, こんにちは!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "このプログラムはプロセス番号 %d で動いています."
@@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.20.2\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2022-05-22 05:04+0200\n"
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
"Language-Team: Georgian <(nothing)>\n"
"Language: ka\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.0.1\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "გამარჯობა სამყაროვ!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "პროგრამა გაშვებულია პროცესის ნომრით %d."
@@ -0,0 +1,28 @@
# Translation of 'hello-c++-gnome2' messages to Kirghiz.
# Copyright (C) 2004 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Ilyas Bakirov <just_ilyas@yahoo.com>, 2007.
# Ilyas Bakirov <i.bakirov@gmail.com>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.19.4.73\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2018-02-15 18:26+0600\n"
"Last-Translator: Ilyas Bakirov <just_ilyas@yahoo.com>\n"
"Language-Team: Kirghiz <i18n-team-ky-kyrgyz@lists.sourceforge.net>\n"
"Language: ky\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 2.0.6\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Салам дүйнө!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Бул программа %d процесс номери катары иштеп жатат."
@@ -0,0 +1,30 @@
# Latvian translation of hello-c++-gnome2
# Copyright (C) 2009 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Arvis Lācis <arvis.lacis@inbox.lv>, 2009.
# Rihards Priedītis <rprieditis@gmail>, 2023, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2-0.24-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-03-09 11:44+0000\n"
"Last-Translator: Rihards Priedītis <rprieditis@gmail.com>\n"
"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
"Language: lv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
"2);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.5\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Sveika, pasaule!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Šī programma darbojas ar procesa numuru %d."
@@ -0,0 +1,28 @@
# hello-c++-gnome2 Bahasa Melayu (Malay) (ms).
# Copyright (C) 2006, 2015, 2023, 2025 Yoyodyne, Inc. (msgids)
# Copyright (C) 2006, 2015, 2023, 2025 Free Software Foundation, Inc.
# This file is distributed under the same license as the gettext package.
# Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>, 2006, 2015, 2023, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-07-10 14:34+0800\n"
"Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>\n"
"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
"Language: ms\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.6\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hello, dunia!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Program ini dilaksanakan sebagai proses bernombor %d."
@@ -0,0 +1,27 @@
# hello-c++-gnome2-0.16.2-pre5.
# Copyright (C) 2008 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Clyde Meli <cmeli@cis.um.edu.mt>, 2001-2008.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.16.2-pre5\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2008-11-18 17:27+0100\n"
"Last-Translator: Clyde Meli <cmeli@cis.um.edu.mt>\n"
"Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
"Language: mt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hello, lil kulħadd!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Dal-programm qed jaħdem taħt il-proċess numru %d."
@@ -0,0 +1,29 @@
# Norwegian Bokmal translations for hello-c++-gnome2 package.
# Copyright (C) 2012 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Johnny A. Solbu <johnny@solbu.net>, 2012-2024
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.22\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2024-01-06 16:33+0100\n"
"Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
"Language-Team: Norwegian Bokmaal <l10n-no@lister.huftis.org>\n"
"Language: nb_NO\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.4.2\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hallo verden!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Dette programmet kjører som prosess nummer %d."
@@ -0,0 +1,31 @@
# Dutch translations for GNU hello-c++-gnome2.
# Copyright (C) 2025 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# "There are three basic rules for writing a novel.
# Unfortunately nobody knows what they are."
#
# Benno Schulenberg <benno@vertaalt.nl>, 2007, 2014, 2015, 2019, 2025.
# Elros Cyriatan <cyriatan@fastmail.fm>, 2004.
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2-0.24-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-03-01 14:51+0100\n"
"Last-Translator: Benno Schulenberg <vertaling@coevern.nl>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hallo, wereld!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Dit programma draait als proces nummer %d."
@@ -0,0 +1,28 @@
# Norwegian Nynorsk translation of GNU hello-c++-gnome2
# Copyright (C) 2020 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Karl Ove Hufthammer <karl@huftis.org>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2-0.20.2\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2020-05-04 18:58+0200\n"
"Last-Translator: Karl Ove Hufthammer <karl@huftis.org>\n"
"Language-Team: Norwegian Nynorsk <l10n-no@lister.huftis.org>\n"
"Language: nn\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 20.04.0\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hei, verda!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Dette programmet køyrer som prosess nummer %d."
@@ -0,0 +1,27 @@
# Polish translations for the GNU gettext messages, hello-c++-gnome2 domain
# Copyright (C) 2010, 2014, 2015, 2025, 2026 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Rafał Maszkowski <rzm@icm.edu.pl>, 2003, 2010, 2014, 2015, 2025, 2026
msgid ""
msgstr ""
"Project-Id-Version: GNU hello-c++-gnome2 1.0-pre2\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2026-01-14 17:30+0100\n"
"Last-Translator: Rafał Maszkowski <rzm@icm.edu.pl>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Cześć, świecie!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Ten program działa jako proces o numerze %d."
@@ -0,0 +1,28 @@
# Portuguese (Portugal) translation of 'hello-c++-gnome2' package.
# Copyright (C) 2018 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Pedro Albuquerque <pmra@protonmail.com>, 2019, 2020, 2025, 2026.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 1.0-pre2\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2026-01-14 15:53+0000\n"
"Last-Translator: Pedro Albuquerque <pmra@protonmail.com>\n"
"Language-Team: Portuguese <translation-team-pt@googlegroups.com>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\\n;\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.4.2\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Olá mundo!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Este programa está em execução como processo nº %d."
@@ -0,0 +1,31 @@
# Brazilian Portuguese translations for gettext-example
# Traduções em português brasileiro para gettext-example
# Copyright (C) 2025 Yoyodyne, Inc. (msgids)
# Copyright (C) 2025 Free Software Foundation, Inc.
# This file is distributed under the same license as the gettext package.
# Rafael Fontenelle <rafaelff@gnome.org>, 2013-2025.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-07-07 23:17-0300\n"
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
"Language-Team: Brazilian Portuguese <ldpbr-"
"translation@lists.sourceforge.net>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Gtranslator 48.0\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Olá, mundo!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Este programa está sendo executado com número de processo %d."
@@ -0,0 +1,52 @@
# Translation of "hello-c++-gnome2" messages to Romanian.
# Mesajele în limba română pentru pachetul hello-c++-gnome2.
# Copyright © 2015, 2019, 2022, 2023, 2024, 2025, 2026 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Eugen Hoancă <eugenh@urban-grafx.ro>, 2003.
# Mihai Cristescu <mihai.cristescu@archlinux.info>, 2015 - 2019.
# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2022 - 2026.
#
# Cronologia traducerii fișierului „hello-c++-gnome2”:
# Traducerea inițială, făcută de EH, pentru versiunea hello-c++-gnome2 0.12.1, 2003.
# Actualizare a traducerii pentru versiunea hello-c++-gnome2 0.19.4-rc1, făcută de MC, mar-2015.
# Actualizare a traducerii pentru versiunea hello-c++-gnome2 0.19.4.73, făcută de MC, iun-2015.
# Actualizare a traducerii pentru versiunea hello-c++-gnome2 0.20-rc1, făcută de MC, apr-2019.
# Actualizare a mesajelor, de la fișierul „hello-c++-gnome2-0.20.2.pot”.
# Actualizare a algoritmului formelor de plural (de la „trei-vechi” la „trei-actual”).
# NU și a mesajelor traduse (acestea au rămas neschimbate).
# Eliminare a mesajelor ce-au dispărut în ultima versiune.
# Actualizări realizate de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 15.01.2022.
# Actualizare a traducerii pentru versiunea 0.20.2 făcută de R-GC, ian-2022.
# Actualizare a traducerii pentru versiunea 0.22 făcută de R-GC, iun-2023.
# Revizuire și corectare a traducerii pentru versiunea 0.23-pre1 făcută de R-GC, oct-2024.
# Actualizare a traducerii pentru versiunea 0.24-pre1 făcută de R-GC, feb-2025.
# Actualizare a traducerii pentru versiunea 0.25-pre1 făcută de R-GC, apr-2025.
# Actualizare a traducerii pentru versiunea 0.26-pre1 făcută de R-GC, iul-2025.
# Actualizare(revizuire) a traducerii pentru versiunea 1.0-pre2 făcută de R-GC, ian-2026.
# Actualizare a traducerii pentru versiunea Y, făcută de X, Z(luna-anul).
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 1.0-pre2\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2026-01-15 11:05+0100\n"
"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.6\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Salutare, lume!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Acest program rulează ca procesul numărul %d."
@@ -0,0 +1,30 @@
# Translation of hello-c++-gnome2-0.14.1.po to Russian
# Copyright (C) 2004 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Pavel Maryanov <acid_jack@ukr.net>, 2004.
# SPDX-FileCopyrightText: 2014, 2015, 2023, 2025 Yuri Kozlov <yuray@komyakino.ru>
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-10-21 04:30+0300\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@d07.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Lokalize 25.04.0\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Здравствуй, мир!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Эта программа выполняется как процесс под номером %d."
@@ -0,0 +1,26 @@
# Slovak translations GNU for hello-c++-gnome2 package.
# Copyright (C) 2003, 2004, 2014, 2023, 2025 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Marcel Telka <marcel@telka.sk>, 2003, 2004, 2014, 2023, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: GNU hello-c++-gnome2 0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-08-08 22:25+0200\n"
"Last-Translator: Marcel Telka <marcel@telka.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Ahoj svet!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Tento program beží ako proces s číslom %d."
@@ -0,0 +1,29 @@
# -*- mode: po; coding: utf-8; -*- Slovenian message catalog for GNU gettext-example
# Copyright (C) 2005 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Primož Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>, 2005, 2014, 2015, 2024.
# $Id: hello-c++-gnome2-0.22.sl.po,v 1.1 2024/03/28 17:02:19 peterlin Exp $
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.22\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2024-03-28 18:02+0100\n"
"Last-Translator: Primož Peterlin <primozz.peterlin@gmail.com>\n"
"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
"n%100==4 ? 3 : 0);\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Pozdravljen, svet!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Ta program teče kot proces številka %d."
@@ -0,0 +1,28 @@
# Albanian translation of gettext-example.
# Copyright (C) 2020 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Besnik Bleta <besnik@programeshqip.org>, 2020,2023,2024,2025.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2-0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-12-22 11:38+0200\n"
"Last-Translator: Besnik Bleta <besnik@programeshqip.org>\n"
"Language-Team: Albanian <translation-team-sq@lists.sourceforge.net>\n"
"Language: sq\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.2.2\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Tungjatjeta, botë!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Ky program po xhiron si procesi numër %d."
@@ -0,0 +1,30 @@
# Serbian translation of hello-c++-gnome2.
# Copyright (C) 2014 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Aleksandar Jelenak <jelenak@netlinkplus.net>, 2004.
# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2014-2025.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2-0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-08-31 08:18+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.5\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Здраво, свима!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Овај програм се извршава као процес број %d."
@@ -0,0 +1,29 @@
# Swedish messages for hello-c++-gnome2.
# Copyright © 2006, 2014, 2016, 2019, 2020, 2023, 2024, 2025, 2026 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Jan Djärv <jan.h.d@swipnet.se>, 2003, 2006, 2014.
# Göran Uddeborg <goeran@uddeborg.se>, 2016, 2019, 2020, 2023, 2024, 2025, 2026.
#
# $Revision: 1.18 $
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 1.0-pre2\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2026-01-19 12:31+0100\n"
"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Hej världen!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Detta program kör som process nummer %d."
@@ -0,0 +1,28 @@
# Tamil messages for GNU gettext.
# Copyright (C) 2018 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# List of contributors follow:
# Poorajith <gokulkannanst@gmail.com>, 2018.
# Arun Isaac <arunisaac@systemreboot.net>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.22\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2023-06-19 00:06+0100\n"
"Last-Translator: Arun Isaac <arunisaac@systemreboot.net>\n"
"Language-Team: Tamil <tamil@systemreboot.net>\n"
"Language: ta\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "வணக்கம், உலகு!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "இந்நிரல் செயலாக்க எண் %d ஆக இயங்கிக்கொண்டிருக்கிறது."
@@ -0,0 +1,29 @@
# Turkish translation for hello-c++-gnome2.
# This file is distributed under the same license as the gettext package.
# Copyright (C) 2017 Yoyodyne, Inc. (msgids)
# Copyright (C) 2004 Free Software Foundation, Inc.
# Nilgün Belma Bugüner <nilgun@superonline.com>, 2003,2004
# Mehmet Kececi <mkececi@mehmetkececi.com>, 2017, 2019, 2020.
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.20.2\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2020-04-17 13:10+0300\n"
"Last-Translator: Mehmet Kececi <mkececi@mehmetkececi.com>\n"
"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.3\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Merhaba, dünya!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Bu yazılım %d işlem numarası ile çalışıyor."
@@ -0,0 +1,30 @@
# Ukrainian translation to hello-c++-gnome2
# Copyright (C) 2014 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2004-2007.
# Yuri Chornoivan <yurchor@ukr.net>, 2014, 2015, 2023, 2025.
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-07-04 19:23+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 23.04.3\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Привіт, світе!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Ця програма виконується як процес з номером %d."
@@ -0,0 +1,30 @@
# Vietnamese Translation for Gettext Examples.
# Bản dịch tiếng Việt dành cho các ví dụ của gói gettext.
# Copyright © 2015 Yoyodyne, Inc. (msgids)
# Copyright © 2015 Free Software Foundation, Inc.
# This file is distributed under the same license as the gettext package.
# Clytie Siddall <clytie@riverland.net.au>, 2005-2010.
# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2015, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.22\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2023-06-24 09:10+0700\n"
"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
"Language: vi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "Chào thế giới!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "Chương trình này đang chạy với mã số tiến trình %d."
@@ -0,0 +1,29 @@
# zh_CN translation for hello-c++-gnome2.
# Copyright (C) 2015 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Funda Wang <fundawang@linux.net.cn>, 2003.
# Ji ZhengYu <zhengyuji@gmail.com>, 2015.
# Boyuan Yang <073plan@gmail.com>, 2019, 2023, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.26-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2025-07-05 16:22-0400\n"
"Last-Translator: Boyuan Yang <073plan@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 2.4.3\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "你好,世界!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "此程序正以进程号 %d 运行。"
@@ -0,0 +1,25 @@
# Chinese (Hong Kong) translation of hello-c++-gnome2.
# Copyright (C) 2006 Yoyodyne, Inc.
# Abel Cheung <abelcheung@gmail.com>, 2006.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.15-pre5\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2006-07-05 15:40+0800\n"
"Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
"Language: zh_HK\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "你好!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "本程式正在執行中,進程編號為 %d。"
@@ -0,0 +1,29 @@
# Traditional Chinese translation of hello-c++-gnome2.
# Copyright (C) 2009 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
# Abel Cheung <abelcheung@gmail.com>, 2005.
# Wei-Lun Chao <bluebat@member.fsf.org>, 2013, 2015.
# Yi-Jyun Pan <pan93412@gmail.com>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome2 0.23-pre1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2024-11-30 14:14+0800\n"
"Last-Translator: Yi-Jyun Pan <pan93412@gmail.com>\n"
"Language-Team: Chinese (traditional) <zh-l10n@lists.slat.org>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.5\n"
#: hello.cc:55
msgid "Hello, world!"
msgstr "哈囉,大家好!"
#: hello.cc:60
#, c-format
msgid "This program is running as process number %d."
msgstr "本程式正在執行,行程編號為 %d。"
@@ -0,0 +1,13 @@
This example relies on:
- the GTK libraries (libgtk, libgdk), version 3.10 or later
- the glib libraries (libglib)
- the GTK / C++ bindings (libgtkmm)
Installation:
./autogen.sh
./configure --prefix=/some/prefix
make
make install
Cleanup:
make distclean
./autoclean.sh
@@ -0,0 +1,58 @@
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Makefile configuration - processed by automake.
# General automake options.
AUTOMAKE_OPTIONS = foreign no-dependencies
ACLOCAL_AMFLAGS = -I m4
# The list of subdirectories containing Makefiles.
SUBDIRS = m4 po
# The list of programs that are built.
bin_PROGRAMS = hello
# The source files of the 'hello' program.
hello_SOURCES = hello.cc hello-resources.c
# Define a C macro LOCALEDIR indicating where catalogs will be installed.
DEFS = \
-DLOCALEDIR=$(localedir_c_make) \
@DEFS@
# Make sure the gnome.h include file is found.
AM_CPPFLAGS = $(GTKMM_CFLAGS)
# Link time dependencies.
LDADD = $(GTKMM_LIBS) @LIBINTL@
# Compile assets into a C source and link it with the application.
hello-resources.c: hello.gresource.xml hello.ui
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $< --target=$@ \
--sourcedir=$(srcdir) --generate-source
desktopdir = $(datadir)/applications
desktop_DATA = hello.desktop
# Merge translations back into a Desktop Entry file.
# Note that the resulting file should be included in EXTRA_DIST and
# processed earlier than the variable substitution below. Otherwise,
# the 'msgfmt' command will be required at compile-time.
hello.desktop.in: hello.desktop.in.in
$(AM_V_GEN) $(MSGFMT) --desktop --template $< -d $(top_srcdir)/po -o $@
# Substitute variables in a Desktop Entry file.
hello.desktop: hello.desktop.in
$(AM_V_GEN) sed -e 's|@bindir[@]|$(bindir)|g' $< > $@
BUILT_SOURCES = hello-resources.c hello.desktop
CLEANFILES = hello.desktop
DISTCLEANFILES =
MAINTAINERCLEANFILES = hello-resources.c hello.desktop.in
# Additional files to be distributed.
EXTRA_DIST = autogen.sh autoclean.sh \
hello.desktop.in.in hello.desktop.in \
hello.gresource.xml hello.ui
@@ -0,0 +1,8 @@
This example contains a simple "hello world" program.
A more elaborate program that demonstrates advanced Gtk 3 features is
not available here, because
- derived GObject classes have a number of pain points with gtkmm
(see <https://thinkingeek.com/2023/02/04/writing-gobjects-in-cpp/>),
- widget templates are not supported in gtkmm (see
<https://github.com/rofirrim/libadwaitamm/blob/main/demo/templatewidget.h>).
@@ -0,0 +1,49 @@
#!/bin/sh
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Script for cleaning all autogenerated files.
test ! -f Makefile || make distclean
# Do the equivalent of "make maintainer-clean", even without the Makefile.
rm -f hello-resources.c hello.desktop.in
rm -rf autom4te.cache
# Files generated by "make" and distributed (see MAINTAINERCLEANFILES).
rm -f hello-resources.c hello.desktop.in
# Brought in by autopoint.
rm -f ABOUT-NLS
rm -f config.rpath
rm -f m4/gettext.m4
rm -f m4/build-to-host.m4
rm -f m4/host-cpu-c-abi.m4
rm -f m4/iconv.m4
rm -f m4/intlmacosx.m4
rm -f m4/lib-ld.m4
rm -f m4/lib-link.m4
rm -f m4/lib-prefix.m4
rm -f m4/nls.m4
rm -f m4/po.m4
rm -f m4/progtest.m4
rm -f po/Makefile.in.in
rm -f po/fetch-po
rm -f po/remove-potcdate.sed
# Generated by aclocal.
rm -f aclocal.m4
# Generated by autoconf.
rm -f configure
# Generated or brought in by automake.
rm -f Makefile.in
rm -f m4/Makefile.in
rm -f compile
rm -f install-sh
rm -f missing
rm -f config.guess
rm -f config.sub
rm -f po/*.pot
rm -f po/stamp-po
rm -f po/*.gmo
@@ -0,0 +1,29 @@
#!/bin/sh
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Script for regenerating all autogenerated files.
autopoint -f # was: gettextize -f -c
rm po/Makevars.template
rm po/Rules-quot
rm po/boldquot.sed
rm po/en@boldquot.header
rm po/en@quot.header
rm po/insert-header.sed
rm po/quot.sed
aclocal -I m4
autoconf
automake -a -c
cd po
for f in *.po; do
if test -r "$f"; then
lang=`echo $f | sed -e 's,\.po$,,'`
msgfmt -c -o $lang.gmo $lang.po
fi
done
cd ..
@@ -0,0 +1,54 @@
dnl Example for use of GNU gettext.
dnl This file is in the public domain.
dnl
dnl Configuration file - processed by autoconf.
AC_INIT([hello-c++-gnome3], [0], , [hello-c++-gnome3])
AC_CONFIG_SRCDIR([hello.cc])
AM_INIT_AUTOMAKE([1.11])
AC_PROG_CC
AC_PROG_CXX
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([1.0])
dnl Define localedir_c and localedir_c_make.
gl_BUILD_TO_HOST_LOCALEDIR
dnl Check GNOME specific stuff.
dnl
dnl If you have full GNOME development environment installed on your
dnl system, you should be able to use the following macros:
dnl
dnl AM_PATH_GLIB_2_0
dnl PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.10], ,
dnl [AC_MSG_ERROR([can't find gtk+-3.0])])
dnl
dnl Here, in gettext-tools/examples, we do the checks manually for
dnl simplicity.
AC_PATH_PROG([GLIB_COMPILE_RESOURCES], [glib-compile-resources])
AS_IF([test -z "$GLIB_COMPILE_RESOURCES"], [
AC_MSG_ERROR([can't find glib-compile-resources])
])
AC_PATH_PROG([PKG_CONFIG], [pkg-config])
AS_IF([test -z "$PKG_CONFIG"], [
AC_MSG_ERROR([can't find pkg-config])
])
GTKMM="gtkmm-3.0 >= 3.0"
AS_IF(["$PKG_CONFIG" --exists "$GTKMM"], , [
AC_MSG_ERROR([can't find $GTKMM])
])
GTKMM_CFLAGS=`"$PKG_CONFIG" --cflags "$GTKMM"`
AC_SUBST([GTKMM_CFLAGS])
GTKMM_LIBS=`"$PKG_CONFIG" --libs "$GTKMM"`
AC_SUBST([GTKMM_LIBS])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([m4/Makefile])
AC_CONFIG_FILES([po/Makefile.in])
AC_OUTPUT
@@ -0,0 +1,105 @@
/* Example for use of GNU gettext.
This file is in the public domain.
Source code of the C++ program. */
/* Get GTKmm declarations. */
#include <gtkmm.h>
#include <glib/gi18n.h>
/* Get getpid() declaration. */
#if defined _WIN32 && !defined __CYGWIN__
/* native Windows API */
# include <process.h>
# define getpid _getpid
#else
/* POSIX API */
# include <unistd.h>
#endif
#define UI_PATH "/org/gnu/gettext/examples/hello/hello.ui"
#define APPLICATION_ID "org.gnu.gettext.examples.hello"
/* An ad-hoc struct for managing the main window.
(Not connected to the GObject type system.) */
struct HelloWindow
{
Gtk::Window *window;
Gtk::Label *label;
Gtk::Button *button;
gsize label_id;
gchar *labels[3];
};
static void
update_content (HelloWindow *hello_window)
{
hello_window->label->set_label (hello_window->labels[hello_window->label_id]);
hello_window->label_id =
(hello_window->label_id + 1) % G_N_ELEMENTS (hello_window->labels);
}
static void
clicked_callback (HelloWindow *hello_window)
{
update_content (hello_window);
}
static void
activate (Glib::RefPtr<Gtk::Application> application)
{
/* Instantiate the UI. */
Glib::RefPtr<Gtk::Builder> builder =
Gtk::Builder::create_from_resource (UI_PATH);
HelloWindow *hello_window = new HelloWindow ();
hello_window->window = nullptr;
builder->get_widget<Gtk::Window> ("main_window", hello_window->window);
hello_window->label = nullptr;
builder->get_widget<Gtk::Label> ("label", hello_window->label);
hello_window->button = nullptr;
builder->get_widget<Gtk::Button> ("button", hello_window->button);
/* Allow Pango markup in the label. */
hello_window->label->set_use_markup (true);
/* Prepare various presentations of the label. */
hello_window->label_id = 0;
gchar *line1 = g_strdup_printf ("<big>%s</big>", _("Hello world!"));
gchar *line2 =
g_strdup_printf (_("This program is running as process number %s."),
g_strdup_printf ("<b>%d</b>", getpid ()));
hello_window->labels[0] = g_strdup_printf ("%s\n%s", line1, line2);
hello_window->labels[1] =
g_strdup_printf ("<big><u>%s</u></big>", _("This is another text"));
hello_window->labels[2] =
g_strdup_printf ("<big><i>%s</i></big>", _("This is yet another text"));
update_content (hello_window);
/* Make sure that the application runs for as long as this window is
still open. */
application->add_window (*(hello_window->window));
hello_window->button->signal_clicked ()
.connect (sigc::bind (sigc::ptr_fun (clicked_callback), hello_window));
hello_window->window->present ();
}
int
main (int argc, char *argv[])
{
/* Initializations. */
textdomain ("hello-c++-gnome3");
bindtextdomain ("hello-c++-gnome3", LOCALEDIR);
/* Create application. */
Glib::RefPtr<Gtk::Application> application =
Gtk::Application::create (APPLICATION_ID, Gio::APPLICATION_FLAGS_NONE);
application->signal_activate ()
.connect (sigc::bind (sigc::ptr_fun (activate), application));
/* Start the application. */
return application->run (argc, argv);
}
@@ -0,0 +1,6 @@
[Desktop Entry]
Type=Application
Name=Hello
Comment=Hello, world!
StartupNotify=true
Exec=@bindir@/hello
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This file is in the public domain. -->
<gresources>
<gresource prefix="/org/gnu/gettext/examples/hello">
<file preprocess="xml-stripblanks">hello.ui</file>
</gresource>
</gresources>
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This file is in the public domain. -->
<interface>
<!-- interface-requires gtk+ 3.10 -->
<object class="GtkApplicationWindow" id="main_window">
<property name="title" translatable="yes">Example Application</property>
<property name="default-width">600</property>
<property name="default-height">400</property>
<child>
<object class="GtkBox" id="panel">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkAlignment" id="alignment">
<property name="visible">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xscale">0</property>
<property name="yscale">0</property>
<property name="vexpand">True</property>
<child>
<object class="GtkLabel" id="label">
<property name="visible">True</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkHButtonBox" id="buttonbar">
<property name="visible">True</property>
<child>
<object class="GtkButton" id="button">
<property name="visible">True</property>
<property name="label" translatable="yes">Update text</property>
<property name="use_stock">False</property>
</object>
<packing>
<property name="pack-type">end</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,4 @@
EXTRA_DIST = \
gettext.m4 build-to-host.m4 host-cpu-c-abi.m4 \
iconv.m4 intlmacosx.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 \
nls.m4 po.m4 progtest.m4
@@ -0,0 +1,5 @@
# Example for use of GNU gettext.
# This file is in the public domain.
#
# Set of available languages.
af ast bg ca cs da de el eo es fi fr ga gl hr hu id it ja ka ky lv ms mt nb nl nn pl pt pt_BR ro ru sk sl sq sr sv ta tr uk vi zh_CN zh_HK zh_TW
@@ -0,0 +1,89 @@
# Makefile variables for PO directory in any package using GNU gettext.
#
# Copyright (C) 2003-2025 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation gives
# unlimited permission to use, copy, distribute, and modify it.
# Usually the message domain is the same as the package name.
DOMAIN = $(PACKAGE)
# These two variables depend on the location of this directory.
subdir = po
top_builddir = ..
# These options get passed to xgettext.
XGETTEXT_OPTIONS = \
--keyword=_ --flag=_:1:pass-c-format \
--keyword=N_ --flag=N_:1:pass-c-format \
--flag=g_log:3:c-format --flag=g_logv:3:c-format \
--flag=g_error:1:c-format --flag=g_message:1:c-format \
--flag=g_critical:1:c-format --flag=g_warning:1:c-format \
--flag=g_print:1:c-format \
--flag=g_printerr:1:c-format \
--flag=g_strdup_printf:1:c-format --flag=g_strdup_vprintf:1:c-format \
--flag=g_printf_string_upper_bound:1:c-format \
--flag=g_snprintf:3:c-format --flag=g_vsnprintf:3:c-format \
--flag=g_string_sprintf:2:c-format \
--flag=g_string_sprintfa:2:c-format \
--flag=g_scanner_error:2:c-format \
--flag=g_scanner_warn:2:c-format
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
# package. (Note that the msgid strings, extracted from the package's
# sources, belong to the copyright holder of the package.) Translators are
# expected to transfer the copyright for their translations to this person
# or entity, or to disclaim their copyright. The empty string stands for
# the public domain; in this case the translators are expected to disclaim
# their copyright.
COPYRIGHT_HOLDER = Yoyodyne, Inc.
# This tells whether or not to prepend "GNU " prefix to the package
# name that gets inserted into the header of the $(DOMAIN).pot file.
# Possible values are "yes", "no", or empty. If it is empty, try to
# detect it automatically by scanning the files in $(top_srcdir) for
# "GNU packagename" string.
PACKAGE_GNU = no
# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings:
# - Strings which are not entire sentences, see the maintainer guidelines
# in the GNU gettext documentation, section 'Preparing Strings'.
# - Strings which use unclear terms or require additional context to be
# understood.
# - Strings which make invalid assumptions about notation of date, time or
# money.
# - Pluralisation problems.
# - Incorrect English spelling.
# - Incorrect formatting.
# It can be your email address, or a mailing list address where translators
# can write to without being subscribed, or the URL of a web page through
# which the translators can contact you.
MSGID_BUGS_ADDRESS = bug-gettext@gnu.org
# This is the list of locale categories, beyond LC_MESSAGES, for which the
# message catalogs shall be used. It is usually empty.
EXTRA_LOCALE_CATEGORIES =
# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
# context. Possible values are "yes" and "no". Set this to yes if the
# package uses functions taking also a message context, like pgettext(), or
# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
USE_MSGCTXT = no
# These options get passed to msgmerge.
# Useful options are in particular:
# --previous to keep previous msgids of translated messages
MSGMERGE_OPTIONS =
# These options get passed to msginit.
# If you want to disable line wrapping when writing PO files, add
# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
# MSGINIT_OPTIONS.
MSGINIT_OPTIONS =
# This tells whether or not to forcibly update $(DOMAIN).pot and
# regenerate PO files on "make dist". Possible values are "yes" and
# "no". Set this to no if the POT file and PO files are maintained
# externally.
DIST_DEPENDS_ON_UPDATE_PO = yes
@@ -0,0 +1,7 @@
# Example for use of GNU gettext.
# This file is in the public domain.
#
# List of files which contain translatable strings.
hello.cc
hello.desktop.in.in
hello.ui
@@ -0,0 +1,50 @@
# Afrikaans translation for Silky
# Copyright (C) 2004 Free Software Foundation, Inc.
# This file is distributed under the same license as the silky package.
# Hanlie Pretorius <hpretorius@pnp.co.za>, 2004.
#
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome3-0.13.1\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2003-12-31 10:30+2\n"
"Last-Translator: Ysbeer <ysbeer@af.org.za>\n"
"Language-Team: Afrikaans <i18n@af.org.za>\n"
"Language: af\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: hello.cc:69
msgid "Hello world!"
msgstr ""
#: hello.cc:71
#, c-format
msgid "This program is running as process number %s."
msgstr ""
#: hello.cc:75
msgid "This is another text"
msgstr ""
#: hello.cc:77
msgid "This is yet another text"
msgstr ""
#: hello.desktop.in.in:3
msgid "Hello"
msgstr ""
#: hello.desktop.in.in:4
msgid "Hello, world!"
msgstr "Hallo wêreld!"
#: hello.ui:6
msgid "Example Application"
msgstr ""
#: hello.ui:34
msgid "Update text"
msgstr ""
@@ -0,0 +1,53 @@
# Asturian translation for hello-c++-gnome3
# Copyright (C) 2018 Yoyodyne, Inc. (msgids)
# This file is distributed under the same license as the gettext package.
#
# Marquinos <maacub@gmail.com>, 2009.
# enolp <enolp@softastur.org>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: hello-c++-gnome3 0.19.4.73\n"
"Report-Msgid-Bugs-To: bug-gettext@gnu.org\n"
"PO-Revision-Date: 2018-07-16 00:28+0100\n"
"Last-Translator: enolp <enolp@softastur.org>\n"
"Language-Team: Asturian <ubuntu-l10n-ast@lists.ubuntu.com>\n"
"Language: ast\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 2.0\n"
#: hello.cc:69
msgid "Hello world!"
msgstr ""
#: hello.cc:71
#, c-format
msgid "This program is running as process number %s."
msgstr ""
#: hello.cc:75
msgid "This is another text"
msgstr ""
#: hello.cc:77
msgid "This is yet another text"
msgstr ""
#: hello.desktop.in.in:3
msgid "Hello"
msgstr "Hola"
#: hello.desktop.in.in:4
msgid "Hello, world!"
msgstr "¡Hola, mundu!"
#: hello.ui:6
msgid "Example Application"
msgstr "Aplicación d'exemplu"
#: hello.ui:34
msgid "Update text"
msgstr "Anovar testu"

Some files were not shown because too many files have changed in this diff Show More