Bug #20495
closedRunning "make clean" deletes critical "coroutine/amd64/Context.S" file and causes "make" to fail
Description
When attempting to build v3.4.0-preview1 from source, we discovered that make clean
will delete coroutine/amd64/Context.S
, and then neither ./configure
nor make
will replace that file. When that file is missing, make
will fail. coroutine/amd64/Context.S
is included in the .tar.gz file, and make clean
deletes it without leaving a solution for recreating it.
$ tar xzf ruby-3.4.0-preview1.tar.gz
$ cd ruby-3.4.0-preview1
$ ll coroutine/amd64
.rw-r--r--@ 2.2k 501 20 2024-05-15 21:54 Context.h
.rw-r--r--@ 1.1k 501 20 2024-05-15 21:54 Context.S
$ ./configure
$ make clean
$ ll coroutine/amd64
.rw-r--r--@ 2.2k 501 20 2024-05-15 21:54 Context.h
$ make
(lots of healthy output here)
compiling yjit.c
building Rust YJIT (release mode)
touch yjit/target/release/libyjit.a
partial linking yjit/target/release/libyjit.a into yjit/target/release/libyjit.o
make: *** No rule to make target `coroutine/amd64/Context.S', needed by `coroutine/amd64/Context.o'. Stop.
Updated by mame (Yusuke Endoh) 6 months ago
For now, make clean
is for those who "git clone" the repository. Don't use it for tarball package.
Updated by katei (Yuta Saito) 6 months ago
I guess it happens when building in-place on case-insensitive fs platform due to this line: https://github.com/ruby/ruby/blob/7afc16aa48beb093b06eb978bc430f90dd771690/template/Makefile.in#L498
I could reproduce it on macOS with in-place build.
Updated by byroot (Jean Boussier) 6 months ago
This has been plaguing people developing on MacOS (and I suppose any case insensitive file system) for months. Maxime recently added a .gitignore
rule to somewhat work-around it, but I suspect there is a better fix: https://github.com/ruby/ruby/commit/ade22339e3056710dbe27eaa624c2e76fa15567b#diff-bc37d034bad564583790a46f19d807abfe519c5671395fd494d8cce506c42947R170
Updated by eileencodes (Eileen Uchitelle) 6 months ago
I wrote a fix for this a couple weeks ago. https://github.com/ruby/ruby/pull/10699
Updated by ioquatix (Samuel Williams) 6 months ago
The fix looks good to me. I also think we should do out of tree builds if possible to make things like make clean
a bit less accidentally destructive.
Updated by hsbt (Hiroshi SHIBATA) 6 months ago
- Status changed from Open to Closed
https://github.com/ruby/ruby/pull/10699 has been merged.