FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
node/tools/install.py at master · CombatCode/node · GitHub
CombatCode
/
node
Public
forked from
nodejs/node-v0.x-archive
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
node
/
tools
/
install.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
executable file
·
166 lines (135 loc) · 5.17 KB
Breadcrumbs
node
/
tools
/
install.py
Copy path
File metadata and controls
executable file
·
166 lines (135 loc) · 5.17 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#!/usr/bin/env python
import
errno
try
:
import
json
except
ImportError
:
import
simplejson
as
json
import
os
import
re
import
shutil
import
sys
# set at init time
node_prefix
=
'/usr/local'
# PREFIX variable from Makefile
install_path
=
None
# base target directory (DESTDIR + PREFIX from Makefile)
target_defaults
=
None
variables
=
None
def
abspath
(
*
args
):
path
=
os
.
path
.
join
(
*
args
)
return
os
.
path
.
abspath
(
path
)
def
load_config
():
s
=
open
(
'config.gypi'
).
read
()
s
=
re
.
sub
(
r'#.*?\n'
,
''
,
s
)
# strip comments
s
=
re
.
sub
(
r'\''
,
'"'
,
s
)
# convert quotes
return
json
.
loads
(
s
)
def
try_unlink
(
path
):
try
:
os
.
unlink
(
path
)
except
OSError
,
e
:
if
e
.
errno
!=
errno
.
ENOENT
:
raise
def
try_symlink
(
source_path
,
link_path
):
print
'symlinking %s -> %s'
%
(
source_path
,
link_path
)
try_unlink
(
link_path
)
os
.
symlink
(
source_path
,
link_path
)
def
try_mkdir_r
(
path
):
try
:
os
.
makedirs
(
path
)
except
OSError
,
e
:
if
e
.
errno
!=
errno
.
EEXIST
:
raise
def
try_rmdir_r
(
path
):
path
=
abspath
(
path
)
while
path
.
startswith
(
install_path
):
try
:
os
.
rmdir
(
path
)
except
OSError
,
e
:
if
e
.
errno
==
errno
.
ENOTEMPTY
:
return
if
e
.
errno
==
errno
.
ENOENT
:
return
raise
path
=
abspath
(
path
,
'..'
)
def
mkpaths
(
path
,
dst
):
if
dst
.
endswith
(
'/'
):
target_path
=
abspath
(
install_path
,
dst
,
os
.
path
.
basename
(
path
))
else
:
target_path
=
abspath
(
install_path
,
dst
)
return
path
,
target_path
def
try_copy
(
path
,
dst
):
source_path
,
target_path
=
mkpaths
(
path
,
dst
)
print
'installing %s'
%
target_path
try_mkdir_r
(
os
.
path
.
dirname
(
target_path
))
try_unlink
(
target_path
)
# prevent ETXTBSY errors
return
shutil
.
copy2
(
source_path
,
target_path
)
def
try_remove
(
path
,
dst
):
source_path
,
target_path
=
mkpaths
(
path
,
dst
)
print
'removing %s'
%
target_path
try_unlink
(
target_path
)
try_rmdir_r
(
os
.
path
.
dirname
(
target_path
))
def
install
(
paths
,
dst
):
map
(
lambda
path
:
try_copy
(
path
,
dst
),
paths
)
def
uninstall
(
paths
,
dst
):
map
(
lambda
path
:
try_remove
(
path
,
dst
),
paths
)
def
update_shebang
(
path
,
shebang
):
print
'updating shebang of %s to %s'
%
(
path
,
shebang
)
s
=
open
(
path
,
'r'
).
read
()
s
=
re
.
sub
(
r'#!.*\n'
,
'#!'
+
shebang
+
'
\n
'
,
s
)
open
(
path
,
'w'
).
write
(
s
)
def
npm_files
(
action
):
target_path
=
'lib/node_modules/npm/'
# don't install npm if the target path is a symlink, it probably means
# that a dev version of npm is installed there
if
os
.
path
.
islink
(
abspath
(
install_path
,
target_path
)):
return
# npm has a *lot* of files and it'd be a pain to maintain a fixed list here
# so we walk its source directory instead...
for
dirname
,
subdirs
,
basenames
in
os
.
walk
(
'deps/npm'
,
topdown
=
True
):
subdirs
[:]
=
filter
(
'test'
.
__ne__
,
subdirs
)
# skip test suites
paths
=
[
os
.
path
.
join
(
dirname
,
basename
)
for
basename
in
basenames
]
action
(
paths
,
target_path
+
dirname
[
9
:]
+
'/'
)
# create/remove symlink
link_path
=
abspath
(
install_path
,
'bin/npm'
)
if
action
==
uninstall
:
action
([
link_path
],
'bin/npm'
)
elif
action
==
install
:
try_symlink
(
'../lib/node_modules/npm/bin/npm-cli.js'
,
link_path
)
if
os
.
environ
.
get
(
'PORTABLE'
):
# This crazy hack is necessary to make the shebang execute the copy
# of node relative to the same directory as the npm script. The precompiled
# binary tarballs use a prefix of "/" which gets translated to "/bin/node"
# in the regular shebang modifying logic, which is incorrect since the
# precompiled bundle should be able to be extracted anywhere and "just work"
shebang
=
'/bin/sh
\n
// 2>/dev/null; exec "`dirname "$0"`/node" "$0" "$@"'
else
:
shebang
=
os
.
path
.
join
(
node_prefix
or
'/'
,
'bin/node'
)
update_shebang
(
link_path
,
shebang
)
else
:
assert
(
0
)
# unhandled action type
def
files
(
action
):
action
([
'out/Release/node'
],
'bin/node'
)
# install unconditionally, checking if the platform supports dtrace doesn't
# work when cross-compiling and besides, there's at least one linux flavor
# with dtrace support now (oracle's "unbreakable" linux)
action
([
'src/node.d'
],
'lib/dtrace/'
)
# behave similarly for systemtap
action
([
'src/node.stp'
],
'share/systemtap/tapset/'
)
if
'freebsd'
in
sys
.
platform
or
'openbsd'
in
sys
.
platform
:
action
([
'doc/node.1'
],
'man/man1/'
)
else
:
action
([
'doc/node.1'
],
'share/man/man1/'
)
if
'true'
==
variables
.
get
(
'node_install_npm'
):
npm_files
(
action
)
def
run
(
args
):
global
node_prefix
,
install_path
,
target_defaults
,
variables
# chdir to the project's top-level directory
os
.
chdir
(
abspath
(
os
.
path
.
dirname
(
__file__
),
'..'
))
conf
=
load_config
()
variables
=
conf
[
'variables'
]
target_defaults
=
conf
[
'target_defaults'
]
# argv[2] is a custom install prefix for packagers (think DESTDIR)
# argv[3] is a custom install prefix (think PREFIX)
# Difference is that dst_dir won't be included in shebang lines etc.
if
len
(
args
)
>
2
:
dst_dir
=
args
[
2
]
if
len
(
args
)
>
3
:
node_prefix
=
args
[
3
]
# install_path thus becomes the base target directory.
install_path
=
dst_dir
+
node_prefix
+
'/'
cmd
=
args
[
1
]
if
len
(
args
)
>
1
else
'install'
if
cmd
==
'install'
:
return
files
(
install
)
if
cmd
==
'uninstall'
:
return
files
(
uninstall
)
raise
RuntimeError
(
'Bad command: %s
\n
'
%
cmd
)
if
__name__
==
'__main__'
:
run
(
sys
.
argv
[:])
Back
|
FazBrowse Home
|
New Git URL