mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-22 12:17:36 -05:00
Enrich CMakeCache class with more CPM data
This commit is contained in:
@@ -65,23 +65,23 @@ class Project
|
||||
CommandResult.new *Open3.capture3("cmake -S #{@src_dir} -B #{@build_dir} #{extra_args}")
|
||||
end
|
||||
|
||||
class CMakeCacheEntry
|
||||
def initialize(val, type, advanced, desc)
|
||||
@val = val
|
||||
@type = type
|
||||
@advanced = advanced
|
||||
@desc = desc
|
||||
end
|
||||
attr :val, :type, :advanced, :desc
|
||||
alias_method :advanced?, :advanced
|
||||
def inspect
|
||||
"(#{val.inspect} #{type}" + (advanced? ? ' ADVANCED)' : ')')
|
||||
end
|
||||
end
|
||||
class CMakeCache
|
||||
def initialize(entries)
|
||||
@entries = entries
|
||||
class Entry
|
||||
def initialize(val, type, advanced, desc)
|
||||
@val = val
|
||||
@type = type
|
||||
@advanced = advanced
|
||||
@desc = desc
|
||||
end
|
||||
attr :val, :type, :advanced, :desc
|
||||
alias_method :advanced?, :advanced
|
||||
def inspect
|
||||
"(#{val.inspect} #{type}" + (advanced? ? ' ADVANCED)' : ')')
|
||||
end
|
||||
end
|
||||
|
||||
Package = Struct.new(:ver, :src_dir, :bin_dir)
|
||||
|
||||
def self.from_dir(dir)
|
||||
entries = {}
|
||||
cur_desc = ''
|
||||
@@ -96,26 +96,38 @@ class Project
|
||||
else
|
||||
m = /(.+?)(-ADVANCED)?:([A-Z]+)=(.*)/.match(line)
|
||||
raise "Error parsing '#{line}' in #{file}" if !m
|
||||
entries[m[1]] = CMakeCacheEntry.new(m[4], m[3], !!m[2], cur_desc)
|
||||
entries[m[1]] = Entry.new(m[4], m[3], !!m[2], cur_desc)
|
||||
cur_desc = ''
|
||||
end
|
||||
}
|
||||
CMakeCache.new entries
|
||||
end
|
||||
|
||||
def initialize(entries)
|
||||
@entries = entries
|
||||
|
||||
package_list = self['CPM_PACKAGES']
|
||||
@packages = if package_list
|
||||
# collect package data
|
||||
@packages = package_list.split(';').map { |name|
|
||||
[name, Package.new(
|
||||
self["CPM_PACKAGE_#{name}_VERSION"],
|
||||
self["CPM_PACKAGE_#{name}_SOURCE_DIR"],
|
||||
self["CPM_PACKAGE_#{name}_BINARY_DIR"]
|
||||
)]
|
||||
}.to_h
|
||||
else
|
||||
{}
|
||||
end
|
||||
end
|
||||
|
||||
attr :entries, :packages
|
||||
|
||||
def [](key)
|
||||
e = @entries[key]
|
||||
return nil if !e
|
||||
e.val
|
||||
end
|
||||
|
||||
def get_package_data(package)
|
||||
[
|
||||
self["CPM_PACKAGE_#{package}_VERSION"],
|
||||
self["CPM_PACKAGE_#{package}_SOURCE_DIR"],
|
||||
self["CPM_PACKAGE_#{package}_BINARY_DIR"],
|
||||
]
|
||||
end
|
||||
end
|
||||
def read_cache
|
||||
CMakeCache.from_dir @build_dir
|
||||
|
||||
@@ -7,38 +7,34 @@ class Simple < IntegrationTest
|
||||
prj = make_project 'using-adder'
|
||||
|
||||
prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder#cad1cd4b4cdf957c5b59e30bc9a1dd200dbfc716")'
|
||||
cfg_result = prj.configure
|
||||
|
||||
assert_success cfg_result
|
||||
assert_success prj.configure
|
||||
|
||||
cache = prj.read_cache
|
||||
assert_equal 1, cache.packages.size
|
||||
|
||||
assert_equal P_ADDER, cache['CPM_PACKAGES']
|
||||
adder = cache.packages[P_ADDER]
|
||||
assert_not_nil adder
|
||||
assert_equal '0', adder.ver
|
||||
assert File.directory? adder.src_dir
|
||||
assert File.directory? adder.bin_dir
|
||||
|
||||
ver, src, bin = cache.get_package_data(P_ADDER)
|
||||
|
||||
assert_equal ver, '0'
|
||||
assert File.directory? src
|
||||
assert File.directory? bin
|
||||
|
||||
adder_ver_file = File.join(src, 'version')
|
||||
adder_ver_file = File.join(adder.src_dir, 'version')
|
||||
assert File.file? adder_ver_file
|
||||
assert_equal 'initial', File.read(adder_ver_file).strip
|
||||
|
||||
# reconfigure with new version
|
||||
prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder@1.0.0")'
|
||||
cfg_result = prj.configure
|
||||
|
||||
assert_success cfg_result
|
||||
assert_success prj.configure
|
||||
|
||||
cache = prj.read_cache
|
||||
assert_equal 1, cache.packages.size
|
||||
|
||||
ver, src, bin = cache.get_package_data(P_ADDER)
|
||||
|
||||
assert_equal '1.0.0', ver
|
||||
adder = cache.packages[P_ADDER]
|
||||
assert_not_nil adder
|
||||
assert_equal '1.0.0', adder.ver
|
||||
|
||||
# dir shouldn't have changed
|
||||
assert_equal File.dirname(adder_ver_file), src
|
||||
assert_equal File.dirname(adder_ver_file), adder.src_dir
|
||||
|
||||
assert_equal '1.0.0', File.read(adder_ver_file).strip
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user