Enrich CMakeCache class with more CPM data

This commit is contained in:
Borislav Stanimirov
2022-01-12 11:15:27 +02:00
parent 80cc580e32
commit 058eabe0d2
3 changed files with 53 additions and 42 deletions

View File

@@ -65,7 +65,8 @@ class Project
CommandResult.new *Open3.capture3("cmake -S #{@src_dir} -B #{@build_dir} #{extra_args}") CommandResult.new *Open3.capture3("cmake -S #{@src_dir} -B #{@build_dir} #{extra_args}")
end end
class CMakeCacheEntry class CMakeCache
class Entry
def initialize(val, type, advanced, desc) def initialize(val, type, advanced, desc)
@val = val @val = val
@type = type @type = type
@@ -78,10 +79,9 @@ class Project
"(#{val.inspect} #{type}" + (advanced? ? ' ADVANCED)' : ')') "(#{val.inspect} #{type}" + (advanced? ? ' ADVANCED)' : ')')
end end
end end
class CMakeCache
def initialize(entries) Package = Struct.new(:ver, :src_dir, :bin_dir)
@entries = entries
end
def self.from_dir(dir) def self.from_dir(dir)
entries = {} entries = {}
cur_desc = '' cur_desc = ''
@@ -96,26 +96,38 @@ class Project
else else
m = /(.+?)(-ADVANCED)?:([A-Z]+)=(.*)/.match(line) m = /(.+?)(-ADVANCED)?:([A-Z]+)=(.*)/.match(line)
raise "Error parsing '#{line}' in #{file}" if !m 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 = '' cur_desc = ''
end end
} }
CMakeCache.new entries CMakeCache.new entries
end 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) def [](key)
e = @entries[key] e = @entries[key]
return nil if !e return nil if !e
e.val e.val
end 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 end
def read_cache def read_cache
CMakeCache.from_dir @build_dir CMakeCache.from_dir @build_dir

View File

@@ -7,38 +7,34 @@ class Simple < IntegrationTest
prj = make_project 'using-adder' prj = make_project 'using-adder'
prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder#cad1cd4b4cdf957c5b59e30bc9a1dd200dbfc716")' prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder#cad1cd4b4cdf957c5b59e30bc9a1dd200dbfc716")'
cfg_result = prj.configure assert_success prj.configure
assert_success cfg_result
cache = prj.read_cache 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) adder_ver_file = File.join(adder.src_dir, 'version')
assert_equal ver, '0'
assert File.directory? src
assert File.directory? bin
adder_ver_file = File.join(src, 'version')
assert File.file? adder_ver_file assert File.file? adder_ver_file
assert_equal 'initial', File.read(adder_ver_file).strip assert_equal 'initial', File.read(adder_ver_file).strip
# reconfigure with new version # reconfigure with new version
prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder@1.0.0")' prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder@1.0.0")'
cfg_result = prj.configure assert_success prj.configure
assert_success cfg_result
cache = prj.read_cache cache = prj.read_cache
assert_equal 1, cache.packages.size
ver, src, bin = cache.get_package_data(P_ADDER) adder = cache.packages[P_ADDER]
assert_not_nil adder
assert_equal '1.0.0', ver assert_equal '1.0.0', adder.ver
# dir shouldn't have changed # 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 assert_equal '1.0.0', File.read(adder_ver_file).strip
end end

View File

@@ -8,5 +8,8 @@ CPMAddPackage(
NAME Format.cmake NAME Format.cmake
VERSION 1.7.3 VERSION 1.7.3
GITHUB_REPOSITORY TheLartians/Format.cmake GITHUB_REPOSITORY TheLartians/Format.cmake
# We exclude cmake files from integration tests as they contain invalid lines
# of code which are used by the integration test scripts
OPTIONS "CMAKE_FORMAT_EXCLUDE integration/templates" OPTIONS "CMAKE_FORMAT_EXCLUDE integration/templates"
) )