Prudence
Les expatriés manquent de personnel et de financement. Il y a un appel à l'aide avec des détails en haut du fichier Changes
.
Il s'agit d'Expat, une bibliothèque C99 pour l'analyse XML 1.0 Quatrième Édition, lancée par James Clark en 1997. Expat est un analyseur XML orienté flux. Cela signifie que vous enregistrez les gestionnaires auprès de l'analyseur avant de démarrer l'analyse. Ces gestionnaires sont appelés lorsque l'analyseur découvre les structures associées dans le document en cours d'analyse. Une balise de début est un exemple du type de structures pour lesquelles vous pouvez enregistrer des gestionnaires.
Expat prend en charge les compilateurs suivants :
${today} minus 5 years
) Les utilisateurs Windows peuvent utiliser le téléchargement expat-win32bin-*.*.*.{exe,zip}
, qui comprend à la fois des bibliothèques et des exécutables précompilés, ainsi que du code source pour les développeurs.
Expat est un logiciel gratuit. Vous pouvez le copier, le distribuer et le modifier selon les termes de la licence contenue dans le fichier COPYING
distribué avec ce package. Cette licence est la même que la licence MIT/X Consortium.
Il existe trois manières documentées d'utiliser libexpat avec CMake :
find_package
avec le mode module Cette approche exploite le propre module FindEXPAT
de CMake.
Notez la majuscule EXPAT
dans l'exemple suivant :
cmake_minimum_required ( VERSION 3.0) # or 3.10, see below
project (hello VERSION 1.0.0)
find_package (EXPAT 2.2.8 MODULE REQUIRED)
add_executable (hello
hello.c
)
# a) for CMake >=3.10 (see CMake's FindEXPAT docs)
target_link_libraries (hello PUBLIC EXPAT::EXPAT)
# b) for CMake >=3.0
target_include_directories (hello PRIVATE ${EXPAT_INCLUDE_DIRS} )
target_link_libraries (hello PUBLIC ${EXPAT_LIBRARIES} )
find_package
avec le mode de configurationCette approche nécessite des fichiers de…
Notez la minuscule expat
dans l'exemple suivant :
cmake_minimum_required ( VERSION 3.0)
project (hello VERSION 1.0.0)
find_package (expat 2.2.8 CONFIG REQUIRED char dtd ns)
add_executable (hello
hello.c
)
target_link_libraries (hello PUBLIC expat::expat)
FetchContent
Cette approche - comme démontré ci-dessous - nécessite CMake >=3.18 pour que le module FetchContent
et sa prise en charge de l'option SOURCE_SUBDIR
soient disponibles.
Veuillez noter que :
FetchContent
avec des SHA1 non publiés ou master
de libexpat n'est ni conseillée ni considérée comme officiellement prise en charge.Pour un exemple qui extrait libexpat via Git :
cmake_minimum_required ( VERSION 3.18)
include (FetchContent)
project (hello VERSION 1.0.0)
FetchContent_Declare(
expat
GIT_REPOSITORY https://github.com/libexpat/libexpat/
GIT_TAG 000000000_GIT_COMMIT_SHA1_HERE_000000000 # i.e. Git tag R_0_Y_Z
SOURCE_SUBDIR expat/
)
FetchContent_MakeAvailable(expat)
add_executable (hello
hello.c
)
target_link_libraries (hello PUBLIC expat)
Si vous créez Expat à partir d'une extraction du référentiel Git, vous devez exécuter un script qui génère le script de configuration à l'aide des outils GNU autoconf et libtool. Pour ce faire, vous devez disposer d'autoconf 2.58 ou d'une version ultérieure. Exécutez le script comme ceci :
./buildconf.sh
Une fois cela fait, suivez les mêmes instructions que pour construire à partir d’une distribution source.
Pour construire Expat à partir d'une distribution source, vous exécutez d'abord le script shell de configuration dans le répertoire de distribution de niveau supérieur :
./configure
Il existe de nombreuses options que vous pouvez proposer pour configurer (que vous pouvez découvrir en exécutant configure avec l'option --help
). Mais celui qui présente le plus d’intérêt est celui qui définit le répertoire d’installation. Par défaut, le script de configuration configurera les éléments pour installer libexpat dans /usr/local/lib
, expat.h
dans /usr/local/include
et xmlwf
dans /usr/local/bin
. Si, par exemple, vous préférez installer dans /home/me/mystuff/lib
, /home/me/mystuff/include
et /home/me/mystuff/bin
, vous pouvez en informer configure
avec :
./configure --prefix=/home/me/mystuff
Une autre option intéressante consiste à activer la prise en charge des nombres entiers 64 bits pour les numéros de ligne et de colonne et l'index global des octets :
./configure CPPFLAGS=-DXML_LARGE_SIZE
Cependant, une telle modification constituerait un changement radical de l'ABI et n'est donc pas recommandée pour une utilisation générale — par exemple dans le cadre d'une distribution Linux — mais plutôt pour des builds avec des exigences particulières.
Après avoir exécuté le script de configuration, la commande make
construira les éléments et make install
installera les éléments à leur emplacement approprié. Jetez un œil au Makefile
pour en savoir plus sur les options make
supplémentaires. Notez que vous devez disposer d'une autorisation d'écriture dans les répertoires dans lesquels les éléments seront installés.
Si vous souhaitez créer Expat pour fournir des informations sur le document en codage UTF-16 plutôt qu'en UTF-8 par défaut, suivez ces instructions (après avoir exécuté make distclean
). Veuillez noter que nous configurons avec --without-xmlwf
car xmlwf ne supporte pas (encore) ce mode de compilation :
Corrigez en masse les fichiers Makefile.am
pour utiliser libexpatw.la
comme nom de bibliothèque :
find . -name Makefile.am -exec sed -e 's,libexpat.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i.bak {} +
Exécutez automake
pour réécrire les fichiers Makefile.in
:
automake
Pour la sortie UTF-16 sous forme de short non signé (et les chaînes de version/erreur sous forme de caractère), exécutez :
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
Pour la sortie UTF-16 sous la forme wchar_t
(y compris les chaînes de version/erreur), exécutez :
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
Remarque : ce dernier nécessite également une libc compilée avec -fshort-wchar
.
Exécutez make
(qui exclut xmlwf).
Exécutez make install
(encore une fois, exclut xmlwf).
L'utilisation DESTDIR
est prise en charge. Cela fonctionne comme suit :
make install DESTDIR=/path/to/image
remplace l'ensemble DESTDIR
du makefile, car la priorité de définition des variables est
Remarque : cela s'applique uniquement à la bibliothèque Expat elle-même, créant des versions UTF-16 de xmlwf et les tests ne sont actuellement pas pris en charge.
Lorsque vous utilisez Expat avec un projet utilisant autoconf pour la configuration, vous pouvez utiliser la macro de sondage dans conftools/expat.m4
pour déterminer comment inclure Expat. Voir les commentaires en haut de ce fichier pour plus d'informations.
Un manuel de référence est disponible dans le fichier doc/reference.html
dans cette distribution.
Le système de build CMake est encore expérimental et pourrait remplacer le système de build principal basé sur GNU Autotools à un moment donné lorsqu'il sera prêt.
Pour une idée des options disponibles (non avancées) pour construire avec CMake :
# rm -f CMakeCache.txt ; cmake -D_EXPAT_HELP=ON -LH . | grep -B1 ' :.*= ' | sed ' s,^--$,, '
// Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ...
CMAKE_BUILD_TYPE:STRING=
// Install path prefix, prepended onto install directories.
CMAKE_INSTALL_PREFIX:PATH=/usr/local
// Path to a program.
DOCBOOK_TO_MAN:FILEPATH=/usr/bin/docbook2x-man
// Build man page for xmlwf
EXPAT_BUILD_DOCS:BOOL=ON
// Build the examples for expat library
EXPAT_BUILD_EXAMPLES:BOOL=ON
// Build fuzzers for the expat library
EXPAT_BUILD_FUZZERS:BOOL=OFF
// Build pkg-config file
EXPAT_BUILD_PKGCONFIG:BOOL=ON
// Build the tests for expat library
EXPAT_BUILD_TESTS:BOOL=ON
// Build the xmlwf tool for expat library
EXPAT_BUILD_TOOLS:BOOL=ON
// Character type to use (char|ushort|wchar_t) [default=char]
EXPAT_CHAR_TYPE:STRING=char
// Install expat files in cmake install target
EXPAT_ENABLE_INSTALL:BOOL=ON
// Use /MT flag (static CRT) when compiling in MSVC
EXPAT_MSVC_STATIC_CRT:BOOL=OFF
// Build fuzzers via ossfuzz for the expat library
EXPAT_OSSFUZZ_BUILD:BOOL=OFF
// Build a shared expat library
EXPAT_SHARED_LIBS:BOOL=ON
// Treat all compiler warnings as errors
EXPAT_WARNINGS_AS_ERRORS:BOOL=OFF
// Make use of getrandom function (ON|OFF|AUTO) [default=AUTO]
EXPAT_WITH_GETRANDOM:STRING=AUTO
// Utilize libbsd (for arc4random_buf)
EXPAT_WITH_LIBBSD:BOOL=OFF
// Make use of syscall SYS_getrandom (ON|OFF|AUTO) [default=AUTO]
EXPAT_WITH_SYS_GETRANDOM:STRING=AUTO