54 lines
2.4 KiB
Bash
54 lines
2.4 KiB
Bash
#!/bin/sh
|
|
|
|
# This is a wrapper to the tools/pika-mkenums perl script which:
|
|
# * sets a few common values;
|
|
# * updates the ${filebase}enums.c directly in the source directory in
|
|
# order for it to be versionned.
|
|
# * Create a no-op stamp-header file to be included by the resulting
|
|
# enums.c. The goal is to make sure that meson will trigger a rebuild
|
|
# of the enums.c generation before compiling, if the enums.h changed.
|
|
# See the explanation here:
|
|
# https://github.com/mesonbuild/meson/issues/10196#issuecomment-1080742592
|
|
# This is also the trick used for pdbgen.
|
|
|
|
# Arguments to this script:
|
|
# The perl binary to use.
|
|
PERL="$1"
|
|
# Root of the source directory.
|
|
top_srcdir="$2"
|
|
# Current source folder.
|
|
srcdir="$3"
|
|
# Current build folder.
|
|
builddir="$4"
|
|
# Base of the generated enums.c file name.
|
|
filebase="$5"
|
|
# Includes before #include "${filebase}enums.h"
|
|
preincludes="$6"
|
|
# Includes after #include "${filebase}enums.h"
|
|
postincludes="$7"
|
|
# Value for --dtail option if the default doesn't fit.
|
|
dtail="$8"
|
|
|
|
if [ -z "$dtail" ]; then
|
|
dtail=" { 0, NULL, NULL }\n };\n\n static GType type = 0;\n\n if (G_UNLIKELY (! type))\n {\n type = g_@type@_register_static (\"@EnumName@\", values);\n pika_type_set_translation_context (type, \"@enumnick@\");\n pika_@type@_set_value_descriptions (type, descs);\n }\n\n return type;\n}\n"
|
|
fi
|
|
|
|
$PERL $top_srcdir/tools/pika-mkenums \
|
|
--fhead "#include \"stamp-${filebase}enums.h\"\n#include \"config.h\"\n$preincludes#include \"${filebase}enums.h\"\n$postincludes" \
|
|
--fprod "\n/* enumerations from \"@basename@\" */" \
|
|
--vhead "GType\n@enum_name@_get_type (void)\n{\n static const G@Type@Value values[] =\n {" \
|
|
--vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
|
|
--vtail " { 0, NULL, NULL }\n };\n" \
|
|
--dhead " static const Pika@Type@Desc descs[] =\n {" \
|
|
--dprod " { @VALUENAME@, @valuedesc@, @valuehelp@ },@if ('@valueabbrev@' ne 'NULL')@\n /* Translators: this is an abbreviated version of @valueudesc@.\n Keep it short. */\n { @VALUENAME@, @valueabbrev@, NULL },@endif@" \
|
|
--dtail "$dtail" \
|
|
"$srcdir/${filebase}enums.h" > "$builddir/${filebase}enums-tmp.c"
|
|
|
|
if ! cmp -s "$builddir/${filebase}enums-tmp.c" "$srcdir/${filebase}enums.c"; then
|
|
cp "$builddir/${filebase}enums-tmp.c" "$srcdir/${filebase}enums.c";
|
|
else
|
|
touch "$srcdir/${filebase}enums.c"; 2> /dev/null || true;
|
|
fi
|
|
|
|
echo "/* Generated on `date`. */" > $builddir/stamp-${filebase}enums.h
|