حذر
المغتربون يعانون من نقص الموظفين وبدون تمويل. هناك طلب للمساعدة بشأن التفاصيل في أعلى ملف Changes
.
هذه هي Expat، وهي مكتبة C99 لتحليل XML 1.0 الإصدار الرابع، بدأها جيمس كلارك في عام 1997. Expat عبارة عن محلل XML موجه نحو التدفق. هذا يعني أنك تقوم بتسجيل المعالجات مع المحلل اللغوي قبل بدء التحليل. يتم استدعاء هذه المعالجات عندما يكتشف المحلل اللغوي الهياكل المرتبطة في المستند الذي يتم تحليله. تعتبر علامة البداية مثالاً على نوع الهياكل التي يمكنك تسجيل المعالجات لها.
يدعم Expat المترجمين التاليين:
${today} minus 5 years
) يمكن لمستخدمي Windows استخدام تنزيل expat-win32bin-*.*.*.{exe,zip}
، والذي يتضمن كلاً من المكتبات المترجمة مسبقًا والملفات التنفيذية، والتعليمة البرمجية المصدر للمطورين.
المغترب هو برنامج مجاني. يجوز لك نسخه وتوزيعه وتعديله بموجب شروط الترخيص الموجودة في ملف COPYING
الموزع مع هذه الحزمة. هذا الترخيص هو نفس ترخيص MIT/X Consortium.
هناك ثلاث طرق موثقة لاستخدام libexpat مع CMake:
find_package
مع وضع الوحدة النمطية يستفيد هذا الأسلوب من وحدة FindEXPAT
الخاصة بـ CMake.
لاحظ الحرف الكبير 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
مع SHA1s غير الصادرة أو 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 من توزيع مصدر، عليك أولاً تشغيل البرنامج النصي لتكوين shell في دليل التوزيع ذي المستوى الأعلى:
./configure
هناك العديد من الخيارات التي يمكنك توفيرها للتهيئة (والتي يمكنك اكتشافها عن طريق تشغيل التهيئة باستخدام خيار --help
). لكن الأكثر أهمية هو الذي يحدد دليل التثبيت. افتراضيًا، سيقوم البرنامج النصي للتكوين بإعداد الأشياء لتثبيت 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
الموجودة في ملف التعريف، لأن أولوية إعداد المتغير هي
ملاحظة: ينطبق هذا فقط على مكتبة Expat نفسها، كما أن إنشاء إصدارات UTF-16 من xmlwf والاختبارات غير مدعومة حاليًا.
عند استخدام 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