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,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

View File

@@ -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

View File

@@ -8,5 +8,8 @@ CPMAddPackage(
NAME Format.cmake
VERSION 1.7.3
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"
)