Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/leethomason/tinyxml2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2020-10-08 21:40:05 +0300
committerDylan Baker <dylan@pnwbakers.com>2020-10-09 22:21:27 +0300
commitc509d569c093528c941a27ca7cf8ea6f2989540f (patch)
treecec95ed216287375d3d7f2d44fc6e69b9f2d50eb
parent1aeb57d26bc303d5cfa1a9ff2a331df7ba278656 (diff)
Add meson build system
Meson is a build system somewhat like cmake, but without all of the rough edges. It supports many OSes, including all of the major ones, and a large number of C++ compilers. My interest isn't really in convincing people to use meson as the default here, but meson provides a subproject mechanism that can fetch external projects and build them along with the main project in a single configure/compile invocation. This is extremely useful for platforms that lack a (competent) package manager. As far as I know the meson build does everything the cmake build does, with one exception: generate the cmake config/version files. meson can generate these files, but only in simple cases, and not when using export targets like tinyxml2 does.
-rw-r--r--meson.build104
-rw-r--r--meson_options.txt28
-rw-r--r--readme.md28
-rwxr-xr-xsetversion.py9
4 files changed, 166 insertions, 3 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..bd77dba
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,104 @@
+# Copyright © 2020 Dylan Baker
+
+# This software is provided 'as-is', without any express or implied
+# warranty. In no event will the authors be held liable for any
+# damages arising from the use of this software.
+
+# Permission is granted to anyone to use this software for any
+# purpose, including commercial applications, and to alter it and
+# redistribute it freely, subject to the following restrictions:
+
+# 1. The origin of this software must not be misrepresented; you must
+# not claim that you wrote the original software. If you use this
+# software in a product, an acknowledgment in the product documentation
+# would be appreciated but is not required.
+
+# 2. Altered source versions must be plainly marked as such, and
+# must not be misrepresented as being the original software.
+
+# 3. This notice may not be removed or altered from any source
+# distribution.
+
+project(
+ 'tinyxml2',
+ ['cpp'],
+ version : '8.0.0',
+ meson_version : '>= 0.49.0',
+)
+
+cpp = meson.get_compiler('cpp')
+
+tinyxml_extra_args = []
+if cpp.get_argument_syntax() == 'msvc'
+ tinyxml_extra_args += '-D_CRT_SECURE_NO_WARNINGS'
+endif
+
+if get_option('default_library') == 'shared'
+ tinyxml_extra_args += '-DTINYXML2_EXPORT'
+endif
+
+if get_option('debug')
+ tinyxml_extra_args += '-DTINYXML2_DEBUG'
+endif
+
+lib_tinyxml2 = library(
+ 'tinyxml2',
+ ['tinyxml2.cpp'],
+ cpp_args : tinyxml_extra_args,
+ gnu_symbol_visibility : 'hidden',
+ version : meson.project_version(),
+ install : true,
+)
+
+dep_tinxyml2 = declare_dependency(
+ link_with : lib_tinyxml2,
+ include_directories : include_directories('.'),
+)
+
+# This is the new way to set dependencies, but let's not break users of older
+# versions of meson
+if meson.version().version_compare('>= 0.54.0')
+ meson.override_dependency('tinyxml2', dep_tinxyml2)
+endif
+
+if get_option('tests')
+ # Try to find a copy command. If this is windows we probably don't have cp,
+ # but if this is msys then we do, so make cp not required in that case, and
+ # try Xcopy if cp isn't found
+ prog_cp = find_program('cp', required : build_machine.system() != 'windows')
+ command = ['-r']
+ if not prog_cp.found()
+ prog_cp = find_program('Xcopy')
+ command = ['/E', '/I']
+ endif
+
+ # Copy the test resources into the build dir
+ run_command(
+ prog_cp,
+ [
+ command,
+ meson.current_source_dir() / 'resources',
+ meson.current_build_dir(),
+ ],
+ )
+
+ test(
+ 'xmltest',
+ executable(
+ 'xmltest',
+ ['xmltest.cpp'],
+ link_with : [lib_tinyxml2],
+ ),
+ workdir : meson.current_build_dir(),
+ )
+endif
+
+install_headers('tinyxml2.h')
+
+# This is better than using the .in because meson tracks dependencies
+# internally, and will generate a more accurate pkg-config file
+pkg = import('pkgconfig')
+pkg.generate(
+ lib_tinyxml2,
+ description : 'simple, small, C++ XML parser',
+)
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..d368061
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,28 @@
+# Copyright © 2020 Dylan Baker
+
+# This software is provided 'as-is', without any express or implied
+# warranty. In no event will the authors be held liable for any
+# damages arising from the use of this software.
+
+# Permission is granted to anyone to use this software for any
+# purpose, including commercial applications, and to alter it and
+# redistribute it freely, subject to the following restrictions:
+
+# 1. The origin of this software must not be misrepresented; you must
+# not claim that you wrote the original software. If you use this
+# software in a product, an acknowledgment in the product documentation
+# would be appreciated but is not required.
+
+# 2. Altered source versions must be plainly marked as such, and
+# must not be misrepresented as being the original software.
+
+# 3. This notice may not be removed or altered from any source
+# distribution.
+
+option(
+ 'tests',
+ type : 'boolean',
+ description : 'Enable unit tests',
+ value : true,
+ yield : true,
+) \ No newline at end of file
diff --git a/readme.md b/readme.md
index 33b3cd0..5a80191 100644
--- a/readme.md
+++ b/readme.md
@@ -265,9 +265,31 @@ And additionally a test file:
* xmltest.cpp
Simply compile and run. There is a visual studio 2019 project included, a simple Makefile,
-an Xcode project, a Code::Blocks project, and a cmake CMakeLists.txt included to help you.
-The top of tinyxml.h even has a simple g++ command line if you are using Unix/Linux/BSD and
-don't want to use a build system.
+an Xcode project, a Code::Blocks project, a cmake CMakeLists.txt, and a meson.build are
+included to help you. The top of tinyxml.h even has a simple g++ command line if you are
+using Unix/Linux/BSD and don't want to use a build system.
+
+Using as a Meson Subproject
+---------------------------
+
+Create a wrap file such as:
+```ini
+[wrap-git]
+url = https://github.com/leethomason/tinyxml2.git
+revision = 8.0.1 # this can be any commit-ish (tag, sha) or the special value `head`
+```
+
+or, if you prefer to not use git
+
+```ini
+[wrap-file]
+directory = tinyxml2-8.0.1 # this is the name of the directory after de-compressing
+source_url = https://github.com/leethomason/tinyxml2/archive/8.0.1.tar.gz
+source_hash = sha256sum of compressed sources
+```
+
+in your project's `subprojects/` folder, and follow the meson documentation
+for using fallbacks.
Building TinyXML-2 - Using vcpkg
--------------------------------
diff --git a/setversion.py b/setversion.py
index 0bf5ad4..31d124f 100755
--- a/setversion.py
+++ b/setversion.py
@@ -134,6 +134,15 @@ def cmakeRule2( line ):
fileProcess( "CMakeLists.txt", cmakeRule2 )
+def mesonRule(line):
+ match = re.search(r"(\s*version) : '(\d+.\d+.\d+)',", line)
+ if match:
+ print("1)meson.build version found.")
+ return "{} : '{}.{}.{}',\n".format(match.group(1), major, minor, build)
+ return line
+
+fileProcess("meson.build", mesonRule)
+
print( "Release note:" )
print( '1. Build. g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe' )
print( '2. Commit. git commit -am"setting the version to ' + versionStr + '"' )