xezat 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.circleci/config.yml +1 -1
- data/.rubocop.yml +1 -0
- data/lib/xezat.rb +3 -3
- data/lib/xezat/command/announce.rb +22 -0
- data/lib/xezat/command/bump.rb +1 -1
- data/lib/xezat/command/bump/changelog.rb +8 -2
- data/lib/xezat/command/bump/compiler.rb +1 -1
- data/lib/xezat/command/bump/cygport_dep.rb +1 -1
- data/lib/xezat/command/bump/development_package.rb +1 -1
- data/lib/xezat/command/bump/file.rb +2 -2
- data/lib/xezat/command/bump/language.rb +1 -1
- data/lib/xezat/command/bump/runtime_package.rb +1 -1
- data/lib/xezat/command/bump/src_uri.rb +1 -1
- data/lib/xezat/command/doctor.rb +0 -2
- data/lib/xezat/command/port.rb +1 -1
- data/lib/xezat/command/validate.rb +68 -6
- data/lib/xezat/cygchangelog.rb +6 -4
- data/lib/xezat/cygversion.rb +6 -1
- data/lib/xezat/detector/asciidoc.rb +20 -0
- data/lib/xezat/detector/autoconf.rb +1 -1
- data/lib/xezat/detector/boost.m4.rb +1 -1
- data/lib/xezat/detector/cmake.rb +1 -1
- data/lib/xezat/detector/libtool.rb +2 -2
- data/lib/xezat/detector/make.rb +1 -1
- data/lib/xezat/detector/nasm.rb +16 -0
- data/lib/xezat/detector/ninja.rb +1 -1
- data/lib/xezat/detector/{python36-docutils.rb → python38-docutils.rb} +7 -2
- data/lib/xezat/detector/python38.rb +13 -0
- data/lib/xezat/detector/waf.rb +1 -1
- data/lib/xezat/detectors.rb +4 -4
- data/lib/xezat/generator/pkgconfig.rb +1 -1
- data/lib/xezat/main.rb +7 -0
- data/lib/xezat/packages.rb +1 -1
- data/lib/xezat/variables.rb +5 -4
- data/lib/xezat/version.rb +1 -1
- data/share/xezat/categories.yaml +51 -0
- data/share/xezat/repository/sourceforge.json +1 -1
- data/share/xezat/template/announce.erb +7 -0
- data/xezat.gemspec +1 -2
- metadata +11 -19
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 11d74a143e7b6c2d39ab8ee1698400adb87044e0ca8b3cfb8ef60df08641c0e6
         | 
| 4 | 
            +
              data.tar.gz: 5f1ac17b9895d6c80aa15e27eeabd82e6678144097c92ccd9cb1021773b5c15b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5b14c63cecba36080b1ad95b3669cd2d837c22389e8074c5948d56ef134d1082eca62b0c7f2f16c7fac3b6d64581bc95defe4a2777efe1240a70b6763d8a6cf0
         | 
| 7 | 
            +
              data.tar.gz: 71ae49dc2ee4282fc949538ed2176140d81b7950edbf12e965527fb005409fed9fcde547a6255eb0c4851372c3f14e12b7bc276a509755a5d15a5ba1a6ba71bc
         | 
    
        data/.circleci/config.yml
    CHANGED
    
    
    
        data/.rubocop.yml
    CHANGED
    
    
    
        data/lib/xezat.rb
    CHANGED
    
    | @@ -12,9 +12,9 @@ module Xezat | |
| 12 12 | 
             
              class << self
         | 
| 13 13 | 
             
                attr_accessor :logger
         | 
| 14 14 | 
             
              end
         | 
| 15 | 
            -
              Xezat.logger = Logger.new( | 
| 16 | 
            -
              Xezat.logger.formatter = proc { | | 
| 17 | 
            -
                "#{datetime}: #{message}\n"
         | 
| 15 | 
            +
              Xezat.logger = Logger.new($stdout)
         | 
| 16 | 
            +
              Xezat.logger.formatter = proc { |severity, datetime, _progname, message|
         | 
| 17 | 
            +
                "#{datetime}: [#{severity}] #{message}\n"
         | 
| 18 18 | 
             
              }
         | 
| 19 19 |  | 
| 20 20 | 
             
              class CygportProcessError < StandardError
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'xezat/variables'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Xezat
         | 
| 6 | 
            +
              module Command
         | 
| 7 | 
            +
                class Announce
         | 
| 8 | 
            +
                  include Xezat
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def initialize(options, cygport)
         | 
| 11 | 
            +
                    @options = options
         | 
| 12 | 
            +
                    @cygport = cygport
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def execute
         | 
| 16 | 
            +
                    variables = variables(@cygport)
         | 
| 17 | 
            +
                    erb = File.expand_path(File.join(TEMPLATE_DIR, 'announce.erb'))
         | 
| 18 | 
            +
                    print ERB.new(File.readlines(erb).join(nil), trim_mode: '%-').result(binding).chop # remove redundant new line
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
    
        data/lib/xezat/command/bump.rb
    CHANGED
    
    | @@ -38,7 +38,7 @@ module Xezat | |
| 38 38 | 
             
                      changelog: get_changelog(vars, @options, readme_file)
         | 
| 39 39 | 
             
                    }
         | 
| 40 40 |  | 
| 41 | 
            -
                    Xezat.logger.debug('Write ChangeLog atomically')
         | 
| 41 | 
            +
                    Xezat.logger.debug('  Write ChangeLog atomically')
         | 
| 42 42 | 
             
                    File.atomic_write(readme_file) do |f|
         | 
| 43 43 | 
             
                      f.write(get_embedded_contents(vars, info))
         | 
| 44 44 | 
             
                    end
         | 
| @@ -9,7 +9,7 @@ module Xezat | |
| 9 9 | 
             
              module Command
         | 
| 10 10 | 
             
                class Bump
         | 
| 11 11 | 
             
                  def get_changelog(variables, options, readme_file)
         | 
| 12 | 
            -
                    Xezat.logger.debug(' | 
| 12 | 
            +
                    Xezat.logger.debug('  Try to append latest log to changelog...')
         | 
| 13 13 | 
             
                    current_version = variables[:PVR].intern
         | 
| 14 14 | 
             
                    if FileTest.exist?(readme_file)
         | 
| 15 15 | 
             
                      raise FilePermissionError, "Cannot read #{readme_file}" unless FileTest.readable?(readme_file)
         | 
| @@ -17,10 +17,16 @@ module Xezat | |
| 17 17 |  | 
| 18 18 | 
             
                      changelog = Cygchangelog.new(File.read(readme_file))
         | 
| 19 19 | 
             
                      message = options['message'] || 'Version bump.'
         | 
| 20 | 
            -
                      changelog | 
| 20 | 
            +
                      if changelog.length > 1 || !changelog.key?(current_version)
         | 
| 21 | 
            +
                        changelog[current_version] = message # overwrite unless initial package
         | 
| 22 | 
            +
                        Xezat.logger.debug("    '#{message}' appended")
         | 
| 23 | 
            +
                      else
         | 
| 24 | 
            +
                        Xezat.logger.warn('    Initial release protected')
         | 
| 25 | 
            +
                      end
         | 
| 21 26 | 
             
                    else
         | 
| 22 27 | 
             
                      changelog = Cygchangelog.new
         | 
| 23 28 | 
             
                      changelog[current_version] = 'Initial release by fd0 <https://github.com/fd00/>'
         | 
| 29 | 
            +
                      Xezat.logger.debug('    Initial release by you')
         | 
| 24 30 | 
             
                    end
         | 
| 25 31 | 
             
                    changelog
         | 
| 26 32 | 
             
                  end
         | 
| @@ -6,7 +6,7 @@ module Xezat | |
| 6 6 | 
             
              module Command
         | 
| 7 7 | 
             
                class Bump
         | 
| 8 8 | 
             
                  def get_compilers(languages, _variables)
         | 
| 9 | 
            -
                    Xezat.logger.debug('Collect compilers')
         | 
| 9 | 
            +
                    Xezat.logger.debug('  Collect compilers')
         | 
| 10 10 | 
             
                    compiler_file = File.expand_path(File.join(DATA_DIR, 'compilers.json'))
         | 
| 11 11 | 
             
                    compiler_candidates = JSON.parse(File.read(compiler_file))
         | 
| 12 12 | 
             
                    compilers = []
         | 
| @@ -15,7 +15,7 @@ module Xezat | |
| 15 15 | 
             
                      File.dirname(file)
         | 
| 16 16 | 
             
                    end.sort.uniq.join(':')
         | 
| 17 17 | 
             
                    command = ['bash', File.expand_path(File.join(DATA_DIR, 'invoke_cygport_dep.sh')), cygport]
         | 
| 18 | 
            -
                    result, error, status = Open3.capture3({ 'PATH' => ENV['PATH'] | 
| 18 | 
            +
                    result, error, status = Open3.capture3({ 'PATH' => "#{ENV['PATH']}:#{additional_path}" }, command.join(' '))
         | 
| 19 19 | 
             
                    raise CygportProcessError, error unless status.success?
         | 
| 20 20 |  | 
| 21 21 | 
             
                    result
         | 
| @@ -9,7 +9,7 @@ module Xezat | |
| 9 9 | 
             
              module Command
         | 
| 10 10 | 
             
                class Bump
         | 
| 11 11 | 
             
                  def get_development_packages(variables, packages)
         | 
| 12 | 
            -
                    Xezat.logger.debug('Collect development packages')
         | 
| 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 | 
             
                    development_packages = (compilers + tools + [:cygport]).uniq.sort
         | 
| @@ -9,10 +9,10 @@ module Xezat | |
| 9 9 | 
             
              module Command
         | 
| 10 10 | 
             
                class Bump
         | 
| 11 11 | 
             
                  def get_files(variables)
         | 
| 12 | 
            -
                    Xezat.logger.debug('Collect files')
         | 
| 12 | 
            +
                    Xezat.logger.debug('  Collect files')
         | 
| 13 13 | 
             
                    pkg2files = {}
         | 
| 14 14 | 
             
                    variables[:pkg_name].each do |pkg_name|
         | 
| 15 | 
            -
                      Xezat.logger.debug(" | 
| 15 | 
            +
                      Xezat.logger.debug("    Collect #{pkg_name}")
         | 
| 16 16 | 
             
                      lst_file = File.expand_path(File.join(variables[:T], ".#{pkg_name}.lst"))
         | 
| 17 17 | 
             
                      raise IllegalStateError, "No such file: #{lst_file}" unless FileTest.readable?(lst_file)
         | 
| 18 18 |  | 
| @@ -7,7 +7,7 @@ module Xezat | |
| 7 7 | 
             
              module Command
         | 
| 8 8 | 
             
                class Bump
         | 
| 9 9 | 
             
                  def get_languages(top_src_dir)
         | 
| 10 | 
            -
                    Xezat.logger.debug('Collect languages')
         | 
| 10 | 
            +
                    Xezat.logger.debug('  Collect languages')
         | 
| 11 11 | 
             
                    languages_file = File.expand_path(File.join(DATA_DIR, 'languages.json'))
         | 
| 12 12 | 
             
                    languages_candidates = JSON.parse(File.read(languages_file))
         | 
| 13 13 | 
             
                    languages = []
         | 
| @@ -8,7 +8,7 @@ module Xezat | |
| 8 8 | 
             
              module Command
         | 
| 9 9 | 
             
                class Bump
         | 
| 10 10 | 
             
                  def get_runtime_packages(vars, cygport)
         | 
| 11 | 
            -
                    Xezat.logger.debug('Collect runtime packages from cygport dep')
         | 
| 11 | 
            +
                    Xezat.logger.debug('  Collect runtime packages from cygport dep')
         | 
| 12 12 | 
             
                    result = invoke_cygport_dep(vars, cygport)
         | 
| 13 13 | 
             
                    result.gsub(/^.*\*\*\*.*$/, '').split($INPUT_RECORD_SEPARATOR).map(&:lstrip)
         | 
| 14 14 | 
             
                  end
         | 
| @@ -7,7 +7,7 @@ module Xezat | |
| 7 7 | 
             
              module Command
         | 
| 8 8 | 
             
                class Bump
         | 
| 9 9 | 
             
                  def get_src_uri(vars, cygclasses = CygclassManager.new)
         | 
| 10 | 
            -
                    Xezat.logger.debug('Collect SRC_URI')
         | 
| 10 | 
            +
                    Xezat.logger.debug('  Collect SRC_URI')
         | 
| 11 11 | 
             
                    cygclasses.vcs.each do |vcs|
         | 
| 12 12 | 
             
                      next unless vars.key?("_#{vcs}_CYGCLASS_".intern)
         | 
| 13 13 |  | 
    
        data/lib/xezat/command/doctor.rb
    CHANGED
    
    
    
        data/lib/xezat/command/port.rb
    CHANGED
    
    
| @@ -1,6 +1,8 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            +
            require 'net/http'
         | 
| 3 4 | 
             
            require 'pkg-config'
         | 
| 5 | 
            +
            require 'uri'
         | 
| 4 6 | 
             
            require 'xezat/variables'
         | 
| 5 7 |  | 
| 6 8 | 
             
            module Xezat
         | 
| @@ -16,22 +18,82 @@ module Xezat | |
| 16 18 | 
             
                  def execute
         | 
| 17 19 | 
             
                    Xezat.logger.debug('Start validating')
         | 
| 18 20 | 
             
                    vars = variables(@cygport)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    Xezat.logger.debug('  Validate .cygport')
         | 
| 23 | 
            +
                    validate_cygport(@cygport)
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    Xezat.logger.debug('  Validate category')
         | 
| 26 | 
            +
                    validate_category(vars[:CATEGORY])
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                    Xezat.logger.debug('  Validate homepage')
         | 
| 29 | 
            +
                    validate_homepage(vars[:HOMEPAGE])
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    Xezat.logger.debug('  Validate *.pc')
         | 
| 19 32 | 
             
                    validate_pkgconfig(vars)
         | 
| 33 | 
            +
             | 
| 20 34 | 
             
                    Xezat.logger.debug('End validating')
         | 
| 21 35 | 
             
                  end
         | 
| 22 36 |  | 
| 37 | 
            +
                  def validate_cygport(cygport)
         | 
| 38 | 
            +
                    original_string = File.read(cygport)
         | 
| 39 | 
            +
                    stripped_string = original_string.gsub(/^\xEF\xBB\xBF/, '')
         | 
| 40 | 
            +
                    Xezat.logger.error('    .cygport contains BOM') unless original_string == stripped_string
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  def validate_category(category)
         | 
| 44 | 
            +
                    categories_file = File.expand_path(File.join(DATA_DIR, 'categories.yaml'))
         | 
| 45 | 
            +
                    Xezat.logger.error("    Category is invalid : #{category}") unless YAML.safe_load(File.open(categories_file), [Symbol]).include?(category.downcase)
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  def validate_homepage(homepage)
         | 
| 49 | 
            +
                    response = Net::HTTP.get_response(URI.parse(homepage))
         | 
| 50 | 
            +
                    code = response.code
         | 
| 51 | 
            +
                    if code == '200'
         | 
| 52 | 
            +
                      Xezat.logger.debug("    code = #{response.code}")
         | 
| 53 | 
            +
                    else
         | 
| 54 | 
            +
                      Xezat.logger.error("    code = #{response.code}")
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
             | 
| 23 58 | 
             
                  def validate_pkgconfig(variables)
         | 
| 24 59 | 
             
                    pkgconfig_path = File.join(variables[:D], 'usr', 'lib', 'pkgconfig')
         | 
| 25 60 | 
             
                    PKGConfig.add_path(pkgconfig_path)
         | 
| 26 61 | 
             
                    Dir.glob('*.pc', 0, base: pkgconfig_path).each do |pc|
         | 
| 27 62 | 
             
                      basename = File.basename(pc, '.pc')
         | 
| 28 | 
            -
                      Xezat.logger.debug(" | 
| 63 | 
            +
                      Xezat.logger.debug("    #{basename}.pc found")
         | 
| 29 64 | 
             
                      modversion = PKGConfig.modversion(basename)
         | 
| 30 | 
            -
                      Xezat.logger.debug(" | 
| 31 | 
            -
                      pv = variables[:PV][0]
         | 
| 32 | 
            -
                      Xezat.logger.error(" | 
| 33 | 
            -
                      Xezat.logger.debug(" | 
| 34 | 
            -
                       | 
| 65 | 
            +
                      Xezat.logger.debug("      modversion = #{modversion}")
         | 
| 66 | 
            +
                      pv = variables[:PV][0].gsub(/\+.+$/, '')
         | 
| 67 | 
            +
                      Xezat.logger.error("        modversion differs from $PN = #{pv}") unless modversion == pv
         | 
| 68 | 
            +
                      Xezat.logger.debug("      cflags = #{PKGConfig.cflags(basename)}")
         | 
| 69 | 
            +
                      libs = PKGConfig.libs(basename)
         | 
| 70 | 
            +
                      Xezat.logger.debug("      libs = #{libs}")
         | 
| 71 | 
            +
                      validate_libs(variables, libs)
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                  def validate_libs(variables, libs)
         | 
| 76 | 
            +
                    lib_dirs = [File.join(variables[:D], '/usr/lib'), '/usr/lib', '/usr/lib/w32api', '/usr/lib/gcc/x86_64-pc-cygwin/10']
         | 
| 77 | 
            +
                    libs.split do |option|
         | 
| 78 | 
            +
                      if option.start_with?('-l')
         | 
| 79 | 
            +
                        lib_name = option[2, 255] # Assume file length limit
         | 
| 80 | 
            +
                        found = false
         | 
| 81 | 
            +
                        lib_dirs.each do |dir|
         | 
| 82 | 
            +
                          archive_path = File.join(dir, "lib#{lib_name}.dll.a")
         | 
| 83 | 
            +
                          if File.exist?(archive_path)
         | 
| 84 | 
            +
                            Xezat.logger.debug("        #{lib_name} -> #{archive_path.gsub(variables[:D], '$D')}")
         | 
| 85 | 
            +
                            found = true
         | 
| 86 | 
            +
                            break
         | 
| 87 | 
            +
                          end
         | 
| 88 | 
            +
                          static_path = File.join(dir, "lib#{lib_name}.a")
         | 
| 89 | 
            +
                          next unless File.exist?(static_path)
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                          Xezat.logger.debug("        #{lib_name} -> #{static_path}")
         | 
| 92 | 
            +
                          found = true
         | 
| 93 | 
            +
                          break
         | 
| 94 | 
            +
                        end
         | 
| 95 | 
            +
                        Xezat.logger.error("        #{lib_name} not found") unless found
         | 
| 96 | 
            +
                      end
         | 
| 35 97 | 
             
                    end
         | 
| 36 98 | 
             
                  end
         | 
| 37 99 | 
             
                end
         | 
    
        data/lib/xezat/cygchangelog.rb
    CHANGED
    
    | @@ -48,13 +48,15 @@ module Xezat | |
| 48 48 | 
             
                  @changelogs.key?(key)
         | 
| 49 49 | 
             
                end
         | 
| 50 50 |  | 
| 51 | 
            -
                def each
         | 
| 51 | 
            +
                def each(&block)
         | 
| 52 52 | 
             
                  logs = @changelogs.sort do |a, b|
         | 
| 53 53 | 
             
                    -(Cygversion.new(a[0].to_s) <=> Cygversion.new(b[0].to_s))
         | 
| 54 54 | 
             
                  end
         | 
| 55 | 
            -
                  logs.each | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 55 | 
            +
                  logs.each(&block)
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                def length
         | 
| 59 | 
            +
                  @changelogs.length
         | 
| 58 60 | 
             
                end
         | 
| 59 61 | 
             
              end
         | 
| 60 62 | 
             
            end
         | 
    
        data/lib/xezat/cygversion.rb
    CHANGED
    
    | @@ -15,6 +15,8 @@ module Xezat | |
| 15 15 |  | 
| 16 16 | 
             
                def to_v
         | 
| 17 17 | 
             
                  [Gem::Version.new(@version), @revision, @release]
         | 
| 18 | 
            +
                rescue ArgumentError
         | 
| 19 | 
            +
                  to_a
         | 
| 18 20 | 
             
                end
         | 
| 19 21 |  | 
| 20 22 | 
             
                def to_a
         | 
| @@ -22,7 +24,10 @@ module Xezat | |
| 22 24 | 
             
                end
         | 
| 23 25 |  | 
| 24 26 | 
             
                def <=>(other)
         | 
| 25 | 
            -
                  to_v <=> other.to_v
         | 
| 27 | 
            +
                  result = (to_v <=> other.to_v)
         | 
| 28 | 
            +
                  return result unless result.nil?
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  (to_a <=> other.to_a)
         | 
| 26 31 | 
             
                end
         | 
| 27 32 | 
             
              end
         | 
| 28 33 | 
             
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'find'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Xezat
         | 
| 6 | 
            +
              module Detector
         | 
| 7 | 
            +
                class Asciidoc
         | 
| 8 | 
            +
                  def detect(variables)
         | 
| 9 | 
            +
                    Find.find(variables[:S]) do |file|
         | 
| 10 | 
            +
                      next unless file.end_with?("#{File::SEPARATOR}configure.ac", "#{File::SEPARATOR}configure.in")
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                      File.foreach(file) do |line|
         | 
| 13 | 
            +
                        return true if line.include?('asciidoc')
         | 
| 14 | 
            +
                      end
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                    false
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -7,7 +7,7 @@ module Xezat | |
| 7 7 | 
             
                class Autoconf
         | 
| 8 8 | 
             
                  def detect(variables)
         | 
| 9 9 | 
             
                    Find.find(variables[:S]) do |file|
         | 
| 10 | 
            -
                      return true if file.end_with?(File::SEPARATOR | 
| 10 | 
            +
                      return true if file.end_with?("#{File::SEPARATOR}configure.ac", "#{File::SEPARATOR}configure.in")
         | 
| 11 11 | 
             
                    end
         | 
| 12 12 | 
             
                    false
         | 
| 13 13 | 
             
                  end
         | 
| @@ -7,7 +7,7 @@ module Xezat | |
| 7 7 | 
             
                class BoostM4
         | 
| 8 8 | 
             
                  def detect(variables)
         | 
| 9 9 | 
             
                    Find.find(variables[:S]) do |file|
         | 
| 10 | 
            -
                      next unless file.end_with?(File::SEPARATOR | 
| 10 | 
            +
                      next unless file.end_with?("#{File::SEPARATOR}configure.ac", "#{File::SEPARATOR}configure.in")
         | 
| 11 11 |  | 
| 12 12 | 
             
                      File.foreach(file) do |line|
         | 
| 13 13 | 
             
                        return true if line.lstrip.start_with?('BOOST_REQUIRE')
         | 
    
        data/lib/xezat/detector/cmake.rb
    CHANGED
    
    
| @@ -7,10 +7,10 @@ module Xezat | |
| 7 7 | 
             
                class Libtool
         | 
| 8 8 | 
             
                  def detect(variables)
         | 
| 9 9 | 
             
                    Find.find(variables[:S]) do |file|
         | 
| 10 | 
            -
                      return true if file.end_with?(File::SEPARATOR | 
| 10 | 
            +
                      return true if file.end_with?("#{File::SEPARATOR}ltmain.sh")
         | 
| 11 11 | 
             
                    end
         | 
| 12 12 | 
             
                    Find.find(variables[:S]) do |file|
         | 
| 13 | 
            -
                      next unless file.end_with?(File::SEPARATOR | 
| 13 | 
            +
                      next unless file.end_with?("#{File::SEPARATOR}Makefile", "#{File::SEPARATOR}makefile")
         | 
| 14 14 | 
             
                      next if File.directory?(file)
         | 
| 15 15 |  | 
| 16 16 | 
             
                      File.foreach(file) do |line|
         | 
    
        data/lib/xezat/detector/make.rb
    CHANGED
    
    | @@ -7,7 +7,7 @@ module Xezat | |
| 7 7 | 
             
                class Make
         | 
| 8 8 | 
             
                  def detect(variables)
         | 
| 9 9 | 
             
                    Find.find(variables[:B]) do |file|
         | 
| 10 | 
            -
                      return true if file.end_with?(File::SEPARATOR | 
| 10 | 
            +
                      return true if file.end_with?("#{File::SEPARATOR}Makefile", "#{File::SEPARATOR}makefile")
         | 
| 11 11 | 
             
                    end
         | 
| 12 12 | 
             
                    File.foreach(File.join(variables[:top], variables[:cygportfile])) do |line|
         | 
| 13 13 | 
             
                      return true if line.index('cygmake')
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Xezat
         | 
| 4 | 
            +
              module Detector
         | 
| 5 | 
            +
                class Nasm
         | 
| 6 | 
            +
                  def detect(variables)
         | 
| 7 | 
            +
                    if variables.key?(:_meson_CYGCLASS_)
         | 
| 8 | 
            +
                      File.foreach(File.join(variables[:S], 'meson.build')) do |line|
         | 
| 9 | 
            +
                        return true if line.include?("find_program('nasm')")
         | 
| 10 | 
            +
                      end
         | 
| 11 | 
            +
                    end
         | 
| 12 | 
            +
                    false
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
    
        data/lib/xezat/detector/ninja.rb
    CHANGED
    
    
| @@ -4,15 +4,20 @@ require 'find' | |
| 4 4 |  | 
| 5 5 | 
             
            module Xezat
         | 
| 6 6 | 
             
              module Detector
         | 
| 7 | 
            -
                class  | 
| 7 | 
            +
                class Python38Docutils
         | 
| 8 8 | 
             
                  def detect(variables)
         | 
| 9 9 | 
             
                    Find.find(variables[:S]) do |file|
         | 
| 10 | 
            -
                      next unless file.end_with?(File::SEPARATOR | 
| 10 | 
            +
                      next unless file.end_with?("#{File::SEPARATOR}configure.ac", "#{File::SEPARATOR}configure.in")
         | 
| 11 11 |  | 
| 12 12 | 
             
                      File.foreach(file) do |line|
         | 
| 13 13 | 
             
                        return true if line.strip.start_with?('AC_CHECK_PROG') && line.index('rst2man').is_a?(Integer)
         | 
| 14 14 | 
             
                      end
         | 
| 15 15 | 
             
                    end
         | 
| 16 | 
            +
                    if variables.key?(:_meson_CYGCLASS_)
         | 
| 17 | 
            +
                      File.foreach(File.join(variables[:S], 'meson.build')) do |line|
         | 
| 18 | 
            +
                        return true if line.strip.index('rst2man').is_a?(Integer)
         | 
| 19 | 
            +
                      end
         | 
| 20 | 
            +
                    end
         | 
| 16 21 | 
             
                    false
         | 
| 17 22 | 
             
                  end
         | 
| 18 23 | 
             
                end
         | 
    
        data/lib/xezat/detector/waf.rb
    CHANGED
    
    
    
        data/lib/xezat/detectors.rb
    CHANGED
    
    | @@ -6,7 +6,7 @@ require 'xezat/ext/string' | |
| 6 6 | 
             
            module Xezat
         | 
| 7 7 | 
             
              class DetectorManager
         | 
| 8 8 | 
             
                def initialize(detector_dir = File.expand_path(File.join(File.dirname(__FILE__), 'detector')))
         | 
| 9 | 
            -
                  Xezat.logger.debug('Load detectors')
         | 
| 9 | 
            +
                  Xezat.logger.debug('  Load detectors')
         | 
| 10 10 | 
             
                  @detectors = {}
         | 
| 11 11 | 
             
                  Dir.glob(File.join(detector_dir, '*.rb')).sort.each do |rb|
         | 
| 12 12 | 
             
                    require rb
         | 
| @@ -15,14 +15,14 @@ module Xezat | |
| 15 15 | 
             
                end
         | 
| 16 16 |  | 
| 17 17 | 
             
                def detect(variables)
         | 
| 18 | 
            -
                  Xezat.logger.debug('Detect tools')
         | 
| 18 | 
            +
                  Xezat.logger.debug('    Detect tools')
         | 
| 19 19 | 
             
                  tools = []
         | 
| 20 20 | 
             
                  @detectors.each do |name, detector|
         | 
| 21 21 | 
             
                    if detector.detect(variables)
         | 
| 22 22 | 
             
                      tools << name
         | 
| 23 | 
            -
                      Xezat.logger.debug(" | 
| 23 | 
            +
                      Xezat.logger.debug("      #{name} ... yes")
         | 
| 24 24 | 
             
                    else
         | 
| 25 | 
            -
                      Xezat.logger.debug(" | 
| 25 | 
            +
                      Xezat.logger.debug("      #{name} ... no")
         | 
| 26 26 | 
             
                    end
         | 
| 27 27 | 
             
                  end
         | 
| 28 28 | 
             
                  if tools.include?(:python27) && (tools.include?(:python36) || tools.include?(:python37))
         | 
| @@ -73,7 +73,7 @@ module Xezat | |
| 73 73 |  | 
| 74 74 | 
             
                    return if /#{pn}.pc/.match?(original_ac)
         | 
| 75 75 |  | 
| 76 | 
            -
                    original_ac.gsub!(/(AC_CONFIG_FILES\(\[)/,  | 
| 76 | 
            +
                    original_ac.gsub!(/(AC_CONFIG_FILES\(\[)/, "\\1#{"#{pn}.pc "}")
         | 
| 77 77 | 
             
                    File.atomic_write(configure_ac) do |fa|
         | 
| 78 78 | 
             
                      fa.write(original_ac)
         | 
| 79 79 |  | 
    
        data/lib/xezat/main.rb
    CHANGED
    
    | @@ -67,5 +67,12 @@ module Xezat | |
| 67 67 | 
             
                  require 'xezat/command/validate'
         | 
| 68 68 | 
             
                  Command::Validate.new(nil, cygport).execute
         | 
| 69 69 | 
             
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                desc 'announce cygport', 'Show announce'
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                def announce(cygport)
         | 
| 74 | 
            +
                  require 'xezat/command/announce'
         | 
| 75 | 
            +
                  Command::Announce.new(nil, cygport).execute
         | 
| 76 | 
            +
                end
         | 
| 70 77 | 
             
              end
         | 
| 71 78 | 
             
            end
         | 
    
        data/lib/xezat/packages.rb
    CHANGED
    
    | @@ -4,7 +4,7 @@ require 'xezat' | |
| 4 4 |  | 
| 5 5 | 
             
            module Xezat
         | 
| 6 6 | 
             
              def packages(db_path = '/etc/setup/installed.db')
         | 
| 7 | 
            -
                Xezat.logger.debug("Collect installed packages from #{db_path}")
         | 
| 7 | 
            +
                Xezat.logger.debug("  Collect installed packages from #{db_path}")
         | 
| 8 8 | 
             
                raise ArgumentError, "#{db_path} not found" unless File.exist?(db_path)
         | 
| 9 9 |  | 
| 10 10 | 
             
                packages = {}
         | 
    
        data/lib/xezat/variables.rb
    CHANGED
    
    | @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            +
            require 'etc'
         | 
| 3 4 | 
             
            require 'facets/file/atomic_write'
         | 
| 4 5 | 
             
            require 'facets/string/word_wrap'
         | 
| 5 6 | 
             
            require 'open3'
         | 
| @@ -10,12 +11,12 @@ require 'xezat' | |
| 10 11 | 
             
            module Xezat
         | 
| 11 12 | 
             
              def variables(cygport)
         | 
| 12 13 | 
             
                cygport_dir = File.dirname(File.absolute_path(cygport))
         | 
| 13 | 
            -
                cache_file = File.expand_path(File.join(cygport_dir, File.basename(cygport, '.cygport') | 
| 14 | 
            +
                cache_file = File.expand_path(File.join(cygport_dir, "#{File.basename(cygport, '.cygport')}.#{Etc.uname[:machine]}.yml"))
         | 
| 14 15 |  | 
| 15 | 
            -
                Xezat.logger.debug('Extract variables')
         | 
| 16 | 
            +
                Xezat.logger.debug('  Extract variables')
         | 
| 16 17 |  | 
| 17 18 | 
             
                if File.exist?(cache_file) && File.ctime(cache_file) > File.ctime(cygport)
         | 
| 18 | 
            -
                  Xezat.logger.debug(' | 
| 19 | 
            +
                  Xezat.logger.debug('    Read cache for variables')
         | 
| 19 20 | 
             
                  return YAML.safe_load(File.open(cache_file), [Symbol]).each do |k, v|
         | 
| 20 21 | 
             
                    v.strip! if v.respond_to?(:strip) && k != :DESCRIPTION
         | 
| 21 22 | 
             
                  end
         | 
| @@ -33,7 +34,7 @@ module Xezat | |
| 33 34 | 
             
                variables[:DESCRIPTION].word_wrap!(79)
         | 
| 34 35 |  | 
| 35 36 | 
             
                File.atomic_write(cache_file) do |f|
         | 
| 36 | 
            -
                  Xezat.logger.debug(' | 
| 37 | 
            +
                  Xezat.logger.debug('    Write cache for variables')
         | 
| 37 38 | 
             
                  f.write(YAML.dump(variables))
         | 
| 38 39 | 
             
                end
         | 
| 39 40 |  | 
    
        data/lib/xezat/version.rb
    CHANGED
    
    
| @@ -0,0 +1,51 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            - accessibility
         | 
| 3 | 
            +
            - admin
         | 
| 4 | 
            +
            - archive
         | 
| 5 | 
            +
            - audio
         | 
| 6 | 
            +
            - base
         | 
| 7 | 
            +
            - benchmark
         | 
| 8 | 
            +
            - comm
         | 
| 9 | 
            +
            - database
         | 
| 10 | 
            +
            - debug
         | 
| 11 | 
            +
            - devel
         | 
| 12 | 
            +
            - doc
         | 
| 13 | 
            +
            - editors
         | 
| 14 | 
            +
            - emulators
         | 
| 15 | 
            +
            - games
         | 
| 16 | 
            +
            - gnome
         | 
| 17 | 
            +
            - graphics
         | 
| 18 | 
            +
            - interpreters
         | 
| 19 | 
            +
            - kde
         | 
| 20 | 
            +
            - libs
         | 
| 21 | 
            +
            - lua
         | 
| 22 | 
            +
            - lxde
         | 
| 23 | 
            +
            - mail
         | 
| 24 | 
            +
            - mate
         | 
| 25 | 
            +
            - math
         | 
| 26 | 
            +
            - mingw
         | 
| 27 | 
            +
            - net
         | 
| 28 | 
            +
            - ocaml
         | 
| 29 | 
            +
            - office
         | 
| 30 | 
            +
            - perl
         | 
| 31 | 
            +
            - php
         | 
| 32 | 
            +
            - publishing
         | 
| 33 | 
            +
            - python
         | 
| 34 | 
            +
            - ruby
         | 
| 35 | 
            +
            - scheme
         | 
| 36 | 
            +
            - science
         | 
| 37 | 
            +
            - security
         | 
| 38 | 
            +
            - shells
         | 
| 39 | 
            +
            - sound
         | 
| 40 | 
            +
            - source
         | 
| 41 | 
            +
            - sugar
         | 
| 42 | 
            +
            - system
         | 
| 43 | 
            +
            - tcl
         | 
| 44 | 
            +
            - text
         | 
| 45 | 
            +
            - utils
         | 
| 46 | 
            +
            - video
         | 
| 47 | 
            +
            - web
         | 
| 48 | 
            +
            - x11
         | 
| 49 | 
            +
            - xfce
         | 
| 50 | 
            +
            - _obsolete
         | 
| 51 | 
            +
            - _postinstalllast
         | 
    
        data/xezat.gemspec
    CHANGED
    
    | @@ -25,8 +25,7 @@ Gem::Specification.new do |spec| | |
| 25 25 |  | 
| 26 26 | 
             
              spec.add_runtime_dependency 'facets', '>= 3.1.0'
         | 
| 27 27 | 
             
              spec.add_runtime_dependency 'github-linguist', '>= 7.11.0'
         | 
| 28 | 
            -
              spec.add_runtime_dependency ' | 
| 29 | 
            -
              spec.add_runtime_dependency 'pkg-config', '>= 1.4.2'
         | 
| 28 | 
            +
              spec.add_runtime_dependency 'pkg-config', '>= 1.4.4'
         | 
| 30 29 | 
             
              spec.add_runtime_dependency 'thor', '>= 0.20.3'
         | 
| 31 30 | 
             
              spec.add_runtime_dependency 'thor-zsh_completion', '>= 0.1.7'
         | 
| 32 31 |  | 
    
        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. | 
| 4 | 
            +
              version: 0.2.1
         | 
| 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:  | 
| 11 | 
            +
            date: 2021-02-23 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: facets
         | 
| @@ -38,34 +38,20 @@ dependencies: | |
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: 7.11.0
         | 
| 41 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            -
              name: io-console
         | 
| 43 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            -
                requirements:
         | 
| 45 | 
            -
                - - ">="
         | 
| 46 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version: 0.5.6
         | 
| 48 | 
            -
              type: :runtime
         | 
| 49 | 
            -
              prerelease: false
         | 
| 50 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            -
                requirements:
         | 
| 52 | 
            -
                - - ">="
         | 
| 53 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: 0.5.6
         | 
| 55 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 42 | 
             
              name: pkg-config
         | 
| 57 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 44 | 
             
                requirements:
         | 
| 59 45 | 
             
                - - ">="
         | 
| 60 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version: 1.4. | 
| 47 | 
            +
                    version: 1.4.4
         | 
| 62 48 | 
             
              type: :runtime
         | 
| 63 49 | 
             
              prerelease: false
         | 
| 64 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 51 | 
             
                requirements:
         | 
| 66 52 | 
             
                - - ">="
         | 
| 67 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            -
                    version: 1.4. | 
| 54 | 
            +
                    version: 1.4.4
         | 
| 69 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 56 | 
             
              name: thor
         | 
| 71 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -228,6 +214,7 @@ files: | |
| 228 214 | 
             
            - bin/setup
         | 
| 229 215 | 
             
            - exe/xezat
         | 
| 230 216 | 
             
            - lib/xezat.rb
         | 
| 217 | 
            +
            - lib/xezat/command/announce.rb
         | 
| 231 218 | 
             
            - lib/xezat/command/bump.rb
         | 
| 232 219 | 
             
            - lib/xezat/command/bump/changelog.rb
         | 
| 233 220 | 
             
            - lib/xezat/command/bump/compiler.rb
         | 
| @@ -250,6 +237,7 @@ files: | |
| 250 237 | 
             
            - lib/xezat/cygversion.rb
         | 
| 251 238 | 
             
            - lib/xezat/debugger/linguist.rb
         | 
| 252 239 | 
             
            - lib/xezat/debugger/variable.rb
         | 
| 240 | 
            +
            - lib/xezat/detector/asciidoc.rb
         | 
| 253 241 | 
             
            - lib/xezat/detector/autoconf.rb
         | 
| 254 242 | 
             
            - lib/xezat/detector/automake.rb
         | 
| 255 243 | 
             
            - lib/xezat/detector/boost.m4.rb
         | 
| @@ -262,11 +250,13 @@ files: | |
| 262 250 | 
             
            - lib/xezat/detector/libtool.rb
         | 
| 263 251 | 
             
            - lib/xezat/detector/make.rb
         | 
| 264 252 | 
             
            - lib/xezat/detector/meson.rb
         | 
| 253 | 
            +
            - lib/xezat/detector/nasm.rb
         | 
| 265 254 | 
             
            - lib/xezat/detector/ninja.rb
         | 
| 266 255 | 
             
            - lib/xezat/detector/python27.rb
         | 
| 267 | 
            -
            - lib/xezat/detector/python36-docutils.rb
         | 
| 268 256 | 
             
            - lib/xezat/detector/python36.rb
         | 
| 269 257 | 
             
            - lib/xezat/detector/python37.rb
         | 
| 258 | 
            +
            - lib/xezat/detector/python38-docutils.rb
         | 
| 259 | 
            +
            - lib/xezat/detector/python38.rb
         | 
| 270 260 | 
             
            - lib/xezat/detector/roundup.rb
         | 
| 271 261 | 
             
            - lib/xezat/detector/waf.rb
         | 
| 272 262 | 
             
            - lib/xezat/detectors.rb
         | 
| @@ -277,6 +267,7 @@ files: | |
| 277 267 | 
             
            - lib/xezat/packages.rb
         | 
| 278 268 | 
             
            - lib/xezat/variables.rb
         | 
| 279 269 | 
             
            - lib/xezat/version.rb
         | 
| 270 | 
            +
            - share/xezat/categories.yaml
         | 
| 280 271 | 
             
            - share/xezat/compilers.json
         | 
| 281 272 | 
             
            - share/xezat/invoke_cygport_dep.sh
         | 
| 282 273 | 
             
            - share/xezat/languages.json
         | 
| @@ -287,6 +278,7 @@ files: | |
| 287 278 | 
             
            - share/xezat/show_cygport_variable.sh
         | 
| 288 279 | 
             
            - share/xezat/template/Makefile.am
         | 
| 289 280 | 
             
            - share/xezat/template/README.erb
         | 
| 281 | 
            +
            - share/xezat/template/announce.erb
         | 
| 290 282 | 
             
            - share/xezat/template/cmake.erb
         | 
| 291 283 | 
             
            - share/xezat/template/cygport.erb
         | 
| 292 284 | 
             
            - share/xezat/template/pkgconfig.erb
         |