Hi ruby team,
I'm trying to update ruby-nokogumbo to 2.x and the build fails since it
cannot find nokogiri.h. I can see we have to not included nokogiri.h in
the binary package so I tried to include it in include-headers branch
in salsa (a proof of concept now as it hard codes paths). But even with
all headers in place, nokogumbo still fails to build (though it found
the headers this time). ruby-nokogumbo is pushed to salsa master
branch. Can someone help here?
1. What is the best way to ship headers in nokogiri? Should gem2deb do
this by default?
2. How to fix this build failure.
find_header: checking for nokogiri.h in
/usr/lib/x86_64-linux-gnu/rubygems-integration/2.7.0/gems/nokogiri-1.10.9/ext/nokogiri...
-------------------- yes
gcc -fdebug-prefix-map=/home/pravi/forge/ruby-team/ruby-nokogumbo=. -I.
-I/usr/include/x86_64-linux-gnu/ruby-2.7.0
-I/usr/include/ruby-2.7.0/ruby/backward -I/usr/include/ruby-2.7.0 -I.
-I/usr/include/libxml2 -I./../../gumbo-parser/src -Wdate-time
-D_FORTIFY_SOURCE=2 -fPIC -g -O2
-fdebug-prefix-map=/build/ruby2.7-ikoxWz/ruby2.7-2.7.2=.
-fstack-protector-strong -Wformat -Werror=format-security -fPIC
-std=c99
-I/usr/lib/x86_64-linux-gnu/rubygems-integration/2.7.0/gems/nokogiri-1.10.9/ext/nokogiri/
-DNGLIB=1 -o nokogumbo.o -c nokogumbo.c
In file included from nokogumbo.c:53:
/usr/lib/x86_64-linux-gnu/rubygems-integration/2.7.0/gems/nokogiri-1.10.9/ext/nokogiri/nokogiri.h:13:
warning: "_GNU_SOURCE" redefined
13 | #define _GNU_SOURCE
|
In file included from /usr/include/ruby-2.7.0/ruby/ruby.h:24,
from /usr/include/ruby-2.7.0/ruby.h:33,
from nokogumbo.c:22:
/usr/include/x86_64-linux-gnu/ruby-2.7.0/ruby/config.h:16: note: this
is the location of the previous definition
16 | #define _GNU_SOURCE 1
|
nokogumbo.c: In function ‘perform_parse’:
nokogumbo.c:280:31: warning: implicit declaration of function
‘gumbo_status_to_string’ [-Wimplicit-function-declaration]
280 | const char *status_string =
gumbo_status_to_string(output->status);
| ^~~~~~~~~~~~~~~~~~~~~~
nokogumbo.c:280:60: error: ‘GumboOutput’ {aka ‘struct
GumboInternalOutput’} has no member named ‘status’
280 | const char *status_string =
gumbo_status_to_string(output->status);
| ^~
nokogumbo.c:281:17: error: ‘GumboOutput’ {aka ‘struct
GumboInternalOutput’} has no member named ‘status’
281 | switch (output->status) {
| ^~
nokogumbo.c:282:8: error: ‘GUMBO_STATUS_OK’ undeclared (first use
in this function); did you mean ‘GUMBO_TAG_OL’?
282 | case GUMBO_STATUS_OK:
| ^~~~~~~~~~~~~~~
| GUMBO_TAG_OL
nokogumbo.c:282:8: note: each undeclared identifier is reported only
once for each function it appears in
nokogumbo.c:284:8: error: ‘GUMBO_STATUS_TREE_TOO_DEEP’ undeclared
(first use in this function)
284 | case GUMBO_STATUS_TREE_TOO_DEEP:
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
nokogumbo.c:285:26: warning: passing argument 1 of
‘gumbo_destroy_output’ from incompatible pointer type
[-Wincompatible-pointer-types]
285 | gumbo_destroy_output(output);
| ^~~~~~
| |
| GumboOutput * {aka struct GumboInternalOutput *}
In file included from nokogumbo.c:25:
/usr/include/gumbo.h:665:47: note: expected ‘const GumboOptions *’
{aka ‘const struct GumboInternalOptions *’} but argument is of type
‘GumboOutput *’ {aka ‘struct GumboInternalOutput *’}
665 | void gumbo_destroy_output(const GumboOptions* options,
GumboOutput* output);
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~
nokogumbo.c:285:5: error: too few arguments to function
‘gumbo_destroy_output’
285 | gumbo_destroy_output(output);
| ^~~~~~~~~~~~~~~~~~~~
In file included from nokogumbo.c:25:
/usr/include/gumbo.h:665:6: note: declared here
665 | void gumbo_destroy_output(const GumboOptions* options,
GumboOutput* output);
| ^~~~~~~~~~~~~~~~~~~~
nokogumbo.c:287:8: error: ‘GUMBO_STATUS_OUT_OF_MEMORY’ undeclared
(first use in this function)
287 | case GUMBO_STATUS_OUT_OF_MEMORY:
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
nokogumbo.c:288:26: warning: passing argument 1 of
‘gumbo_destroy_output’ from incompatible pointer type
[-Wincompatible-pointer-types]
288 | gumbo_destroy_output(output);
| ^~~~~~
| |
| GumboOutput * {aka struct GumboInternalOutput *}
In file included from nokogumbo.c:25:
/usr/include/gumbo.h:665:47: note: expected ‘const GumboOptions *’
{aka ‘const struct GumboInternalOptions *’} but argument is of type
‘GumboOutput *’ {aka ‘struct GumboInternalOutput *’}
665 | void gumbo_destroy_output(const GumboOptions* options,
GumboOutput* output);
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~
nokogumbo.c:288:5: error: too few arguments to function
‘gumbo_destroy_output’
288 | gumbo_destroy_output(output);
| ^~~~~~~~~~~~~~~~~~~~
In file included from nokogumbo.c:25:
/usr/include/gumbo.h:665:6: note: declared here
665 | void gumbo_destroy_output(const GumboOptions* options,
GumboOutput* output);
| ^~~~~~~~~~~~~~~~~~~~
nokogumbo.c: In function ‘build_tree’:
nokogumbo.c:388:76: error: ‘GumboElement’ has no member named
‘name’
388 | xml_child = xmlNewDocNode(doc, NIL, BAD_CAST
gumbo_child->v.element.name, NULL);
| ^
nokogumbo.c: In function ‘add_errors’:
nokogumbo.c:450:7: error: unknown type name ‘GumboError’; did you
mean ‘xmlError’?
450 | GumboError *err = errors->data[i];
| ^~~~~~~~~~
| xmlError
nokogumbo.c:451:38: warning: implicit declaration of function
‘gumbo_error_position’ [-Wimplicit-function-declaration]
451 | GumboSourcePosition position = gumbo_error_position(err);
| ^~~~~~~~~~~~~~~~~~~~
nokogumbo.c:451:38: error: invalid initializer
nokogumbo.c:453:21: warning: implicit declaration of function
‘gumbo_caret_diagnostic_to_string’ [-Wimplicit-function-declaration]
453 | size_t size = gumbo_caret_diagnostic_to_string(err, input_str,
input_len, &msg);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nokogumbo.c:457:32: warning: implicit declaration of function
‘gumbo_error_code’ [-Wimplicit-function-declaration]
457 | const char *error_code = gumbo_error_code(err);
| ^~~~~~~~~~~~~~~~
nokogumbo.c:457:32: warning: initialization of ‘const char *’ from
‘int’ makes pointer from integer without a cast [-Wint-conversion]
nokogumbo.c: In function ‘parse_cleanup’:
nokogumbo.c:483:28: warning: passing argument 1 of
‘gumbo_destroy_output’ from incompatible pointer type
[-Wincompatible-pointer-types]
483 | gumbo_destroy_output(args->output);
| ~~~~^~~~~~~~
| |
| GumboOutput * {aka struct GumboInternalOutput *}
In file included from nokogumbo.c:25:
/usr/include/gumbo.h:665:47: note: expected ‘const GumboOptions *’
{aka ‘const struct GumboInternalOptions *’} but argument is of type
‘GumboOutput *’ {aka ‘struct GumboInternalOutput *’}
665 | void gumbo_destroy_output(const GumboOptions* options,
GumboOutput* output);
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~
nokogumbo.c:483:3: error: too few arguments to function
‘gumbo_destroy_output’
483 | gumbo_destroy_output(args->output);
| ^~~~~~~~~~~~~~~~~~~~
In file included from nokogumbo.c:25:
/usr/include/gumbo.h:665:6: note: declared here
665 | void gumbo_destroy_output(const GumboOptions* options,
GumboOutput* output);
| ^~~~~~~~~~~~~~~~~~~~
nokogumbo.c: In function ‘parse’:
nokogumbo.c:496:10: error: ‘GumboOptions’ {aka ‘struct
GumboInternalOptions’} has no member named ‘max_tree_depth’
496 | options.max_tree_depth = NUM2INT(max_depth);
| ^
nokogumbo.c:505:20: warning: passing argument 1 of ‘rb_ensure’ from
incompatible pointer type [-Wincompatible-pointer-types]
505 | return rb_ensure(parse_continue, (VALUE)&args, parse_cleanup,
(VALUE)&args);
| ^~~~~~~~~~~~~~
| |
| VALUE (*)(ParseArgs *) {aka long unsigned int (*)(ParseArgs *)}
In file included from /usr/include/ruby-2.7.0/ruby.h:33,
from nokogumbo.c:22:
/usr/include/ruby-2.7.0/ruby/ruby.h:1990:17: note: expected ‘VALUE
(*)(VALUE)’ {aka ‘long unsigned int (*)(long unsigned int)’} but
argument is of type ‘VALUE (*)(ParseArgs *)’ {aka ‘long unsigned
int (*)(ParseArgs *)’}
1990 | VALUE rb_ensure(VALUE(*)(VALUE),VALUE,VALUE(*)(VALUE),VALUE);
| ^~~~~~~~~~~~~~~
nokogumbo.c:505:50: warning: passing argument 3 of ‘rb_ensure’ from
incompatible pointer type [-Wincompatible-pointer-types]
505 | return rb_ensure(parse_continue, (VALUE)&args, parse_cleanup,
(VALUE)&args);
| ^~~~~~~~~~~~~
| |
| VALUE (*)(ParseArgs *) {aka long unsigned int (*)(ParseArgs *)}
In file included from /usr/include/ruby-2.7.0/ruby.h:33,
from nokogumbo.c:22:
/usr/include/ruby-2.7.0/ruby/ruby.h:1990:39: note: expected ‘VALUE
(*)(VALUE)’ {aka ‘long unsigned int (*)(long unsigned int)’} but
argument is of type ‘VALUE (*)(ParseArgs *)’ {aka ‘long unsigned
int (*)(ParseArgs *)’}
1990 | VALUE rb_ensure(VALUE(*)(VALUE),VALUE,VALUE(*)(VALUE),VALUE);
| ^~~~~~~~~~~~~~~
nokogumbo.c: In function ‘fragment’:
nokogumbo.c:669:19: warning: implicit declaration of function
‘gumbo_compute_quirks_mode’ [-Wimplicit-function-declaration]
669 | quirks_mode = gumbo_compute_quirks_mode (
| ^~~~~~~~~~~~~~~~~~~~~~~~~
nokogumbo.c:681:10: error: ‘GumboOptions’ {aka ‘struct
GumboInternalOptions’} has no member named ‘max_tree_depth’
681 | options.max_tree_depth = depth < 0 ? -1 : (depth + 1);
| ^
nokogumbo.c:682:30: error: incompatible types when assigning to type
‘GumboTag’ from type ‘const char *’
682 | options.fragment_context = ctx_tag;
| ^~~~~~~
nokogumbo.c:684:10: error: ‘GumboOptions’ {aka ‘struct
GumboInternalOptions’} has no member named ‘fragment_encoding’
684 | options.fragment_encoding = encoding;
| ^
nokogumbo.c:685:10: error: ‘GumboOptions’ {aka ‘struct
GumboInternalOptions’} has no member named ‘quirks_mode’
685 | options.quirks_mode = quirks_mode;
| ^
nokogumbo.c:686:10: error: ‘GumboOptions’ {aka ‘struct
GumboInternalOptions’} has no member named
‘fragment_context_has_form_ancestor’
686 | options.fragment_context_has_form_ancestor = form;
| ^
nokogumbo.c:695:13: warning: passing argument 1 of ‘rb_ensure’ from
incompatible pointer type [-Wincompatible-pointer-types]
695 | rb_ensure(fragment_continue, (VALUE)&args, parse_cleanup,
(VALUE)&args);
| ^~~~~~~~~~~~~~~~~
| |
| VALUE (*)(ParseArgs *) {aka long unsigned int (*)(ParseArgs *)}
In file included from /usr/include/ruby-2.7.0/ruby.h:33,
from nokogumbo.c:22:
/usr/include/ruby-2.7.0/ruby/ruby.h:1990:17: note: expected ‘VALUE
(*)(VALUE)’ {aka ‘long unsigned int (*)(long unsigned int)’} but
argument is of type ‘VALUE (*)(ParseArgs *)’ {aka ‘long unsigned
int (*)(ParseArgs *)’}
1990 | VALUE rb_ensure(VALUE(*)(VALUE),VALUE,VALUE(*)(VALUE),VALUE);
| ^~~~~~~~~~~~~~~
nokogumbo.c:695:46: warning: passing argument 3 of ‘rb_ensure’ from
incompatible pointer type [-Wincompatible-pointer-types]
695 | rb_ensure(fragment_continue, (VALUE)&args, parse_cleanup,
(VALUE)&args);
| ^~~~~~~~~~~~~
| |
| VALUE (*)(ParseArgs *) {aka long unsigned int (*)(ParseArgs *)}
In file included from /usr/include/ruby-2.7.0/ruby.h:33,
from nokogumbo.c:22:
/usr/include/ruby-2.7.0/ruby/ruby.h:1990:39: note: expected ‘VALUE
(*)(VALUE)’ {aka ‘long unsigned int (*)(long unsigned int)’} but
argument is of type ‘VALUE (*)(ParseArgs *)’ {aka ‘long unsigned
int (*)(ParseArgs *)’}
1990 | VALUE rb_ensure(VALUE(*)(VALUE),VALUE,VALUE(*)(VALUE),VALUE);
| ^~~~~~~~~~~~~~~
make[1]: *** [Makefile:245: nokogumbo.o] Error 1
make[1]: Leaving directory
'/home/pravi/forge/ruby-team/ruby-nokogumbo/ext/nokogumbo'
~~~~~~~~~~~~~~~~~~~~~ ↓ mkmf.log ~~~~~~~~~~~~~~~~~~~~~
"pkg-config --exists libxml-2.0"
| pkg-config --libs libxml-2.0
=> "-lxml2\n"
"x86_64-linux-gnu-gcc -o conftest
-I/usr/include/x86_64-linux-gnu/ruby-2.7.0
-I/usr/include/ruby-2.7.0/ruby/backward -I/usr/include/ruby-2.7.0 -I.
-Wdate-time -D_FORTIFY_SOURCE=2 -g -O2
-fdebug-prefix-map=/build/ruby2.7-ikoxWz/ruby2.7-2.7.2=.
-fstack-protector-strong -Wformat -Werror=format-security -fPIC
-std=c99
-I/usr/lib/x86_64-linux-gnu/rubygems-integration/2.7.0/gems/nokogiri-1.10.9/ext/nokogiri/
conftest.c -L. -L/usr/lib/x86_64-linux-gnu -L. -Wl,-z,relro -Wl,-z,now
-fstack-protector-strong -rdynamic -Wl,-export-dynamic -lruby-2.7 -lm
-lc"
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main(int argc, char **argv)
4: {
5: return !!argv[argc];
6: }
/* end */
"x86_64-linux-gnu-gcc -o conftest
-I/usr/include/x86_64-linux-gnu/ruby-2.7.0
-I/usr/include/ruby-2.7.0/ruby/backward -I/usr/include/ruby-2.7.0 -I.
-Wdate-time -D_FORTIFY_SOURCE=2 -g -O2
-fdebug-prefix-map=/build/ruby2.7-ikoxWz/ruby2.7-2.7.2=.
-fstack-protector-strong -Wformat -Werror=format-security -fPIC
-std=c99
-I/usr/lib/x86_64-linux-gnu/rubygems-integration/2.7.0/gems/nokogiri-1.10.9/ext/nokogiri/
conftest.c -L. -L/usr/lib/x86_64-linux-gnu -L. -Wl,-z,relro -Wl,-z,now
-fstack-protector-strong -rdynamic -Wl,-export-dynamic -lruby-2.7
-lxml2 -lm -lc"
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main(int argc, char **argv)
4: {
5: return !!argv[argc];
6: }
/* end */
| pkg-config --cflags-only-I libxml-2.0
=> "-I/usr/include/libxml2\n"
| pkg-config --cflags-only-other libxml-2.0
=> "\n"
| pkg-config --libs-only-l libxml-2.0
=> "-lxml2\n"
package configuration for libxml-2.0
incflags: -I/usr/include/libxml2
cflags:
ldflags:
libs: -lxml2
have_library: checking for xmlNewDoc() in -lxml2...
-------------------- yes
"x86_64-linux-gnu-gcc -o conftest
-I/usr/include/x86_64-linux-gnu/ruby-2.7.0
-I/usr/include/ruby-2.7.0/ruby/backward -I/usr/include/ruby-2.7.0 -I.
-I/usr/include/libxml2 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2
-fdebug-prefix-map=/build/ruby2.7-ikoxWz/ruby2.7-2.7.2=.
-fstack-protector-strong -Wformat -Werror=format-security -fPIC
-std=c99
-I/usr/lib/x86_64-linux-gnu/rubygems-integration/2.7.0/gems/nokogiri-1.10.9/ext/nokogiri/
conftest.c -L. -L/usr/lib/x86_64-linux-gnu -L. -Wl,-z,relro -Wl,-z,now
-fstack-protector-strong -rdynamic -Wl,-export-dynamic -lxml2
-lruby-2.7 -lxml2 -lxml2 -lm -lc"
conftest.c: In function ‘t’:
conftest.c:14:57: error: ‘xmlNewDoc’ undeclared (first use in this
function)
14 | int t(void) { void ((*volatile p)()); p = (void
((*)()))xmlNewDoc; return !p; }
| ^~~~~~~~~
conftest.c:14:57: note: each undeclared identifier is reported only
once for each function it appears in
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: /*top*/
4: extern int t(void);
5: int main(int argc, char **argv)
6: {
7: if (argc > 1000000) {
8: int (* volatile tp)(void)=(int (*)(void))&t;
9: printf("%d", (*tp)());
10: }
11:
12: return !!argv[argc];
13: }
14: int t(void) { void ((*volatile p)()); p = (void ((*)()))xmlNewDoc;
return !p; }
/* end */
"x86_64-linux-gnu-gcc -o conftest
-I/usr/include/x86_64-linux-gnu/ruby-2.7.0
-I/usr/include/ruby-2.7.0/ruby/backward -I/usr/include/ruby-2.7.0 -I.
-I/usr/include/libxml2 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2
-fdebug-prefix-map=/build/ruby2.7-ikoxWz/ruby2.7-2.7.2=.
-fstack-protector-strong -Wformat -Werror=format-security -fPIC
-std=c99
-I/usr/lib/x86_64-linux-gnu/rubygems-integration/2.7.0/gems/nokogiri-1.10.9/ext/nokogiri/
conftest.c -L. -L/usr/lib/x86_64-linux-gnu -L. -Wl,-z,relro -Wl,-z,now
-fstack-protector-strong -rdynamic -Wl,-export-dynamic -lxml2
-lruby-2.7 -lxml2 -lxml2 -lm -lc"
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: /*top*/
4: extern int t(void);
5: int main(int argc, char **argv)
6: {
7: if (argc > 1000000) {
8: int (* volatile tp)(void)=(int (*)(void))&t;
9: printf("%d", (*tp)());
10: }
11:
12: return !!argv[argc];
13: }
14: extern void xmlNewDoc();
15: int t(void) { xmlNewDoc(); return 0; }
/* end */
--------------------
find_header: checking for nokogiri.h in
/usr/lib/x86_64-linux-gnu/rubygems-integration/2.7.0/gems/nokogiri-1.10.9/ext/nokogiri...
-------------------- yes
"x86_64-linux-gnu-gcc -E -I/usr/include/x86_64-linux-gnu/ruby-2.7.0
-I/usr/include/ruby-2.7.0/ruby/backward -I/usr/include/ruby-2.7.0 -I.
-I/usr/include/libxml2 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2
-fdebug-prefix-map=/build/ruby2.7-ikoxWz/ruby2.7-2.7.2=.
-fstack-protector-strong -Wformat -Werror=format-security -fPIC
-std=c99
-I/usr/lib/x86_64-linux-gnu/rubygems-integration/2.7.0/gems/nokogiri-1.10.9/ext/nokogiri/
conftest.c -o conftest.i"
In file included from conftest.c:3:
/usr/lib/x86_64-linux-gnu/rubygems-integration/2.7.0/gems/nokogiri-1.10.9/ext/nokogiri/nokogiri.h:13:
warning: "_GNU_SOURCE" redefined
13 | #define _GNU_SOURCE
|
In file included from /usr/include/ruby-2.7.0/ruby/ruby.h:24,
from /usr/include/ruby-2.7.0/ruby.h:33,
from conftest.c:1:
/usr/include/x86_64-linux-gnu/ruby-2.7.0/ruby/config.h:16: note: this
is the location of the previous definition
16 | #define _GNU_SOURCE 1
|
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <nokogiri.h>
/* end */
--------------------
~~~~~~~~~~~~~~~~~~~~~ ↑ mkmf.log ~~~~~~~~~~~~~~~~~~~~~
Traceback (most recent call last):
13: from /usr/lib/ruby/vendor_ruby/gem2deb/extension_builder.rb:128:in
`<main>'
12: from /usr/lib/ruby/vendor_ruby/gem2deb/extension_builder.rb:112:in
`build_all_extensions'
11: from /usr/lib/ruby/vendor_ruby/gem2deb/extension_builder.rb:112:in
`each'
10: from /usr/lib/ruby/vendor_ruby/gem2deb/extension_builder.rb:115:in
`block in build_all_extensions'
9: from /usr/lib/ruby/vendor_ruby/gem2deb/extension_builder.rb:71:in
`build_and_install'
8: from /usr/lib/ruby/vendor_ruby/gem2deb/extension_builder.rb:71:in
`chdir'
7: from /usr/lib/ruby/vendor_ruby/gem2deb/extension_builder.rb:81:in
`block in build_and_install'
6: from
/usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:29:in `build'
5: from /usr/lib/ruby/2.7.0/tempfile.rb:291:in `open'
4: from
/usr/lib/ruby/vendor_ruby/rubygems/ext/ext_conf_builder.rb:62:in `block
in build'
3: from /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:43:in `make'
2: from /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:43:in `each'
1: from /usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:51:in
`block in make'
/usr/lib/ruby/vendor_ruby/rubygems/ext/builder.rb:99:in `run': make
failed, exit code 2 (Gem::InstallError)
Traceback (most recent call last):
9: from /usr/bin/dh_ruby:89:in `<main>'
8: from /usr/lib/ruby/vendor_ruby/gem2deb/dh_ruby.rb:84:in `install'
7: from /usr/lib/ruby/vendor_ruby/gem2deb/dh_ruby.rb:84:in `each'
6: from /usr/lib/ruby/vendor_ruby/gem2deb/dh_ruby.rb:86:in `block in
install'
5: from /usr/lib/ruby/vendor_ruby/gem2deb/installer.rb:28:in `install'
4: from /usr/lib/ruby/vendor_ruby/gem2deb/installer.rb:51:in
`install_files_and_build_extensions'
3: from /usr/lib/ruby/vendor_ruby/gem2deb/installer.rb:51:in `each'
2: from /usr/lib/ruby/vendor_ruby/gem2deb/installer.rb:54:in `block in
install_files_and_build_extensions'
1: from /usr/lib/ruby/vendor_ruby/gem2deb.rb:65:in `run_ruby'
/usr/lib/ruby/vendor_ruby/gem2deb.rb:54:in `run': /usr/bin/ruby2.7
/usr/lib/ruby/vendor_ruby/gem2deb/extension_builder.rb
/home/pravi/forge/ruby-team/ruby-nokogumbo debian/ruby-nokogumbo
(Gem2Deb::CommandFailed)
dh_auto_install: error: dh_ruby --install
/home/pravi/forge/ruby-team/ruby-nokogumbo/debian/ruby-nokogumbo
returned exit code 1
make: *** [debian/rules:18: binary] Error 1
dpkg-buildpackage: error: fakeroot debian/rules binary subprocess
returned exit status 2