init 0.5.0
All checks were successful
Build / Build project (push) Successful in 26s

This commit is contained in:
Alexander Zhirov 2025-09-18 03:12:25 +03:00
parent b8e5fd35ca
commit 0b3baedbee
Signed by: alexander
GPG key ID: C8D8BE544A27C511
5 changed files with 103 additions and 0 deletions

49
README.md Normal file
View 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` для включения расширенного синтаксиса.

View 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
View file

@ -0,0 +1 @@
patches/0001-soname.patch

9
files/wildmatch.pc Normal file
View 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
View 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