Осторожность
Экспат недоукомплектован и не имеет финансирования. В верхней части файла Changes
есть запрос на помощь с подробной информацией.
Это Expat, библиотека C99 для анализа XML 1.0 четвертого издания, созданная Джеймсом Кларком в 1997 году. Expat — это потоково-ориентированный анализатор XML. Это означает, что вы регистрируете обработчики в анализаторе перед началом анализа. Эти обработчики вызываются, когда анализатор обнаруживает связанные структуры в анализируемом документе. Начальный тег — это пример структуры, для которой вы можете зарегистрировать обработчики.
Expat поддерживает следующие компиляторы:
${today} minus 5 years
) Пользователи Windows могут использовать загрузку expat-win32bin-*.*.*.{exe,zip}
, которая включает в себя как предварительно скомпилированные библиотеки и исполняемые файлы, так и исходный код для разработчиков.
Expat — бесплатное программное обеспечение. Вы можете копировать, распространять и изменять его в соответствии с условиями Лицензии, содержащейся в файле COPYING
распространяемом вместе с этим пакетом. Эта лицензия аналогична лицензии Консорциума MIT/X.
Существует три документированных способа использования libexpat с CMake:
find_package
в режиме модуля Этот подход использует собственный модуль CMake FindEXPAT
.
Обратите внимание на EXPAT
в верхнем регистре в следующем примере:
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
с режимом конфигурацииДля этого подхода требуются файлы из…
Обратите внимание на строчные буквы expat
в следующем примере:
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
Этот подход, как показано ниже, требует, чтобы CMake >=3.18 был доступен как для модуля FetchContent
, так и для поддержки параметра SOURCE_SUBDIR
.
Обратите внимание:
FetchContent
с невыпущенными SHA1 или master
libexpat не рекомендуется и не считается официально поддерживаемым.Для примера, который извлекает libexpat через 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)
Если вы собираете Expat на основе извлечения из репозитория Git, вам необходимо запустить сценарий, который генерирует сценарий настройки с помощью инструментов GNU autoconf и libtool. Для этого вам понадобится autoconf 2.58 или новее. Запустите скрипт следующим образом:
./buildconf.sh
Как только это будет сделано, следуйте тем же инструкциям, что и для сборки из исходного дистрибутива.
Чтобы собрать Expat из исходного дистрибутива, вы сначала запускаете сценарий оболочки конфигурации в каталоге дистрибутива верхнего уровня:
./configure
Существует множество опций, которые вы можете предоставить для настройки (которые вы можете обнаружить, запустив configure с опцией --help
). Но наибольший интерес представляет тот, который устанавливает каталог установки. По умолчанию скрипт configure настроит установку libexpat в /usr/local/lib
, expat.h
в /usr/local/include
и xmlwf
в /usr/local/bin
. Если, например, вы предпочитаете установку в /home/me/mystuff/lib
, /home/me/mystuff/include
и /home/me/mystuff/bin
, вы можете сообщить об этом configure
с помощью:
./configure --prefix=/home/me/mystuff
Еще один интересный вариант — включить поддержку 64-битных целых чисел для номеров строк и столбцов, а также общего байтового индекса:
./configure CPPFLAGS=-DXML_LARGE_SIZE
Однако такая модификация будет кардинальным изменением ABI и поэтому не рекомендуется для общего использования — например, как часть дистрибутива Linux — а скорее для сборок с особыми требованиями.
После запуска сценария настройки команда make
соберет все, а make install
установит все в нужное место. Просмотрите Makefile
, чтобы узнать о дополнительных параметрах make
. Обратите внимание, что вам необходимо иметь разрешение на запись в каталоги, в которые будут установлены файлы.
Если вы заинтересованы в создании Expat для предоставления информации о документе в кодировке UTF-16, а не в кодировке UTF-8 по умолчанию, следуйте этим инструкциям (после запуска make distclean
). Обратите внимание, что мы настраиваем --without-xmlwf
, поскольку xmlwf не поддерживает этот режим компиляции (пока):
Массовое исправление файлов Makefile.am
для использования libexpatw.la
в качестве имени библиотеки:
find . -name Makefile.am -exec sed -e 's,libexpat.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i.bak {} +
Запустите automake
, чтобы перезаписать файлы Makefile.in
:
automake
Для вывода UTF-16 в виде короткого беззнакового текста (и строк версии/ошибки в виде символа) выполните:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
Для вывода UTF-16 как wchar_t
(включая строки версии/ошибки) выполните:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
Примечание. Для последнего также требуется libc, скомпилированный с -fshort-wchar
.
Запустите make
(который исключает xmlwf).
Запустите make install
(опять же, исключая xmlwf).
Поддерживается использование DESTDIR
. Это работает следующим образом:
make install DESTDIR=/path/to/image
переопределяет набор DESTDIR
в makefile, поскольку приоритет установки переменной
Примечание. Это относится только к самой библиотеке Expat, которая создает версии xmlwf в формате UTF-16, и тесты в настоящее время не поддерживаются.
При использовании Expat с проектом, использующим autoconf для конфигурации, вы можете использовать макрос проверки в conftools/expat.m4
чтобы определить, как включить Expat. Дополнительную информацию смотрите в комментариях вверху этого файла.
Справочное руководство доступно в файле doc/reference.html
в этом дистрибутиве.
Система сборки CMake все еще является экспериментальной и может заменить основную систему сборки, основанную на GNU Autotools, в какой-то момент, когда она будет готова.
Чтобы получить представление о доступных (непродвинутых) вариантах сборки с помощью 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