From c175e542c0c3ba6f62a3ef9a932cb7ea27ee0852 Mon Sep 17 00:00:00 2001 From: Thomas Monjalon Date: Fri, 24 Jun 2016 00:22:59 +0200 Subject: [PATCH] mk: fix parallel build of test resources The build was failing sometimes when building with multiple parallel jobs: # rm build/build/app/test/*res* # make -j6 objcopy: 'resource.tmp': No such file The reason is that each resource was built from the same temporary file. The failure is seen because of a race condition when removing the temporary file after each resource creation. It also means that some resources may be created from the wrong source. The fix is to have a different input file for each resource. The source file is not directly used because it may have a long path which is used by objcopy to name the symbols after some transformations. When linking a tar resource, the input file is already in the current directory. The hard case is for simply linked resources. The trick is to create a symbolic link of the source file if it is not already in the current build directory. Then there is a replacement of dot by an underscore to predict the symbol names computed by objcopy which must be redefined. There is an additional change for the test_resource_c which is both a real source file and a test resource. An intermediate file test_resource.res is created to avoid compiling resource.c from the wrong directory through a symbolic link. Fixes: 1e9e0a6270 ("app/test: fix resource creation with objcopy on FreeBSD") Signed-off-by: Thomas Monjalon Acked-by: Olivier Matz --- app/test/Makefile | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/test/Makefile b/app/test/Makefile index be23e8b548..2de8c7a691 100644 --- a/app/test/Makefile +++ b/app/test/Makefile @@ -43,14 +43,14 @@ define linked_resource SRCS-y += $(1).res.o $(1).res.o: $(2) @ echo ' MKRES $$@' - $Q ln -fs $$< resource.tmp + $Q [ "$$(