xezat 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/lib/xezat/command/bump/compiler.rb +2 -2
  4. data/lib/xezat/command/bump/cygport_dep.rb +2 -2
  5. data/lib/xezat/command/bump/development_package.rb +29 -4
  6. data/lib/xezat/command/bump/language.rb +2 -2
  7. data/lib/xezat/command/bump.rb +6 -7
  8. data/lib/xezat/command/generate.rb +2 -1
  9. data/lib/xezat/command/init.rb +2 -2
  10. data/lib/xezat/command/validate/config.rb +40 -0
  11. data/lib/xezat/command/validate/license.rb +30 -0
  12. data/lib/xezat/command/validate/pkgconfig.rb +37 -0
  13. data/lib/xezat/command/validate.rb +17 -23
  14. data/lib/xezat/cygversion.rb +2 -0
  15. data/lib/xezat/detector/cmake.rb +1 -4
  16. data/lib/xezat/detector/{python38-docutils.rb → python39-docutils.rb} +1 -1
  17. data/lib/xezat/generator/pkgconfig.rb +32 -10
  18. data/lib/xezat/variables.rb +18 -3
  19. data/lib/xezat/version.rb +1 -1
  20. data/share/xezat/compilers.yaml +44 -0
  21. data/share/xezat/{invoke_cygport_dep.sh → cygport_dep.sh} +0 -0
  22. data/share/xezat/languages.yaml +11 -0
  23. data/share/xezat/repository/bitbucket.yaml +4 -0
  24. data/share/xezat/repository/github.yaml +4 -0
  25. data/share/xezat/repository/gnu.yaml +3 -0
  26. data/share/xezat/repository/savannah.yaml +3 -0
  27. data/share/xezat/repository/sourceforge.yaml +5 -0
  28. data/share/xezat/template/cmake.erb +6 -8
  29. data/share/xezat/template/cygport.erb +4 -0
  30. data/share/xezat/{show_cygport_variable.sh → var2yaml.sh} +3 -2
  31. data/xezat.gemspec +6 -5
  32. metadata +40 -23
  33. data/share/xezat/compilers.json +0 -67
  34. data/share/xezat/languages.json +0 -12
  35. data/share/xezat/repository/bitbucket.json +0 -5
  36. data/share/xezat/repository/github.json +0 -5
  37. data/share/xezat/repository/gnu.json +0 -4
  38. data/share/xezat/repository/savannah.json +0 -4
  39. data/share/xezat/repository/sourceforge.json +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6183648a65f69a1fc1c1a85779066ba529614681aeb56fa78979ba9d9536c625
4
- data.tar.gz: 20589012624b3e1690014d2b03ad2dda3fe01c464f5c3fb03223572a856a8dc4
3
+ metadata.gz: 0053db8d2a6f202e9aa40b7454f00f8ced3fdacd2c174944bec6c02a2ae106c4
4
+ data.tar.gz: 5abd0d6bd506b6a44ca306675e7b37b81d8834ff12d1165f47ad2c100ec87fcb
5
5
  SHA512:
6
- metadata.gz: e94a00970240eb104ba88a2126a4fbd04d97820977a383a0498e584b3373b69e8dd98260c30cb59853e36f792949c5fa527a910345b19582ea1332541f2b2a48
7
- data.tar.gz: b01a34f4cc54b8967e765045048d8759612de6653602c0833ff6b252b8302563ea286fcfde36eefb4d1ab58f623a3c32f299aedb5b741aef681363840f719e63
6
+ metadata.gz: eb736dd2128a11b7b249db02e58732b54578085808f3e8d4ad36cfa74741ae2583194e3337b810d82e2a048cf9f7a893e9df1941d589e8953de270abe1799196
7
+ data.tar.gz: f8a26d86744acd8391b21c89db39afe00a880bf26b2660de5fc51d04ccae070a0e2761f650dea28c32a38cfc4b757f739b7baf4cad74aad5a480a4585e89e2dd
data/.rubocop.yml CHANGED
@@ -12,7 +12,7 @@ Layout/LineLength:
12
12
  Max: 160
13
13
 
14
14
  Metrics/AbcSize:
15
- Max: 40
15
+ Max: 45
16
16
  Metrics/BlockLength:
17
17
  Exclude:
18
18
  - '*.gemspec'
@@ -7,8 +7,8 @@ module Xezat
7
7
  class Bump
8
8
  def get_compilers(languages, _variables)
9
9
  Xezat.logger.debug(' Collect compilers')
10
- compiler_file = File.expand_path(File.join(DATA_DIR, 'compilers.json'))
11
- compiler_candidates = JSON.parse(File.read(compiler_file))
10
+ compiler_file = File.expand_path(File.join(DATA_DIR, 'compilers.yaml'))
11
+ compiler_candidates = YAML.safe_load(File.open(compiler_file), [Symbol])
12
12
  compilers = []
13
13
  languages.uniq.each do |language|
14
14
  next unless compiler_candidates.key?(language)
@@ -14,8 +14,8 @@ module Xezat
14
14
  additional_path = candidate_files.map do |file|
15
15
  File.dirname(file)
16
16
  end.sort.uniq.join(':')
17
- command = ['bash', File.expand_path(File.join(DATA_DIR, 'invoke_cygport_dep.sh')), cygport]
18
- result, error, status = Open3.capture3({ 'PATH' => "#{ENV['PATH']}:#{additional_path}" }, command.join(' '))
17
+ command = ['bash', File.expand_path(File.join(DATA_DIR, 'cygport_dep.sh')), cygport]
18
+ result, error, status = Open3.capture3({ 'PATH' => "#{ENV.fetch('PATH')}:#{additional_path}" }, command.join(' '))
19
19
  raise CygportProcessError, error unless status.success?
20
20
 
21
21
  result
@@ -8,17 +8,42 @@ require 'xezat/command/bump/tool'
8
8
  module Xezat
9
9
  module Command
10
10
  class Bump
11
- def get_development_packages(variables, packages)
11
+ def get_development_packages(variables, packages, runtimes, pkg2files)
12
12
  Xezat.logger.debug(' Collect development packages')
13
13
  compilers = get_compilers(get_languages(variables[:S]), variables)
14
14
  tools = get_tools(variables)
15
15
  build_requires = variables[:BUILD_REQUIRES].nil? ? [] : variables[:BUILD_REQUIRES].split.map(&:to_sym)
16
- development_packages = (compilers + tools + build_requires + [:cygport]).uniq.sort
17
- development_packages.delete(:'libssl-devel') if development_packages.include?(:'libssl1.0-devel')
16
+ development_packages = (compilers + tools + build_requires + [:cygport]).uniq
17
+
18
+ resolve_development_package(development_packages)
19
+
20
+ # Check gcc-gfortran
21
+ if runtimes.grep(/^libgfortran/).empty?
22
+ delete_fortran = true
23
+ pkg2files.each_value do |files|
24
+ delete_fortran = false unless files.grep(/\.mod$/).empty?
25
+ end
26
+ development_packages.delete(:'gcc-fortran') if delete_fortran
27
+ end
28
+
29
+ development_packages.sort!
30
+
18
31
  development_packages.map! do |package|
19
- packages[package] || ''
32
+ pkg = packages[package]
33
+ raise "Package #{package} is not installed in your system" if pkg.nil?
34
+
35
+ pkg
20
36
  end
21
37
  end
38
+
39
+ def resolve_development_package(development_packages)
40
+ # Check libssl duplication
41
+ development_packages.delete(:'libssl-devel') if development_packages.include?(:'libssl1.0-devel')
42
+
43
+ # Check lua duplication
44
+ development_packages.delete(:lua) if development_packages.include?(:'lua5.1-devel')
45
+ development_packages.delete(:lua) if development_packages.include?(:'luajit-devel')
46
+ end
22
47
  end
23
48
  end
24
49
  end
@@ -8,8 +8,8 @@ module Xezat
8
8
  class Bump
9
9
  def get_languages(top_src_dir)
10
10
  Xezat.logger.debug(' Collect languages')
11
- languages_file = File.expand_path(File.join(DATA_DIR, 'languages.json'))
12
- languages_candidates = JSON.parse(File.read(languages_file))
11
+ languages_file = File.expand_path(File.join(DATA_DIR, 'languages.yaml'))
12
+ languages_candidates = YAML.safe_load(File.open(languages_file), [Symbol])
13
13
  languages = []
14
14
  Find.find(top_src_dir) do |path|
15
15
  next if FileTest.directory?(path)
@@ -30,13 +30,12 @@ module Xezat
30
30
  vars = variables(@cygport)
31
31
  readme_file = File.expand_path(File.join(vars[:C], 'README'))
32
32
 
33
- info = {
34
- src_uri: get_src_uri(vars),
35
- runtimes: get_runtime_packages(vars, pkgs, @cygport),
36
- developments: get_development_packages(vars, pkgs),
37
- files: get_files(vars),
38
- changelog: get_changelog(vars, @options, readme_file)
39
- }
33
+ info = {}
34
+ info[:src_uri] = get_src_uri(vars)
35
+ info[:runtimes] = get_runtime_packages(vars, pkgs, @cygport)
36
+ info[:files] = get_files(vars)
37
+ info[:developments] = get_development_packages(vars, pkgs, info[:runtimes], info[:files])
38
+ info[:changelog] = get_changelog(vars, @options, readme_file)
40
39
 
41
40
  Xezat.logger.debug(' Write ChangeLog atomically')
42
41
  File.atomic_write(readme_file) do |f|
@@ -5,8 +5,9 @@ require 'thor'
5
5
  module Xezat
6
6
  module Command
7
7
  class Generate < Thor
8
- desc 'generate pkgconfig cygport', 'Generate *.pc'
8
+ desc 'pkgconfig cygport', 'Generate *.pc'
9
9
  option :overwrite, type: :boolean, aliases: '-o', desc: 'overwrite *.pc'
10
+ option :srcdir, type: :string, aliases: '-s', desc: 'relative path to Makefile.am / CMakeLists.txt'
10
11
 
11
12
  def pkgconfig(cygport)
12
13
  require 'xezat/generator/pkgconfig'
@@ -41,10 +41,10 @@ module Xezat
41
41
 
42
42
  def get_repository_variables(repository)
43
43
  if repository
44
- repository_file = File.expand_path(File.join(REPOSITORY_DIR, "#{repository}.json"))
44
+ repository_file = File.expand_path(File.join(REPOSITORY_DIR, "#{repository}.yaml"))
45
45
  raise NoSuchRepositoryError, "No such repository: #{template}" unless FileTest.exist?(repository_file) || FileTest.readable?(repository_file)
46
46
 
47
- JSON.parse(File.read(repository_file), symbolize_names: true)
47
+ YAML.safe_load(File.open(repository_file), symbolize_names: true)
48
48
  else
49
49
  {
50
50
  HOMEPAGE: '',
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pkg-config'
4
+ require 'xezat'
5
+
6
+ module Xezat
7
+ module Command
8
+ class Validate
9
+ def validate_config(variables, gcc_version)
10
+ configs = Dir.glob(File.join(variables[:D], '/usr/bin/*-config'))
11
+ configs.each do |config|
12
+ basename = File.basename(config)
13
+ Xezat.logger.debug(" #{basename} found")
14
+
15
+ result, _, status = Open3.capture3("#{config} --cflags")
16
+ if status.success?
17
+ Xezat.logger.debug(" cflags = #{result.strip}")
18
+ else
19
+ Xezat.logger.warn(' cflags not supported')
20
+ end
21
+
22
+ result, _, status = Open3.capture3("#{config} --cxxflags")
23
+ if status.success?
24
+ Xezat.logger.debug(" cxxflags = #{result.strip}")
25
+ else
26
+ Xezat.logger.warn(' cxxflags not supported')
27
+ end
28
+
29
+ result, _, status = Open3.capture3("#{config} --libs")
30
+ if status.success?
31
+ Xezat.logger.debug(" libs = #{result.strip}")
32
+ validate_libs(variables, result.strip, gcc_version)
33
+ else
34
+ Xezat.logger.warn(' libs not supported')
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spdx'
4
+ require 'xezat'
5
+
6
+ module Xezat
7
+ module Command
8
+ class Validate
9
+ def validate_license(vars)
10
+ license = vars[:LICENSE]
11
+ if license.nil? || license.empty?
12
+ Xezat.logger.warn(' LICENSE is not defined')
13
+ elsif Spdx.valid?(license)
14
+ Xezat.logger.debug(" LICENSE = #{license}")
15
+ else
16
+ Xezat.logger.error(" LICENSE = #{license} (invalid)")
17
+ end
18
+
19
+ license_uri = vars[:LICENSE_URI]
20
+ if license_uri.nil? || license_uri.empty?
21
+ Xezat.logger.warn(' LICENSE_URI is not defined')
22
+ elsif File.exist?(File.join(vars[:S], license_uri))
23
+ Xezat.logger.debug(" LICENSE_URI = #{license_uri}")
24
+ else
25
+ Xezat.logger.error(" LICENSE_URI = #{license_uri} (not found)")
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pkg-config'
4
+ require 'xezat'
5
+
6
+ module Xezat
7
+ module Command
8
+ class Validate
9
+ def validate_pkgconfig(variables, gcc_version)
10
+ pkgconfig_path = File.join(variables[:D], 'usr', 'lib', 'pkgconfig')
11
+ PKGConfig.add_path(pkgconfig_path)
12
+ Dir.glob('*.pc', 0, base: pkgconfig_path).each do |pc|
13
+ Xezat.logger.debug(" #{pc} found")
14
+ basename = File.basename(pc, '.pc')
15
+
16
+ modversion = PKGConfig.modversion(basename)
17
+ Xezat.logger.debug(" modversion = #{modversion}")
18
+ pv = variables[:PV][0].gsub(/\+.+$/, '')
19
+ Xezat.logger.error(" modversion differs from $PN = #{pv}") unless modversion == pv
20
+
21
+ prefix = PKGConfig.variable(basename, 'prefix')
22
+ if prefix.nil? || prefix.empty? || prefix.eql?('/usr')
23
+ Xezat.logger.debug(" prefix = #{prefix}")
24
+ else
25
+ Xezat.logger.warn(" prefix = #{prefix} (not standard)")
26
+ end
27
+
28
+ Xezat.logger.debug(" cflags = #{PKGConfig.cflags(basename)}")
29
+
30
+ libs = PKGConfig.libs(basename)
31
+ Xezat.logger.debug(" libs = #{libs}")
32
+ validate_libs(variables, libs, gcc_version)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,8 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'net/http'
4
- require 'pkg-config'
5
4
  require 'uri'
5
+ require 'xezat/command/validate/config'
6
+ require 'xezat/command/validate/license'
7
+ require 'xezat/command/validate/pkgconfig'
8
+ require 'xezat/cygversion'
6
9
  require 'xezat/packages'
7
10
  require 'xezat/variables'
8
11
 
@@ -21,6 +24,8 @@ module Xezat
21
24
  vars = variables(@cygport)
22
25
  pkgs = packages
23
26
 
27
+ gcc_version = Cygversion.new(pkgs[:'gcc-core'].gsub(/^gcc-core-/, '')).version.split('.')[0]
28
+
24
29
  Xezat.logger.debug(' Validate .cygport')
25
30
  validate_cygport(@cygport)
26
31
 
@@ -30,11 +35,17 @@ module Xezat
30
35
  Xezat.logger.debug(' Validate homepage')
31
36
  validate_homepage(vars[:HOMEPAGE])
32
37
 
38
+ Xezat.logger.debug(' Validate licenses')
39
+ validate_license(vars)
40
+
33
41
  Xezat.logger.debug(' Validate BUILD_REQUIRES')
34
42
  validate_build_requires(vars[:BUILD_REQUIRES], pkgs)
35
43
 
36
44
  Xezat.logger.debug(' Validate *.pc')
37
- validate_pkgconfig(vars)
45
+ validate_pkgconfig(vars, gcc_version)
46
+
47
+ Xezat.logger.debug(' Validate *-config')
48
+ validate_config(vars, gcc_version)
38
49
 
39
50
  Xezat.logger.debug('End validating')
40
51
  end
@@ -54,9 +65,9 @@ module Xezat
54
65
  response = Net::HTTP.get_response(URI.parse(homepage))
55
66
  code = response.code
56
67
  if code == '200'
57
- Xezat.logger.debug(" code = #{response.code}")
68
+ Xezat.logger.debug(" code = #{code}")
58
69
  else
59
- Xezat.logger.error(" code = #{response.code}")
70
+ Xezat.logger.error(" code = #{code}")
60
71
  end
61
72
  rescue OpenSSL::SSL::SSLError => e
62
73
  raise e unless @options[:ignore]
@@ -77,25 +88,8 @@ module Xezat
77
88
  end
78
89
  end
79
90
 
80
- def validate_pkgconfig(variables)
81
- pkgconfig_path = File.join(variables[:D], 'usr', 'lib', 'pkgconfig')
82
- PKGConfig.add_path(pkgconfig_path)
83
- Dir.glob('*.pc', 0, base: pkgconfig_path).each do |pc|
84
- basename = File.basename(pc, '.pc')
85
- Xezat.logger.debug(" #{basename}.pc found")
86
- modversion = PKGConfig.modversion(basename)
87
- Xezat.logger.debug(" modversion = #{modversion}")
88
- pv = variables[:PV][0].gsub(/\+.+$/, '')
89
- Xezat.logger.error(" modversion differs from $PN = #{pv}") unless modversion == pv
90
- Xezat.logger.debug(" cflags = #{PKGConfig.cflags(basename)}")
91
- libs = PKGConfig.libs(basename)
92
- Xezat.logger.debug(" libs = #{libs}")
93
- validate_libs(variables, libs)
94
- end
95
- end
96
-
97
- def validate_libs(variables, libs)
98
- lib_dirs = [File.join(variables[:D], '/usr/lib'), '/usr/lib', '/usr/lib/w32api', '/usr/lib/gcc/x86_64-pc-cygwin/11']
91
+ def validate_libs(variables, libs, gcc_version)
92
+ lib_dirs = [File.join(variables[:D], '/usr/lib'), '/usr/lib', '/usr/lib/w32api', "/usr/lib/gcc/x86_64-pc-cygwin/#{gcc_version}"]
99
93
  libs.split do |option|
100
94
  if option.start_with?('-l')
101
95
  lib_name = option[2, 255] # Assume file length limit
@@ -4,6 +4,8 @@ require 'rubygems'
4
4
 
5
5
  module Xezat
6
6
  class Cygversion
7
+ attr_reader :version
8
+
7
9
  def initialize(str)
8
10
  matched = str.match(/(.+)-(.+)/)
9
11
  version = matched[1]
@@ -6,10 +6,7 @@ module Xezat
6
6
  module Detector
7
7
  class Cmake
8
8
  def detect(variables)
9
- Find.find(variables[:S]) do |file|
10
- return true if file.end_with?("#{File::SEPARATOR}CMakeLists.txt")
11
- end
12
- false
9
+ variables.key?(:_cmake_CYGCLASS_)
13
10
  end
14
11
  end
15
12
  end
@@ -4,7 +4,7 @@ require 'find'
4
4
 
5
5
  module Xezat
6
6
  module Detector
7
- class Python38Docutils
7
+ class Python39Docutils
8
8
  def detect(variables)
9
9
  Find.find(variables[:S]) do |file|
10
10
  next unless file.end_with?("#{File::SEPARATOR}configure.ac", "#{File::SEPARATOR}configure.in")
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'English'
3
4
  require 'facets/file/atomic_open'
4
5
  require 'facets/file/atomic_write'
5
6
  require 'xezat/variables'
@@ -21,22 +22,29 @@ module Xezat
21
22
  end
22
23
 
23
24
  def generate
25
+ Xezat.logger.debug('Start package config generation')
24
26
  vars = variables(@cygport)
25
27
  generate_pkg_config(vars, @options)
26
28
 
27
29
  if vars[:_cmake_CYGCLASS_]
28
- append_commands_to_cmakelists(vars)
30
+ append_commands_to_cmakelists(vars, @options)
29
31
  else
30
- append_commands_to_autotools(vars)
32
+ append_commands_to_autotools(vars, @options)
31
33
  end
34
+ Xezat.logger.debug('End package config generation')
32
35
  end
33
36
 
34
37
  def generate_pkg_config(variables, options)
35
38
  srcdir = variables[:CYGCONF_SOURCE] || variables[:CYGCMAKE_SOURCE] || variables[:S]
39
+ srcdir = File.expand_path(File.join(variables[:S], options['srcdir'])) if options['srcdir']
40
+ Xezat.logger.debug(" srcdir = #{srcdir}")
41
+
36
42
  pn = variables[:PN]
37
43
  pc = File.expand_path(File.join(srcdir, "#{pn}.pc.in"))
38
44
  raise UnregeneratableConfigurationError, "#{pn}.pc.in already exists" if File.exist?(pc) && !options['overwrite']
39
45
 
46
+ Xezat.logger.debug(' Generate pc')
47
+
40
48
  File.atomic_write(pc) do |f|
41
49
  f.write(get_pkg_config(variables))
42
50
  end
@@ -47,10 +55,16 @@ module Xezat
47
55
  ERB.new(File.readlines(erb).join(nil), trim_mode: '%-').result(binding)
48
56
  end
49
57
 
50
- def append_commands_to_cmakelists(variables)
58
+ def append_commands_to_cmakelists(variables, options)
51
59
  srcdir = variables[:CYGCMAKE_SOURCE] || variables[:S]
60
+ srcdir = File.expand_path(File.join(variables[:S], options['srcdir'])) if options['srcdir']
52
61
  cmakelists = File.expand_path(File.join(srcdir, 'CMakeLists.txt'))
53
- return if %r!DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig!.match?(File.read(cmakelists))
62
+ if %r!DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig!.match?(File.read(cmakelists))
63
+ Xezat.logger.debug(' Not rewrite CMakeLists.txt')
64
+ return
65
+ end
66
+
67
+ Xezat.logger.debug(' Rewrite CMakeLists.txt')
54
68
 
55
69
  File.atomic_open(cmakelists, 'a') do |f|
56
70
  f.write(get_cmakelists(variables))
@@ -62,8 +76,9 @@ module Xezat
62
76
  ERB.new(File.readlines(erb).join(nil), trim_mode: '%-').result(binding)
63
77
  end
64
78
 
65
- def append_commands_to_autotools(variables)
79
+ def append_commands_to_autotools(variables, options)
66
80
  srcdir = variables[:CYGCONF_SOURCE] || variables[:S]
81
+ srcdir = File.expand_path(File.join(variables[:S], options['srcdir'])) if options['srcdir']
67
82
  pn = variables[:PN]
68
83
  configure_ac = File.expand_path(File.join(srcdir, 'configure.ac'))
69
84
  configure_ac = File.expand_path(File.join(srcdir, 'configure.in')) unless File.exist?(configure_ac)
@@ -71,16 +86,23 @@ module Xezat
71
86
 
72
87
  original_ac = File.read(configure_ac)
73
88
 
74
- return if /#{pn}.pc/.match?(original_ac)
89
+ if /#{pn}.pc/.match?(original_ac)
90
+ Xezat.logger.debug(" Not rewrite #{configure_ac}")
91
+ return
92
+ end
93
+
94
+ rewritten_ac = original_ac.gsub(/^AC_OUTPUT$/, "AC_CONFIG_FILES([#{pn}.pc])#{$INPUT_RECORD_SEPARATOR}AC_OUTPUT")
75
95
 
76
- original_ac.gsub!(/(AC_CONFIG_FILES\(\[)/, "\\1#{"#{pn}.pc "}")
77
- File.atomic_write(configure_ac) do |fa|
78
- fa.write(original_ac)
96
+ File.atomic_open(configure_ac, 'w') do |fa|
97
+ fa.write(rewritten_ac)
79
98
 
80
99
  makefile_am = File.expand_path(File.join(srcdir, 'Makefile.am'))
81
100
  raise AutotoolsFileNotFoundError unless File.exist?(makefile_am)
82
101
 
83
- break if /pkgconfig_DATA/.match?(File.read(makefile_am))
102
+ if /pkgconfig_DATA/.match?(File.read(makefile_am))
103
+ Xezat.logger.debug(" Not rewrite #{makefile_am}")
104
+ break
105
+ end
84
106
 
85
107
  commands_am = File.read(File.expand_path(File.join(TEMPLATE_DIR, 'Makefile.am')))
86
108
  File.atomic_open(makefile_am, 'a') do |fm|
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'English'
3
4
  require 'etc'
4
5
  require 'facets/file/atomic_write'
5
6
  require 'facets/string/word_wrap'
@@ -22,15 +23,21 @@ module Xezat
22
23
  end
23
24
  end
24
25
 
25
- command = ['bash', File.expand_path(File.join(DATA_DIR, 'show_cygport_variable.sh')), cygport]
26
+ command = ['bash', File.expand_path(File.join(DATA_DIR, 'var2yaml.sh')), cygport]
26
27
  result, error, status = Open3.capture3(command.join(' '))
27
28
  raise CygportProcessError, error unless status.success?
28
29
 
29
30
  result.gsub!(/^.*\*\*\*.*$/, '')
30
31
 
31
- variables = YAML.safe_load(result, [Symbol]).each_value do |v|
32
- v.strip! if v.respond_to?(:strip)
32
+ begin
33
+ variables = YAML.safe_load(result, [Symbol]).each_value do |v|
34
+ v.strip! if v.respond_to?(:strip)
35
+ end
36
+ rescue Psych::SyntaxError => e
37
+ print_yaml(result)
38
+ raise e
33
39
  end
40
+
34
41
  variables[:DESCRIPTION].word_wrap!(79)
35
42
 
36
43
  File.atomic_write(cache_file) do |f|
@@ -40,4 +47,12 @@ module Xezat
40
47
 
41
48
  variables
42
49
  end
50
+
51
+ def print_yaml(result)
52
+ lineno = 1
53
+ result.split($INPUT_RECORD_SEPARATOR).each do |line|
54
+ printf '%<lineno>5d | %<line>s%<ls>s', lineno: lineno, line: line, ls: $INPUT_RECORD_SEPARATOR
55
+ lineno += 1
56
+ end
57
+ end
43
58
  end
data/lib/xezat/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Xezat
4
- VERSION = '0.2.2'
4
+ VERSION = '0.2.3'
5
5
  end
@@ -0,0 +1,44 @@
1
+ ---
2
+ Bison:
3
+ package: bison
4
+ C:
5
+ package: gcc-core
6
+ dependencies:
7
+ - binutils
8
+ C++:
9
+ package: gcc-g++
10
+ dependencies:
11
+ - binutils
12
+ - gcc-core
13
+ Fortran:
14
+ package: gcc-fortran
15
+ dependencies:
16
+ - binutils
17
+ - gcc-core
18
+ Fortran Free Form:
19
+ package: gcc-fortran
20
+ dependencies:
21
+ - binutils
22
+ - gcc-core
23
+ Lex:
24
+ package: flex
25
+ Lua:
26
+ package: lua
27
+ #Objective-C:
28
+ # package: gcc-objc
29
+ # dependencies:
30
+ # - binutils
31
+ # - gcc-core
32
+ #Objective-C++:
33
+ # package: gcc-objc++
34
+ # dependencies:
35
+ # - binutils
36
+ # - gcc-core
37
+ Protocol Buffer:
38
+ package: libprotobuf-devel
39
+ Ragel:
40
+ package: ragel
41
+ Vala:
42
+ package: vala
43
+ Yacc:
44
+ package: bison
@@ -0,0 +1,11 @@
1
+ ---
2
+ ".C": C++
3
+ ".CXX": C++
4
+ ".H": C++
5
+ ".HXX": C++
6
+ ".c": C
7
+ ".cpp": C++
8
+ ".cxx": C++
9
+ ".h": C
10
+ ".hpp": C++
11
+ ".hxx": C++
@@ -0,0 +1,4 @@
1
+ ---
2
+ HOMEPAGE: https://bitbucket.org/${BITBUCKET_USER}/${PN}
3
+ SRC_URI: https://bitbucket.org/${BITBUCKET_USER}/${PN}/downloads/${P}.tar.gz
4
+ HG_URI: https://bitbucket.org/${BITBUCKET_USER}/${PN}
@@ -0,0 +1,4 @@
1
+ ---
2
+ HOMEPAGE: https://github.com/${GITHUB_USER}/${PN}
3
+ SRC_URI: https://github.com/${GITHUB_USER}/${PN}/archive/refs/tags/v${PV}.tar.gz
4
+ GIT_URI: https://github.com/${GITHUB_USER}/${PN}.git
@@ -0,0 +1,3 @@
1
+ ---
2
+ HOMEPAGE: https://www.gnu.org/software/${PN}/
3
+ SRC_URI: mirror://gnu/${PN}/${P}.tar.gz
@@ -0,0 +1,3 @@
1
+ ---
2
+ HOMEPAGE: https://www.nongnu.org/${PN}/
3
+ SRC_URI: mirror://savannah/${PN}/${P}.tar.gz
@@ -0,0 +1,5 @@
1
+ ---
2
+ HOMEPAGE: https://sourceforge.net/projects/${PN}/
3
+ SRC_URI: mirror://sourceforge/${PN}/${P}.tar.gz
4
+ SVN_URI: svn://svn.code.sf.net/p/${PN}/code
5
+ GIT_URI: git://git.code.sf.net/p/${PN}/code
@@ -1,8 +1,6 @@
1
- if (CYGWIN)
2
- set(prefix ${CMAKE_INSTALL_PREFIX})
3
- set(exec_prefix ${CMAKE_INSTALL_PREFIX})
4
- set(libdir ${CMAKE_INSTALL_PREFIX}/lib)
5
- set(includedir ${CMAKE_INSTALL_PREFIX}/include)
6
- configure_file(${CMAKE_SOURCE_DIR}/<%= variables[:PN] %>.pc.in ${CMAKE_BINARY_DIR}/<%= variables[:PN] %>.pc @ONLY)
7
- install(FILES ${CMAKE_BINARY_DIR}/<%= variables[:PN] %>.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig)
8
- endif()
1
+ set(prefix ${CMAKE_INSTALL_PREFIX})
2
+ set(exec_prefix ${CMAKE_INSTALL_PREFIX})
3
+ set(libdir ${CMAKE_INSTALL_PREFIX}/lib)
4
+ set(includedir ${CMAKE_INSTALL_PREFIX}/include)
5
+ configure_file(${CMAKE_SOURCE_DIR}/<%= variables[:PN] %>.pc.in ${CMAKE_BINARY_DIR}/<%= variables[:PN] %>.pc @ONLY)
6
+ install(FILES ${CMAKE_BINARY_DIR}/<%= variables[:PN] %>.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig)
@@ -6,6 +6,10 @@ CATEGORY="<%= category %>"
6
6
  SUMMARY="<%= summary %>"
7
7
  DESCRIPTION="<%= description %>"
8
8
 
9
+ LICENSE=""
10
+ LICENSE_SPDX="SPDX-License-Identifier: "
11
+ LICENSE_URI="COPYING"
12
+
9
13
  <% cygclasses.each do |cygclass| -%>
10
14
  inherit <%= cygclass %>
11
15
  <% end -%>
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
2
 
3
- show_cygport_variables()
3
+ var2yaml()
4
4
  {
5
5
  for var in `compgen -A variable`
6
6
  do
@@ -8,6 +8,7 @@ show_cygport_variables()
8
8
  [ $var = 'COMP_WORDBREAKS' ] && continue
9
9
  [ $var = 'HOMEPATH' ] && continue
10
10
  [ $var = 'PERL_MB_OPT' ] && continue
11
+ [ $var = 'PSModulePath' ] && continue
11
12
  [[ ${!var} =~ ^[A-Za-z]:.* ]] && continue
12
13
 
13
14
  echo -n :$var:
@@ -28,4 +29,4 @@ show_cygport_variables()
28
29
  done
29
30
  }
30
31
 
31
- source ${CYGPORT:-/usr/bin/cygport} $* show_cygport_variables
32
+ source ${CYGPORT:-/usr/bin/cygport} $* var2yaml
data/xezat.gemspec CHANGED
@@ -24,18 +24,19 @@ Gem::Specification.new do |spec|
24
24
  spec.required_ruby_version = '>= 2.6.4'
25
25
 
26
26
  spec.add_runtime_dependency 'facets', '>= 3.1.0'
27
- spec.add_runtime_dependency 'github-linguist', '>= 7.13.0'
28
- spec.add_runtime_dependency 'pkg-config', '>= 1.4.5'
27
+ spec.add_runtime_dependency 'github-linguist', '>= 7.21.0'
28
+ spec.add_runtime_dependency 'pkg-config', '>= 1.4.7'
29
+ spec.add_runtime_dependency 'spdx', '>= 4.1.1'
29
30
  spec.add_runtime_dependency 'thor', '>= 0.20.3'
30
31
  spec.add_runtime_dependency 'thor-zsh_completion', '>= 0.1.9'
31
32
 
32
33
  spec.add_development_dependency 'bundler', '>= 1.15.3'
33
- spec.add_development_dependency 'fasterer', '>= 0.9.0'
34
+ spec.add_development_dependency 'fasterer', '>= 0.10.0'
34
35
  spec.add_development_dependency 'rake', '>= 13.0'
35
36
  spec.add_development_dependency 'rspec', '>= 3.9.0'
36
37
  spec.add_development_dependency 'rspec_junit_formatter', '<= 0.4.1'
37
- spec.add_development_dependency 'rubocop', '>= 1.10.0'
38
- spec.add_development_dependency 'rubocop-performance', '>= 1.9.2'
38
+ spec.add_development_dependency 'rubocop', '>= 1.28.1'
39
+ spec.add_development_dependency 'rubocop-performance', '>= 1.13.3'
39
40
  spec.add_development_dependency 'simplecov', '>= 0.21.2'
40
41
 
41
42
  spec.metadata['rubygems_mfa_required'] = 'true'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xezat
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
  - Daisuke Fujimura (fd0)
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-23 00:00:00.000000000 Z
11
+ date: 2022-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: facets
@@ -30,28 +30,42 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 7.13.0
33
+ version: 7.21.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 7.13.0
40
+ version: 7.21.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pkg-config
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 1.4.5
47
+ version: 1.4.7
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.4.5
54
+ version: 1.4.7
55
+ - !ruby/object:Gem::Dependency
56
+ name: spdx
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 4.1.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 4.1.1
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: thor
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +114,14 @@ dependencies:
100
114
  requirements:
101
115
  - - ">="
102
116
  - !ruby/object:Gem::Version
103
- version: 0.9.0
117
+ version: 0.10.0
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - ">="
109
123
  - !ruby/object:Gem::Version
110
- version: 0.9.0
124
+ version: 0.10.0
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: rake
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -156,28 +170,28 @@ dependencies:
156
170
  requirements:
157
171
  - - ">="
158
172
  - !ruby/object:Gem::Version
159
- version: 1.10.0
173
+ version: 1.28.1
160
174
  type: :development
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
178
  - - ">="
165
179
  - !ruby/object:Gem::Version
166
- version: 1.10.0
180
+ version: 1.28.1
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: rubocop-performance
169
183
  requirement: !ruby/object:Gem::Requirement
170
184
  requirements:
171
185
  - - ">="
172
186
  - !ruby/object:Gem::Version
173
- version: 1.9.2
187
+ version: 1.13.3
174
188
  type: :development
175
189
  prerelease: false
176
190
  version_requirements: !ruby/object:Gem::Requirement
177
191
  requirements:
178
192
  - - ">="
179
193
  - !ruby/object:Gem::Version
180
- version: 1.9.2
194
+ version: 1.13.3
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: simplecov
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -232,6 +246,9 @@ files:
232
246
  - lib/xezat/command/init.rb
233
247
  - lib/xezat/command/port.rb
234
248
  - lib/xezat/command/validate.rb
249
+ - lib/xezat/command/validate/config.rb
250
+ - lib/xezat/command/validate/license.rb
251
+ - lib/xezat/command/validate/pkgconfig.rb
235
252
  - lib/xezat/config.rb
236
253
  - lib/xezat/cygchangelog.rb
237
254
  - lib/xezat/cygclasses.rb
@@ -256,8 +273,8 @@ files:
256
273
  - lib/xezat/detector/python27.rb
257
274
  - lib/xezat/detector/python36.rb
258
275
  - lib/xezat/detector/python37.rb
259
- - lib/xezat/detector/python38-docutils.rb
260
276
  - lib/xezat/detector/python38.rb
277
+ - lib/xezat/detector/python39-docutils.rb
261
278
  - lib/xezat/detector/python39.rb
262
279
  - lib/xezat/detector/roundup.rb
263
280
  - lib/xezat/detector/waf.rb
@@ -270,21 +287,21 @@ files:
270
287
  - lib/xezat/variables.rb
271
288
  - lib/xezat/version.rb
272
289
  - share/xezat/categories.yaml
273
- - share/xezat/compilers.json
274
- - share/xezat/invoke_cygport_dep.sh
275
- - share/xezat/languages.json
276
- - share/xezat/repository/bitbucket.json
277
- - share/xezat/repository/github.json
278
- - share/xezat/repository/gnu.json
279
- - share/xezat/repository/savannah.json
280
- - share/xezat/repository/sourceforge.json
281
- - share/xezat/show_cygport_variable.sh
290
+ - share/xezat/compilers.yaml
291
+ - share/xezat/cygport_dep.sh
292
+ - share/xezat/languages.yaml
293
+ - share/xezat/repository/bitbucket.yaml
294
+ - share/xezat/repository/github.yaml
295
+ - share/xezat/repository/gnu.yaml
296
+ - share/xezat/repository/savannah.yaml
297
+ - share/xezat/repository/sourceforge.yaml
282
298
  - share/xezat/template/Makefile.am
283
299
  - share/xezat/template/README.erb
284
300
  - share/xezat/template/announce.erb
285
301
  - share/xezat/template/cmake.erb
286
302
  - share/xezat/template/cygport.erb
287
303
  - share/xezat/template/pkgconfig.erb
304
+ - share/xezat/var2yaml.sh
288
305
  - xezat.gemspec
289
306
  homepage: https://github.com/fd00/xezat
290
307
  licenses:
@@ -306,7 +323,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
306
323
  - !ruby/object:Gem::Version
307
324
  version: '0'
308
325
  requirements: []
309
- rubygems_version: 3.2.32
326
+ rubygems_version: 3.3.11
310
327
  signing_key:
311
328
  specification_version: 4
312
329
  summary: xezat helps you win at cygport.
@@ -1,67 +0,0 @@
1
- {
2
- "Bison": {
3
- "package": "bison"
4
- },
5
- "C": {
6
- "package": "gcc-core",
7
- "dependencies": [
8
- "binutils"
9
- ]
10
- },
11
- "C++": {
12
- "package": "gcc-g++",
13
- "dependencies": [
14
- "binutils",
15
- "gcc-core"
16
- ]
17
- },
18
- "Fortran": {
19
- "package": "gcc-fortran",
20
- "dependencies": [
21
- "binutils",
22
- "gcc-core"
23
- ]
24
- },
25
- "Fortran Free Form": {
26
- "package": "gcc-fortran",
27
- "dependencies": [
28
- "binutils",
29
- "gcc-core"
30
- ]
31
- },
32
- "Lex": {
33
- "package": "flex"
34
- },
35
- "Lua": {
36
- "package": "lua"
37
- },
38
- "Objective-C": {
39
- "package": "gcc-objc",
40
- "dependencies": [
41
- "binutils",
42
- "gcc-core"
43
- ]
44
- },
45
- "Objective-C++": {
46
- "package": "gcc-objc++",
47
- "dependencies": [
48
- "binutils",
49
- "gcc-core"
50
- ]
51
- },
52
- "Protocol Buffer": {
53
- "package": "libprotobuf-devel"
54
- },
55
- "Ragel": {
56
- "package": "ragel"
57
- },
58
- "Ruby": {
59
- "package": "ruby"
60
- },
61
- "Vala": {
62
- "package": "vala"
63
- },
64
- "Yacc": {
65
- "package": "bison"
66
- }
67
- }
@@ -1,12 +0,0 @@
1
- {
2
- ".C": "C++",
3
- ".CXX": "C++",
4
- ".H": "C++",
5
- ".HXX": "C++",
6
- ".c": "C",
7
- ".cpp": "C++",
8
- ".cxx": "C++",
9
- ".h": "C",
10
- ".hpp": "C++",
11
- ".hxx": "C++"
12
- }
@@ -1,5 +0,0 @@
1
- {
2
- "HOMEPAGE": "https://bitbucket.org/${BITBUCKET_USER}/${PN}",
3
- "SRC_URI": "https://bitbucket.org/${BITBUCKET_USER}/${PN}/downloads/${P}.tar.gz",
4
- "HG_URI": "https://bitbucket.org/${BITBUCKET_USER}/${PN}"
5
- }
@@ -1,5 +0,0 @@
1
- {
2
- "HOMEPAGE": "https://github.com/${GITHUB_USER}/${PN}",
3
- "SRC_URI": "https://github.com/${GITHUB_USER}/${PN}/archive/refs/tags/v${PV}.tar.gz",
4
- "GIT_URI": "git://github.com/${GITHUB_USER}/${PN}.git"
5
- }
@@ -1,4 +0,0 @@
1
- {
2
- "HOMEPAGE": "https://www.gnu.org/software/${PN}/",
3
- "SRC_URI": "mirror://gnu/${PN}/${P}.tar.gz"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "HOMEPAGE": "https://www.nongnu.org/${PN}/",
3
- "SRC_URI": "mirror://savannah/${PN}/${P}.tar.gz"
4
- }
@@ -1,6 +0,0 @@
1
- {
2
- "HOMEPAGE": "https://sourceforge.net/projects/${PN}/",
3
- "SRC_URI": "mirror://sourceforge/${PN}/${P}.tar.gz",
4
- "SVN_URI": "svn://svn.code.sf.net/p/${PN}/code",
5
- "GIT_URI": "git://git.code.sf.net/p/${PN}/code"
6
- }