mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-23 04:37:43 -05:00
Enrich CMakeCache class with more CPM data
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user