From ea40ba9c4688ade635ef0ba76e40a1ed44617613 Mon Sep 17 00:00:00 2001 From: viferga Date: Mon, 20 Jan 2020 12:18:13 -0900 Subject: [PATCH] Remove disable variables for trampoline and bootstrap, and add a new variable for disabling all unreproductible steps from the build system. --- CMakeLists.txt | 1 + source/distributable/CMakeLists.txt | 20 ++++--- .../node_loader/bootstrap/CMakeLists.txt | 23 +++++--- .../node_loader/trampoline/CMakeLists.txt | 55 +++++++++++++------ source/ports/node_port/CMakeLists.txt | 10 ++-- source/ports/py_port/CMakeLists.txt | 4 +- 6 files changed, 76 insertions(+), 37 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1bd5c7bce..f4f3bcd9b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,6 +84,7 @@ option(OPTION_BUILD_DETOURS "Build detours." ON) option(OPTION_BUILD_PORTS "Build ports." OFF) option(OPTION_BUILD_PIC "Build with position independent code." ON) option(OPTION_BUILD_SECURITY "Build with stack-smashing protection and source fortify." ON) +option(OPTION_BUILD_GUIX "Disable all build system unreproductible operations." ON) option(OPTION_FORK_SAFE "Enable fork safety." ON) option(OPTION_THREAD_SAFE "Enable thread safety." OFF) option(OPTION_COVERAGE "Enable coverage." OFF) diff --git a/source/distributable/CMakeLists.txt b/source/distributable/CMakeLists.txt index ccefd4b2c..4fbdcec89 100644 --- a/source/distributable/CMakeLists.txt +++ b/source/distributable/CMakeLists.txt @@ -161,11 +161,13 @@ target_link_libraries(${target} # Register Library if(UNIX) - add_custom_command( - TARGET ${target} - POST_BUILD - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/source/ldconfig.sh ${CMAKE_BINARY_DIR}/distributable - ) + if(NOT OPTION_BUILD_GUIX) + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/source/ldconfig.sh ${CMAKE_BINARY_DIR}/distributable + ) + endif() endif() # @@ -182,7 +184,9 @@ install(TARGETS ${target} # Register Library if(UNIX) - install(CODE "execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/source/ldconfig.sh ${CMAKE_INSTALL_PREFIX}/${INSTALL_BIN})") - install(CODE "execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/source/ldconfig.sh ${CMAKE_INSTALL_PREFIX}/${INSTALL_SHARED})") - install(CODE "execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/source/ldconfig.sh ${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB})") + if(NOT OPTION_BUILD_GUIX) + install(CODE "execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/source/ldconfig.sh ${CMAKE_INSTALL_PREFIX}/${INSTALL_BIN})") + install(CODE "execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/source/ldconfig.sh ${CMAKE_INSTALL_PREFIX}/${INSTALL_SHARED})") + install(CODE "execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/source/ldconfig.sh ${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB})") + endif() endif() diff --git a/source/loaders/node_loader/bootstrap/CMakeLists.txt b/source/loaders/node_loader/bootstrap/CMakeLists.txt index d48efe0ab..3f7fe0904 100644 --- a/source/loaders/node_loader/bootstrap/CMakeLists.txt +++ b/source/loaders/node_loader/bootstrap/CMakeLists.txt @@ -1,5 +1,5 @@ # Check if this loader is enabled -if(NOT OPTION_BUILD_LOADERS OR NOT OPTION_BUILD_LOADERS_NODE OR DISABLE_BUILD_LOADERS_NODE_BOOTSTRAP) +if(NOT OPTION_BUILD_LOADERS OR NOT OPTION_BUILD_LOADERS_NODE) return() endif() @@ -23,13 +23,20 @@ else() set(LOADER_LIBRARY_PATH "${PROJECT_BINARY_DIR}") endif() -add_custom_target(${target} ALL - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/bootstrap.js ${LOADER_LIBRARY_PATH} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/package.json ${LOADER_LIBRARY_PATH} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/package-lock.json ${LOADER_LIBRARY_PATH} - COMMAND npm install -) +if(OPTION_BUILD_GUIX) + add_custom_target(${target} ALL + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/bootstrap.js ${LOADER_LIBRARY_PATH} + ) +else() + add_custom_target(${target} ALL + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/bootstrap.js ${LOADER_LIBRARY_PATH} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/package.json ${LOADER_LIBRARY_PATH} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/package-lock.json ${LOADER_LIBRARY_PATH} + COMMAND npm install + ) +endif() # # Project options diff --git a/source/loaders/node_loader/trampoline/CMakeLists.txt b/source/loaders/node_loader/trampoline/CMakeLists.txt index feda6ff3c..0a7bd9802 100644 --- a/source/loaders/node_loader/trampoline/CMakeLists.txt +++ b/source/loaders/node_loader/trampoline/CMakeLists.txt @@ -1,5 +1,5 @@ # Check if this loader is enabled -if(NOT OPTION_BUILD_LOADERS OR NOT OPTION_BUILD_LOADERS_NODE OR DISABLE_BUILD_LOADERS_NODE_TRAMPOLINE) +if(NOT OPTION_BUILD_LOADERS OR NOT OPTION_BUILD_LOADERS_NODE) return() endif() @@ -37,14 +37,25 @@ if(MSVC) set(NODE_LOADER_TRAMPOLINE_MSVS_VERSION 2017) endif() - add_custom_target(${target} ALL - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} - COMMAND npm config set msvs_version ${NODE_LOADER_TRAMPOLINE_MSVS_VERSION} - COMMAND npm install --msvs_version=${NODE_LOADER_TRAMPOLINE_MSVS_VERSION} - COMMAND node-gyp ${NODE_LOADER_TRAMPOLINE_BUILD_TYPE} rebuild --verbose - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/build/${CMAKE_BUILD_TYPE}/trampoline.node ${LOADER_LIBRARY_PATH} - ) + if(OPTION_BUILD_GUIX) + add_custom_target(${target} ALL + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + COMMAND npm config set msvs_version ${NODE_LOADER_TRAMPOLINE_MSVS_VERSION} + # COMMAND npm install --msvs_version=${NODE_LOADER_TRAMPOLINE_MSVS_VERSION} + COMMAND node-gyp ${NODE_LOADER_TRAMPOLINE_BUILD_TYPE} rebuild --verbose + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/build/${CMAKE_BUILD_TYPE}/trampoline.node ${LOADER_LIBRARY_PATH} + ) + else() + add_custom_target(${target} ALL + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + COMMAND npm config set msvs_version ${NODE_LOADER_TRAMPOLINE_MSVS_VERSION} + COMMAND npm install --msvs_version=${NODE_LOADER_TRAMPOLINE_MSVS_VERSION} + COMMAND node-gyp ${NODE_LOADER_TRAMPOLINE_BUILD_TYPE} rebuild --verbose + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/build/${CMAKE_BUILD_TYPE}/trampoline.node ${LOADER_LIBRARY_PATH} + ) + endif() set(target_binding "${target}_binding") @@ -58,13 +69,25 @@ if(MSVC) add_dependencies(${target_binding} ${target}) else() - add_custom_target(${target} ALL - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} - COMMAND npm install - COMMAND node-gyp ${NODE_LOADER_TRAMPOLINE_BUILD_TYPE} rebuild --verbose - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/build/${CMAKE_BUILD_TYPE}/trampoline.node ${LOADER_LIBRARY_PATH} - ) + + if(OPTION_BUILD_GUIX) + add_custom_target(${target} ALL + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + # COMMAND npm install + COMMAND node-gyp ${NODE_LOADER_TRAMPOLINE_BUILD_TYPE} rebuild --verbose + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/build/${CMAKE_BUILD_TYPE}/trampoline.node ${LOADER_LIBRARY_PATH} + ) + else() + add_custom_target(${target} ALL + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + COMMAND npm install + COMMAND node-gyp ${NODE_LOADER_TRAMPOLINE_BUILD_TYPE} rebuild --verbose + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/build/${CMAKE_BUILD_TYPE}/trampoline.node ${LOADER_LIBRARY_PATH} + ) + endif() + endif() # diff --git a/source/ports/node_port/CMakeLists.txt b/source/ports/node_port/CMakeLists.txt index fa61e61c1..b19940b89 100644 --- a/source/ports/node_port/CMakeLists.txt +++ b/source/ports/node_port/CMakeLists.txt @@ -133,10 +133,12 @@ set_target_properties(${target} # Include directories # -execute_process( - COMMAND npm install - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} -) +if(NOT OPTION_BUILD_GUIX) + execute_process( + COMMAND npm install + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) +endif() execute_process( COMMAND node -p "require('node-addon-api').include" diff --git a/source/ports/py_port/CMakeLists.txt b/source/ports/py_port/CMakeLists.txt index ef3d7f2bb..45ec3e434 100644 --- a/source/ports/py_port/CMakeLists.txt +++ b/source/ports/py_port/CMakeLists.txt @@ -280,7 +280,9 @@ install(EXPORT ${target}-export # TODO: This is a nasty mock. It only will work if python port library (binary) is already installed and the # environment variable correctly set up. This must be removed when metacall is correctly distributed # and we can automate all distributions for all architectures, operative systems and all ports for all languages -install(CODE "execute_process(COMMAND pip3 install ${CMAKE_CURRENT_SOURCE_DIR}/package)") +if(NOT OPTION_BUILD_GUIX) + install(CODE "execute_process(COMMAND pip3 install ${CMAKE_CURRENT_SOURCE_DIR}/package)") +endif() # # Configure test