Precaución
El expatriado no tiene suficiente personal ni financiación. Hay una llamada de ayuda con detalles en la parte superior del archivo Changes
.
Esta es Expat, una biblioteca C99 para analizar XML 1.0, cuarta edición, iniciada por James Clark en 1997. Expat es un analizador XML orientado a flujos. Esto significa que registra controladores con el analizador antes de iniciar el análisis. Estos controladores se llaman cuando el analizador descubre las estructuras asociadas en el documento que se está analizando. Una etiqueta de inicio es un ejemplo del tipo de estructuras para las que puede registrar controladores.
Expat admite los siguientes compiladores:
${today} minus 5 years
) Los usuarios de Windows pueden utilizar la descarga expat-win32bin-*.*.*.{exe,zip}
, que incluye bibliotecas y ejecutables precompilados y código fuente para desarrolladores.
Expat es un software gratuito. Puede copiarlo, distribuirlo y modificarlo según los términos de la Licencia contenida en el archivo COPYING
distribuido con este paquete. Esta licencia es la misma que la licencia del MIT/X Consortium.
Hay tres formas documentadas de utilizar libexpat con CMake:
find_package
con modo módulo Este enfoque aprovecha el propio módulo FindEXPAT
de CMake.
Observe la EXPAT
mayúscula en el siguiente ejemplo:
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
con modo de configuraciónEste enfoque requiere archivos de...
Observe el expat
en minúsculas en el siguiente ejemplo:
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
Este enfoque, como se demuestra a continuación, requiere CMake >=3.18 para que tanto el módulo FetchContent
como su soporte para la opción SOURCE_SUBDIR
estén disponibles.
Tenga en cuenta que:
FetchContent
con SHA1 que no son de lanzamiento o master
of libexpat.Para ver un ejemplo que incorpora libexpat a través de 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 está compilando Expat a partir de un check-out del repositorio Git, necesita ejecutar un script que genere el script de configuración utilizando las herramientas GNU autoconf y libtool. Para hacer esto, necesita tener autoconf 2.58 o posterior. Ejecute el script de esta manera:
./buildconf.sh
Una vez hecho esto, siga las mismas instrucciones que para compilar desde una distribución fuente.
Para compilar Expat a partir de una distribución fuente, primero ejecute el script de configuración del shell en el directorio de distribución de nivel superior:
./configure
Hay muchas opciones que puede proporcionar para configurar (que puede descubrir ejecutando configure con la opción --help
). Pero el de mayor interés es el que establece el directorio de instalación. De forma predeterminada, el script de configuración configurará las cosas para instalar libexpat en /usr/local/lib
, expat.h
en /usr/local/include
y xmlwf
en /usr/local/bin
. Si, por ejemplo, prefiere instalar en /home/me/mystuff/lib
, /home/me/mystuff/include
y /home/me/mystuff/bin
, puede indicarle configure
eso con:
./configure --prefix=/home/me/mystuff
Otra opción interesante es habilitar el soporte de enteros de 64 bits para números de línea y columna y el índice general de bytes:
./configure CPPFLAGS=-DXML_LARGE_SIZE
Sin embargo, tal modificación sería un cambio importante en la ABI y, por lo tanto, no se recomienda para uso general (por ejemplo, como parte de una distribución de Linux) sino más bien para compilaciones con requisitos especiales.
Después de ejecutar el script de configuración, el comando make
compilará las cosas y make install
las instalará en su ubicación adecuada. Eche un vistazo al Makefile
para conocer opciones make
adicionales. Tenga en cuenta que debe tener permiso de escritura en los directorios en los que se instalarán los elementos.
Si está interesado en crear Expat para proporcionar información del documento en codificación UTF-16 en lugar de la UTF-8 predeterminada, siga estas instrucciones (después de haber ejecutado make distclean
). Tenga en cuenta que configuramos con --without-xmlwf
ya que xmlwf no admite este modo de compilación (todavía):
Realice un parche masivo en los archivos Makefile.am
para usar libexpatw.la
como nombre de biblioteca:
find . -name Makefile.am -exec sed -e 's,libexpat.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i.bak {} +
Ejecute automake
para reescribir archivos Makefile.in
:
automake
Para la salida UTF-16 como short sin firmar (y cadenas de versión/error como char), ejecute:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
Para la salida UTF-16 como wchar_t
(incluidas cadenas de versión/error), ejecute:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
Nota: Este último también requiere libc compilado con -fshort-wchar
.
Ejecute make
(que excluye xmlwf).
Ejecute make install
(nuevamente, excluye xmlwf).
Se admite el uso de DESTDIR
. Funciona de la siguiente manera:
make install DESTDIR=/path/to/image
anula el conjunto DESTDIR
en el archivo MAKE, porque la prioridad de configuración de variables es
Nota: Esto solo se aplica a la propia biblioteca Expat; actualmente no se admiten versiones UTF-16 de xmlwf y las pruebas.
Cuando utilice Expat con un proyecto que utilice autoconf para la configuración, puede utilizar la macro de sondeo en conftools/expat.m4
para determinar cómo incluir Expat. Consulte los comentarios en la parte superior de ese archivo para obtener más información.
Un manual de referencia está disponible en el archivo doc/reference.html
de esta distribución.
El sistema de compilación CMake aún es experimental y puede reemplazar el sistema de compilación principal basado en GNU Autotools en algún momento cuando esté listo.
Para tener una idea de las opciones disponibles (no avanzadas) para compilar con 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