mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-27 22:57:21 -05:00
Separate class with utils for cache (no longer pure Hash)
This commit is contained in:
@@ -65,7 +65,7 @@ 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 CMakeCacheValue
|
class CMakeCacheEntry
|
||||||
def initialize(val, type, advanced, desc)
|
def initialize(val, type, advanced, desc)
|
||||||
@val = val
|
@val = val
|
||||||
@type = type
|
@type = type
|
||||||
@@ -78,10 +78,15 @@ class Project
|
|||||||
"(#{val.inspect} #{type}" + (advanced? ? ' ADVANCED)' : ')')
|
"(#{val.inspect} #{type}" + (advanced? ? ' ADVANCED)' : ')')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
def read_cache
|
class CMakeCache
|
||||||
vars = {}
|
def initialize(entries)
|
||||||
|
@entries = entries
|
||||||
|
end
|
||||||
|
def self.from_dir(dir)
|
||||||
|
entries = {}
|
||||||
cur_desc = ''
|
cur_desc = ''
|
||||||
file = File.join(@build_dir, 'CMakeCache.txt')
|
file = File.join(dir, 'CMakeCache.txt')
|
||||||
|
return nil if !File.file?(file)
|
||||||
File.readlines(file).each { |line|
|
File.readlines(file).each { |line|
|
||||||
line.strip!
|
line.strip!
|
||||||
next if line.empty?
|
next if line.empty?
|
||||||
@@ -91,11 +96,29 @@ 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
|
||||||
vars[m[1]] = CMakeCacheValue.new(m[4], m[3], !!m[2], cur_desc)
|
entries[m[1]] = CMakeCacheEntry.new(m[4], m[3], !!m[2], cur_desc)
|
||||||
cur_desc = ''
|
cur_desc = ''
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
vars
|
CMakeCache.new entries
|
||||||
|
end
|
||||||
|
|
||||||
|
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
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,7 @@
|
|||||||
require './lib'
|
require './lib'
|
||||||
|
|
||||||
class Simple < IntegrationTest
|
class Simple < IntegrationTest
|
||||||
def get_adder_data(cache)
|
P_ADDER = 'testpack-adder'
|
||||||
[
|
|
||||||
cache['CPM_PACKAGE_testpack-adder_VERSION'].val,
|
|
||||||
cache['CPM_PACKAGE_testpack-adder_SOURCE_DIR'].val,
|
|
||||||
cache['CPM_PACKAGE_testpack-adder_BINARY_DIR'].val,
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_basics
|
def test_basics
|
||||||
prj = make_project 'using-adder'
|
prj = make_project 'using-adder'
|
||||||
@@ -19,9 +13,9 @@ class Simple < IntegrationTest
|
|||||||
|
|
||||||
cache = prj.read_cache
|
cache = prj.read_cache
|
||||||
|
|
||||||
assert_equal 'testpack-adder', cache['CPM_PACKAGES'].val
|
assert_equal P_ADDER, cache['CPM_PACKAGES']
|
||||||
|
|
||||||
ver, src, bin = get_adder_data cache
|
ver, src, bin = cache.get_package_data(P_ADDER)
|
||||||
|
|
||||||
assert_equal ver, '0'
|
assert_equal ver, '0'
|
||||||
assert File.directory? src
|
assert File.directory? src
|
||||||
@@ -35,8 +29,11 @@ class Simple < IntegrationTest
|
|||||||
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
|
cfg_result = prj.configure
|
||||||
|
|
||||||
cache_new = prj.read_cache
|
assert cfg_result.status.success?
|
||||||
ver, src, bin = get_adder_data cache_new
|
|
||||||
|
cache = prj.read_cache
|
||||||
|
|
||||||
|
ver, src, bin = cache.get_package_data(P_ADDER)
|
||||||
|
|
||||||
assert_equal '1.0.0', ver
|
assert_equal '1.0.0', ver
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user