Skip to content

Commit 7f26ce7

Browse files
committed
Add FindNPM.cmake
1 parent 1419e9b commit 7f26ce7

File tree

7 files changed

+128
-18
lines changed

7 files changed

+128
-18
lines changed

cmake/FindNPM.cmake

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#
2+
# CMake Find NPM Package Manager by Parra Studios
3+
# CMake script to find NPM Package Manager.
4+
#
5+
# Copyright (C) 2016 - 2021 Vicente Eduardo Ferrer Garcia <[email protected]>
6+
#
7+
# Licensed under the Apache License, Version 2.0 (the "License");
8+
# you may not use this file except in compliance with the License.
9+
# You may obtain a copy of the License at
10+
#
11+
# http://www.apache.org/licenses/LICENSE-2.0
12+
#
13+
# Unless required by applicable law or agreed to in writing, software
14+
# distributed under the License is distributed on an "AS IS" BASIS,
15+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
# See the License for the specific language governing permissions and
17+
# limitations under the License.
18+
#
19+
20+
# Find NPM executable and paths
21+
#
22+
# NPM_FOUND - True if npm was found
23+
# NPM_GLOBAL_DIR - The global node_modules directory
24+
# NPM_EXECUTABLE - The path to the npm executable
25+
# NPM_VERSION - The version number
26+
27+
set(NPM_ROOT /usr/bin CACHE STRING "NPM directory")
28+
29+
find_program(NPM_EXECUTABLE
30+
NAMES npm
31+
HINTS /usr $ENV{NPM_ROOT}/npm ${NPM_ROOT}/npm
32+
)
33+
34+
if(NOT NPM_EXECUTABLE)
35+
if(NPM_FIND_REQUIRED)
36+
message(FATAL_ERROR "NPM was not found")
37+
endif()
38+
39+
return()
40+
endif()
41+
42+
# Get NPM version
43+
execute_process(COMMAND ${NPM_EXECUTABLE} -v
44+
OUTPUT_VARIABLE NPM_VERSION
45+
ERROR_VARIABLE NPM_VERSION_ERROR
46+
RESULT_VARIABLE NPM_VERSION_CODE
47+
)
48+
49+
if(NPM_VERSION_CODE)
50+
if(NPM_FIND_REQUIRED)
51+
message(FATAL_ERROR "${NPM_EXECUTABLE} -v failed:\n${NPM_VERSION_CODE}")
52+
endif()
53+
endif()
54+
55+
if(NPM_VERSION)
56+
string(STRIP ${NPM_VERSION} NPM_VERSION)
57+
endif()
58+
59+
# Get global node_modules location
60+
execute_process(COMMAND ${NPM_EXECUTABLE} root -g
61+
OUTPUT_VARIABLE NPM_GLOBAL_DIR
62+
ERROR_VARIABLE NPM_GLOBAL_DIR_ERROR
63+
RESULT_VARIABLE NPM_GLOBAL_DIR_CODE
64+
)
65+
66+
if(NPM_GLOBAL_DIR)
67+
string(STRIP ${NPM_GLOBAL_DIR} NPM_GLOBAL_DIR)
68+
endif()
69+
70+
if(NPM_GLOBAL_DIR_CODE)
71+
if(NPM_FIND_REQUIRED)
72+
message(FATAL_ERROR "${NPM_EXECUTABLE} root -g failed:\n${NPM_GLOBAL_DIR_ERROR}")
73+
endif()
74+
endif()
75+
76+
include(FindPackageHandleStandardArgs)
77+
78+
find_package_handle_standard_args(NPM
79+
FOUND_VAR NPM_FOUND
80+
REQUIRED_VARS NPM_EXECUTABLE
81+
VERSION_VAR NPM_VERSION
82+
)
83+
84+
mark_as_advanced(NPM_FOUND NPM_GLOBAL_DIR NPM_EXECUTABLE NPM_VERSION)

source/loaders/node_loader/bootstrap/CMakeLists.txt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@ endif()
77
# Plugin name and options
88
#
99

10+
if(NOT OPTION_BUILD_GUIX)
11+
find_package(NPM)
12+
13+
if(NOT NPM_FOUND)
14+
message(STATUS "NPM not found")
15+
return()
16+
endif()
17+
endif()
18+
1019
# Target name
1120
set(target node_loader_bootstrap)
1221

@@ -47,7 +56,7 @@ if(NOT OPTION_BUILD_GUIX)
4756
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
4857
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/package.json ${CMAKE_CURRENT_BINARY_DIR}
4958
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/package-lock.json ${CMAKE_CURRENT_BINARY_DIR}
50-
COMMAND npm --prefix ${CMAKE_CURRENT_BINARY_DIR} install ${CMAKE_CURRENT_BINARY_DIR}
59+
COMMAND ${NPM_EXECUTABLE} --prefix ${CMAKE_CURRENT_BINARY_DIR} install ${CMAKE_CURRENT_BINARY_DIR}
5160
COMMAND ${CMAKE_COMMAND} -E make_directory ${BOOTSTRAP_OUTPUT_PATH}/node_modules
5261
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/node_modules/cherow ${BOOTSTRAP_OUTPUT_PATH}/node_modules/cherow
5362
COMMAND ${CMAKE_COMMAND} -E echo "${target} dependencies copied from ${CMAKE_CURRENT_BINARY_DIR}/node_modules to ${BOOTSTRAP_OUTPUT_PATH}/node_modules"

source/loaders/ts_loader/bootstrap/CMakeLists.txt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,17 @@ else()
3535
endif()
3636

3737
if(NOT OPTION_BUILD_GUIX)
38+
find_package(NPM)
39+
40+
if(NOT NPM_FOUND)
41+
message(STATUS "NPM not found")
42+
return()
43+
endif()
44+
3845
# Dependencies
3946
add_custom_target(${target}_depends
4047
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib
41-
COMMAND npm install
48+
COMMAND ${NPM_EXECUTABLE} install
4249
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/package.json ${CMAKE_CURRENT_SOURCE_DIR}/lib/package-lock.json
4350
)
4451

@@ -51,7 +58,7 @@ if(NOT OPTION_BUILD_GUIX)
5158
# Build Bootstrap
5259
add_custom_target(${target}
5360
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib
54-
COMMAND npm run build
61+
COMMAND ${NPM_EXECUTABLE} run build
5562
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/lib/node_modules/typescript ${BOOTSTRAP_OUTPUT_PATH}/node_modules/typescript
5663
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lib/build/bootstrap.js ${BOOTSTRAP_OUTPUT_PATH}/bootstrap.ts
5764
SOURCES ${sources}
@@ -68,7 +75,7 @@ if(NOT OPTION_BUILD_GUIX)
6875

6976
# Test
7077
add_test(NAME ${target}
71-
COMMAND npm test
78+
COMMAND ${NPM_EXECUTABLE} test
7279
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib
7380
)
7481

source/ports/node_port/CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,15 @@ else()
3737
endif()
3838

3939
if(NOT OPTION_BUILD_GUIX)
40+
find_package(NPM)
41+
42+
if(NOT NPM_FOUND)
43+
message(STATUS "NPM not found")
44+
return()
45+
endif()
46+
4047
add_custom_target(${target} ALL
41-
COMMAND npm install --ignore-scripts
48+
COMMAND ${NPM_EXECUTABLE} install --ignore-scripts
4249
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/index.js ${NODE_PORT_OUTPUT_PATH}/node_modules/metacall/index.js
4350
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/package.json ${NODE_PORT_OUTPUT_PATH}/node_modules/metacall/package.json
4451
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/package-lock.json ${NODE_PORT_OUTPUT_PATH}/node_modules/metacall/package-lock.json

source/scripts/node/gram/CMakeLists.txt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,17 @@
22
# External dependencies
33
#
44

5-
set(NodeJS_EXECUTABLE_ONLY ON)
5+
find_package(NPM)
66

7-
find_package(NodeJS)
8-
9-
if(NOT NodeJS_FOUND)
10-
message(STATUS "NodeJS executable not found")
7+
if(NOT NPM_FOUND)
8+
message(STATUS "NPM not found")
119
return()
1210
endif()
1311

1412
# Dependencies
1513
add_custom_target(nodejs-gram-depends
1614
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/source/gram
17-
COMMAND npm install
15+
COMMAND ${NPM_EXECUTABLE} install
1816
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/source/gram/package.json ${CMAKE_CURRENT_SOURCE_DIR}/source/gram/package-lock.json
1917
)
2018

source/scripts/typescript/templating/CMakeLists.txt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,17 @@
22
# External dependencies
33
#
44

5-
set(NodeJS_EXECUTABLE_ONLY ON)
5+
find_package(NPM)
66

7-
find_package(NodeJS)
8-
9-
if(NOT NodeJS_FOUND)
10-
message(STATUS "NodeJS executable not found")
7+
if(NOT NPM_FOUND)
8+
message(STATUS "NPM not found")
119
return()
1210
endif()
1311

1412
# Dependencies
1513
add_custom_target(typescript-templating-depends
1614
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/source/templating
17-
COMMAND npm install
15+
COMMAND ${NPM_EXECUTABLE} install
1816
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/source/templating/package.json ${CMAKE_CURRENT_SOURCE_DIR}/source/templating/package-lock.json
1917
)
2018

source/tests/metacall_python_open_test/CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ add_executable(${META_PROJECT_NAME}::${target} ALIAS ${target})
6060
#
6161

6262
if(NOT OPTION_BUILD_GUIX)
63+
find_package(NPM)
64+
65+
if(NOT NPM_FOUND)
66+
message(STATUS "NPM not found")
67+
return()
68+
endif()
69+
6370
if(MSVC)
6471
set(DEPENDS_OUTPUT_PATH "${PROJECT_BINARY_DIR}/${CMAKE_BUILD_TYPE}")
6572
else()
@@ -68,7 +75,7 @@ if(NOT OPTION_BUILD_GUIX)
6875

6976
add_custom_target(${target}-depends
7077
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
71-
COMMAND npm --prefix ${CMAKE_CURRENT_BINARY_DIR} install jsonwebtoken
78+
COMMAND ${NPM_EXECUTABLE} --prefix ${CMAKE_CURRENT_BINARY_DIR} install jsonwebtoken
7279
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/node_modules ${DEPENDS_OUTPUT_PATH}/node_modules
7380
)
7481

0 commit comments

Comments
 (0)