Class: Xezat::Command::Generate
- Inherits:
-
Object
- Object
- Xezat::Command::Generate
- Defined in:
- lib/xezat/command/generate.rb
Overview
追加のファイルを生成する
Instance Method Summary collapse
-
#append_commands_to_cmakelists(variables) ⇒ Object
CMakeLists.txt の末尾に *.pc を生成する命令を追記する.
-
#append_commands_to_configure(variables) ⇒ Object
configure.ac と Makefile.am の末尾に *.pc を生成する命令を追加する.
- #execute(c, args, options) ⇒ Object
-
#generate_pkg_config(variables, options) ⇒ Object
*.pc を生成する.
-
#get_package_config(variables) ⇒ Object
シェル変数群を埋め込まれたテンプレート文字列を返す.
-
#initialize(program) ⇒ Generate
constructor
A new instance of Generate.
Constructor Details
#initialize(program) ⇒ Generate
Returns a new instance of Generate.
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/xezat/command/generate.rb', line 18 def initialize(program) program.command(:generate) do |c| c.syntax 'generate [options] cygport' c.description 'generate additional files' c.option 'overwrite', '-o', '--overwrite', 'overwrite file' c.option 'pc', '-p', '--pkg-config', 'generate *.pc' c.action do |args, | execute(c, args, ) end end end |
Instance Method Details
#append_commands_to_cmakelists(variables) ⇒ Object
CMakeLists.txt の末尾に *.pc を生成する命令を追記する
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/xezat/command/generate.rb', line 62 def append_commands_to_cmakelists(variables) srcdir = variables[:CYGCMAKE_SOURCE] || variables[:S] cmakelists = File::(File::join(srcdir, "CMakeLists.txt")) puts cmakelists original = File::read(cmakelists) commands = File::read(File::(File::join(TEMPLATE_DIR, 'pkgconfig.cmake'))) unless original.match(/DESTINATION \$\{CMAKE_INSTALL_PREFIX\}\/lib\/pkgconfig/) File::atomic_open(cmakelists, 'a') do |f| f.write(commands) end return [true, "append #{variables[:PN]}.pc installation commands to #{cmakelists}"] end return [false, ''] end |
#append_commands_to_configure(variables) ⇒ Object
configure.ac と Makefile.am の末尾に *.pc を生成する命令を追加する
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/xezat/command/generate.rb', line 79 def append_commands_to_configure(variables) result = false detail = [] srcdir = variables[:CYGCONF_SOURCE] || variables[:S] configure_ac = File::(File::join(srcdir, 'configure.ac')) configure_ac = File::(File::join(srcdir, 'configure.in')) unless File::exist?(configure_ac) raise ConfigureNotFoundError unless File::exist?(configure_ac) original_ac = File::read(configure_ac) unless original_ac.match(/#{variables[:PN]}.pc/) original_ac.gsub!(/(AC_CONFIG_FILES\(\[)/, '\1' + "#{variables[:PN]}.pc ") File::atomic_write(configure_ac) do |fa| fa.write(original_ac) end result = true detail << "append #{variables[:PN]}.pc installation commands to #{configure_ac}" end makefile_am = File::(File::join(srcdir, 'Makefile.am')) raise MakefileNotFoundError unless File::exist?(makefile_am) original_am = File::read(makefile_am) unless original_am.match(/pkgconfig_DATA/) commands_am = File::read(File::(File::join(TEMPLATE_DIR, 'Makefile.am'))) File::atomic_open(makefile_am, 'a') do |fm| fm.write(commands_am) end result = true detail << "append #{variables[:PN]}.pc installation commands to #{makefile_am}" end [result, detail.join(',')] end |
#execute(c, args, options) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/xezat/command/generate.rb', line 32 def execute(c, args, ) cygport = args.shift raise ArgumentError, 'wrong number of arguments (0 for 1)' unless cygport c.logger.info "ignore extra arguments: #{args.to_s}" unless args.empty? variables = VariableManager::get_default_variables(cygport) if ['pc'] generate_pkg_config(variables, ) end if variables[:_cmake_CYGCLASS_] result, detail = append_commands_to_cmakelists(variables) else result, detail = append_commands_to_configure(variables) end c.logger.info detail if result end |
#generate_pkg_config(variables, options) ⇒ Object
*.pc を生成する
52 53 54 55 56 57 58 59 |
# File 'lib/xezat/command/generate.rb', line 52 def generate_pkg_config(variables, ) srcdir = variables[:CYGCMAKE_SOURCE] || variables[:S] pc = File::(File::join(srcdir, "#{variables[:PN]}.pc.in")) raise UnregeneratableConfigurationError, "#{variables[:PN]}.pc.in already exists" if File::exist?(pc) && !['overwrite'] File::atomic_write(pc) do |f| f.write(get_package_config(variables)) end end |
#get_package_config(variables) ⇒ Object
シェル変数群を埋め込まれたテンプレート文字列を返す
115 116 117 118 |
# File 'lib/xezat/command/generate.rb', line 115 def get_package_config(variables) erb = File::(File::join(TEMPLATE_DIR, 'pkgconfig.erb')) ERB.new(File::readlines(erb).join(nil), nil, '%-').result(binding) end |