Cuidado
O expatriado está com falta de pessoal e sem financiamento. Há um pedido de ajuda com detalhes na parte superior do arquivo Changes
.
Esta é a Expat, uma biblioteca C99 para análise de XML 1.0 Quarta Edição, iniciada por James Clark em 1997. Expat é um analisador XML orientado a fluxo. Isso significa que você registra manipuladores no analisador antes de iniciar a análise. Esses manipuladores são chamados quando o analisador descobre as estruturas associadas no documento que está sendo analisado. Uma tag inicial é um exemplo do tipo de estrutura para a qual você pode registrar manipuladores.
Expat oferece suporte aos seguintes compiladores:
${today} minus 5 years
) Os usuários do Windows podem usar o download expat-win32bin-*.*.*.{exe,zip}
, que inclui bibliotecas e executáveis pré-compilados e código-fonte para desenvolvedores.
Expat é um software livre. Você pode copiá-lo, distribuí-lo e modificá-lo sob os termos da Licença contida no arquivo COPYING
distribuído com este pacote. Esta licença é igual à licença do MIT/X Consortium.
Existem três maneiras documentadas de usar o libexpat com o CMake:
find_package
com modo de módulo Essa abordagem aproveita o próprio módulo FindEXPAT
do CMake.
Observe o EXPAT
maiúsculo no exemplo a seguir:
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
com modo de configuraçãoEssa abordagem requer arquivos de…
Observe o expat
em letras minúsculas no exemplo a seguir:
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
Esta abordagem - conforme demonstrado abaixo - requer CMake >=3.18 para que o módulo FetchContent
e seu suporte para a opção SOURCE_SUBDIR
estejam disponíveis.
Observe que:
FetchContent
com SHA1s não lançados ou master
do libexpat não é recomendado nem considerado oficialmente suportado.Para um exemplo que extrai 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)
Se você estiver construindo o Expat a partir de um check-out do repositório Git, será necessário executar um script que gere o script de configuração usando as ferramentas GNU autoconf e libtool. Para fazer isso, você precisa ter o autoconf 2.58 ou mais recente. Execute o script assim:
./buildconf.sh
Feito isso, siga as mesmas instruções para compilar a partir de uma distribuição fonte.
Para construir o Expat a partir de uma distribuição fonte, primeiro você executa o script shell de configuração no diretório de distribuição de nível superior:
./configure
Existem muitas opções que você pode fornecer para configurar (que você pode descobrir executando configure com a opção --help
). Mas o que mais interessa é aquele que define o diretório de instalação. Por padrão, o script configure configurará as coisas para instalar libexpat em /usr/local/lib
, expat.h
em /usr/local/include
e xmlwf
em /usr/local/bin
. Se, por exemplo, você preferir instalar em /home/me/mystuff/lib
, /home/me/mystuff/include
e /home/me/mystuff/bin
, você pode informar configure
sobre isso com:
./configure --prefix=/home/me/mystuff
Outra opção interessante é ativar o suporte inteiro de 64 bits para números de linhas e colunas e o índice geral de bytes:
./configure CPPFLAGS=-DXML_LARGE_SIZE
No entanto, tal modificação seria uma mudança significativa na ABI e, portanto, não é recomendada para uso geral — por exemplo, como parte de uma distribuição Linux — mas sim para compilações com requisitos especiais.
Depois de executar o script configure, o comando make
construirá as coisas e make install
instalará as coisas em seu local apropriado. Dê uma olhada no Makefile
para aprender sobre opções adicionais make
. Observe que você precisa ter permissão de gravação nos diretórios nos quais os itens serão instalados.
Se você estiver interessado em construir o Expat para fornecer informações de documentos na codificação UTF-16 em vez do UTF-8 padrão, siga estas instruções (depois de executar make distclean
). Observe que configuramos com --without-xmlwf
pois o xmlwf não suporta este modo de compilação (ainda):
Faça patch em massa dos arquivos Makefile.am
para usar libexpatw.la
como nome de biblioteca:
find . -name Makefile.am -exec sed -e 's,libexpat.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i.bak {} +
Execute automake
para reescrever os arquivos Makefile.in
:
automake
Para saída UTF-16 como unsigned short (e strings de versão/erro como char), execute:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
Para saída UTF-16 como wchar_t
(incl. strings de versão/erro), execute:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
Nota: Este último também requer libc compilado com -fshort-wchar
.
Execute make
(que exclui xmlwf).
Execute make install
(novamente, exclui xmlwf).
O uso de DESTDIR
é suportado. Funciona da seguinte maneira:
make install DESTDIR=/path/to/image
substitui o conjunto DESTDIR
no makefile, porque a prioridade de configuração de variável é
Nota: Isso se aplica apenas à própria biblioteca Expat, a construção de versões UTF-16 do xmlwf e os testes não são suportados atualmente.
Ao usar o Expat com um projeto que usa o autoconf para configuração, você pode usar a macro de teste em conftools/expat.m4
para determinar como incluir o Expat. Veja os comentários na parte superior desse arquivo para obter mais informações.
Um manual de referência está disponível no arquivo doc/reference.html
nesta distribuição.
O sistema de compilação CMake ainda é experimental e pode substituir o sistema de compilação primário baseado no GNU Autotools em algum momento quando estiver pronto.
Para ter uma ideia das opções disponíveis (não avançadas) para construção com 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