[ruby-core:117921] [Ruby master Bug#20495] Running "make clean" deletes critical "coroutine/amd64/Context.S" file and causes "make" to fail

Issue #20495 has been reported by fallwith (James Bunch). ---------------------------------------- Bug #20495: Running "make clean" deletes critical "coroutine/amd64/Context.S" file and causes "make" to fail https://bugs.ruby-lang.org/issues/20495 * Author: fallwith (James Bunch) * Status: Open * ruby -v: 3.4.0-preview1 * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- 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. ``` -- https://bugs.ruby-lang.org/

Issue #20495 has been updated by mame (Yusuke Endoh). For now, `make clean` is for those who "git clone" the repository. Don't use it for tarball package. ---------------------------------------- Bug #20495: Running "make clean" deletes critical "coroutine/amd64/Context.S" file and causes "make" to fail https://bugs.ruby-lang.org/issues/20495#change-108337 * Author: fallwith (James Bunch) * Status: Open * ruby -v: 3.4.0-preview1 * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- 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. ``` -- https://bugs.ruby-lang.org/

Issue #20495 has been updated by katei (Yuta Saito). I guess it happens when building in-place on case-insensitive fs platform due to this line: https://github.com/ruby/ruby/blob/7afc16aa48beb093b06eb978bc430f90dd771690/t... I could reproduce it on macOS with in-place build. ---------------------------------------- Bug #20495: Running "make clean" deletes critical "coroutine/amd64/Context.S" file and causes "make" to fail https://bugs.ruby-lang.org/issues/20495#change-108339 * Author: fallwith (James Bunch) * Status: Open * ruby -v: 3.4.0-preview1 * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- 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. ``` -- https://bugs.ruby-lang.org/

Issue #20495 has been updated by byroot (Jean Boussier). 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... ---------------------------------------- Bug #20495: Running "make clean" deletes critical "coroutine/amd64/Context.S" file and causes "make" to fail https://bugs.ruby-lang.org/issues/20495#change-108341 * Author: fallwith (James Bunch) * Status: Open * ruby -v: 3.4.0-preview1 * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- 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. ``` -- https://bugs.ruby-lang.org/

Issue #20495 has been updated by eileencodes (Eileen Uchitelle). I wrote a fix for this a couple weeks ago. https://github.com/ruby/ruby/pull/10699 ---------------------------------------- Bug #20495: Running "make clean" deletes critical "coroutine/amd64/Context.S" file and causes "make" to fail https://bugs.ruby-lang.org/issues/20495#change-108368 * Author: fallwith (James Bunch) * Status: Open * ruby -v: 3.4.0-preview1 * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- 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. ``` -- https://bugs.ruby-lang.org/

Issue #20495 has been updated by ioquatix (Samuel Williams). 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. ---------------------------------------- Bug #20495: Running "make clean" deletes critical "coroutine/amd64/Context.S" file and causes "make" to fail https://bugs.ruby-lang.org/issues/20495#change-108423 * Author: fallwith (James Bunch) * Status: Open * ruby -v: 3.4.0-preview1 * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- 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. ``` -- https://bugs.ruby-lang.org/

Issue #20495 has been updated by hsbt (Hiroshi SHIBATA). Status changed from Open to Closed https://github.com/ruby/ruby/pull/10699 has been merged. ---------------------------------------- Bug #20495: Running "make clean" deletes critical "coroutine/amd64/Context.S" file and causes "make" to fail https://bugs.ruby-lang.org/issues/20495#change-108441 * Author: fallwith (James Bunch) * Status: Closed * ruby -v: 3.4.0-preview1 * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- 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. ``` -- https://bugs.ruby-lang.org/
participants (7)
-
byroot (Jean Boussier)
-
eileencodes (Eileen Uchitelle)
-
fallwith (James Bunch)
-
hsbt (Hiroshi SHIBATA)
-
ioquatix (Samuel Williams)
-
katei (Yuta Saito)
-
mame (Yusuke Endoh)