우분투 20.04 설치된 gawk 5.0.1 버전이 설치되며, 이 버전의 gawk는 '#' 앞에 '\'을 있을 경우 문법 에러로 인식하여 아래와 같은 에러가 발생한다.
| gawk -f ../../libgpg-error-1.24/src/mkstrtable.awk -v textidx=3 \
| ../../libgpg-error-1.24/src/err-sources.h.in >../../libgpg-error-1.24/src/err-sources.h
| gawk -f ../../libgpg-error-1.24/src/mkstrtable.awk -v textidx=3 \
| ../../libgpg-error-1.24/src/err-codes.h.in >../../libgpg-error-1.24/src/err-codes.h
| gawk -f ../../libgpg-error-1.24/src/mkerrnos.awk ../../libgpg-error-1.24/src/errnos.in >code-to-errno.h
| gawk -f ../../libgpg-error-1.24/src/mkerrcodes1.awk ../../libgpg-error-1.24/src/errnos.in >_mkerrcodes.h
| gawk -f ../../libgpg-error-1.24/src/mkstrtable.awk -v textidx=2 -v nogettext=1 \
| ../../libgpg-error-1.24/src/err-sources.h.in >err-sources-sym.h
| gawk -f ../../libgpg-error-1.24/src/mkstrtable.awk -v textidx=2 -v nogettext=1 \
| ../../libgpg-error-1.24/src/err-codes.h.in >err-codes-sym.h
| gawk -f ../../libgpg-error-1.24/src/mkstrtable.awk -v textidx=2 -v nogettext=1 \
| -v prefix=GPG_ERR_ -v namespace=errnos_ \
| ../../libgpg-error-1.24/src/errnos.in >errnos-sym.h
따라서, 아래와 같이 정규표현식을 변경하면 이 에러를 쉽게 해결할 수 있다.
diff -Nura libgpg-error-1.24_old/src/Makefile.am libgpg-error-1.24_new/src/Makefile.am
--- libgpg-error-1.24_old/src/Makefile.am 2020-11-02 16:23:56.328631000 +0900
+++ libgpg-error-1.24_new/src/Makefile.am 2020-11-05 16:10:22.284888349 +0900
@@ -265,7 +265,7 @@
errnos-sym.h: Makefile mkstrtable.awk errnos.in
$(AWK) -f $(srcdir)/mkstrtable.awk -v textidx=2 -v nogettext=1 \
- -v prefix=GPG_ERR_ -v namespace=errnos_ \
+ -v prefix=GPG_ERR_ -v pkg_namespace=errnos_ \
$(srcdir)/errnos.in >$@
diff -Nura libgpg-error-1.24_old/src/mkerrcodes.awk libgpg-error-1.24_new/src/mkerrcodes.awk
--- libgpg-error-1.24_old/src/mkerrcodes.awk 2013-03-16 04:24:25.000000000 +0900
+++ libgpg-error-1.24_new/src/mkerrcodes.awk 2020-11-05 15:49:01.671148368 +0900
@@ -85,7 +85,7 @@
}
!header {
- sub (/\#.+/, "");
+ sub (/#.+/, "");
sub (/[ ]+$/, ""); # Strip trailing space and tab characters.
if (/^$/)
diff -Nura libgpg-error-1.24_old/src/mkerrcodes1.awk libgpg-error-1.24_new/src/mkerrcodes1.awk
--- libgpg-error-1.24_old/src/mkerrcodes1.awk 2013-03-16 04:24:25.000000000 +0900
+++ libgpg-error-1.24_new/src/mkerrcodes1.awk 2020-11-05 15:49:17.651322564 +0900
@@ -81,7 +81,7 @@
}
!header {
- sub (/\#.+/, "");
+ sub (/#.+/, "");
sub (/[ ]+$/, ""); # Strip trailing space and tab characters.
if (/^$/)
diff -Nura libgpg-error-1.24_old/src/mkerrcodes2.awk libgpg-error-1.24_new/src/mkerrcodes2.awk
--- libgpg-error-1.24_old/src/mkerrcodes2.awk 2013-03-16 04:24:25.000000000 +0900
+++ libgpg-error-1.24_new/src/mkerrcodes2.awk 2020-11-05 15:49:30.807464810 +0900
@@ -91,7 +91,7 @@
}
!header {
- sub (/\#.+/, "");
+ sub (/#.+/, "");
sub (/[ ]+$/, ""); # Strip trailing space and tab characters.
if (/^$/)
diff -Nura libgpg-error-1.24_old/src/mkerrnos.awk libgpg-error-1.24_new/src/mkerrnos.awk
--- libgpg-error-1.24_old/src/mkerrnos.awk 2013-03-16 04:24:25.000000000 +0900
+++ libgpg-error-1.24_new/src/mkerrnos.awk 2020-11-05 15:49:40.459568515 +0900
@@ -83,7 +83,7 @@
}
!header {
- sub (/\#.+/, "");
+ sub (/#.+/, "");
sub (/[ ]+$/, ""); # Strip trailing space and tab characters.
if (/^$/)
이 에러 이외에 우분투 20.04에서는 namespace가 충돌하여 아래와 같은 빌드 에러가 발생하는데, 이것 역시 패치를 적용하여 쉽게 해결 할 수 있다.
| In file included from ../../libgpg-error-1.24/src/strerror-sym.c:30:0:
| ./errnos-sym.h:28:19: error: redefinition of 'msgstr'
| static const char msgstr[] =
| ^~~~~~
| In file included from ../../libgpg-error-1.24/src/strerror-sym.c:29:0:
| ./err-codes-sym.h:27:19: note: previous definition of 'msgstr' was here
| static const char msgstr[] =
| ^~~~~~
| arm-rdk-linux-gnueabi-gcc -march=armv7ve -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 -fno-omit-frame-pointer -fno-optimize-sibling-calls --sysroot=/media/gon/proj/RDK/temp/build-raspberrypi-rdk-hybrid/tmp/sysroots/raspberrypi-rdk-hybrid -DHAVE_CONFIG_H -I. -I../../libgpg-error-1.24/src -I.. -DLOCALEDIR=\"/usr/share/locale\" -P -Os -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/media/gon/proj/RDK/temp/build-raspberrypi-rdk-hybrid/tmp/work/cortexa7t2hf-neon-vfpv4-rdk-linux-gnueabi/libgpg-error/1.24-r0=/usr/src/debug/libgpg-error/1.24-r0 -fdebug-prefix-map=/media/gon/proj/RDK/temp/build-raspberrypi-rdk-hybrid/tmp/sysroots/x86_64-linux= -fdebug-prefix-map=/media/gon/proj/RDK/temp/build-raspberrypi-rdk-hybrid/tmp/sysroots/raspberrypi-rdk-hybrid= -Wall -Wpointer-arith -Wno-psabi -fvisibility=hidden -c -o gpg_error-gpg-error.o `test -f 'gpg-error.c' || echo '../../libgpg-error-1.24/src/'`gpg-error.c
| ERROR: oe_runmake failed
| In file included from ../../libgpg-error-1.24/src/strerror-sym.c:30:0:
| ./errnos-sym.h:171:18: error: redefinition of 'msgidx'
| static const int msgidx[] =
| ^~~~~~
| In file included from ../../libgpg-error-1.24/src/strerror-sym.c:29:0:
| ./err-codes-sym.h:408:18: note: previous definition of 'msgidx' was here
| static const int msgidx[] =
| ^~~~~~
| In file included from ../../libgpg-error-1.24/src/strerror-sym.c:30:0:
| ./errnos-sym.h:318:1: error: redefinition of 'msgidxof'
| msgidxof (int code)
| ^~~~~~~~
| In file included from ../../libgpg-error-1.24/src/strerror-sym.c:29:0:
| ./err-codes-sym.h:792:1: note: previous definition of 'msgidxof' was here
| msgidxof (int code)
| ^~~~~~~~
| ../../libgpg-error-1.24/src/strerror-sym.c: In function 'gpg_strerror_sym':
| ../../libgpg-error-1.24/src/strerror-sym.c:45:13: warning: implicit declaration of function 'errnos_msgidxof' [-Wimplicit-function-declaration]
| idx = errnos_msgidxof (code);
| ^~~~~~~~~~~~~~~
| ../../libgpg-error-1.24/src/strerror-sym.c:47:9: error: 'errnos_msgstr' undeclared (first use in this function)
| return errnos_msgstr + errnos_msgidx[idx];
| ^~~~~~~~~~~~~
| ../../libgpg-error-1.24/src/strerror-sym.c:47:9: note: each undeclared identifier is reported only once for each function it appears in
| ../../libgpg-error-1.24/src/strerror-sym.c:47:25: error: 'errnos_msgidx' undeclared (first use in this function)
| return errnos_msgstr + errnos_msgidx[idx];
| ^~~~~~~~~~~~~
| make[3]: *** [Makefile:932: gpg_error-strerror-sym.o] Error 1
| make[3]: *** Waiting for unfinished jobs....
namespace를 pkg_namespace으로 변경하는 아래의 패치를 적용하도록 한다.
diff -Nura libgpg-error-1.24_old/src/mkstrtable.awk libgpg-error-1.24_new/src/mkstrtable.awk
--- libgpg-error-1.24_old/src/mkstrtable.awk 2013-03-16 04:24:25.000000000 +0900
+++ libgpg-error-1.24_new/src/mkstrtable.awk 2020-11-05 16:08:44.924464226 +0900
@@ -77,7 +77,7 @@
#
# The variable prefix can be used to prepend a string to each message.
#
-# The variable namespace can be used to prepend a string to each
+# The variable pkg_namespace can be used to prepend a string to each
# variable and macro name.
BEGIN {
@@ -102,7 +102,7 @@
print "/* The purpose of this complex string table is to produce";
print " optimal code with a minimum of relocations. */";
print "";
- print "static const char " namespace "msgstr[] = ";
+ print "static const char " pkg_namespace "msgstr[] = ";
header = 0;
}
else
@@ -110,7 +110,7 @@
}
!header {
- sub (/\#.+/, "");
+ sub (/#.+/, "");
sub (/[ ]+$/, ""); # Strip trailing space and tab characters.
if (/^$/)
@@ -150,7 +150,7 @@
else
print " gettext_noop (\"" last_msgstr "\");";
print "";
- print "static const int " namespace "msgidx[] =";
+ print "static const int " pkg_namespace "msgidx[] =";
print " {";
for (i = 0; i < coded_msgs; i++)
print " " pos[i] ",";
@@ -158,7 +158,7 @@
print " };";
print "";
print "static GPG_ERR_INLINE int";
- print namespace "msgidxof (int code)";
+ print pkg_namespace "msgidxof (int code)";
print "{";
print " return (0 ? 0";