lyp 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 86f269cc3a5d4371afd93fdb52179687f39e004d
4
- data.tar.gz: b7e7ab100e40d0be46b4d61c4d3a2aa1aa371c38
3
+ metadata.gz: 0526bbb1656a6c6908733533c3bba2328fe7ae6e
4
+ data.tar.gz: c3bb37df62281ff3dcb02d06dffa6fbb9ad0bd93
5
5
  SHA512:
6
- metadata.gz: 64f17f1ca324b90ca147fc5bd41c77e52f42bc960b145204ecffb3926deda54e84930881a1f1d809e458151f27d94d17f025474cc06c40c9b6a2d7f87a34ff73
7
- data.tar.gz: 81ec32c68983e53bd1eff21e524ff2f1143c97dae6b4ba8017055da48b40839da4dae9591b147a47f2f36b8ceb9f7e4fb0456aeeef1e834a289b78f3e6d9dfbf
6
+ metadata.gz: c276e9128136b033690feca8346fc5012ef6d2a8a4f3394eb59a67d75f141b8a0ac00ee9224c9386669bfa63395221fd6bb24b5e1466045101dbefb142508c29
7
+ data.tar.gz: 1e613e28b8b5c03e5fcf22dff77e51d82f90b03d227f570bf7e76ffd089e30ff843a0a2b72ebc7de7e1f9602a06197271da5f47ca09d246fabef7b22942e57d4
data/README.md CHANGED
@@ -11,8 +11,11 @@ __No hassle Lilypond installation__: With lyp you can also install any version o
11
11
  ## Table of contents
12
12
 
13
13
  - [Installation](#installation)
14
- - [How lyp works](#how-lyp-works)
15
- - [Uninstalling](#uninstalling)
14
+ - [System requirements](#system-requirements)
15
+ - [Installing lyp as a Ruby gem](#installing-lyp-as-a-ruby-gem)
16
+ - [Installing lyp as a standalone release](#installing-lyp-as-a-standalone-release)
17
+ - [Uninstalling lyp](#uninstalling-lyp)
18
+ - [How lyp works](#how-lyp-works)
16
19
  - [Working with packages](#working-with-packages)
17
20
  - [What constitutes a package?](#what-constitutes-a-package)
18
21
  - [Installing packages](#installing-packages)
@@ -36,20 +39,33 @@ __No hassle Lilypond installation__: With lyp you can also install any version o
36
39
 
37
40
  ## Installation
38
41
 
39
- **Note**: lyp is tested to work on Linux and Mac OSX. Installing and using it on Windows would probably be problematic.
42
+ ### System requirements
40
43
 
41
- #### Installing lyp as a Ruby gem
44
+ Lyp is tested to work on Linux, Mac OSX and Windows 7+.
42
45
 
43
- If you have a recent (>=1.9.3) version of Ruby on your machine, you can install lyp as a gem:
46
+ **Note**: Windows users will currently need to install lyp as a Ruby gem, and will also need to have git installed in order to be able to install packages.
47
+
48
+ ### Installing lyp as a Ruby gem
49
+
50
+ If you have a recent (>=1.9.3) version of Ruby on your machine, you can install lyp as a gem.
44
51
 
45
52
  ```bash
53
+ # Linux/OSX only
46
54
  $ gem install lyp
47
55
  $ lyp install self
48
56
  ```
49
57
 
50
58
  The `lyp install self` command is needed in order to setup the `~/.lyp` working directory and add the lyp binaries directory to your `PATH` (see below), by adding a line of code to your shell profile file.
51
59
 
52
- #### Installing lyp without Ruby
60
+ Windows users should install the lyp-win gem:
61
+
62
+ ```bash
63
+ > gem install lyp-win
64
+ ```
65
+
66
+ On Windows, there's no need to run the `lyp install self` command.
67
+
68
+ ### Installing lyp as a standalone release
53
69
 
54
70
  If you don't have Ruby on your machine you can install lyp as a stand alone package using the install script ([view source](https://git.io/getlyp)):
55
71
 
@@ -76,19 +92,7 @@ https://github.com/noteflakes/lyp/releases/download/v0.2.1/lyp-0.2.1-linux-x86_6
76
92
 
77
93
  **Note**: using the standalone release of lyp requires having git on your machine.
78
94
 
79
- ### How lyp works
80
-
81
- Lyp sets up a working directory in `~/.lyp` where it keeps its binaries, installed packages, and installed versions of lilypond. Lyp provides a wrapper script for lilypond, which does the following:
82
-
83
- - Select the correct version of lilypond to use (see below).
84
- - Scan the given lilypond file for any dependencies (specified using `\require`), and also recursively scan any include files for dependencies
85
- - Resolve the dependency tree and calculate the correct versions to use for each required package.
86
- - Create a wrapper lilypond file that loads the packages.
87
- - Invoke the selected version of lilypond.
88
-
89
- For more information on running lilypond see the section on [Running lilypond](#running-lilypond).
90
-
91
- ### Uninstalling
95
+ ### Uninstalling lyp
92
96
 
93
97
  In order to remove lyp from your system use the `uninstall self` command:
94
98
 
@@ -104,6 +108,18 @@ In order to completely remove all files in `~/.lyp` you can simply delete the di
104
108
  $ rm -rf ~/.lyp
105
109
  ```
106
110
 
111
+ ## How lyp works
112
+
113
+ Lyp sets up a working directory in `~/.lyp` where it keeps its binaries, installed packages, and installed versions of lilypond. Lyp provides a wrapper script for lilypond, which does the following:
114
+
115
+ - Select the correct version of lilypond to use (see below).
116
+ - Scan the given lilypond file for any dependencies (specified using `\require`), and also recursively scan any include files for dependencies
117
+ - Resolve the dependency tree and calculate the correct versions to use for each required package.
118
+ - Create a wrapper lilypond file that loads the packages.
119
+ - Invoke the selected version of lilypond.
120
+
121
+ For more information on running lilypond see the section on [Running lilypond](#running-lilypond).
122
+
107
123
  ## Working with Packages
108
124
 
109
125
  A package is a library of lilypond code, containing one or more lilypond files, that provide commonly-used functionality for users. A package can be a library of scheme code to extend lilypond, as in openlilylib; or a stylesheet which contains music fonts and additional lilypond code to change the look of the music: font, spacing, line widths, sizes, etc.
@@ -18,7 +18,7 @@ download() {
18
18
  }
19
19
 
20
20
  WORKDIR="/tmp/lyp-release-installer"
21
- LYP_VERSION="0.2.2"
21
+ LYP_VERSION="0.2.3"
22
22
  URL_BASE="https://github.com/noteflakes/lyp/releases/download/v$LYP_VERSION"
23
23
 
24
24
  PLATFORM=`uname -sp`
data/lib/lyp.rb CHANGED
@@ -1,33 +1,15 @@
1
- # test for existence of
2
- $rugged_available = begin
3
- gem 'rugged', '>=0.23.0'
4
- require 'rugged'
5
- rescue Exception
6
- nil
7
- end
1
+ def req(f); require File.expand_path("lyp/#{f}", File.dirname(__FILE__)); end
8
2
 
9
- $git_available = `git --version` rescue nil
3
+ req 'base'
4
+ req 'system'
5
+ req 'settings'
10
6
 
11
- unless $rugged_available || $git_available
12
- raise "Lyp needs git in order to be able to install packages. Please install git and then try again."
13
- end
7
+ Lyp::System.test_rugged_gem!
14
8
 
15
- unless $rugged_available
16
- require 'lyp/git_based_rugged'
17
- end
18
-
19
- %w{
20
- base
21
- system
22
- settings
23
-
24
- template
25
- resolver
26
- wrapper
27
-
28
- package
29
- lilypond
30
- }.each do |f|
31
- require File.expand_path("lyp/#{f}", File.dirname(__FILE__))
32
- end
9
+ req 'template'
10
+ req 'resolver'
11
+ req 'wrapper'
12
+ req 'package'
13
+ req 'lilypond'
33
14
 
15
+ req 'windows' if Lyp::WINDOWS
@@ -1,6 +1,11 @@
1
1
  require 'fileutils'
2
2
 
3
3
  module Lyp
4
+ WINDOWS = Gem.win_platform?
5
+ TMP_DIR = WINDOWS ? "#{Dir.home}/AppData/Local/Temp" : "/tmp"
6
+ TMP_ROOT = "#{TMP_DIR}/lyp"
7
+ FileUtils.mkdir_p(TMP_ROOT)
8
+
4
9
  # A package specifier is of the form <package>@<version specifier>, where
5
10
  # the version specifier can be simply a version number, or include an operator
6
11
  # before the version number.
@@ -228,7 +228,7 @@ class Lyp::CLI < Thor
228
228
  if pattern == 'lilypond'
229
229
  list = Lyp::Lilypond.list
230
230
  if list.empty?
231
- puts LILYPOND_NOT_FOUND_MSG
231
+ puts Lyp::LILYPOND_NOT_FOUND_MSG
232
232
  else
233
233
  puts LILYPOND_PREAMBLE
234
234
  list.each {|info| puts format_lilypond_entry(info)}
@@ -267,7 +267,7 @@ class Lyp::CLI < Thor
267
267
  if current
268
268
  puts Lyp::Lilypond.current_lilypond
269
269
  else
270
- puts LILYPOND_NOT_FOUND_MSG
270
+ puts Lyp::LILYPOND_NOT_FOUND_MSG
271
271
  end
272
272
  else
273
273
  Lyp::Package.which(args.first).each {|p| puts p}
@@ -1,4 +1,10 @@
1
1
  #(begin
2
+ (define lyp:path-separator "/")
3
+ ;(define lyp:path-separator (list->string (list
4
+ ; (if (eq? PLATFORM 'windows) #\\ #\/ ))))
5
+
6
+ (define (lyp:file-join . ls) (string-join ls lyp:path-separator))
7
+
2
8
  ; hash table mapping package refs to package names
3
9
  (define lyp:package-refs (make-hash-table))
4
10
 
@@ -34,7 +40,7 @@
34
40
  (base-path (if (null? package)
35
41
  lyp:current-package-dir (lyp:name->dir package)))
36
42
  )
37
- (string-append base-path "/" path)
43
+ (lyp:file-join base-path path)
38
44
  ))
39
45
 
40
46
  ; converts a package file reference to absolute path
@@ -70,7 +76,7 @@
70
76
  (define (lyp:require ref) (let* (
71
77
  (name (lyp:ref->name ref))
72
78
  (package-dir (lyp:name->dir name))
73
- (entry-point-path (string-append package-dir "/package.ly"))
79
+ (entry-point-path (lyp:file-join package-dir "package.ly"))
74
80
  (loaded? (hash-ref lyp:package-loaded? name))
75
81
  (prev-package-dir lyp:current-package-dir)
76
82
  )
@@ -95,7 +95,7 @@ module Lyp::Lilypond
95
95
  default = latest[:path]
96
96
  set_default_lilypond(default)
97
97
  else
98
- raise LILYPOND_NOT_FOUND_MSG
98
+ raise Lyp::LILYPOND_NOT_FOUND_MSG
99
99
  end
100
100
  end
101
101
 
@@ -110,7 +110,7 @@ module Lyp::Lilypond
110
110
  end
111
111
 
112
112
  def session_settings_filename
113
- "/tmp/lyp.session.#{Process.getsid}.yml"
113
+ "#{Lyp::TMP_ROOT}/session.#{Process.getsid}.yml"
114
114
  end
115
115
 
116
116
  CMP_VERSION = proc do |x, y|
@@ -261,11 +261,15 @@ module Lyp::Lilypond
261
261
  STDERR.puts "Installing version #{version}" unless opts[:silent]
262
262
  install_version(version, opts)
263
263
 
264
- lilypond_path = "#{Lyp.lilyponds_dir}/#{version}/bin/lilypond"
264
+ lilypond_path = lyp_lilypond_path(version)
265
265
  set_current_lilypond(lilypond_path)
266
266
  set_default_lilypond(lilypond_path) if opts[:default]
267
267
  end
268
268
 
269
+ def lyp_lilypond_path(version)
270
+ "#{Lyp.lilyponds_dir}/#{version}/bin/lilypond"
271
+ end
272
+
269
273
  def detect_version_from_specifier(version_specifier)
270
274
  case version_specifier
271
275
  when /^\d/
@@ -299,6 +303,8 @@ module Lyp::Lilypond
299
303
  "linux-64"
300
304
  when "ppc-linux"
301
305
  "linux-ppc"
306
+ when "x64-mingw32"
307
+ "mingw"
302
308
  end
303
309
  end
304
310
 
@@ -315,7 +321,14 @@ module Lyp::Lilypond
315
321
  end
316
322
 
317
323
  def lilypond_install_url(platform, version, opts)
318
- ext = platform =~ /darwin/ ? ".tar.bz2" : ".sh"
324
+ ext = case platform
325
+ when /darwin/
326
+ ".tar.bz2"
327
+ when /linux/
328
+ ".sh"
329
+ when /mingw/
330
+ ".exe"
331
+ end
319
332
  filename = "lilypond-#{version}-1.#{platform}"
320
333
 
321
334
  "#{BASE_URL}/#{platform}/#{filename}#{ext}"
@@ -323,7 +336,7 @@ module Lyp::Lilypond
323
336
 
324
337
  def temp_install_filename(url)
325
338
  u = URI(url)
326
- "/tmp/lyp-installer-#{File.basename(u.path)}"
339
+ "#{Lyp::TMP_ROOT}/#{File.basename(u.path)}"
327
340
  end
328
341
 
329
342
  def download_lilypond(url, fn, opts)
@@ -352,7 +365,7 @@ module Lyp::Lilypond
352
365
  end
353
366
 
354
367
  def install_lilypond_files(fn, platform, version, opts)
355
- tmp_target = "/tmp/lyp-lilypond-#{version}"
368
+ tmp_target = "#{Lyp::TMP_ROOT}/lilypond-#{version}"
356
369
  FileUtils.mkdir_p(tmp_target)
357
370
 
358
371
  case platform
@@ -360,6 +373,8 @@ module Lyp::Lilypond
360
373
  install_lilypond_files_osx(fn, tmp_target, platform, version, opts)
361
374
  when /linux/
362
375
  install_lilypond_files_linux(fn, tmp_target, platform, version, opts)
376
+ when /mingw/
377
+ install_lilypond_files_windows(fn, tmp_target, platform, version, opts)
363
378
  end
364
379
 
365
380
  ensure
@@ -379,7 +394,7 @@ module Lyp::Lilypond
379
394
  STDERR.puts "Extracting..." unless opts[:silent]
380
395
 
381
396
  # create temp directory in which to extract .sh file
382
- tmp_dir = "/tmp/lyp-#{Time.now.to_f}"
397
+ tmp_dir = "#{Lyp::TMP_ROOT}/#{Time.now.to_f}"
383
398
  FileUtils.mkdir_p(tmp_dir)
384
399
 
385
400
  FileUtils.cd(tmp_dir) do
@@ -394,6 +409,27 @@ module Lyp::Lilypond
394
409
  ensure
395
410
  FileUtils.rm_rf(tmp_dir)
396
411
  end
412
+
413
+ def install_lilypond_files_windows(fn, target, platform, version, opts)
414
+ STDERR.puts "Running NSIS Installer..." unless opts[:silent]
415
+
416
+ target_dir = File.join(Lyp.lilyponds_dir, version)
417
+ FileUtils.mkdir_p(target_dir)
418
+
419
+ # run installer
420
+ cmd = "#{fn} /S /D=#{target_dir.gsub('/', '\\')}"
421
+ `#{cmd}`
422
+
423
+ # wait for installer to finish
424
+ t1 = Time.now
425
+ while !File.file?("#{target_dir}/usr/bin/lilypond.exe")
426
+ sleep 0.5
427
+ raise "Windows installation failed" if Time.now - t1 >= 60
428
+ end
429
+
430
+ # Show lilypond versions
431
+ STDERR.puts `#{target_dir}/usr/bin/lilypond -v` unless opts[:silent] || opts[:no_version_test]
432
+ end
397
433
 
398
434
  def copy_lilypond_files(base_path, version, opts)
399
435
  target_dir = File.join(Lyp.lilyponds_dir, version)
@@ -419,14 +455,14 @@ module Lyp::Lilypond
419
455
  def patch_font_scm(version)
420
456
  return unless Lyp::FONT_PATCH_REQ =~ Gem::Version.new(version)
421
457
 
422
- target_fn = File.join(Lyp.lilyponds_dir, version, 'share/lilypond/current/scm/font.scm')
458
+ target_fn = File.join(lyp_lilypond_share_dir(version), 'lilypond/current/scm/font.scm')
423
459
  FileUtils.cp(Lyp::FONT_PATCH_FILENAME, target_fn)
424
460
  end
425
461
 
426
462
  def copy_fonts_from_all_packages(version, opts)
427
463
  return unless Lyp::FONT_COPY_REQ =~ Gem::Version.new(version)
428
464
 
429
- ly_fonts_dir = File.join(Lyp.lilyponds_dir, version, 'share/lilypond/current/fonts')
465
+ ly_fonts_dir = File.join(lyp_lilypond_share_dir(version), 'lilypond/current/fonts')
430
466
 
431
467
  Dir["#{Lyp.packages_dir}/**/fonts"].each do |package_fonts_dir|
432
468
 
@@ -447,6 +483,10 @@ module Lyp::Lilypond
447
483
  end
448
484
  end
449
485
 
486
+ def lyp_lilypond_share_dir(version)
487
+ File.join(Lyp.lilyponds_dir, version, 'share')
488
+ end
489
+
450
490
  def use(version, opts)
451
491
  lilypond_list = list.reverse
452
492
 
@@ -503,11 +543,17 @@ module Lyp::Lilypond
503
543
  puts "Uninstalling lilypond #{l[:version]}" unless opts[:silent]
504
544
  set_current_lilypond(nil) if l[:current]
505
545
  set_default_lilypond(nil) if l[:default]
506
- FileUtils.rm_rf(l[:root_path])
546
+ uninstall_lilypond_version(l[:root_path])
507
547
  end
508
548
  end
509
549
 
550
+ def uninstall_lilypond_version(path)
551
+ FileUtils.rm_rf(path)
552
+ end
553
+
510
554
  def exec(cmd, raise_on_failure = true)
555
+ $_out = ""
556
+ $_err = ""
511
557
  success = nil
512
558
  Open3.popen3(cmd) do |_in, _out, _err, wait_thr|
513
559
  exit_value = wait_thr.value
@@ -115,14 +115,18 @@ module Lyp::Package
115
115
  File.open(package_ly_path, 'w+') do |f|
116
116
  f << LOCAL_PACKAGE_WRAPPER % [entry_point_dirname, entry_point_path]
117
117
  end
118
+
119
+ prepare_local_package_fonts(local_path, package_path)
118
120
 
121
+ {version: version, path: package_path}
122
+ end
123
+
124
+ def prepare_local_package_fonts(local_path, package_path)
119
125
  # create fonts directory symlink if needed
120
126
  fonts_path = File.join(local_path, 'fonts')
121
127
  if File.directory?(fonts_path)
122
128
  FileUtils.ln_sf(fonts_path, File.join(package_path, 'fonts'))
123
129
  end
124
-
125
- {version: version, path: package_path}
126
130
  end
127
131
 
128
132
  def install_from_repository(package, version, opts)
@@ -243,7 +247,7 @@ module Lyp::Package
243
247
  Lyp::Lilypond.list.each do |lilypond|
244
248
  next unless req =~ Gem::Version.new(lilypond[:version])
245
249
 
246
- ly_fonts_dir = File.join(lilypond[:root_path], 'share/lilypond/current/fonts')
250
+ ly_fonts_dir = File.join(lilypond[:root_path], lilypond_fonts_path)
247
251
  package_fonts_dir = File.join(package_path, 'fonts')
248
252
 
249
253
  Dir["#{package_fonts_dir}/*.otf"].each do |fn|
@@ -263,6 +267,10 @@ module Lyp::Package
263
267
  end
264
268
  end
265
269
 
270
+ def lilypond_fonts_path
271
+ 'share/lilypond/current/fonts'
272
+ end
273
+
266
274
  def package_git_url(package, search_index = true)
267
275
  case package
268
276
  when /^(?:(?:[^\:]+)|http|https)\:/
@@ -305,7 +313,7 @@ module Lyp::Package
305
313
  @lyp_index ||= YAML.load(open(LYP_INDEX_URL))
306
314
  end
307
315
 
308
- TEMP_REPO_ROOT_PATH = "/tmp/lyp/repos"
316
+ TEMP_REPO_ROOT_PATH = "#{Lyp::TMP_ROOT}/repos"
309
317
 
310
318
  def git_url_to_temp_path(url)
311
319
  case url
@@ -2,6 +2,36 @@ require 'fileutils'
2
2
 
3
3
  module Lyp::System
4
4
  class << self
5
+ RUGGED_REQ = Gem::Requirement.new('>=0.23.0')
6
+
7
+ def test_rugged_gem!
8
+ return if find_rugged_gem || use_git_based_rugged_gem
9
+
10
+ STDERR.puts "Lyp needs git in order to be able to install packages. Please install git and then try again."
11
+ exit 1
12
+ end
13
+
14
+ def find_rugged_gem
15
+ found = Gem::Specification.find_all_by_name('rugged').find do |s|
16
+ RUGGED_REQ =~ s.version
17
+ end
18
+
19
+ require_rugged_gem if found
20
+ found
21
+ end
22
+
23
+ def require_rugged_gem
24
+ gem 'rugged', RUGGED_REQ.to_s
25
+ require 'rugged'
26
+ end
27
+
28
+ def use_git_based_rugged_gem
29
+ git_available = `git --version` rescue nil
30
+ return false unless git_available
31
+
32
+ require File.expand_path('git_based_rugged', File.dirname(__FILE__))
33
+ end
34
+
5
35
  INSTALL_MSG = <<EOF
6
36
 
7
37
  Warning! Lyp is not yet properly installed in your home directory.
@@ -17,7 +47,7 @@ EOF
17
47
 
18
48
  def test_installed_status!
19
49
  unless installed?
20
- puts INSTALL_MSG
50
+ STDERR.puts INSTALL_MSG
21
51
  end
22
52
  end
23
53
 
@@ -12,6 +12,11 @@ require 'fileutils'
12
12
  user_filename = File.expand_path(_[:user_file])
13
13
  user_dirname = File.dirname(user_filename)
14
14
 
15
+ quote_path = lambda do |path|
16
+ path = path.gsub("\\", "/") if Lyp::WINDOWS
17
+ path.inspect
18
+ end
19
+
15
20
  current_package_dir = _[:current_package_dir] || FileUtils.pwd
16
21
 
17
22
  # The wrapper defines a few global variables:
@@ -29,19 +34,20 @@ current_package_dir = _[:current_package_dir] || FileUtils.pwd
29
34
  \include "{{Lyp::LYP_LY_LIB_PATH}}"
30
35
 
31
36
  #(begin
32
- (define lyp:input-filename "{{user_filename}}")
33
- (define lyp:input-dirname "{{user_dirname}}")
34
- (define lyp:current-package-dir "{{current_package_dir}}")
37
+ (define lyp:cwd {{quote_path[FileUtils.pwd]}})
38
+ (define lyp:input-filename {{quote_path[user_filename]}})
39
+ (define lyp:input-dirname {{quote_path[user_dirname]}})
40
+ (define lyp:current-package-dir {{quote_path[current_package_dir]}})
35
41
  `
36
42
 
37
- _[:package_refs].each do |spec, path|
43
+ _[:package_refs].each do |spec, name|
38
44
  `
39
- (hash-set! lyp:package-refs "{{spec}}" "{{path}}")`
45
+ (hash-set! lyp:package-refs "{{spec}}" "{{name}}")`
40
46
  end
41
47
 
42
48
  _[:package_dirs].each do |package, path|
43
49
  `
44
- (hash-set! lyp:package-dirs "{{package}}" "{{path}}")`
50
+ (hash-set! lyp:package-dirs "{{package}}" {{quote_path[path]}})`
45
51
  end
46
52
 
47
53
 
@@ -49,5 +55,5 @@ end
49
55
  )
50
56
 
51
57
  #(ly:debug "package loader is ready")
52
- \include "{{user_filename}}"
58
+ \include {{quote_path[user_filename]}}
53
59
  `
@@ -1,3 +1,3 @@
1
1
  module Lyp
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -0,0 +1,110 @@
1
+ module Process
2
+ def self.getsid
3
+ if `tasklist` =~ /^ruby\.exe\s+#{Process.pid}\s+[^\s]+\s+([0-9]+)/
4
+ $1.to_i
5
+ else
6
+ 0
7
+ end
8
+ end
9
+ end
10
+
11
+ module Lyp::Lilypond
12
+ class << self
13
+ def get_system_lilyponds_paths
14
+ []
15
+ end
16
+
17
+ def lyp_lilypond_path(version)
18
+ "#{Lyp.lilyponds_dir}/#{version}/usr/bin/lilypond.exe"
19
+ end
20
+
21
+ def lyp_lilypond_share_dir(version)
22
+ File.join(Lyp.lilyponds_dir, version, 'usr/share')
23
+ end
24
+
25
+ def lyp_lilyponds
26
+ list = []
27
+
28
+ Dir["#{Lyp.lilyponds_dir}/*"].each do |path|
29
+ next unless File.directory?(path) && File.basename(path) =~ /^[\d\.]+$/
30
+
31
+ root_path = path
32
+ version = File.basename(path)
33
+ path = File.join(path, "usr/bin/lilypond.exe")
34
+ list << {
35
+ root_path: root_path,
36
+ path: path,
37
+ version: version
38
+ }
39
+ end
40
+
41
+ list
42
+ end
43
+
44
+ def download_lilypond(url, fn, opts)
45
+ STDERR.puts "Downloading #{url}" unless opts[:silent]
46
+
47
+ if opts[:silent]
48
+ `curl -s -o "#{fn}" "#{url}"`
49
+ else
50
+ `curl -o "#{fn}" "#{url}"`
51
+ end
52
+ end
53
+
54
+ def uninstall_lilypond_version(path)
55
+ # run installer
56
+ uninstaller_path = File.join(path, 'uninstall.exe')
57
+ if File.file?(uninstaller_path)
58
+ cmd = "#{uninstaller_path} /S _?=#{path.gsub('/', '\\')}"
59
+ `#{cmd}`
60
+
61
+ # wait for installer to finish
62
+ t1 = Time.now
63
+ while !File.directory?("#{target_dir}/usr")
64
+ sleep 0.5
65
+ raise "Uninstallation failed" if Time.now - t1 >= 60
66
+ end
67
+ end
68
+
69
+ FileUtils.rm_rf(path)
70
+ end
71
+ end
72
+ end
73
+
74
+ module Lyp::Package
75
+ class << self
76
+
77
+ def prepare_local_package_fonts(local_path, package_path)
78
+ # create fonts directory symlink if needed
79
+ fonts_path = File.join(local_path, 'fonts')
80
+ if File.directory?(fonts_path)
81
+ FileUtils.cp_r(fonts_path, File.join(package_path, 'fonts'))
82
+ end
83
+ end
84
+
85
+ def lilypond_fonts_path
86
+ 'usr/share/lilypond/current/fonts'
87
+ end
88
+
89
+ def lyp_index
90
+ @lyp_index ||= YAML.load(`curl -s #{LYP_INDEX_URL}`)
91
+ end
92
+
93
+ end
94
+ end
95
+
96
+ module Lyp::System
97
+ class << self
98
+ def installed?
99
+ true
100
+ end
101
+
102
+ def install!
103
+ puts "\ninstall self curently not supported on Windows.\n\n"
104
+ end
105
+
106
+ def uninstall!
107
+ puts "\nuninstall self curently not supported on Windows.\n\n"
108
+ end
109
+ end
110
+ end
@@ -12,8 +12,8 @@ module Lyp
12
12
  r[:current_package_dir] = opts[:current_package_dir]
13
13
 
14
14
  if !r[:package_dirs].empty? || opts[:force_wrap]
15
- FileUtils.mkdir_p('/tmp/lyp/wrappers')
16
- fn = "/tmp/lyp/wrappers/#{File.basename(fn)}"
15
+ FileUtils.mkdir_p("#{Lyp::TMP_ROOT}/wrappers")
16
+ fn = "#{Lyp::TMP_ROOT}/wrappers/#{File.basename(fn)}"
17
17
 
18
18
  File.open(fn, 'w+') {|f| f << WRAPPER_TEMPLATE.render(r)}
19
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lyp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-31 00:00:00.000000000 Z
11
+ date: 2016-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -113,6 +113,7 @@ files:
113
113
  - lib/lyp/template.rb
114
114
  - lib/lyp/templates/deps_wrapper.rb
115
115
  - lib/lyp/version.rb
116
+ - lib/lyp/windows.rb
116
117
  - lib/lyp/wrapper.rb
117
118
  homepage: http://github.com/noteflakes/lyp
118
119
  licenses: