Added libxml2 depdency.

This commit is contained in:
Yohan Boujon 2025-03-12 10:29:39 +01:00
commit e9607e1411
6 changed files with 98 additions and 0 deletions

7
.gitignore vendored Normal file
View file

@ -0,0 +1,7 @@
# Meson
/subprojects/*
!/subprojects/*.wrap
build/**
# VSCode
.vscode

7
include/libxml.h Normal file
View file

@ -0,0 +1,7 @@
#ifndef _HEADER_MESONTEST_LIBXML
#define _HEADER_MESONTEST_LIBXML
void info_libxml(void);
void create_xml(void);
#endif // _HEADER_MESONTEST_LIBXML

19
meson.build Normal file
View file

@ -0,0 +1,19 @@
project('meson-test', 'cpp',
version : '0.1',
default_options : ['warning_level=3', 'cpp_std=c++11']
)
# Libraries
libxml2_proj = subproject('libxml2', default_options: ['python=false', 'default_library=static'])
libxml2_dep = libxml2_proj.get_variable('xml_dep')
# Include directories
incdir = include_directories('include')
# Executable
executable('mesontest',
'src/libxml.cpp',
'src/main.cpp',
dependencies: libxml2_dep,
include_directories : incdir
)

35
src/libxml.cpp Normal file
View file

@ -0,0 +1,35 @@
#include "libxml.h"
#include <libxml/xmlversion.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <iostream>
void info_libxml(void)
{
std::cout << "[LIBXML2]\tversion: " << LIBXML_DOTTED_VERSION << std::endl;
}
void create_xml(void)
{
std::cout << "[LIBXML2]\tWriting basic .xml file..." << std::endl;
// Create new doc
xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0");
xmlNodePtr root_node = xmlNewNode(nullptr, BAD_CAST "root");
xmlDocSetRootElement(doc, root_node);
xmlNodePtr child1 = xmlNewChild(root_node, nullptr, BAD_CAST "child1", BAD_CAST "This is child 1");
xmlNewProp(child1, BAD_CAST "attribute", BAD_CAST "value");
// Save the document
const char* filename = "example.xml";
if (xmlSaveFormatFileEnc(filename, doc, "UTF-8", 1) != -1) {
std::cout << "[LIBXML2]\tXML file created successfully: " << filename << std::endl;
} else {
std::cerr << "LIBXML2]\tError saving XML file!" << std::endl;
}
// Clean up
xmlFreeDoc(doc);
xmlCleanupParser();
}

20
src/main.cpp Normal file
View file

@ -0,0 +1,20 @@
#include <iostream>
#include "libxml.h"
int main(void)
{
try
{
std::cout << "Libxml2 Test..." << std::endl;
info_libxml();
create_xml();
std::cout << "Enter any key to quit the program\n> ";
std::cin.ignore();
}
catch (const std::exception &ex)
{
std::cerr << "\033[0;31m[ ERR]:\t" << ex.what() << "\033[0m" << std::flush;
}
return 0;
}

10
subprojects/libxml2.wrap Normal file
View file

@ -0,0 +1,10 @@
[wrap-file]
directory = libxml2-2.13.6
source_url = https://download.gnome.org/sources/libxml2/2.13/libxml2-2.13.6.tar.xz
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/libxml2_2.13.6-1/libxml2-2.13.6.tar.xz
source_filename = libxml2-2.13.6.tar.xz
source_hash = f453480307524968f7a04ec65e64f2a83a825973bcd260a2e7691be82ae70c96
wrapdb_version = 2.13.6-1
[provide]
libxml-2.0 = xml_dep