[Buildroot] [PATCH 1/2] Makefile: add chmod before rm when cleaning.
arnout at mind.be
Sun Apr 21 07:11:18 UTC 2019
On 18/04/2019 02:14, Louis des Landes wrote:
> On Thu, 18 Apr 2019 at 06:12, Arnout Vandecappelle <arnout at mind.be> wrote:
>> On 17/04/2019 02:09, Louis des Landes wrote:
>>> Some build systems (looking at you golang) create read only directories
>>> as caches.
>>> As such rm -rf will actually fail, causing clean and <pkg>-dirclean to fail.
>>> This patch will cause `make clean` to run chmod -R +w on the relevant
>>> directory first, which will allow rm -rf to work.
>>> This may be resolved if https://github.com/golang/go/issues/31481 is
>>> resolved satisfactorily.
>> I don't like this very much - adding a go-specific workaround to the generic
>> Would it be acceptable to instead do the chmod as a POST_BUILD_HOOK that is
>> added by golang-package?
> I kind of agree, and this is somewhat of a hack. POST_BUILD_HOOK
> doesn't get triggered if the build fails (AFAIK) so
> a failed build would still leave this directory lying around without
> being chmod'd. Might still be a good addition though.
Yeah, better yet would be to patch go to remove that "feature". Long-term
that's anyway what we expect, right? That the go tool learns some option to not
do the chmod?
>> I also don't understand that I haven't encountered this issue myself... Maybe I
>> don't build Go packages...
> This 'feature' was introduced with 'module' support (
> https://github.com/golang/go/wiki/Modules )
> Previously there was no official dependency management, so unless
> you're building recent go packages you won't encounter this issue.
> In most other ways this module support is great. In this particular
> respect it's annoying for build systems.
>>> Signed-off-by: Louis des Landes <louis.deslandes at fleet.space>
>>> Makefile | 6 ++++++
>>> 1 file changed, 6 insertions(+)
>>> diff --git a/Makefile b/Makefile
>>> index 522c0b0606..fc2a82e074 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -1060,6 +1060,12 @@ printvars:
>>> .PHONY: clean
>>> + # Some build systems (looking at you golang) create read only directories
>>> + # As such rm -rf will actually fail, so brute force them all to writeable
>>> + # before removing them.
>>> + chmod -R u+w $(BASE_TARGET_DIR) $(BINARIES_DIR) $(HOST_DIR) $(HOST_DIR_SYMLINK) \
>>> + $(BUILD_DIR) $(BASE_DIR)/staging \
>>> + $(LEGAL_INFO_DIR) $(GRAPHS_DIR)
>>> rm -rf $(BASE_TARGET_DIR) $(BINARIES_DIR) $(HOST_DIR) $(HOST_DIR_SYMLINK) \
>>> $(BUILD_DIR) $(BASE_DIR)/staging \
>>> $(LEGAL_INFO_DIR) $(GRAPHS_DIR)
More information about the buildroot