This commit is contained in:
parent
b8e5fd35ca
commit
0b3baedbee
5 changed files with 103 additions and 0 deletions
49
README.md
Normal file
49
README.md
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# wildmatch
|
||||||
|
|
||||||
|
*wildmatch — это библиотека C/C++ под лицензией BSD для сопоставления шаблонов в стиле git/rsync.*
|
||||||
|
|
||||||
|
## СИНТАКСИС
|
||||||
|
|
||||||
|
```c
|
||||||
|
/* C API */
|
||||||
|
#include <wildmatch/wildmatch.h>
|
||||||
|
|
||||||
|
if (wildmatch("/a/**/z", "/a/b/c/d/z", WM_WILDSTAR) == WM_MATCH) {
|
||||||
|
/* matched */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* C++ API */
|
||||||
|
#include <wildmatch/wildmatch.hpp>
|
||||||
|
|
||||||
|
if (wild::match("/a/**/z", "/a/b/c/d/z")) {
|
||||||
|
/* matched */
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## ОПИСАНИЕ
|
||||||
|
|
||||||
|
**wildmatch** — это расширение функции `fnmatch(3)`, определённой в POSIX 1003.2-1992, раздел B.6.
|
||||||
|
|
||||||
|
Расширение wildmatch позволяет `**` сопоставлять символ `/`, когда установлен флаг `WM_PATHNAME`. Это даёт практическое преимущество: можно совпадать со всеми подкаталогами пути с помощью `**`, а одинарная звёздочка `*` при этом остается для сопоставления внутри компонентов пути.
|
||||||
|
|
||||||
|
C-API по умолчанию совместим с `fnmatch`. Расширение wildmatch включается передачей флага `WM_WILDSTAR` в `flags`. Задание `WM_WILDSTAR` неявно включает `WM_PATHNAME`.
|
||||||
|
|
||||||
|
В C++-API аргумент `flags` по умолчанию равен `wild::WILDSTAR`. Вызов `wild::match(...)` только с двумя аргументами будет по умолчанию использовать расширенный синтаксис.
|
||||||
|
|
||||||
|
Флаги `WM_` названы так же, как соответствующие им `FNM_` из `fnmatch`, и совпадают по поведению с `fnmatch(3)`, если `WM_WILDSTAR` не задан.
|
||||||
|
|
||||||
|
## КОД ВОЗВРАТА
|
||||||
|
|
||||||
|
C-API возвращает `WM_MATCH`, если строка совпала с шаблоном, и `WM_NOMATCH`, если не совпала. Эти значения определены как `#define` для 0 и 1 соответственно.
|
||||||
|
|
||||||
|
C++-API возвращает логическое значение: `true` (совпадение) или `false` (нет совпадения).
|
||||||
|
|
||||||
|
## ИСТОРИЯ
|
||||||
|
|
||||||
|
Расширенный синтаксис wildmatch разрабатывался, ориентируясь на [тесты wildmatch](https://github.com/git/git/blob/maint/t/t3070-wildmatch.sh) из проекта [Git](https://git-scm.com).
|
||||||
|
|
||||||
|
Название «wildmatch» взято из внутренней библиотеки в [rsync](https://rsync.samba.org/), используемой для сопоставления в стиле `fnmatch`. Реализация wildmatch в Git первоначально пришла из rsync. Изначальную реализацию wildmatch добавил в rsync Уэйн Дэвисон (Wayne Davison) в 2003 году.
|
||||||
|
|
||||||
|
Набор тестов для wildmatch позаимствован из Git, однако сама библиотека не имеет общего происхождения с реализациями wildmatch ни в Git, ни в rsync.
|
||||||
|
|
||||||
|
Изначально wildmatch основывался на реализации `fnmatch` из OpenBSD. Эта реализация была расширена обратно совместимым образом — путём введения нового флага `WM_WILDSTAR` для включения расширенного синтаксиса.
|
23
files/patches/0001-soname.patch
Normal file
23
files/patches/0001-soname.patch
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
--- wildmatch/wildmatch/CMakeLists.txt 2025-09-18 03:05:09.594914856 +0300
|
||||||
|
+++ wildmatch/wildmatch/CMakeLists.txt 2025-09-18 03:05:54.551187188 +0300
|
||||||
|
@@ -4,6 +4,19 @@
|
||||||
|
add_library(wildmatch-cxx SHARED wildmatch.cpp)
|
||||||
|
target_compile_options(wildmatch-cxx PRIVATE ${PROJECT_CXXFLAGS})
|
||||||
|
|
||||||
|
-install(TARGETS wildmatch wildmatch-cxx DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
+set_target_properties(wildmatch PROPERTIES
|
||||||
|
+ VERSION ${${PROJECT_NAME}_MAJOR_VERSION}.${${PROJECT_NAME}_MINOR_VERSION}.${${PROJECT_NAME}_PATCH_LEVEL}
|
||||||
|
+ SOVERSION ${${PROJECT_NAME}_MAJOR_VERSION}
|
||||||
|
+)
|
||||||
|
+
|
||||||
|
+set_target_properties(wildmatch-cxx PROPERTIES
|
||||||
|
+ VERSION ${${PROJECT_NAME}_MAJOR_VERSION}.${${PROJECT_NAME}_MINOR_VERSION}.${${PROJECT_NAME}_PATCH_LEVEL}
|
||||||
|
+ SOVERSION ${${PROJECT_NAME}_MAJOR_VERSION}
|
||||||
|
+)
|
||||||
|
+
|
||||||
|
+install(TARGETS wildmatch wildmatch-cxx
|
||||||
|
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||||
|
install(FILES wildmatch.h DESTINATION include/${PROJECT_NAME})
|
||||||
|
install(FILES wildmatch.hpp DESTINATION include/${PROJECT_NAME})
|
1
files/series
Normal file
1
files/series
Normal file
|
@ -0,0 +1 @@
|
||||||
|
patches/0001-soname.patch
|
9
files/wildmatch.pc
Normal file
9
files/wildmatch.pc
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
prefix=/usr
|
||||||
|
includedir=${prefix}/include
|
||||||
|
libdir=${prefix}/lib
|
||||||
|
|
||||||
|
Name: wildmatch
|
||||||
|
Description: wildmatch is a BSD-licensed C/C++ library for git/rsync-style pattern matching
|
||||||
|
Version: 0.5.0
|
||||||
|
Libs: -L${libdir} -lwildmatch
|
||||||
|
Cflags: -I${includedir}
|
21
package.yml
Normal file
21
package.yml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
name : wildmatch
|
||||||
|
version : 0.5.0
|
||||||
|
release : 1
|
||||||
|
source :
|
||||||
|
- git|https://github.com/davvid/wildmatch.git : 16ba6a01804413b302e3fc9d747421d5d6f14599
|
||||||
|
homepage : https://github.com/davvid/wildmatch
|
||||||
|
license : BSD-3-Clause
|
||||||
|
component : system.devel
|
||||||
|
summary : wildmatch is a BSD-licensed C/C++ library for git/rsync-style pattern matching.
|
||||||
|
description: |
|
||||||
|
wildmatch is a BSD-licensed C/C++ library for git/rsync-style pattern matching.
|
||||||
|
setup : |
|
||||||
|
%apply_patches
|
||||||
|
%cmake_ninja \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/usr
|
||||||
|
build : |
|
||||||
|
%ninja_build
|
||||||
|
install : |
|
||||||
|
%ninja_install
|
||||||
|
install -Dm644 $pkgfiles/wildmatch.pc -t $installdir/usr/lib/pkgconfig
|
Loading…
Add table
Add a link
Reference in a new issue