[ruby-core:95755] [Ruby master Bug#16331] fails to build with BSD make when any -j option is given (including -j 1)

From: meta@...
Date: 2019-11-08 08:37:53 UTC
List: ruby-core #95755
Issue #16331 has been updated by meta@vmeta.jp (Koichiro Iwao).

Subject changed from fails to build with BSD make possibly due to race condition to fails to build with BSD make when any -j option is given (including -j 1)

Now it turned out the build fails even `-j 1` is specified. Any value to `-j` option will fail.
Not giving `-j` option goes fine.

Further information from Yuichiro NAITO:
> 最初にレースコンディションと言っていたのは誤りで
> -j の有無で shell に渡すコマンドの範囲が異なるのが原因でした。
> 基本的にはビルド手順を1行づつ shell に渡すのが本来の make の実装なのですが、
> BSD make は -j オプションをつけると、ビルド手順が複数行ある場合にまとめて shell に渡すようになります。
> そうすると、途中で exec があった場合、残りのコマンドが実行されなくなります。
> Ruby の Makefile では行の最後のコマンドに exec 使うことで、
> 最後の fork(2) 実行を省略しようという意図のように見えます。
> 
> 結局のところ BSD make の互換性問題のように思います。

----------------------------------------
Bug #16331: fails to build with BSD make when any -j option is given (including -j 1)
https://bugs.ruby-lang.org/issues/16331#change-82572

* Author: meta@vmeta.jp (Koichiro Iwao)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.6.5
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
When building Ruby parallely with BSD make (FreeBSD make), it fails to build.
Reported by FreeBSD Ruby folks. Please keep in mind I didn't find out the root cause.

OS: FreeBSD 12-STABLE
See also: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=241633

## How to reproduce
```
tar xf ruby-2.6.5.tar.gz
cd ruby-2.6.5
./configure --enable-shared --disable-readline --disable-libedit
make -j 8
(snip)
configuring -test-/st/numhash
configuring -test-/st/update
--- enc ---
ld: error: unable to find library -lruby
cc: error: linker command failed with exit code 1 (use -v to see invocation)
--- exts.mk ---
configuring -test-/string
configuring -test-/struct
configuring -test-/symbol
--- enc ---
*** [.ext/x86_64-freebsd12.1/enc/encdb.so] Error code 1
```

## BSD make without -j option: success
```
cd ruby-2.6.5
make distclean
./configure --enable-shared --disable-readline --disable-libedit
make
`ruby' is up to date.
*** Following extensions are not compiled:
readline:
	Could not be configured. It will not be installed.
	/home/sair/tmp/ruby-2.6.5/ext/readline/extconf.rb:52: readline not found
	Check ext/readline/mkmf.log for more details.
gdbm:
	Could not be configured. It will not be installed.
	Check ext/gdbm/mkmf.log for more details.
*** Fix the problems, then remove these directories and try again if you want.
making enc
making trans
`trans' is up to date.
making encs
Generating RDoc documentation
```



## Using GNU make: success

```
cd ruby-2.6.5
export MAKE=gmake # GNU make
make distclean
./configure --enable-shared --disable-readline --disable-libedit
$MAKE -j 8
```

---Files--------------------------------
ruby-bsdmake.log (13.9 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next