aboutsummaryrefslogtreecommitdiff
path: root/tools/cpm
diff options
context:
space:
mode:
authorcrueter <crueter@eden-emu.dev>2026-07-10 01:21:17 +0200
committercrueter <crueter@eden-emu.dev>2026-07-10 01:21:17 +0200
commitcd003e5ec9e7e4afacbd98015142fc768e17af44 (patch)
tree6180681a786e59848151f5178ffc15005ad76e80 /tools/cpm
parent813b248bc3fc87c501500ddf838a44084476c272 (diff)
[cmake] Fix CPMUtil on Windows by avoiding a temp dir (#4195)
Signed-off-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4195 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Diffstat (limited to 'tools/cpm')
-rwxr-xr-xtools/cpm/cmake/ScriptUtils.cmake42
1 files changed, 42 insertions, 0 deletions
diff --git a/tools/cpm/cmake/ScriptUtils.cmake b/tools/cpm/cmake/ScriptUtils.cmake
index dbd908a1ea..183deae14d 100755
--- a/tools/cpm/cmake/ScriptUtils.cmake
+++ b/tools/cpm/cmake/ScriptUtils.cmake
@@ -19,6 +19,48 @@ macro(parse_key key)
parse_object(${object})
endmacro()
+
+# Analogous to GNU mktemp, with fallbacks
+function(mktempdir out)
+ # shell out to system mktemp if available
+ cpm_find_program(MKTEMP_EXECUTABLE mktemp)
+ if (MKTEMP_EXECUTABLE)
+ execute_process(COMMAND mktemp -d
+ OUTPUT_VARIABLE dir
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ RESULT_VARIABLE ret)
+
+ if (ret EQUAL 0)
+ set(${out} "${dir}" PARENT_SCOPE)
+ return()
+ endif()
+ endif()
+
+ string(RANDOM LENGTH 10 rand_str)
+ set(tmp_str "tmp.${rand_str}")
+
+ # create something in /tmp if it exists
+ if(EXISTS "/tmp" AND IS_DIRECTORY "/tmp")
+ set(dir "/tmp/${tmp_str}")
+ file(MAKE_DIRECTORY "${dir}" RESULT res)
+ if (res EQUAL 0)
+ set(${out} "${dir}" PARENT_SCOPE)
+ return()
+ endif()
+ endif()
+
+ # tmpdir does not exist, extremely legacy mode
+ set(dir "${CMAKE_CURRENT_LIST_DIR}/.tmp/${tmp_str}")
+ file(MAKE_DIRECTORY "${dir}" RESULT res)
+ if (res EQUAL 0)
+ set(${out} "${dir}" PARENT_SCOPE)
+ return()
+ endif()
+
+ fatal("Fatal: Could not create temporary directory. "
+ "Check write permissions to the current directory")
+endfunction()
+
# Get a package's effective URL, for an already parsed object
function(get_package_url_object out)
if (${url})