Correctly redownload NodeJS when the requested version number changes

This commit is contained in:
Alexander Bock
2025-06-10 23:28:26 +02:00
parent da545909d6
commit 2589ccd4ac
2 changed files with 50 additions and 52 deletions

View File

@@ -25,6 +25,9 @@
include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake)
include(../webbrowser/cmake/webbrowser_helpers.cmake)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(nodejs_support)
set(WEBGUI_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "WEBGUI_MODULE_PATH")
set(OPENSPACE_HEADER_FILES
@@ -37,13 +40,7 @@ set(OPENSPACE_SOURCE_FILES
)
source_group("Source Files" FILES ${OPENSPACE_SOURCE_FILES})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
# Specify the NodeJs distribution version.
set(NODEJS_VERSION "22.15.0")
include(nodejs_support)
DownloadNodeJs("${NODEJS_VERSION}" "${CMAKE_CURRENT_SOURCE_DIR}/ext/nodejs")
DownloadNodeJs("22.15.0" "${CMAKE_CURRENT_SOURCE_DIR}/ext/nodejs")
create_new_module(
WebGui

View File

@@ -31,60 +31,61 @@ function(DownloadNodeJs version download_dir)
set(basename "node")
set(filename "${basename}.exe")
set(path "v${version}/win-x64/${filename}")
endif ()
if (APPLE)
elseif (APPLE)
set(basename "node-v${version}-darwin-x64")
set(filename "${basename}.tar.gz")
set(path "v${version}/${filename}")
endif ()
if (UNIX AND NOT APPLE)
elseif (UNIX)
set(basename "node-v${version}-linux-x64")
set(filename "${basename}.tar.xz")
set(path "v${version}/${filename}")
endif ()
# Specify the binary distribution type and download directory.
set(NODEJS_DOWNLOAD_DIR "${download_dir}")
# Create the file if it doesn't exist
file(TOUCH "${download_dir}/version.txt")
# The location where we expect the extracted binary distribution.
set(NODEJS_ROOT "${NODEJS_DOWNLOAD_DIR}" CACHE INTERNAL "NODEJS_ROOT")
# Read the file
file(STRINGS "${download_dir}/version.txt" existing_version)
# Download and/or extract the binary distribution if necessary.
if (NOT IS_DIRECTORY "${NODEJS_ROOT}")
set(NODEJS_DOWNLOAD_SOURCE "v${version}/node-v${version}-${suffix}")
set(NODEJS_DOWNLOAD_PATH "${NODEJS_DOWNLOAD_DIR}/${filename}")
if (NOT EXISTS "${NODEJS_DOWNLOAD_PATH}")
set(NODEJS_DOWNLOAD_URL "https://nodejs.org/dist/${path}")
# Download the binary distribution.
message(STATUS "Downloading NodeJs: ${NODEJS_DOWNLOAD_PATH}...")
file(DOWNLOAD "${NODEJS_DOWNLOAD_URL}" "${NODEJS_DOWNLOAD_PATH}" SHOW_PROGRESS)
endif ()
message(STATUS "URL: ${NODEJS_DOWNLOAD_URL}")
# Extract the binary distribution for unix
if (APPLE)
# Apple uses tar.gz
message(STATUS "Extracting NodeJs: ${NODEJS_DOWNLOAD_PATH} in ${NODEJS_DOWNLOAD_DIR}")
execute_process(
COMMAND tar xzf ${NODEJS_DOWNLOAD_PATH}
WORKING_DIRECTORY ${NODEJS_DOWNLOAD_DIR}
)
endif ()
if (UNIX AND NOT APPLE)
# Linux uses tar.xz
message(STATUS "Extracting NodeJs: ${NODEJS_DOWNLOAD_PATH} in ${NODEJS_DOWNLOAD_DIR}")
execute_process(
COMMAND tar xf ${NODEJS_DOWNLOAD_PATH}
WORKING_DIRECTORY ${NODEJS_DOWNLOAD_DIR}
)
endif ()
if (UNIX)
FILE(COPY ${NODEJS_DOWNLOAD_DIR}/${basename}/bin/node DESTINATION ${NODEJS_DOWNLOAD_DIR})
FILE(REMOVE_RECURSE ${NODEJS_DOWNLOAD_DIR}/${basename})
FILE(REMOVE ${NODEJS_DOWNLOAD_PATH})
endif ()
# Download and/or extract the binary distribution if necessary
message("ex: ${existing_version}")
message("ver: ${version}")
if ("${existing_version}" STREQUAL "${version}")
return()
endif ()
set(NODEJS_DOWNLOAD_PATH "${download_dir}/${filename}")
set(NODEJS_DOWNLOAD_URL "https://nodejs.org/dist/${path}")
# Download the binary distribution
message(STATUS "Downloading NodeJs: ${NODEJS_DOWNLOAD_PATH}...")
file(DOWNLOAD "${NODEJS_DOWNLOAD_URL}" "${NODEJS_DOWNLOAD_PATH}" SHOW_PROGRESS)
message(STATUS "URL: ${NODEJS_DOWNLOAD_URL}")
# Extract the binary distribution for unix
if (APPLE)
# Apple uses tar.gz
message(STATUS "Extracting NodeJs: ${NODEJS_DOWNLOAD_PATH} in ${download_dir}")
execute_process(
COMMAND tar xzf ${NODEJS_DOWNLOAD_PATH}
WORKING_DIRECTORY ${download_dir}
)
endif ()
if (UNIX AND NOT APPLE)
# Linux uses tar.xz
message(STATUS "Extracting NodeJs: ${NODEJS_DOWNLOAD_PATH} in ${download_dir}")
execute_process(
COMMAND tar xf ${NODEJS_DOWNLOAD_PATH}
WORKING_DIRECTORY ${download_dir}
)
endif ()
if (UNIX)
FILE(COPY ${download_dir}/${basename}/bin/node DESTINATION ${download_dir})
FILE(REMOVE_RECURSE ${download_dir}/${basename})
FILE(REMOVE ${NODEJS_DOWNLOAD_PATH})
endif ()
file(WRITE "${download_dir}/version.txt" "${version}")
endfunction ()