注意
外国人は人手不足で資金もありません。 Changes
ファイルの先頭には、詳細に関するヘルプの呼びかけがあります。
これは、1997 年に James Clark によって開始された、XML 1.0 第 4 版を解析するための C99 ライブラリである Expat です。Expat は、ストリーム指向の XML パーサーです。これは、解析を開始する前にハンドラーをパーサーに登録することを意味します。これらのハンドラーは、パーサーが解析中の文書内で関連する構造を検出したときに呼び出されます。開始タグは、ハンドラーを登録できる構造の種類の例です。
Expat は次のコンパイラをサポートしています。
${today} minus 5 years
ローリング) Windows ユーザーはexpat-win32bin-*.*.*.{exe,zip}
ダウンロードを使用できます。これには、コンパイル済みのライブラリと実行可能ファイルの両方、および開発者向けのソース コードが含まれています。
Expat はフリーソフトウェアです。このパッケージとともに配布されるファイルCOPYING
に含まれるライセンスの条項に基づいて、これをコピー、配布、および変更することができます。このライセンスは、MIT/X コンソーシアム ライセンスと同じです。
CMake で libexpat を使用する 3 つの方法が文書化されています。
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
モジュール以下に示すように、このアプローチでは、 FetchContent
モジュールとそのSOURCE_SUBDIR
オプションのサポートの両方を使用可能にするために、CMake >=3.18 が必要です。
以下の点に注意してください。
master
でFetchContent
モジュールを使用することは推奨されておらず、公式にサポートされているとは見なされません。Git 経由で libexpat を取り込む例:
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)
Git リポジトリからのチェックアウトから Expat を構築している場合は、GNU autoconf および libtool ツールを使用して構成スクリプトを生成するスクリプトを実行する必要があります。これを行うには、autoconf 2.58 以降が必要です。次のようにスクリプトを実行します。
./buildconf.sh
これが完了したら、ソース ディストリビューションからビルドする場合と同じ手順に従います。
ソース ディストリビューションから Expat をビルドするには、まず最上位のディストリビューション ディレクトリで構成シェル スクリプトを実行します。
./configure
構成するために指定できるオプションは多数あります ( --help
オプションを指定して configure を実行すると確認できます)。しかし、最も興味深いのは、インストール ディレクトリを設定するものです。デフォルトでは、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
もう 1 つの興味深いオプションは、行番号と列番号、および全体のバイト インデックスに対する 64 ビット整数のサポートを有効にすることです。
./configure CPPFLAGS=-DXML_LARGE_SIZE
ただし、そのような変更は ABI に対する重大な変更となるため、一般的な使用 (Linux ディストリビューションの一部としてなど) には推奨されず、特別な要件を持つビルドに推奨されます。
configure スクリプトを実行した後、 make
コマンドによってビルドが行われ、 make install
適切な場所にインストールされます。追加のmake
オプションについては、 Makefile
を参照してください。インストール先のディレクトリへの書き込み権限が必要であることに注意してください。
デフォルトの UTF-8 ではなく UTF-16 エンコーディングでドキュメント情報を提供するように Expat を構築することに興味がある場合は、( make distclean
実行した後) 以下の手順に従ってください。 xmlwf はこのコンパイル モードを (まだ) サポートしていないため、 --without-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 出力を unsigned short (およびバージョン/エラー文字列を char) として出力するには、次のコマンドを実行します。
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
wchar_t
としての UTF-16 出力 (バージョン/エラー文字列を含む) の場合は、次を実行します。
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
注: 後者には、 -fshort-wchar
でコンパイルされた libc も必要です。
make
実行します (xmlwf は除外されます)。
make install
を実行します (ここでも、xmlwf は除外されます)。
DESTDIR
の使用がサポートされています。次のように動作します。
make install DESTDIR=/path/to/image
変数設定DESTDIR
優先順位は
注: これは Expat ライブラリ自体にのみ適用され、UTF-16 バージョンの xmlwf とテストの構築は現在サポートされていません。
構成に autoconf を使用するプロジェクトで Expat を使用する場合、 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