Project

General

Profile

Actions

Bug #17106

closed

Build ruby 2.6.6 from git source

Bug #17106: Build ruby 2.6.6 from git source

Added by yegorov (Artem Yegorov) over 5 years ago. Updated about 4 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:99508]

Description

Hello!
I tried to build ruby 2.6.6 from git source, but get an error.

My Dockerfile:

FROM archlinux:20200705 RUN pacman -Sy vim curl git ruby --noconfirm && \ pacman -S --needed base-devel libffi libyaml openssl zlib --noconfirm CMD /bin/bash 

Build and run docker:

docker build -t archlinux_ruby . docker run --rm -it archlinux_ruby /bin/bash 

My steps for reproducing error (in docker bash):

mkdir gitruby && cd gitruby git clone https://github.com/ruby/ruby.git -b v2_6_6 --depth 1 cd ruby autoconf ./configure make 

Error

compiling parse.c [7/2146] parse.c: In function ‘ruby_yyparse’: parse.c:10667:51: error: macro "yydestruct" passed 5 arguments, but takes just 3 10667 | if (yychar == END_OF_INPUT) | ^ parse.c:5299: note: macro "yydestruct" defined here 5299 | #define yydestruct(m, t, v) ruby_parser_yydestruct(m, t, v, p) | parse.c:10666:11: error: ‘yydestruct’ undeclared (first use in this function) 10666 | /* Return failure if at end of input. */ | ^~~~~~~~~~ parse.c:10666:11: note: each undeclared identifier is reported only once for each function it appears in parse.c:10722:65: error: macro "yydestruct" passed 5 arguments, but takes just 3 10722 | /* Pop the current state because it cannot handle the error token. */ | ^ parse.c:5299: note: macro "yydestruct" defined here 5299 | #define yydestruct(m, t, v) ruby_parser_yydestruct(m, t, v, p) | parse.c:10780:47: error: macro "yydestruct" passed 5 arguments, but takes just 3 10780 | if (yychar != YYEMPTY) | ^ parse.c:5299: note: macro "yydestruct" defined here 5299 | #define yydestruct(m, t, v) ruby_parser_yydestruct(m, t, v, p) | parse.c:10789:65: error: macro "yydestruct" passed 5 arguments, but takes just 3 10789 | this YYABORT or YYACCEPT. */ | ^ parse.c:5299: note: macro "yydestruct" defined here 5299 | #define yydestruct(m, t, v) ruby_parser_yydestruct(m, t, v, p) | At top level: parse.c:5297:1: warning: ‘ruby_parser_yydestruct’ defined but not used [-Wunused-function] 5297 | ruby_parser_yydestruct (const char *yymsg, | ^~~~~~~~~~~~~~~~~~~~~~ cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagno stics cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier di agnostics make: *** [Makefile:419: parse.o] Error 1 

What do the comments mean that appeared while building ruby?
Building from tarball source (https://www.ruby-lang.org/en/downloads/) was successful.

What am I doing wrong?


Related issues 1 (0 open1 closed)

Updated by mame (Yusuke Endoh) over 5 years ago Actions #1 [ruby-core:99509]

Hi,

I think you are using bison that is newer than the latest version at Ruby 2.6 release.
I guess @nobu (Nobuyoshi Nakada) has already fixed the issue in ruby master, so we need to backport something.

Updated by sawa (Tsuyoshi Sawada) over 5 years ago Actions #2

  • Description updated (diff)

Updated by yegorov (Artem Yegorov) over 5 years ago Actions #3 [ruby-core:99542]

mame (Yusuke Endoh) wrote in #note-1:

Hi,

I think you are using bison that is newer than the latest version at Ruby 2.6 release.
I guess @nobu (Nobuyoshi Nakada) has already fixed the issue in ruby master, so we need to backport something.

Thanks, i'll wait backport.

Updated by hsbt (Hiroshi SHIBATA) over 5 years ago Actions #4

  • Related to Bug #16998: [Backport] support for Bison 3 to 2.6 and 2.7 added

Updated by hsbt (Hiroshi SHIBATA) over 5 years ago Actions #5

  • Status changed from Open to Closed

Updated by wanabe (_ wanabe) over 5 years ago Actions #6 [ruby-core:99548]

47720e2255f34ecad49763c66a7ea02a55a3f60a will fix the error.
But I don't know if it won't cause a regression.
ruby_2_7 doesn't have the issue because of b971bad49b95d4c1f68bb2242d4267355f1cd497.

Updated by jaruga (Jun Aruga) about 4 years ago Actions #7 [ruby-core:105939]

I still see this build error on the latest ruby_2_6 branch (commit: 95ba9053e20ad8d113af37b3f1f4cbfff1f6a8f1).
I needed to apply the commit 47720e2255f34ecad49763c66a7ea02a55a3f60a to pass the make on Fedora 34.

$ bison --version bison (GNU Bison) 3.7.4 Written by Robert Corbett and Richard Stallman. Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

Updated by jaruga (Jun Aruga) about 4 years ago Actions #8 [ruby-core:105940]

I still see this build error on the latest ruby_2_6 branch (commit: 95ba9053e20ad8d113af37b3f1f4cbfff1f6a8f1).

$ ruby -v ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux] $ which ruby /usr/local/ruby-3.0.2/bin/ruby $ bison --version bison (GNU Bison) 3.7.4 Written by Robert Corbett and Richard Stallman. Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ autoconf $ ./configure $ make ... compiling parse.c parse.c: In function ‘ruby_yyparse’: parse.c:10653:51: error: macro "yydestruct" passed 5 arguments, but takes just 3 10653 | if (yychar == END_OF_INPUT) | ^ parse.c:5300: note: macro "yydestruct" defined here 5300 | #define yydestruct(m, t, v) ruby_parser_yydestruct(m, t, v, p) | parse.c:10652:11: error: ‘yydestruct’ undeclared (first use in this function) 10652 | /* Return failure if at end of input. */ | ^~~~~~~~~~ parse.c:10652:11: note: each undeclared identifier is reported only once for each function it appears in parse.c:10708:65: error: macro "yydestruct" passed 5 arguments, but takes just 3 10708 | /* Pop the current state because it cannot handle the error token. */ | ^ parse.c:5300: note: macro "yydestruct" defined here 5300 | #define yydestruct(m, t, v) ruby_parser_yydestruct(m, t, v, p) | parse.c:10766:47: error: macro "yydestruct" passed 5 arguments, but takes just 3 10766 | if (yychar != YYEMPTY) | ^ parse.c:5300: note: macro "yydestruct" defined here 5300 | #define yydestruct(m, t, v) ruby_parser_yydestruct(m, t, v, p) | parse.c:10775:65: error: macro "yydestruct" passed 5 arguments, but takes just 3 10775 | this YYABORT or YYACCEPT. */ | ^ parse.c:5300: note: macro "yydestruct" defined here 5300 | #define yydestruct(m, t, v) ruby_parser_yydestruct(m, t, v, p) | At top level: parse.c:5298:1: warning: ‘ruby_parser_yydestruct’ defined but not used [-Wunused-function] 5298 | ruby_parser_yydestruct (const char *yymsg, | ^~~~~~~~~~~~~~~~~~~~~~ cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics make: *** [Makefile:419: parse.o] Error 1 

I needed to apply the commit 47720e2255f34ecad49763c66a7ea02a55a3f60a to pass the make on Fedora 34.

After applying the patch, the make passed, but I see some failures on make test. I am not sure if the failures come from this patch.

$ autoconf $ ./configure $ make $ make test	BASERUBY = /usr/local/ruby-3.0.2/bin/ruby --disable=gems	CC = gcc	LD = ld	LDSHARED = gcc -shared	CFLAGS = -O3 -ggdb3 -Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wrestrict -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -std=gnu99	XCFLAGS = -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -fPIE -DCANONICALIZATION_FOR_MATHN	CPPFLAGS = -I. -I.ext/include/x86_64-linux -I./include -I. -I./enc/unicode/12.1.0	DLDFLAGS = -Wl,--compress-debug-sections=zlib -fstack-protector-strong -pie	SOLIBS = -lz -lpthread -lrt -lrt -lgmp -ldl -lcrypt -lm	LANG = en_US.UTF-8	LC_ALL = en_US.UTF-8	LC_CTYPE = gcc (GCC) 11.2.1 20210728 (Red Hat 11.2.1-1) Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ./revision.h unchanged #883 test_literal_suffix.rb:49:in `<top (required)>': begin eval('1ir', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end #=> "syntax error" (expected "syntax error, unexpected tIDENTIFIER, expecting end-of-input") #884 test_literal_suffix.rb:51:in `<top (required)>': begin eval('1.2ir', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end #=> "syntax error" (expected "syntax error, unexpected tIDENTIFIER, expecting end-of-input") #885 test_literal_suffix.rb:53:in `<top (required)>': begin eval('1e1r', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end #=> "syntax error" (expected "syntax error, unexpected tIDENTIFIER, expecting end-of-input") test_literal_suffix.rb FAIL 3/48 #1287 test_syntax.rb:529:in `assert_syntax_error': begin eval(%q{{*0}}, nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end #=> "syntax error" (expected "syntax error, unexpected *, expecting '}'") [ruby-dev:31072] #1292 test_syntax.rb:529:in `assert_syntax_error': begin eval(%q{v0,(*,v1,) = 0}, nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end #=> "syntax error" (expected "syntax error, unexpected ')'") [ruby-dev:31104] #1297 test_syntax.rb:529:in `assert_syntax_error': begin eval(%q{!}, nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end #=> "syntax error" (expected "syntax error, unexpected end-of-input") [ruby-dev:31243] test_syntax.rb FAIL 3/156 FAIL 6/1397 tests failed make: *** [uncommon.mk:735: yes-btest-ruby] Error 1 
Actions

Also available in: PDF Atom