taglib-ruby 1.1.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/CHANGELOG.md +22 -0
  4. data/README.md +16 -12
  5. data/docs/taglib/mpeg.rb +1 -9
  6. data/ext/extconf_common.rb +21 -12
  7. data/ext/taglib_aiff/taglib_aiff.i +5 -0
  8. data/ext/taglib_aiff/taglib_aiff_wrap.cxx +327 -111
  9. data/ext/taglib_base/includes.i +14 -14
  10. data/ext/taglib_base/taglib_base.i +37 -4
  11. data/ext/taglib_base/taglib_base_wrap.cxx +414 -422
  12. data/ext/taglib_flac/taglib_flac.i +8 -3
  13. data/ext/taglib_flac/taglib_flac_wrap.cxx +356 -406
  14. data/ext/taglib_flac_picture/taglib_flac_picture.i +4 -0
  15. data/ext/taglib_flac_picture/taglib_flac_picture_wrap.cxx +229 -122
  16. data/ext/taglib_id3v1/taglib_id3v1_wrap.cxx +196 -102
  17. data/ext/taglib_id3v2/taglib_id3v2.i +5 -0
  18. data/ext/taglib_id3v2/taglib_id3v2_wrap.cxx +727 -568
  19. data/ext/taglib_mp4/taglib_mp4.i +22 -18
  20. data/ext/taglib_mp4/taglib_mp4_wrap.cxx +2141 -1493
  21. data/ext/taglib_mpeg/taglib_mpeg.i +6 -0
  22. data/ext/taglib_mpeg/taglib_mpeg_wrap.cxx +546 -379
  23. data/ext/taglib_ogg/taglib_ogg.i +0 -2
  24. data/ext/taglib_ogg/taglib_ogg_wrap.cxx +162 -107
  25. data/ext/taglib_vorbis/taglib_vorbis.i +1 -0
  26. data/ext/taglib_vorbis/taglib_vorbis_wrap.cxx +141 -109
  27. data/ext/taglib_wav/taglib_wav.i +6 -2
  28. data/ext/taglib_wav/taglib_wav_wrap.cxx +290 -147
  29. data/lib/taglib/version.rb +3 -3
  30. data/taglib-ruby.gemspec +1 -0
  31. data/tasks/ext.rake +23 -39
  32. data/tasks/swig.rake +14 -4
  33. data/test/id3v2_write_test.rb +1 -1
  34. data/test/wav_examples_test.rb +1 -1
  35. data/test/wav_file_test.rb +1 -1
  36. data/test/wav_file_write_test.rb +6 -6
  37. metadata +4 -3
@@ -2,9 +2,9 @@
2
2
 
3
3
  module TagLib
4
4
  module Version
5
- MAJOR = 1
6
- MINOR = 1
7
- PATCH = 2
5
+ MAJOR = 2
6
+ MINOR = 0
7
+ PATCH = 0
8
8
  BUILD = nil
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
data/taglib-ruby.gemspec CHANGED
@@ -49,6 +49,7 @@ Gem::Specification.new do |s|
49
49
  'README.md'
50
50
  ]
51
51
  s.files = [
52
+ '.github/FUNDING.yml',
52
53
  '.rubocop.yml',
53
54
  '.yardopts',
54
55
  'CHANGELOG.md',
data/tasks/ext.rake CHANGED
@@ -1,25 +1,19 @@
1
1
  # frozen-string-literal: true
2
2
 
3
+ require_relative 'build'
4
+
3
5
  # Extension tasks and cross-compiling
4
6
 
5
7
  host = 'i686-w64-mingw32'
6
- $plat = ENV['PLATFORM'] || 'i386-mingw32'
7
-
8
- taglib_version = ENV['TAGLIB_VERSION'] || '1.9.1'
9
- taglib = "taglib-#{taglib_version}"
10
-
11
- tmp = "#{Dir.pwd}/tmp"
12
- tmp_arch = "#{tmp}/#{$plat}"
13
8
  toolchain_file = "#{Dir.pwd}/ext/win.cmake"
14
- install_dir = "#{tmp_arch}/#{taglib}"
15
- install_dll = "#{install_dir}/bin/libtag.dll"
16
- install_so = "#{install_dir}/lib/libtag.so"
17
- $cross_config_options = ["--with-opt-dir=#{install_dir}"]
9
+ install_dll = "#{Build.install_dir}/bin/libtag.dll"
10
+ $cross_config_options = ["--with-opt-dir=#{Build.install_dir}"]
18
11
 
19
- taglib_url = "https://github.com/taglib/taglib/archive/v#{taglib_version}.tar.gz"
12
+ taglib_url = "https://github.com/taglib/taglib/archive/v#{Build.version}.tar.gz"
20
13
  taglib_options = ['-DCMAKE_BUILD_TYPE=Release',
21
14
  '-DBUILD_EXAMPLES=OFF',
22
15
  '-DBUILD_TESTS=OFF',
16
+ '-DBUILD_TESTING=OFF', # used since 1.13 instead of BUILD_TESTS
23
17
  '-DBUILD_BINDINGS=OFF', # 1.11 builds bindings by default
24
18
  '-DBUILD_SHARED_LIBS=ON', # 1.11 builds static by default
25
19
  '-DWITH_MP4=ON', # WITH_MP4, WITH_ASF only needed with taglib 1.7, will be default in 1.8
@@ -27,7 +21,7 @@ taglib_options = ['-DCMAKE_BUILD_TYPE=Release',
27
21
 
28
22
  def configure_cross_compile(ext)
29
23
  ext.cross_compile = true
30
- ext.cross_platform = $plat
24
+ ext.cross_platform = Build.plat
31
25
  ext.cross_config_options.concat($cross_config_options)
32
26
  ext.cross_compiling do |gem|
33
27
  gem.files << 'lib/libtag.dll'
@@ -75,43 +69,33 @@ task :cross do
75
69
  ENV['CXX'] = "#{host}-g++"
76
70
  end
77
71
 
78
- file "#{tmp_arch}/stage/lib/libtag.dll" => [install_dll] do |f|
72
+ file "#{Build.tmp_arch}/stage/lib/libtag.dll" => [install_dll] do |f|
79
73
  install install_dll, f
80
74
  end
81
75
 
82
- file install_dll => ["#{tmp}/#{taglib}"] do
83
- chdir "#{tmp}/#{taglib}" do
84
- sh %(cmake -DCMAKE_INSTALL_PREFIX=#{install_dir} -DCMAKE_TOOLCHAIN_FILE=#{toolchain_file} #{taglib_options})
76
+ file install_dll => [Build.source] do
77
+ chdir Build.source do
78
+ sh %(cmake -DCMAKE_INSTALL_PREFIX=#{Build.install_dir} -DCMAKE_TOOLCHAIN_FILE=#{toolchain_file} #{taglib_options})
85
79
  sh 'make VERBOSE=1'
86
80
  sh 'make install'
87
81
  end
88
82
  end
89
83
 
90
- task vendor: [install_so]
84
+ task vendor: [Build.library]
91
85
 
92
- file install_so => ["#{tmp_arch}/#{taglib}", "#{tmp_arch}/#{taglib}-build", "#{tmp}/#{taglib}"] do
93
- chdir "#{tmp_arch}/#{taglib}-build" do
94
- sh %(cmake -DCMAKE_INSTALL_PREFIX=#{install_dir} #{taglib_options} #{tmp}/#{taglib})
95
- sh 'make install VERBOSE=1'
86
+ file Build.library => [Build.install_dir, Build.build_dir, Build.source] do
87
+ chdir Build.build_dir do
88
+ sh %(cmake -DCMAKE_INSTALL_PREFIX=#{Build.install_dir} #{taglib_options} #{Build.source})
89
+ sh 'make install -j 4 VERBOSE=1'
96
90
  end
97
91
  end
98
92
 
99
- directory "#{tmp_arch}/#{taglib}"
100
- directory "#{tmp_arch}/#{taglib}-build"
93
+ directory Build.install_dir
94
+ directory Build.build_dir
95
+ directory Build.tmp
101
96
 
102
- file "#{tmp}/#{taglib}" => ["#{tmp}/#{taglib}.tar.gz"] do
103
- chdir tmp do
104
- sh "tar xzf #{taglib}.tar.gz"
105
- end
97
+ file Build.source do
98
+ sh "git clone --depth=1 --branch=v#{Build.version} https://github.com/taglib/taglib.git #{Build.source}"
99
+ sh "git -C #{Build.source} submodule init"
100
+ sh "git -C #{Build.source} submodule update --depth=1"
106
101
  end
107
-
108
- file "#{tmp}/#{taglib}.tar.gz" => [tmp] do |t|
109
- require 'open-uri'
110
- puts "Downloading #{taglib_url}"
111
-
112
- File.open(t.name, 'wb') do |f|
113
- IO.copy_stream(open(taglib_url), f)
114
- end
115
- end
116
-
117
- directory tmp
data/tasks/swig.rake CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen-string-literal: true
2
2
 
3
+ require_relative 'build'
4
+
3
5
  # Tasks for generating SWIG wrappers in ext
4
6
 
5
7
  # Execute SWIG for the specified extension.
@@ -11,9 +13,11 @@
11
13
  def run_swig(mod)
12
14
  swig = `which swig`.chomp
13
15
  swig = `which swig2.0`.chomp if swig.empty?
16
+ swiglib = `swig -swiglib`.chomp
17
+ abort 'swig failed' unless $?.success?
14
18
 
15
19
  # Standard search location for headers
16
- include_args = %w[-I/usr/local/include -I/usr/include]
20
+ include_args = "-I#{Build.install_dir}/include"
17
21
 
18
22
  if ENV.key?('TAGLIB_DIR')
19
23
  unless File.directory?(ENV['TAGLIB_DIR'])
@@ -21,14 +25,20 @@ def run_swig(mod)
21
25
  end
22
26
 
23
27
  # Push it in front to get it searched first.
24
- include_args.unshift("-I#{ENV['TAGLIB_DIR']}/include")
28
+ include_args = "-I#{ENV['TAGLIB_DIR']}/include"
25
29
  end
26
30
 
27
- sh "cd ext/#{mod} && #{swig} -c++ -ruby -autorename -initname #{mod} #{include_args.join(' ')} #{mod}.i"
31
+ Dir.chdir("ext/#{mod}") do
32
+ sh "#{swig} -c++ -ruby -autorename -initname #{mod} #{include_args} #{mod}.i"
33
+ wrap = "#{mod}_wrap.cxx"
34
+ wrapdata = File.read(wrap)
35
+ File.write(wrap, wrapdata.gsub(swiglib, '/swig'))
36
+ end
28
37
  end
29
38
 
30
39
  task swig:
31
- ['ext/taglib_base/taglib_base_wrap.cxx',
40
+ [Build.library,
41
+ 'ext/taglib_base/taglib_base_wrap.cxx',
32
42
  'ext/taglib_mpeg/taglib_mpeg_wrap.cxx',
33
43
  'ext/taglib_id3v1/taglib_id3v1_wrap.cxx',
34
44
  'ext/taglib_id3v2/taglib_id3v2_wrap.cxx',
@@ -54,7 +54,7 @@ class TestID3v2Write < Test::Unit::TestCase
54
54
  end
55
55
 
56
56
  should 'be able to save ID3v2.3' do
57
- success = @file.save(TagLib::MPEG::File::ID3v2, true, 3)
57
+ success = @file.save(TagLib::MPEG::File::ID3v2, TagLib::File::StripOthers, TagLib::ID3v2::V3)
58
58
  assert_equal true, success
59
59
  @file.close
60
60
  @file = nil
@@ -19,7 +19,7 @@ class WAVExamples < Test::Unit::TestCase
19
19
 
20
20
  # Saving ID3v2 cover-art to disk
21
21
  TagLib::RIFF::WAV::File.open("#{DATA_FILE_PREFIX}sample.wav") do |file|
22
- id3v2_tag = file.tag
22
+ id3v2_tag = file.id3v2_tag
23
23
  cover = id3v2_tag.frame_list('APIC').first
24
24
  ext = cover.mime_type.rpartition('/')[2]
25
25
  File.open("#{DATA_FILE_PREFIX}cover-art.#{ext}", 'wb') { |f| f.write cover.picture }
@@ -40,7 +40,7 @@ class WAVFileTest < Test::Unit::TestCase
40
40
 
41
41
  context 'ID3V2 tag' do
42
42
  setup do
43
- @tag = @file.tag
43
+ @tag = @file.id3v2_tag
44
44
  end
45
45
 
46
46
  should 'exist' do
@@ -33,18 +33,18 @@ class WAVFileWriteTest < Test::Unit::TestCase
33
33
  end
34
34
 
35
35
  should 'have one picture frame' do
36
- assert_equal 2, @file.tag.frame_list('APIC').size
36
+ assert_equal 2, @file.id3v2_tag.frame_list('APIC').size
37
37
  end
38
38
 
39
39
  should 'be able to remove all picture frames' do
40
- @file.tag.remove_frames('APIC')
40
+ @file.id3v2_tag.remove_frames('APIC')
41
41
  success = @file.save
42
42
  assert success
43
43
  @file.close
44
44
  @file = nil
45
45
 
46
46
  reloaded do |file|
47
- assert_equal 0, file.tag.frame_list('APIC').size
47
+ assert_equal 0, file.id3v2_tag.frame_list('APIC').size
48
48
  end
49
49
  end
50
50
 
@@ -58,18 +58,18 @@ class WAVFileWriteTest < Test::Unit::TestCase
58
58
  apic.picture = picture_data
59
59
  apic.type = TagLib::ID3v2::AttachedPictureFrame::BackCover
60
60
 
61
- @file.tag.add_frame(apic)
61
+ @file.id3v2_tag.add_frame(apic)
62
62
  success = @file.save
63
63
  assert success
64
64
  @file.close
65
65
  @file = nil
66
66
 
67
67
  reloaded do |file|
68
- assert_equal 3, file.tag.frame_list('APIC').size
68
+ assert_equal 3, file.id3v2_tag.frame_list('APIC').size
69
69
  end
70
70
 
71
71
  reloaded do |file|
72
- written_apic = file.tag.frame_list('APIC')[2]
72
+ written_apic = file.id3v2_tag.frame_list('APIC')[2]
73
73
  assert_equal 'image/jpeg', written_apic.mime_type
74
74
  assert_equal 'desc', written_apic.description
75
75
  assert_equal picture_data, written_apic.picture
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taglib-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robin Stocker
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2022-04-13 00:00:00.000000000 Z
13
+ date: 2024-10-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -128,6 +128,7 @@ extra_rdoc_files:
128
128
  - LICENSE.txt
129
129
  - README.md
130
130
  files:
131
+ - ".github/FUNDING.yml"
131
132
  - ".rubocop.yml"
132
133
  - ".yardopts"
133
134
  - CHANGELOG.md
@@ -279,7 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
279
280
  version: '0'
280
281
  requirements:
281
282
  - taglib (libtag1-dev in Debian/Ubuntu, taglib-devel in Fedora/RHEL)
282
- rubygems_version: 3.4.0.dev
283
+ rubygems_version: 3.4.10
283
284
  signing_key:
284
285
  specification_version: 4
285
286
  summary: Ruby interface for the taglib C++ library