qt-commander 0.0.1 → 0.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 86197bfab05a0268b63c206e1f01eda4069433e0
4
- data.tar.gz: 09c01f86d87a07ad5a3dcf639b47151e7912e6c7
3
+ metadata.gz: 8d43a05ff0467ceff3006f621631837aead13a88
4
+ data.tar.gz: cd9356b3ec8bd829fad5eb8625f336a452fb3399
5
5
  SHA512:
6
- metadata.gz: 19c17590c266fa68eeb36949761af947b96faddce245b1a4523b8035d64d5acaa0197767f95651a3737ecce396db0780028f1e33cee60320dffe4cbb4e3fab48
7
- data.tar.gz: a5204b0504019531415e4e042d660d3f8326262bdd747ed06456ab7f36d0a07a165e11668dee3a8c244fbe26e0d12f8a045ba201935040d4d1514db6cf0690ef
6
+ metadata.gz: 19fce5a233b3b39ad9d87bf77bf744e2e0c2f36a57257b591f634eb5d448fc46bf4b7f07711ba41ba586605862717890c9b4baa56e62166b421fbdf44fc4c8b6
7
+ data.tar.gz: 1e7303ff595632e2632d3f9d4d4fa78bb9f938d18fb6d45005b996f9b05b6c68f86e04634d4ea482c5306693310491363bd6d5f38b1c042dc312d36d1c47345c
@@ -1,4 +1,101 @@
1
1
 
2
+ require 'inifile'
3
+ require 'nokogiri'
4
+
5
+ require_relative 'creator/info_object'
6
+ require_relative 'creator/toolchain'
7
+ require_relative 'creator/version'
8
+ require_relative 'creator/profile'
9
+
2
10
  module Qt::Commander::Creator
11
+ class << self
12
+
13
+ attr_reader :config_ini
14
+ attr_reader :config_dir
15
+
16
+ def config_ini= path
17
+ @config_ini = path
18
+
19
+ @ini = IniFile.new File.read path
20
+ end
21
+
22
+ def config_dir= path
23
+ @config_dir = path
24
+
25
+ update_collection :toolchains, Toolchain, 'toolchains.xml'
26
+ update_collection :versions, Version, 'qtversion.xml'
27
+ update_collection :profiles, Profile, 'profiles.xml'
28
+ end
29
+
30
+ attr_reader :ini
31
+
32
+ attr_reader :toolchains
33
+ attr_reader :versions
34
+ attr_reader :profiles
35
+
36
+ private
37
+
38
+ def update_collection ivar, kls, file
39
+ val = File.read File.join @config_dir, file
40
+ val = parse_qt_xml(val).map do |_, info|
41
+ kls.new(info) if info.is_a? Hash
42
+ end.compact
43
+ instance_variable_set :"@#{ivar}", val
44
+ end
45
+
46
+ def parse_qt_xml string
47
+ from_value = from_valuelist = from_valuemap = nil
48
+
49
+ from_node = Proc.new do |node|
50
+ case node.name
51
+ when 'value'; from_value .call node
52
+ when 'valuelist'; from_valuelist.call node
53
+ when 'valuemap'; from_valuemap .call node
54
+ else; raise NotImplementedError, "name == #{node.name.inspect}"
55
+ end
56
+ end
57
+
58
+ from_value = Proc.new do |node|
59
+ text = node.children.first.to_s
60
+
61
+ case node['type']
62
+ when 'int'; Integer(text)
63
+ when 'bool'; text=='true'
64
+ when 'QString'; text
65
+ when 'QByteArray'; text
66
+ else; raise NotImplementedError, "['type'] == #{node['type'].inspect}"
67
+ end
68
+ end
69
+
70
+ from_valuelist = Proc.new do |node|
71
+ node.children
72
+ .reject{ |node| node.is_a? Nokogiri::XML::Text }
73
+ .each_with_object([]) do |node, ary|
74
+ ary.push from_node.call node
75
+ end
76
+ end
77
+
78
+ from_valuemap = Proc.new do |node|
79
+ node.children
80
+ .reject{ |node| node.is_a? Nokogiri::XML::Text }
81
+ .each_with_object({}) do |node, h|
82
+ h[node['key']] = from_node.call node
83
+ end
84
+ end
85
+
86
+ Nokogiri::XML.parse(string).xpath('//data')
87
+ .each_with_object({}) do |node,h|
88
+ key, val = node.children.reject{ |node| node.is_a? Nokogiri::XML::Text }
89
+
90
+ key = key.children.first.to_s
91
+ val = from_node.call val
92
+
93
+ h[key] = val if key and val
94
+ end
95
+ end
96
+ end
97
+
98
+ self.config_ini = File.join Dir.home, ".config/QtProject/QtCreator.ini"
99
+ self.config_dir = File.join Dir.home, ".config/QtProject/qtcreator"
3
100
 
4
101
  end
@@ -0,0 +1,36 @@
1
+
2
+ module Qt::Commander::Creator
3
+ class InfoObject
4
+
5
+ def self.key name, orig_name, opts={}
6
+ @keys ||= []
7
+ @keys << [ name, orig_name, opts ]
8
+ attr_reader name
9
+ end
10
+
11
+ def self.keys
12
+ @keys ||= []
13
+ end
14
+
15
+
16
+ def [] key
17
+ instance_variable_get :"@#{key}"
18
+ end
19
+
20
+ def initialize info
21
+ self.class.keys.each do |name, orig_name, opts|
22
+ orig_name = [orig_name] unless orig_name.is_a? Array
23
+ val = info
24
+
25
+ orig_name.each do |orig|
26
+ val = val.fetch(orig) if val.key? orig or !opts[:optional]
27
+ end
28
+
29
+ instance_variable_set :"@#{name}", val unless val == info
30
+ end
31
+ end
32
+
33
+
34
+
35
+ end
36
+ end
@@ -0,0 +1,31 @@
1
+
2
+ module Qt::Commander::Creator
3
+ class Profile < InfoObject
4
+
5
+ key :name, 'PE.Profile.Name'
6
+ key :id, 'PE.Profile.Id'
7
+ key :autodetected, 'PE.Profile.AutoDetected'
8
+ key :device, ['PE.Profile.Data', 'PE.Profile.Device']
9
+ key :type, ['PE.Profile.Data', 'PE.Profile.DeviceType']
10
+ key :sysroot, ['PE.Profile.Data', 'PE.Profile.SysRoot']
11
+ key :toolchain, ['PE.Profile.Data', 'PE.Profile.ToolChain']
12
+ key :version, ['PE.Profile.Data', 'QtSupport.QtInformation']
13
+
14
+ def initialize info
15
+ super
16
+
17
+ @toolchain = Qt::Commander::Creator.toolchains.detect do |tc|
18
+ tc.id == @toolchain
19
+ end
20
+
21
+ @version = Qt::Commander::Creator.versions.detect do |tc|
22
+ tc.id == @version || tc.autodetect_src == @version
23
+ end
24
+ end
25
+
26
+ def android?
27
+ type =~ /Android/
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,52 @@
1
+
2
+ module Qt::Commander::Creator
3
+ class Toolchain < InfoObject
4
+
5
+ key :name, 'ProjectExplorer.ToolChain.DisplayName'
6
+ key :id, 'ProjectExplorer.ToolChain.Id'
7
+ key :autodetect, 'ProjectExplorer.ToolChain.Autodetect'
8
+ key :path, 'ProjectExplorer.GccToolChain.Path'
9
+ key :supported, 'ProjectExplorer.GccToolChain.SupportedAbis'
10
+ key :target, 'ProjectExplorer.GccToolChain.TargetAbi'
11
+
12
+ key :android_ndk_tc_version, 'Qt4ProjectManager.Android.NDK_TC_VERION', optional:true
13
+
14
+ def android?
15
+ target =~ /android/
16
+ end
17
+
18
+ def env
19
+ if android?
20
+ envs = {
21
+ 'TOOLCHAIN_PATH' => File.dirname(@path),
22
+ 'TOOLCHAIN_HOST' => File.basename(@path.gsub(/-gcc$/, '')),
23
+ 'TOOLCHAIN_NAME' => File.basename(@path.gsub(/-gcc$/, '-'+@android_ndk_tc_version)),
24
+ }
25
+
26
+ envs['ANDROID_NDK_ROOT'] = ndk_root = \
27
+ Qt::Commander::Creator.ini['AndroidConfigurations']['NDKLocation']
28
+
29
+ sep = File::SEPARATOR
30
+ tc_path = @path.scan(/#{ndk_root}#{sep}toolchains#{sep}.*?(?=#{sep})/)
31
+ config_mk = File.read(File.join(tc_path, "config.mk"))
32
+
33
+ config_mk =~ /TOOLCHAIN_ARCH\s*\:\=\s*(.*)/
34
+ envs['TOOLCHAIN_ARCH'] = $1
35
+
36
+ config_mk =~ /TOOLCHAIN_ABIS\s*\:\=\s*(.*)/
37
+ envs['TOOLCHAIN_ABIS'] = $1
38
+
39
+ else
40
+ raise NotImplementedError
41
+ end
42
+
43
+ envs.keys.each { |key| envs[key], ENV[key] = ENV[key], envs[key] }
44
+ yield if block_given?
45
+ envs.keys.each { |key| envs[key], ENV[key] = ENV[key], envs[key] }
46
+
47
+ return envs
48
+ end
49
+
50
+ end
51
+ end
52
+
@@ -0,0 +1,13 @@
1
+
2
+ module Qt::Commander::Creator
3
+ class Version < InfoObject
4
+
5
+ key :id, 'Id'
6
+ key :name, 'Name'
7
+ key :qmake, 'QMakePath'
8
+ key :type, 'QtVersion.Type'
9
+ key :autodetected, 'isAutodetected'
10
+ key :autodetect_src, 'autodetectionSource', optional:true
11
+
12
+ end
13
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qt-commander
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe McIlvain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-04 00:00:00.000000000 Z
11
+ date: 2014-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: inifile
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.6'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.6'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -130,6 +144,10 @@ extra_rdoc_files: []
130
144
  files:
131
145
  - lib/qt/commander.rb
132
146
  - lib/qt/commander/creator.rb
147
+ - lib/qt/commander/creator/info_object.rb
148
+ - lib/qt/commander/creator/profile.rb
149
+ - lib/qt/commander/creator/toolchain.rb
150
+ - lib/qt/commander/creator/version.rb
133
151
  homepage: https://github.com/jemc/qt-commander/
134
152
  licenses:
135
153
  - MIT