Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix macos bug deleting too many files #10699

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

eileencodes
Copy link
Contributor

Since #10209 we've been noticing that on macos after running make clean the coroutine/arm64/Context.S file is missing, causing subsequent make calls to fail because Context.S is needed to build Context.o.

The reason this is happening is because macos is case-insensitive so the .s looks for coroutine/arm64/Context.s and finds coroutine/arm64/Context.S and deletes it. This does not happen on linux because the filesystem is case sensitive.

I attempted to use find because it is case sensitive regardless of filesystem, but it was a lot slower than rm since we can't pass multiple file names the same way to find.

Reverting this small part of #10209 fixes the issue for macos and it wasn't clear that those changes were strictly necessary for the rest of the PR.

cc/ @nobu as the author of #10209

@nobu
Copy link
Member

nobu commented May 3, 2024

Thank you, I didn't notice it since I'm not using in-place build at all.
*.dSYM directories aren't removed by make clean-local?

Comment on lines 496 to 497
$(Q)find . -depth \( -name '*.bc' -o -name '*.[is]' \) -delete 2> /dev/null || true
-$(Q)$(RMALL) *.dSYM
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, -delete is not standardized in POSIX find.

Suggested change
$(Q)find . -depth \( -name '*.bc' -o -name '*.[is]' \) -delete 2> /dev/null || true
-$(Q)$(RMALL) *.dSYM
$(Q)find . ! -type d \( -name '*.bc' -o -name '*.[is]' \) -exec rm -f {} + || true

Since we don't expect to delete directories here, -depth is not needed.

Does find print any error or warning messages?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I made this change and tested it on macos and linux. I didn't see any errors or warnings. It also deleted the correct files. 👍🏼

Since ruby#10209 we've been noticing that on macos after running `make
clean` the `coroutine/arm64/Context.S` file is missing, causing
subsequent make calls to fail because `Context.S` is needed to build
`Context.o`.

The reason this is happening is because macos is case-insensitive so the
`.s` looks for `coroutine/arm64/Context.s` and finds
`coroutine/arm64/Context.s`. This does not happen on linux because the
filesystem is case sensitive.

I attempted to use `find` because it is case sensitive regardless of
filesystem, but it was a lot slower than `rm` since we can't pass
multiple file names the same way to `find`.

Reverting this small part of ruby#10209 fixes the issue for macos and it
wasn't clear that those changes were strictly necessary for the rest of
the PR.

We changed the original code to use `rm` instead of `delete` because it
is not standarized on POSIX.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
2 participants