@@ -22,15 +22,34 @@ set(ARCCON_MSBUILD_COMMON_ARGS /nodeReuse:false ${ARCCON_MSBUILD_RESTORE_ARGS})
22
22
find_program (DOTNET_EXEC NAMES dotnet)
23
23
message (STATUS "[.Net] DOTNET exe: ${DOTNET_EXEC} " )
24
24
if (DOTNET_EXEC)
25
+ # Avec '.Net' (au moins pour les versions 6 à 8), il y a un conflit
26
+ # potentiel de lock sur les fichiers lors d'une premier appel de 'dotnet'
27
+ # si plusieurs instances sont lancées à la fois
28
+ # (voir par exemple https://github.com/dotnet/runtime/issues/91987 ou
29
+ # https://github.com/dotnet/runtime/issues/80619)
30
+ # Pour éviter cela, on créé un wrapper à 'dotnet' qui utilise un HOME local
31
+ # au projet et on utiliser ce wrapper
32
+ if (UNIX AND NOT ARCCON_NO_WRAPPER_FOR_DOTNET)
33
+ set (ARCCON_DOTNET_FAKEHOME "${CMAKE_CURRENT_BINARY_DIR} /fakehome" )
34
+ set (ARCCON_DOTNET_WRAPPER "${ARCCON_DOTNET_FAKEHOME} /arccon_dotnet" )
35
+ cmake_path(GET DOTNET_EXEC PARENT_PATH ARCCON_DOTNET_PATH)
36
+ file (MAKE_DIRECTORY ${ARCCON_DOTNET_FAKEHOME} )
37
+ configure_file (${CMAKE_CURRENT_LIST_DIR} /arccon_dotnet.in ${ARCCON_DOTNET_WRAPPER} USE_SOURCE_PERMISSIONS @ONLY)
38
+ message (STATUS "Using wrapper '${ARCCON_DOTNET_WRAPPER} ' for '${DOTNET_EXEC} '" )
39
+ set (DOTNET_EXEC_WRAPPER "${ARCCON_DOTNET_WRAPPER} " )
40
+ else ()
41
+ set (DOTNET_EXEC_WRAPPER "${DOTNET_EXEC} " )
42
+ endif ()
43
+
25
44
set (ARCCON_DOTNET_HAS_RUNTIME_coreclr TRUE )
26
- set (ARCCON_MSBUILD_EXEC_coreclr ${DOTNET_EXEC } )
45
+ set (ARCCON_MSBUILD_EXEC_coreclr ${DOTNET_EXEC_WRAPPER } )
27
46
# Pour les options, voir le CMakeLists.txt de 'axlstar'
28
47
set (ARCCON_MSBUILD_ARGS_coreclr publish /p:UseSharedCompilation=false ${ARCCON_MSBUILD_COMMON_ARGS} )
29
48
# Arguments pour fabriquer les packages NuGet
30
49
set (ARCCON_DOTNET_PACK_ARGS_coreclr pack --no -build --no -restore --no -dependencies /nodeReuse:false )
31
50
32
51
# Récupère le numéro de version 'dotnet'
33
- execute_process (COMMAND ${DOTNET_EXEC } "--version" OUTPUT_VARIABLE CORECLR_EXEC_VERSION_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE)
52
+ execute_process (COMMAND ${DOTNET_EXEC_WRAPPER } "--version" OUTPUT_VARIABLE CORECLR_EXEC_VERSION_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE)
34
53
string (REGEX MATCH "([0-9]+)\. ([0-9]+)\. (.*)" CORECLR_VERSION_REGEX_MATCH ${CORECLR_EXEC_VERSION_OUTPUT} )
35
54
set (CORECLR_VERSION ${CMAKE_MATCH_1} .${CMAKE_MATCH_2} )
36
55
set (CORECLR_VERSION_FULL ${CORECLR_VERSION} .${CMAKE_MATCH_3} )
0 commit comments