node-webkit-bootstrap 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/Gemfile +2 -0
- data/LICENSE +674 -0
- data/README.md +278 -0
- data/Rakefile +5 -0
- data/lib/node-webkit-bootstrap/bootstrap/index.html +35 -0
- data/lib/node-webkit-bootstrap/bootstrap/vendor/arch/linux/ia32/hello.js +1 -0
- data/lib/node-webkit-bootstrap/bootstrap/vendor/arch/linux/x64/hello.js +1 -0
- data/lib/node-webkit-bootstrap/bootstrap/vendor/arch/osx/ia32/hello.js +1 -0
- data/lib/node-webkit-bootstrap/bootstrap/vendor/arch/win/ia32/hello.js +1 -0
- data/lib/node-webkit-bootstrap/bootstrap/vendor/js/jquery.js +9597 -0
- data/lib/node-webkit-bootstrap/rake.rb +266 -0
- data/lib/node-webkit-bootstrap/tasks/build.rake +120 -0
- data/lib/node-webkit-bootstrap/tasks/download.rake +7 -0
- data/lib/node-webkit-bootstrap/tasks/run.rake +15 -0
- data/lib/node-webkit-bootstrap/tasks/test.rake +17 -0
- data/lib/node-webkit-bootstrap/test/index.html +16 -0
- data/lib/node-webkit-bootstrap/vendor/node-webkit/linux/ia32/libffmpegsumo.so +0 -0
- data/lib/node-webkit-bootstrap/vendor/node-webkit/linux/x64/libffmpegsumo.so +0 -0
- data/lib/node-webkit-bootstrap/vendor/node-webkit/osx/ia32/Contents/Frameworks/node-webkit Framework.framework/Libraries/ffmpegsumo.so +0 -0
- data/lib/node-webkit-bootstrap/vendor/node-webkit/win/ia32/ffmpegsumo.dll +0 -0
- data/misc/bootstrap.js +1 -0
- data/node-webkit-bootstrap.gemspec +18 -0
- metadata +118 -0
@@ -0,0 +1,266 @@
|
|
1
|
+
require "curb"
|
2
|
+
require "json"
|
3
|
+
require "rake"
|
4
|
+
require "rbconfig"
|
5
|
+
require "rubygems/package"
|
6
|
+
require "zlib"
|
7
|
+
require "zip/zip"
|
8
|
+
|
9
|
+
# Entry point for Rakefile
|
10
|
+
|
11
|
+
DSL = Rake::DSL
|
12
|
+
|
13
|
+
module NodeWebkitBootstrap
|
14
|
+
class Rake
|
15
|
+
class << self
|
16
|
+
include DSL
|
17
|
+
|
18
|
+
attr_accessor :app
|
19
|
+
attr_accessor :app_path
|
20
|
+
attr_accessor :build_deps
|
21
|
+
attr_accessor :rake_namespace
|
22
|
+
attr_accessor :nw_version
|
23
|
+
attr_accessor :run_package
|
24
|
+
attr_accessor :build_package
|
25
|
+
attr_accessor :test_package
|
26
|
+
attr_accessor :test_path
|
27
|
+
end
|
28
|
+
|
29
|
+
@here = File.expand_path "..", __FILE__
|
30
|
+
|
31
|
+
@app = "node-webkit-bootstrap"
|
32
|
+
|
33
|
+
@rake_namespace = "node-webkit-bootstrap"
|
34
|
+
|
35
|
+
@build_deps = []
|
36
|
+
|
37
|
+
@run_package = {
|
38
|
+
name: @app,
|
39
|
+
main: "index.html",
|
40
|
+
window: {
|
41
|
+
toolbar: true,
|
42
|
+
width: 660,
|
43
|
+
height: 500
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
@build_package = {
|
48
|
+
name: @app,
|
49
|
+
main: "index.html",
|
50
|
+
window: {
|
51
|
+
toolbar: false,
|
52
|
+
width: 660,
|
53
|
+
height: 500
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
@test_package = {
|
58
|
+
name: @app,
|
59
|
+
main: "index.html",
|
60
|
+
window: {
|
61
|
+
toolbar: false,
|
62
|
+
show: false,
|
63
|
+
width: 660,
|
64
|
+
height: 500
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
@app_path = "#{@here}/bootstrap"
|
69
|
+
@test_path = "#{@here}/test"
|
70
|
+
@nw_version = "0.5.1"
|
71
|
+
|
72
|
+
def self.register tasks = ["*"], &block
|
73
|
+
yield self if block_given?
|
74
|
+
|
75
|
+
tasks.each do |task|
|
76
|
+
FileList["#{@here}/tasks/#{task}.rake"].each do |f|
|
77
|
+
import f
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.nw_targets
|
83
|
+
{ linux: [:ia32, :x64],
|
84
|
+
osx: [:ia32],
|
85
|
+
win: [:ia32] }
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.vendor_dirs platform, arch
|
89
|
+
here = File.expand_path "..", __FILE__
|
90
|
+
|
91
|
+
[ "#{here}/vendor/node-webkit/#{platform}/#{arch}",
|
92
|
+
# This one is for the app itself.
|
93
|
+
"vendor/node-webkit-bootstrap/node-webkit/#{platform}/#{arch}" ]
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.vendor_deps
|
97
|
+
nw_targets.map do |platform, archs|
|
98
|
+
archs.map do |arch|
|
99
|
+
vendor_dirs(platform,arch).map do |dir|
|
100
|
+
Dir["#{dir}/**/*"]
|
101
|
+
end.flatten
|
102
|
+
end.flatten
|
103
|
+
end.flatten
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.download_nw version = nw_version
|
107
|
+
nw_targets.each do |platform, archs|
|
108
|
+
case platform
|
109
|
+
when :linux
|
110
|
+
file_extension = "tar.gz"
|
111
|
+
executables = ["nw"]
|
112
|
+
when :win
|
113
|
+
file_extension = "zip"
|
114
|
+
executables = ["nw.exe"]
|
115
|
+
when :osx
|
116
|
+
file_extension = :zip
|
117
|
+
executables = [
|
118
|
+
"Contents/MacOS/node-webkit",
|
119
|
+
"Contents/Frameworks/node-webkit Helper.app/Contents/MacOS/node-webkit Helper"
|
120
|
+
]
|
121
|
+
end
|
122
|
+
|
123
|
+
archs.each do |arch|
|
124
|
+
puts "Downloading node-wekbit binary for #{platform} #{arch}"
|
125
|
+
directory = "tmp/node-webkit/#{platform}/#{arch}"
|
126
|
+
FileUtils.rm_rf directory
|
127
|
+
FileUtils.mkdir_p directory
|
128
|
+
|
129
|
+
archive = "tmp/node-webkit-v#{version}-#{platform}-#{arch}.#{file_extension}"
|
130
|
+
|
131
|
+
unless File.exists? archive
|
132
|
+
failed = false
|
133
|
+
url = download_url(version, platform, arch, file_extension)
|
134
|
+
puts "Downloading #{url} to #{archive}"
|
135
|
+
Curl::Easy.download url, archive do |curl|
|
136
|
+
curl.on_failure do
|
137
|
+
failed = true
|
138
|
+
end
|
139
|
+
end
|
140
|
+
raise "Download failed for #{platform} #{arch}" if failed
|
141
|
+
end
|
142
|
+
|
143
|
+
puts "Decompressing #{archive}"
|
144
|
+
if file_extension == "tar.gz"
|
145
|
+
Gem::Package::TarReader.new(Zlib::GzipReader.open archive).each do |entry|
|
146
|
+
next unless entry.file?
|
147
|
+
|
148
|
+
path = entry.full_name.split("/")[1..-1].join "/"
|
149
|
+
file = "#{directory}/#{path}"
|
150
|
+
FileUtils.mkdir_p File.dirname(file)
|
151
|
+
|
152
|
+
puts "Extracting #{path}"
|
153
|
+
File.open file, "wb" do |fd|
|
154
|
+
fd.write entry.read
|
155
|
+
end
|
156
|
+
end
|
157
|
+
else
|
158
|
+
Zip::ZipFile.open archive do |zipfile|
|
159
|
+
zipfile.each do |file|
|
160
|
+
path = file.name.split("/")[1..-1].join "/"
|
161
|
+
target = "#{directory}/#{path}"
|
162
|
+
FileUtils.mkdir_p File.dirname(target)
|
163
|
+
|
164
|
+
puts "Extracting #{path}"
|
165
|
+
zipfile.extract file, target unless File.exists? target
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
vendor_dirs(platform,arch).each do |vendordir|
|
171
|
+
if File.exists? vendordir
|
172
|
+
Dir["#{vendordir}/**/*"].each do |file|
|
173
|
+
next if File.directory? file
|
174
|
+
|
175
|
+
path = file.sub "#{vendordir}/",""
|
176
|
+
target = "#{directory}/#{path}"
|
177
|
+
FileUtils.mkdir_p File.dirname(target)
|
178
|
+
|
179
|
+
puts "Vendoring #{path}"
|
180
|
+
FileUtils.cp file, target
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
executables.each do |executable|
|
186
|
+
FileUtils.chmod 0755, "#{directory}/#{executable}"
|
187
|
+
end
|
188
|
+
|
189
|
+
puts "Done!"
|
190
|
+
puts ""
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def self.download_url version, platform, arch, file_extension
|
196
|
+
"https://s3.amazonaws.com/node-webkit/v#{version}/node-webkit-v#{version}-#{platform}-#{arch}.#{file_extension}"
|
197
|
+
end
|
198
|
+
|
199
|
+
def self.build_runtime app, path, mode
|
200
|
+
basedir = "tmp/node-webkit-bootstrap/#{app}-#{mode}"
|
201
|
+
|
202
|
+
FileUtils.rm_rf basedir
|
203
|
+
FileUtils.mkdir_p File.dirname(basedir)
|
204
|
+
FileUtils.cp_r path, basedir
|
205
|
+
|
206
|
+
case mode
|
207
|
+
when :build
|
208
|
+
package = NodeWebkitBootstrap::Rake.build_package
|
209
|
+
when :run
|
210
|
+
package = NodeWebkitBootstrap::Rake.run_package
|
211
|
+
when :test
|
212
|
+
package = NodeWebkitBootstrap::Rake.test_package
|
213
|
+
end
|
214
|
+
|
215
|
+
# If package[:main] is not a string, treat
|
216
|
+
# it as a proc and pass it the application path
|
217
|
+
unless package[:main].kind_of? String
|
218
|
+
package[:main] = package[:main].call basedir
|
219
|
+
end
|
220
|
+
|
221
|
+
File.open "#{basedir}/package.json", "w" do |file|
|
222
|
+
file.write JSON.pretty_generate(package)
|
223
|
+
end
|
224
|
+
if package[:dependencies]
|
225
|
+
sh "which npm && cd 'tmp/node-webkit-bootstrap/#{app}-build' && npm install --production"
|
226
|
+
end
|
227
|
+
|
228
|
+
sh "touch 'tmp/node-webkit-bootstrap/#{app}-#{mode}'"
|
229
|
+
end
|
230
|
+
|
231
|
+
file "tmp/node-webkit" => vendor_deps do
|
232
|
+
download_nw
|
233
|
+
sh "touch tmp/node-webkit"
|
234
|
+
end
|
235
|
+
|
236
|
+
def self.run_app app, mode
|
237
|
+
case RbConfig::CONFIG["target_os"]
|
238
|
+
when /darwin/i
|
239
|
+
path = "tmp/node-webkit/osx/ia32/Contents/MacOS/node-webkit"
|
240
|
+
when /mswin|mingw/i
|
241
|
+
path = "tmp/node-webkit/win/ia32/nw.exe"
|
242
|
+
when /linux/i
|
243
|
+
case RbConfig::CONFIG["target_cpu"]
|
244
|
+
when "x86_64"
|
245
|
+
path = "tmp/node-webkit/linux/x64/nw"
|
246
|
+
when "x86"
|
247
|
+
path = "tmp/node-webkit/linux/ia32/nw"
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
raise "Unsupported platform!" unless path
|
252
|
+
|
253
|
+
sh "#{path} 'tmp/node-webkit-bootstrap/#{app}-#{mode}'"
|
254
|
+
end
|
255
|
+
|
256
|
+
def self.add_tasks &block
|
257
|
+
if rake_namespace
|
258
|
+
namespace rake_namespace do
|
259
|
+
block.call
|
260
|
+
end
|
261
|
+
else
|
262
|
+
block.call
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require "json"
|
2
|
+
require "zip/zip"
|
3
|
+
|
4
|
+
NodeWebkitBootstrap::Rake.add_tasks do
|
5
|
+
app = NodeWebkitBootstrap::Rake.app
|
6
|
+
build_deps = NodeWebkitBootstrap::Rake.build_deps
|
7
|
+
path = NodeWebkitBootstrap::Rake.app_path
|
8
|
+
|
9
|
+
desc "Build #{app} (platform is one of: \"win\", \"linux\", \"osx\" or \"all\", default: \"all\")."
|
10
|
+
task :build, [:platform] => ["tmp/node-webkit-bootstrap/#{app}-build", "tmp/node-webkit"] do |t, args|
|
11
|
+
platform = args[:platform] || "all"
|
12
|
+
|
13
|
+
if platform == "osx" or platform == "all"
|
14
|
+
build_osx app
|
15
|
+
end
|
16
|
+
if platform == "win" or platform == "all"
|
17
|
+
build_win app
|
18
|
+
end
|
19
|
+
if platform == "linux" or platform == "all"
|
20
|
+
build_linux app, :ia32
|
21
|
+
build_linux app, :x64
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
file "tmp/node-webkit-bootstrap/#{app}-build" => FileList["Rakefile", "#{path}/**/*"].concat(build_deps) do
|
26
|
+
NodeWebkitBootstrap::Rake.build_runtime app, path, :build
|
27
|
+
end
|
28
|
+
|
29
|
+
def build_osx app
|
30
|
+
build_nw app, :osx, :ia32
|
31
|
+
basedir = "tmp/node-webkit-bootstrap/#{app}-osx-ia32"
|
32
|
+
|
33
|
+
FileUtils.rm_rf basedir
|
34
|
+
FileUtils.cp_r "tmp/node-webkit/osx/ia32", basedir
|
35
|
+
FileUtils.cp "build/#{app}-osx-ia32.nw", "#{basedir}/Contents/Resources/app.nw"
|
36
|
+
|
37
|
+
archive = "build/#{app}-osx-ia32.zip"
|
38
|
+
puts "Creating #{archive}"
|
39
|
+
|
40
|
+
FileUtils.rm_f archive
|
41
|
+
Zip::ZipFile.open archive, Zip::ZipFile::CREATE do |zip|
|
42
|
+
Dir["#{basedir}/**/*"].each do |file|
|
43
|
+
file.gsub! "#{basedir}/", ""
|
44
|
+
target = "#{app}.app/#{file}"
|
45
|
+
|
46
|
+
puts "Adding #{target}"
|
47
|
+
zip.add target, "#{basedir}/#{file}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def build_win app
|
53
|
+
build_nw app, :win, :ia32
|
54
|
+
basedir = "tmp/node-webkit-bootstrap/#{app}-win-ia32"
|
55
|
+
|
56
|
+
FileUtils.rm_rf basedir
|
57
|
+
FileUtils.cp_r "tmp/node-webkit/win/ia32", basedir
|
58
|
+
sh "cat '#{basedir}/nw.exe' 'build/#{app}-win-ia32.nw' > '#{basedir}/#{app}.exe'"
|
59
|
+
FileUtils.rm "#{basedir}/nw.exe"
|
60
|
+
|
61
|
+
archive = "build/#{app}-win-ia32.zip"
|
62
|
+
puts "Creating #{archive}"
|
63
|
+
|
64
|
+
FileUtils.rm_f archive
|
65
|
+
Zip::ZipFile.open archive, Zip::ZipFile::CREATE do |zip|
|
66
|
+
Dir["#{basedir}/**/*"].each do |file|
|
67
|
+
file.gsub! "#{basedir}/", ""
|
68
|
+
target = "#{app}/#{file}"
|
69
|
+
|
70
|
+
puts "Adding #{target}"
|
71
|
+
zip.add target, "#{basedir}/#{file}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def build_nw app, platform, arch
|
77
|
+
archive = "build/#{app}-#{platform}-#{arch}.nw"
|
78
|
+
|
79
|
+
FileUtils.mkdir_p "build"
|
80
|
+
FileUtils.rm_rf archive
|
81
|
+
|
82
|
+
puts "Creating #{archive}"
|
83
|
+
Zip::ZipFile.open archive, Zip::ZipFile::CREATE do |zip|
|
84
|
+
FileList["tmp/node-webkit-bootstrap/#{app}-build/**/*"].each do |file|
|
85
|
+
target = file.sub("tmp/node-webkit-bootstrap/#{app}-build/","")
|
86
|
+
|
87
|
+
# Filter app platform-specific vendor stuff.
|
88
|
+
next if target.match "vendor/arch" and not target.match "vendor/arch/#{platform}/#{arch}"
|
89
|
+
|
90
|
+
puts "Adding #{target}"
|
91
|
+
zip.add target, file
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def build_linux app, arch
|
97
|
+
build_nw app, :linux, arch
|
98
|
+
basedir = "tmp/node-webkit-bootstrap/#{app}-linux-#{arch}"
|
99
|
+
|
100
|
+
FileUtils.rm_rf basedir
|
101
|
+
FileUtils.cp_r "tmp/node-webkit/linux/#{arch}", basedir
|
102
|
+
sh "cat '#{basedir}/nw' 'build/#{app}-linux-#{arch}.nw' > '#{basedir}/#{app}'"
|
103
|
+
FileUtils.chmod 0755, "#{basedir}/#{app}"
|
104
|
+
FileUtils.rm "#{basedir}/nw"
|
105
|
+
|
106
|
+
archive = "build/#{app}-linux-#{arch}.zip"
|
107
|
+
puts "Creating #{archive}"
|
108
|
+
|
109
|
+
FileUtils.rm_f archive
|
110
|
+
Zip::ZipFile.open archive, Zip::ZipFile::CREATE do |zip|
|
111
|
+
Dir["#{basedir}/**/*"].each do |file|
|
112
|
+
file.gsub! "#{basedir}/", ""
|
113
|
+
target = "#{app}/#{file}"
|
114
|
+
|
115
|
+
puts "Adding #{target}"
|
116
|
+
zip.add target, "#{basedir}/#{file}"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
NodeWebkitBootstrap::Rake.add_tasks do
|
2
|
+
desc "Download latest node-webkit code (default version: #{NodeWebkitBootstrap::Rake.nw_version})."
|
3
|
+
task :download, [:version] do |t, args|
|
4
|
+
version = args[:version] || NodeWebkitBootstrap::Rake.nw_version
|
5
|
+
NodeWebkitBootstrap::Rake.download_nw version
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
NodeWebkitBootstrap::Rake.add_tasks do
|
2
|
+
app = NodeWebkitBootstrap::Rake.app
|
3
|
+
build_deps = NodeWebkitBootstrap::Rake.build_deps
|
4
|
+
app_path = NodeWebkitBootstrap::Rake.app_path
|
5
|
+
|
6
|
+
desc "Run #{app}."
|
7
|
+
task :run => [ "tmp/node-webkit",
|
8
|
+
"tmp/node-webkit-bootstrap/#{app}-run"] do
|
9
|
+
NodeWebkitBootstrap::Rake.run_app app, :run
|
10
|
+
end
|
11
|
+
|
12
|
+
file "tmp/node-webkit-bootstrap/#{app}-run" => FileList["Rakefile", "#{app_path}/**/*"].concat(build_deps) do
|
13
|
+
NodeWebkitBootstrap::Rake.build_runtime app, app_path, :run
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
NodeWebkitBootstrap::Rake.add_tasks do
|
2
|
+
next if ENV["NODE_WEBKIT_BOOTSTRAP_NO_TESTS"]
|
3
|
+
|
4
|
+
app = NodeWebkitBootstrap::Rake.app
|
5
|
+
build_deps = NodeWebkitBootstrap::Rake.build_deps
|
6
|
+
test_path = NodeWebkitBootstrap::Rake.test_path
|
7
|
+
|
8
|
+
desc "Run #{app} tests."
|
9
|
+
task :test => [ "tmp/node-webkit",
|
10
|
+
"tmp/node-webkit-bootstrap/#{app}-test"] do
|
11
|
+
NodeWebkitBootstrap::Rake.run_app app, :test
|
12
|
+
end
|
13
|
+
|
14
|
+
file "tmp/node-webkit-bootstrap/#{app}-test" => FileList["Rakefile", "#{test_path}/**/*"].concat(build_deps) do
|
15
|
+
NodeWebkitBootstrap::Rake.build_runtime app, test_path, :test
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>node-webkit-bootstrap</title>
|
4
|
+
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<meta charset="utf-8">
|
7
|
+
|
8
|
+
<script>
|
9
|
+
console.log("Level 1 diagnostic of my positronic net all good Captain.");
|
10
|
+
console.log("I will now deactivate myself. Good Bye!");
|
11
|
+
process.exit(0);
|
12
|
+
</script>
|
13
|
+
</head>
|
14
|
+
|
15
|
+
<body></body>
|
16
|
+
</html>
|