summaryrefslogtreecommitdiff
path: root/test cases/frameworks
diff options
context:
space:
mode:
authorCharles Brunet <charles.brunet@optelgroup.com>2024-11-07 10:58:14 -0500
committerJussi Pakkanen <jpakkane@gmail.com>2025-04-09 18:41:00 +0300
commit1afdac1bc4cbf9816e7109bbedef2825c4fe1155 (patch)
tree1a378a4ccd00e0e49c831f32e324fa8e0db7f6ab /test cases/frameworks
parent0c9420205cc132743e5b3788b3a6a87502e79415 (diff)
downloadmeson-1afdac1bc4cbf9816e7109bbedef2825c4fe1155.tar.gz
New xgettext method for i18n module
This method call xgettext to extract translatable string from source files into a .pot translation template. It differs from a plain CustomTarget in three ways: - It accepts build targets as sources, and automatically resolves source files from those build targets; - It detects command lines that are too long, and writes, at config time, the list of source files into a text file to be consumed by the xgettext command; - It detects dependencies between pot extraction targets, based on the dependencies between source targets.
Diffstat (limited to 'test cases/frameworks')
-rw-r--r--test cases/frameworks/38 gettext extractor/meson.build15
-rw-r--r--test cases/frameworks/38 gettext extractor/src/lib1/lib1.c10
-rw-r--r--test cases/frameworks/38 gettext extractor/src/lib1/lib1.h6
-rw-r--r--test cases/frameworks/38 gettext extractor/src/lib1/meson.build3
-rw-r--r--test cases/frameworks/38 gettext extractor/src/lib2/lib2.c13
-rw-r--r--test cases/frameworks/38 gettext extractor/src/lib2/lib2.h6
-rw-r--r--test cases/frameworks/38 gettext extractor/src/lib2/meson.build3
-rw-r--r--test cases/frameworks/38 gettext extractor/src/main.c8
-rw-r--r--test cases/frameworks/38 gettext extractor/src/meson.build6
-rw-r--r--test cases/frameworks/38 gettext extractor/test.json6
10 files changed, 76 insertions, 0 deletions
diff --git a/test cases/frameworks/38 gettext extractor/meson.build b/test cases/frameworks/38 gettext extractor/meson.build
new file mode 100644
index 000000000..962905a4e
--- /dev/null
+++ b/test cases/frameworks/38 gettext extractor/meson.build
@@ -0,0 +1,15 @@
+project(
+ 'gettext extractor',
+ 'c',
+ default_options: {'default_library': 'static'},
+ meson_version: '1.8.0',
+)
+
+if not find_program('xgettext', required: false).found()
+ error('MESON_SKIP_TEST xgettext command not found')
+endif
+
+i18n = import('i18n')
+xgettext_args = ['-ktr', '--add-comments=TRANSLATOR:', '--from-code=UTF-8']
+
+subdir('src')
diff --git a/test cases/frameworks/38 gettext extractor/src/lib1/lib1.c b/test cases/frameworks/38 gettext extractor/src/lib1/lib1.c
new file mode 100644
index 000000000..723edda00
--- /dev/null
+++ b/test cases/frameworks/38 gettext extractor/src/lib1/lib1.c
@@ -0,0 +1,10 @@
+#include "lib1.h"
+
+#include <stdio.h>
+
+#define tr(STRING) (STRING)
+
+void say_something(void)
+{
+ printf("%s\n", tr("Something!"));
+}
diff --git a/test cases/frameworks/38 gettext extractor/src/lib1/lib1.h b/test cases/frameworks/38 gettext extractor/src/lib1/lib1.h
new file mode 100644
index 000000000..6199d29c4
--- /dev/null
+++ b/test cases/frameworks/38 gettext extractor/src/lib1/lib1.h
@@ -0,0 +1,6 @@
+#ifndef LIB1_H
+#define LIB1_H
+
+void say_something(void);
+
+#endif
diff --git a/test cases/frameworks/38 gettext extractor/src/lib1/meson.build b/test cases/frameworks/38 gettext extractor/src/lib1/meson.build
new file mode 100644
index 000000000..3ec7fa987
--- /dev/null
+++ b/test cases/frameworks/38 gettext extractor/src/lib1/meson.build
@@ -0,0 +1,3 @@
+lib1 = library('mylib1', 'lib1.c')
+lib1_pot = i18n.xgettext('lib1', lib1, args: xgettext_args)
+lib1_includes = include_directories('.') \ No newline at end of file
diff --git a/test cases/frameworks/38 gettext extractor/src/lib2/lib2.c b/test cases/frameworks/38 gettext extractor/src/lib2/lib2.c
new file mode 100644
index 000000000..051271ec7
--- /dev/null
+++ b/test cases/frameworks/38 gettext extractor/src/lib2/lib2.c
@@ -0,0 +1,13 @@
+#include "lib2.h"
+
+#include <lib1.h>
+
+#include <stdio.h>
+
+#define tr(STRING) (STRING)
+
+void say_something_else(void)
+{
+ say_something();
+ printf("%s\n", tr("Something else!"));
+}
diff --git a/test cases/frameworks/38 gettext extractor/src/lib2/lib2.h b/test cases/frameworks/38 gettext extractor/src/lib2/lib2.h
new file mode 100644
index 000000000..faf693f7c
--- /dev/null
+++ b/test cases/frameworks/38 gettext extractor/src/lib2/lib2.h
@@ -0,0 +1,6 @@
+#ifndef LIB2_H
+#define LIB2_H
+
+void say_something_else(void);
+
+#endif
diff --git a/test cases/frameworks/38 gettext extractor/src/lib2/meson.build b/test cases/frameworks/38 gettext extractor/src/lib2/meson.build
new file mode 100644
index 000000000..ac5e7fe4b
--- /dev/null
+++ b/test cases/frameworks/38 gettext extractor/src/lib2/meson.build
@@ -0,0 +1,3 @@
+lib2 = library('mylib2', 'lib2.c', include_directories: lib1_includes, link_with: lib1)
+lib2_pot = i18n.xgettext('lib2', lib2, args: xgettext_args)
+lib2_includes = include_directories('.')
diff --git a/test cases/frameworks/38 gettext extractor/src/main.c b/test cases/frameworks/38 gettext extractor/src/main.c
new file mode 100644
index 000000000..807096bd7
--- /dev/null
+++ b/test cases/frameworks/38 gettext extractor/src/main.c
@@ -0,0 +1,8 @@
+#include <lib2.h>
+
+int main(void)
+{
+ say_something_else();
+
+ return 0;
+}
diff --git a/test cases/frameworks/38 gettext extractor/src/meson.build b/test cases/frameworks/38 gettext extractor/src/meson.build
new file mode 100644
index 000000000..27fc81326
--- /dev/null
+++ b/test cases/frameworks/38 gettext extractor/src/meson.build
@@ -0,0 +1,6 @@
+subdir('lib1')
+subdir('lib2')
+
+main = executable('say', 'main.c', link_with: [lib2], include_directories: lib2_includes)
+
+main_pot = i18n.xgettext('main', main, args: xgettext_args, install: true, install_dir: 'intl', install_tag: 'intl', recursive: true)
diff --git a/test cases/frameworks/38 gettext extractor/test.json b/test cases/frameworks/38 gettext extractor/test.json
new file mode 100644
index 000000000..c5952ffd5
--- /dev/null
+++ b/test cases/frameworks/38 gettext extractor/test.json
@@ -0,0 +1,6 @@
+{
+ "installed": [
+ { "type": "file", "file": "usr/intl/main.pot" }
+ ],
+ "expect_skip_on_jobname": ["azure", "cygwin"]
+}