Author: rinrab
Date: Thu Jun 27 11:49:23 2024
New Revision: 1918702
URL: http://svn.apache.org/viewvc?rev=1918702&view=rev
Log:
On the 'cmake' branch: Generate a list of executable and library targets with
source file lists.
External dependencies and dependencies between targets are not yet done.
Currently, there are only a simple list of targets with theirs sources.
* build/generator/gen_cmake.py
(cmake_target): New class for storing target and its data.
(get_target_type): New function which transforms target type into a
string name.
(Generator.write): Retrieve and enumerate targets from 'graph' to
convert them into list of internal cmake_target objects.
(Generator.get_install_sources,
Generator.get_dependecies,
Generator.check_ignore_target): New methods.
* build/generator/templates/CMakeLists.txt.ezt
(): Enumerate targets from ezt data and create CMake targets, using
add_library() or add_executable() with name and sources of the target.
Modified:
subversion/branches/cmake/build/generator/gen_cmake.py
subversion/branches/cmake/build/generator/templates/CMakeLists.txt.ezt
Modified: subversion/branches/cmake/build/generator/gen_cmake.py
URL:
http://svn.apache.org/viewvc/subversion/branches/cmake/build/generator/gen_cmake.py?rev=1918702&r1=1918701&r2=1918702&view=diff
==============================================================================
--- subversion/branches/cmake/build/generator/gen_cmake.py (original)
+++ subversion/branches/cmake/build/generator/gen_cmake.py Thu Jun 27 11:49:23
2024
@@ -7,6 +7,29 @@ class _eztdata(object):
def __init__(self, **kw):
vars(self).update(kw)
+class cmake_target():
+ def __init__(self, name: str, type: str, sources):
+ self.name = name
+ self.type = type
+ self.sources = sources
+
+def get_target_type(target: gen_base.Target):
+ if isinstance(target, gen_base.TargetExe):
+ if target.install == "test" and target.testing != "skip":
+ return "test"
+ else:
+ return "exe"
+ if isinstance(target, gen_base.TargetSWIG):
+ return "swig"
+ if isinstance(target, gen_base.TargetSWIGProject):
+ return "swig-project"
+ if isinstance(target, gen_base.TargetSWIGLib):
+ return "swig-lib"
+ if isinstance(target, gen_base.TargetLib):
+ return "lib"
+ else:
+ return str(type(target))
+
class Generator(gen_base.GeneratorBase):
_extension_map = {
('exe', 'target'): '.exe',
@@ -23,11 +46,103 @@ class Generator(gen_base.GeneratorBase):
gen_base.GeneratorBase.__init__(self, fname, verfname, options)
def write(self):
+ targets = []
+
+ for target in self.get_install_sources():
+ target: gen_base.Target
+
+ if isinstance(target, gen_base.TargetScript):
+ # there is nothing to build
+ continue
+ elif isinstance(target, gen_base.TargetExe):
+ if target.install == "test" or target.install == "sub-test":
+ pass
+ elif target.install == "tools":
+ pass
+ else:
+ pass
+ elif isinstance(target, gen_base.TargetRaModule):
+ pass
+ elif isinstance(target, gen_base.TargetFsModule):
+ pass
+ elif isinstance(target, gen_base.TargetApacheMod):
+ pass
+ elif isinstance(target, gen_base.TargetLib):
+ pass
+
+ sources = []
+
+ for dep in self.get_dependecies(target.name):
+ if isinstance(dep, gen_base.TargetLinked):
+ # TODO:
+ pass
+ elif isinstance(dep, gen_base.ObjectFile):
+ deps = self.graph.get_sources(gen_base.DT_OBJECT,
+ dep,
+ gen_base.SourceFile)
+ for dep in deps:
+ sources.append(dep.filename)
+
+ target = cmake_target(
+ name = target.name,
+ type = get_target_type(target),
+ sources = sources
+ )
+
+ targets.append(target)
+
data = _eztdata(
- targets = "targets",
+ targets = targets,
)
template = ezt.Template(os.path.join('build', 'generator', 'templates',
'CMakeLists.txt.ezt'),
compress_whitespace=False)
template.generate(open('CMakeLists.txt', 'w'), data)
+
+ def get_install_sources(self):
+ install_sources = self.graph.get_all_sources(gen_base.DT_INSTALL)
+ result = []
+
+ for target in install_sources:
+ target: gen_base.Target
+
+ if not self.check_ignore_target(target):
+ result.append(target)
+
+ result.sort(key = lambda s: s.name)
+
+ return result
+
+ def get_dependecies(self, target_name):
+ deps = []
+
+ deps += self.graph.get_sources(gen_base.DT_LINK, target_name)
+ deps += self.graph.get_sources(gen_base.DT_NONLIB, target_name)
+
+ return deps
+
+ def check_ignore_target(self, target: gen_base.Target):
+ ignore_names = [
+ "libsvn_auth_gnome_keyring",
+ "libsvn_auth_kwallet",
+
+ "libsvnxx",
+ "svnxx-tests",
+
+ "mod_authz_svn",
+ "mod_dav_svn",
+ "mod_dontdothat",
+
+ "libsvnjavahl",
+ "__JAVAHL__",
+ "__JAVAHL_TESTS__",
+ ]
+
+ for name in ignore_names:
+ if target.name == name:
+ return True
+
+ if isinstance(target, gen_base.TargetExe):
+ if target.install == "bdb-test":
+ return True
Modified: subversion/branches/cmake/build/generator/templates/CMakeLists.txt.ezt
URL:
http://svn.apache.org/viewvc/subversion/branches/cmake/build/generator/templates/CMakeLists.txt.ezt?rev=1918702&r1=1918701&r2=1918702&view=diff
==============================================================================
--- subversion/branches/cmake/build/generator/templates/CMakeLists.txt.ezt
(original)
+++ subversion/branches/cmake/build/generator/templates/CMakeLists.txt.ezt Thu
Jun 27 11:49:23 2024
@@ -1,5 +1,12 @@
cmake_minimum_required(VERSION 3.12)
project("Subversion")
-
-# TODO: [targets]
+[for targets][is targets.type "lib"]
+add_library([targets.name][for targets.sources]
+ [targets.sources]
+[end])
+[end][is targets.type "exe"]
+add_executable([targets.name][for targets.sources]
+ [targets.sources]
+[end])
+[end][end]