liburlparser 2.1.0__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. liburlparser-2.2.0/CHANGELOG.md +212 -0
  2. {liburlparser-2.1.0 → liburlparser-2.2.0}/CMakeLists.txt +25 -11
  3. {liburlparser-2.1.0 → liburlparser-2.2.0}/PKG-INFO +5 -5
  4. {liburlparser-2.1.0 → liburlparser-2.2.0}/README.md +4 -4
  5. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/cpp/CMakeLists.txt +1 -1
  6. {liburlparser-2.1.0 → liburlparser-2.2.0}/cmake/liburlparserConfig.cmake +2 -2
  7. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/index.html.in +2 -2
  8. {liburlparser-2.1.0 → liburlparser-2.2.0}/examples/find_liburlparser_via_python/CMakeLists.txt +1 -1
  9. {liburlparser-2.1.0 → liburlparser-2.2.0}/include/urlparser.h +1 -1
  10. {liburlparser-2.1.0 → liburlparser-2.2.0}/src/public_suffix_list.dat +185 -73
  11. {liburlparser-2.1.0 → liburlparser-2.2.0}/.clang-format +0 -0
  12. {liburlparser-2.1.0 → liburlparser-2.2.0}/.github/workflows/cmake.yml +0 -0
  13. {liburlparser-2.1.0 → liburlparser-2.2.0}/.github/workflows/orchestrator.yml +0 -0
  14. {liburlparser-2.1.0 → liburlparser-2.2.0}/.github/workflows/process_release.py +0 -0
  15. {liburlparser-2.1.0 → liburlparser-2.2.0}/.github/workflows/release_template.md +0 -0
  16. {liburlparser-2.1.0 → liburlparser-2.2.0}/.github/workflows/wheels.yml +0 -0
  17. {liburlparser-2.1.0 → liburlparser-2.2.0}/.gitignore +0 -0
  18. {liburlparser-2.1.0 → liburlparser-2.2.0}/ARCHITECTURE.md +0 -0
  19. {liburlparser-2.1.0 → liburlparser-2.2.0}/LICENSE +0 -0
  20. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/.gitignore +0 -0
  21. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/CMakeLists.txt +0 -0
  22. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/OPTIMIZATION_NOTES.md +0 -0
  23. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/README.md +0 -0
  24. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/cmake/Download.cmake +0 -0
  25. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/corpus/.gitignore +0 -0
  26. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/corpus/generate_corpus.py +0 -0
  27. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/cpp/abspath_fix_verification/README.md +0 -0
  28. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/cpp/abspath_fix_verification/fair_compare.cpp +0 -0
  29. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/cpp/bench.cpp +0 -0
  30. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/cpp/psl_structures/README.md +0 -0
  31. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/cpp/psl_structures/psl_structure_comparison.cpp +0 -0
  32. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/python/CMakeLists.txt +0 -0
  33. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/python/bench.py +0 -0
  34. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/python/binding_fast_path_ab.py +0 -0
  35. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/python/requirements.txt +0 -0
  36. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/report/CMakeLists.txt +0 -0
  37. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/report/generate_report.py +0 -0
  38. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/report/template.html.jinja2 +0 -0
  39. {liburlparser-2.1.0 → liburlparser-2.2.0}/benchmarks/results/report.html +0 -0
  40. {liburlparser-2.1.0 → liburlparser-2.2.0}/cmake/DynamicVersion.cmake +0 -0
  41. {liburlparser-2.1.0 → liburlparser-2.2.0}/cmake/EmbedFile.cmake +0 -0
  42. {liburlparser-2.1.0 → liburlparser-2.2.0}/cmake/FixLCovPaths.cmake +0 -0
  43. {liburlparser-2.1.0 → liburlparser-2.2.0}/cmake/GenerateIframe.cmake +0 -0
  44. {liburlparser-2.1.0 → liburlparser-2.2.0}/cmake/PublicSuffixList.cmake +0 -0
  45. {liburlparser-2.1.0 → liburlparser-2.2.0}/cmake/PyProject.cmake +0 -0
  46. {liburlparser-2.1.0 → liburlparser-2.2.0}/cmake/coverage_iframe.html.in +0 -0
  47. {liburlparser-2.1.0 → liburlparser-2.2.0}/cmake/utils/embedded_string.in.h +0 -0
  48. {liburlparser-2.1.0 → liburlparser-2.2.0}/conda.recipe/meta.yaml +0 -0
  49. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/CMakeLists.txt +0 -0
  50. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/CreateDocs.cmake +0 -0
  51. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/InjectComment.cmake +0 -0
  52. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/UrlParserPages.cmake +0 -0
  53. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/cli/examples.md +0 -0
  54. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/cli/index.md +0 -0
  55. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/cli/installation.md +0 -0
  56. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/cli/options.md +0 -0
  57. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/convert_page.py +0 -0
  58. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/cpp/CreateDocs.cmake +0 -0
  59. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/cpp/Doxyfile.in +0 -0
  60. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/cpp/footer.html.in +0 -0
  61. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/cpp/header.html +0 -0
  62. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/cpp/images/interface-arch.svg +0 -0
  63. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/cpp/images/url-parsing-process.svg +0 -0
  64. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/cpp/mainpage.md +0 -0
  65. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/images/liburlparser-sq.txt +0 -0
  66. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/images/logo/liburlparser-logo-1.svg +0 -0
  67. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/images/logo/liburlparser-logo-2.svg +0 -0
  68. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/initial_comment.in +0 -0
  69. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/page.html.in +0 -0
  70. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/CreateDocs.cmake +0 -0
  71. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/api/host.md +0 -0
  72. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/api/psl.md +0 -0
  73. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/api/reference.rst +0 -0
  74. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/api/url.md +0 -0
  75. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/conf.py +0 -0
  76. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/examples.md +0 -0
  77. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/index.md +0 -0
  78. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/installation.md +0 -0
  79. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/performance.md +0 -0
  80. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/usage/advanced.md +0 -0
  81. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/usage/basic.md +0 -0
  82. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/docs/usage/cli.md +0 -0
  83. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/python/mkdocs.yml +0 -0
  84. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/section.html.in +0 -0
  85. {liburlparser-2.1.0 → liburlparser-2.2.0}/docs/urlparser-docs.css +0 -0
  86. {liburlparser-2.1.0 → liburlparser-2.2.0}/examples/common.h +0 -0
  87. {liburlparser-2.1.0 → liburlparser-2.2.0}/examples/find_liburlparser_via_python/main.cpp +0 -0
  88. {liburlparser-2.1.0 → liburlparser-2.2.0}/examples/main.cpp +0 -0
  89. {liburlparser-2.1.0 → liburlparser-2.2.0}/pyproject.toml +0 -0
  90. {liburlparser-2.1.0 → liburlparser-2.2.0}/requirements-dev.txt +0 -0
  91. {liburlparser-2.1.0 → liburlparser-2.2.0}/src/ankerl/LICENSE +0 -0
  92. {liburlparser-2.1.0 → liburlparser-2.2.0}/src/ankerl/README.md +0 -0
  93. {liburlparser-2.1.0 → liburlparser-2.2.0}/src/ankerl/stl.h +0 -0
  94. {liburlparser-2.1.0 → liburlparser-2.2.0}/src/ankerl/unordered_dense.h +0 -0
  95. {liburlparser-2.1.0 → liburlparser-2.2.0}/src/bindings/python/binding_py.cpp +0 -0
  96. {liburlparser-2.1.0 → liburlparser-2.2.0}/src/bindings/python/liburlparser/__init__.py +0 -0
  97. {liburlparser-2.1.0 → liburlparser-2.2.0}/src/bindings/python/liburlparser/__main__.py +0 -0
  98. {liburlparser-2.1.0 → liburlparser-2.2.0}/src/bindings/python/liburlparser/core.py +0 -0
  99. {liburlparser-2.1.0 → liburlparser-2.2.0}/src/bindings/python/liburlparser/utils.py +0 -0
  100. {liburlparser-2.1.0 → liburlparser-2.2.0}/src/urlparser.cpp +0 -0
  101. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/CMakeLists.txt +0 -0
  102. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/coverage_dashboard.html.in +0 -0
  103. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/cpp/CMakeLists.txt +0 -0
  104. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/cpp/common.h +0 -0
  105. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/cpp/fuzz_abspath.cpp +0 -0
  106. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/cpp/perf_regression_guard.cpp +0 -0
  107. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/cpp/test_host.cpp +0 -0
  108. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/cpp/test_idna.cpp +0 -0
  109. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/cpp/test_normalize.cpp +0 -0
  110. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/cpp/test_percent_codec.cpp +0 -0
  111. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/cpp/test_resolve.cpp +0 -0
  112. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/cpp/test_scp_url.cpp +0 -0
  113. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/cpp/test_url.cpp +0 -0
  114. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/data/host_data.csv +0 -0
  115. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/data/url_data.csv +0 -0
  116. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/genhtml.css +0 -0
  117. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/python/CMakeLists.txt +0 -0
  118. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/python/test_cli_subprocess.py +0 -0
  119. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/python/test_extra.py +0 -0
  120. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/python/test_host.py +0 -0
  121. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/python/test_idna.py +0 -0
  122. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/python/test_memory.py +0 -0
  123. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/python/test_normalize.py +0 -0
  124. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/python/test_percent_codec.py +0 -0
  125. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/python/test_resolve.py +0 -0
  126. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/python/test_scp_url.py +0 -0
  127. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/python/test_url.py +0 -0
  128. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/utest/utest.h +0 -0
  129. {liburlparser-2.1.0 → liburlparser-2.2.0}/tests/utest/utest_main.cxx +0 -0
  130. {liburlparser-2.1.0 → liburlparser-2.2.0}/version.py +0 -0
@@ -0,0 +1,212 @@
1
+ # Changelog
2
+
3
+ All notable changes to liburlparser are documented here. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project follows
5
+ [Semantic Versioning](https://semver.org/). The version of the project is the one in `include/urlparser.h`
6
+ (`URLPARSER_VERSION_MAJOR/MINOR/PATCH`); `pyproject.toml` and CMake read it from there.
7
+
8
+ The entries up to 2.1.0 were written from the git history and the release tags. Since the commit messages of the 1.x
9
+ releases are short, those entries are brief.
10
+
11
+ ## [2.2.0] - 2026-11-09
12
+
13
+ ### Changed
14
+ - **The CMake package namespace is now `liburlparser::`, like the package.** The public target is
15
+ `liburlparser::urlparser`, the same name from `add_subdirectory()`, `FetchContent` and
16
+ `find_package(liburlparser CONFIG)`. A CMake package should export its targets under its own name, and the
17
+ package is `liburlparser` (`liburlparserConfig.cmake`, `python -m liburlparser --cmake-dir`). **Breaking:** the
18
+ 2.1.0 name `urlparser::urlparser` is gone and there is no alias for it. Change `target_link_libraries(... urlparser::urlparser)` to
19
+ `liburlparser::urlparser`. The C++ namespace (`urlparser::url`, `urlparser::host`) is unchanged.
20
+ - The `example` program is built only when liburlparser is the top-level project, like the tests and the docs, so it is
21
+ not compiled for nothing when the library is a dependency.
22
+
23
+ ### Fixed
24
+ - **Using liburlparser from another scikit-build-core project failed.** `SKBUILD` is defined for the whole build, so a
25
+ project that pulled liburlparser in with `add_subdirectory()` or `FetchContent` made it believe it was itself the wheel
26
+ being built: it tried to build its own nanobind module (and failed when nanobind was not installed) or stopped
27
+ with `RETURN()` before the example, tests and docs. The check is now "`SKBUILD` is defined **and** liburlparser is the
28
+ top-level project". The 2.0.0 release had a guard for this (`c140ea4`); the CMake refactor of 2.1.0 (`ac6ac03`)
29
+ dropped it.
30
+
31
+ ## [2.1.0] - 2026-10-03
32
+
33
+ ### Added
34
+ - **`find_package(liburlparser CONFIG)`.** The core is a static library that is installed with its headers and a CMake
35
+ package (`liburlparserConfig.cmake`, targets, version file, and `liburlparserPaths.cmake` with the absolute library
36
+ and include paths). The Python wheel carries the same tree (`include/`, `lib/`, `cmake/`), and
37
+ `python -m liburlparser --cmake-dir` / `--include-dir` / `--lib-dir` print the paths, the way `python -m nanobind --cmake_dir` does.
38
+ `examples/find_liburlparser_via_python` shows it.
39
+ - **IDNA normalization and percent codec APIs.**
40
+ - **scp-like git URLs** (`user@host:path/repo.git`) are parsed.
41
+ - **`url::normalized()`** returns a canonical serialization of a URL.
42
+ - Benchmarks: `search_params` against ada, a reproducible comparison of the PSL structures, benchmark artifacts kept apart
43
+ from the committed results, and an HTML report target.
44
+
45
+ ### Changed
46
+ - **The CMake targets are unified.** The historical aliases `url::base` and `liburlparser::core` are replaced by the one
47
+ public alias `urlparser::urlparser`, and `install(EXPORT)` uses the same name. (**Breaking** for anyone who linked the old aliases;
48
+ renamed again in 2.2.0.)
49
+ - The standalone `idna.cpp` and `percent_codec.cpp` are merged into `urlparser.cpp`, and stale files left from the
50
+ header/source consolidation were removed.
51
+ - The bundled `public_suffix_list.dat` is the 2026-09-08 version.
52
+ - CI: cibuildwheel is updated.
53
+
54
+ ### Performance
55
+ - AVX2 scanning for the authority of a URL.
56
+ - PSL suffix matching tracks the maximum rule depth, and the truncation scan in `suffix_of` and the TLD suffix are bounded
57
+ by the maximum length (an O(1) check instead of an O(n) scan).
58
+ - A fast path with interned keys when a `Hostname` is extracted to a Python dict.
59
+
60
+ ## [2.0.0] - 2026-09-11
61
+
62
+ ### Added
63
+ - **Public Suffix List support.** A `psl` class (a singleton that tracks the version of its data) matches suffixes; the
64
+ list is embedded into the library when CMake configures, and a configure step refreshes the tracked
65
+ `public_suffix_list.dat` in place when it can download a newer one.
66
+ - **`host`** parsing and classification, with constructor overloads and `string&&` overloads of `host::from_url` and
67
+ `url::extract_host`. Cross-platform IP address parsing replaces the platform-specific code.
68
+ - **Version macros** `URLPARSER_VERSION_*` and a version class (the prefix was renamed from `LIBURLPARSER_`); CMake reads the version from the
69
+ header.
70
+ - SIMD scanning in `find_first_of_3` (AVX2, SSE2, NEON).
71
+ - Python: a static `Url.extract_dict`, built from reusable `to_dict` helpers.
72
+ - Tooling: coverage reports for C++ and Python, leak checks with pytest-memray, benchmark and profiling targets, standalone
73
+ benchmarks (also against ada), Sphinx documentation for the Python API, a CLI reference, and architecture notes.
74
+
75
+ ### Changed
76
+ - **liburlparser is a static library**, built with position-independent code, and the default build type is Release.
77
+ - nanobind ABI handling for Python 3.12 and later.
78
+ - The googletest and doxygen-awesome-css submodules are removed, and the `online` extra is gone (the PSL update uses `urllib`).
79
+ - Tests and docs are built only when liburlparser is the top-level project, and a vendored copy does not build its Python
80
+ bindings.
81
+ - The implementation of the suffix table is hidden behind a forward declaration.
82
+
83
+ ### Fixed
84
+ - Windows compatibility (pull request #4, by CKCat).
85
+ - Regression tests for earlier URL parsing bugs.
86
+
87
+ ### Performance
88
+ - Extra capacity for URL fields, a faster `host` constructor, and the suffix position is computed by arithmetic.
89
+
90
+ ## [1.6.1] - 2025-10-24
91
+
92
+ ### Changed
93
+ - The CLI logic is refactored and covered by tests, and `flatten_dict` moved to the utils module.
94
+ - The release workflow and the wheel builds are improved (`test_cli_subprocess` is excluded in CI).
95
+
96
+ ## [1.6.0] - 2025-05-04
97
+
98
+ ### Added
99
+ - `--parts` option of the command line, and the top-level domain (TLD) of a host.
100
+ - The Public Suffix List file.
101
+ - Doxygen documentation (main page with logo and architecture diagram, doxygen-awesome theme) and the Python documentation,
102
+ published to GitHub Pages.
103
+
104
+ ## [1.5.0] - 2024-10-18
105
+
106
+ ### Changed
107
+ - The project architecture changed, and the CI runs all tests (C++ and Python).
108
+ - Build requirements are managed with pip-tools; ruff fixes.
109
+
110
+ ## [1.4.6] - 2024-02-11
111
+
112
+ ### Changed
113
+ - macOS is built in CI, the build system changed, and the README got badges.
114
+
115
+ ## [1.4.5] - 2023-11-28
116
+
117
+ ### Changed
118
+ - The Doxygen project information is read from `pyproject.toml`, and the release workflow uploads the release assets.
119
+
120
+ ## [1.4.4] - 2023-11-23
121
+
122
+ ### Changed
123
+ - The C++ tests moved to googletest and were rewritten as parametrized tests, like the Python ones; C++ and Python
124
+ tests are separate. The wheel files are created.
125
+
126
+ ## [1.4.3] - 2023-11-19
127
+
128
+ ### Fixed
129
+ - A file lock lets the tests run in parallel.
130
+
131
+ ## [1.4.2] - 2023-11-13
132
+
133
+ ### Changed
134
+ - `shared_ptr` replaces `unique_ptr`, since every method is const.
135
+
136
+ ### Fixed
137
+ - The `fulldomain` problem, and the host name was removed again.
138
+
139
+ ## [1.4.1] - 2023-11-11
140
+
141
+ ### Added
142
+ - C++ tests with gtest and gmock.
143
+ - A fast `hostName` that does not parse the host string (with a known problem with `ignore_www`).
144
+
145
+ ### Changed
146
+ - The PSL is held as data instead of a pointer (fixes the pointer-to-data conversion), and `requests` became an optional
147
+ dependency (the `online` extra).
148
+
149
+ ## [1.4.0] - 2023-11-08
150
+
151
+ ### Changed
152
+ - `urlparser.cpp` is split into a host part and a url part, a url holds its host through a pointer, and the lazy
153
+ calculation uses a smart pointer.
154
+
155
+ ### Fixed
156
+ - Problems with the operators; the move constructor and assignment were removed.
157
+
158
+ ## [1.3.0] - 2023-11-05
159
+
160
+ ### Fixed
161
+ - `fulldomain` in the substring step; accessibility of the class; test and linter issues. An automatic correction was
162
+ tried and removed.
163
+
164
+ ## [1.2.1] - 2023-10-10
165
+
166
+ ### Fixed
167
+ - The `fulldomain` issue.
168
+
169
+ ## [1.2.0] - 2023-10-09
170
+
171
+ ### Changed
172
+ - The `fulldomain` attribute was updated.
173
+
174
+ ## [1.1.0] - 2023-07-23
175
+
176
+ ### Added
177
+ - The `ignore_www` option for subdomains.
178
+
179
+ ## [1.0.2] - 2023-07-22
180
+
181
+ ### Added
182
+ - A Ruff lint check.
183
+
184
+ ## [1.0.1] - 2023-07-21
185
+
186
+ ### Fixed
187
+ - `pyproject.toml` and the wheels workflow.
188
+
189
+ ## [1.0.0] - 2023-07-21
190
+
191
+ First tagged release. The history before it is mostly the setup of the wheel builds with cibuildwheel (PyPy excluded).
192
+
193
+ [2.2.0]: https://github.com/mohammadraziei/liburlparser/compare/v2.1.0...v2.2.0
194
+ [2.1.0]: https://github.com/mohammadraziei/liburlparser/compare/v2.0.0...v2.1.0
195
+ [2.0.0]: https://github.com/mohammadraziei/liburlparser/compare/v1.6.1...v2.0.0
196
+ [1.6.1]: https://github.com/mohammadraziei/liburlparser/compare/v1.6.0...v1.6.1
197
+ [1.6.0]: https://github.com/mohammadraziei/liburlparser/compare/v1.5.0...v1.6.0
198
+ [1.5.0]: https://github.com/mohammadraziei/liburlparser/compare/v1.4.6...v1.5.0
199
+ [1.4.6]: https://github.com/mohammadraziei/liburlparser/compare/v1.4.5...v1.4.6
200
+ [1.4.5]: https://github.com/mohammadraziei/liburlparser/compare/v1.4.4...v1.4.5
201
+ [1.4.4]: https://github.com/mohammadraziei/liburlparser/compare/v1.4.3...v1.4.4
202
+ [1.4.3]: https://github.com/mohammadraziei/liburlparser/compare/v1.4.2...v1.4.3
203
+ [1.4.2]: https://github.com/mohammadraziei/liburlparser/compare/v1.4.1...v1.4.2
204
+ [1.4.1]: https://github.com/mohammadraziei/liburlparser/compare/v1.4.0...v1.4.1
205
+ [1.4.0]: https://github.com/mohammadraziei/liburlparser/compare/v1.3.0...v1.4.0
206
+ [1.3.0]: https://github.com/mohammadraziei/liburlparser/compare/v1.2.1...v1.3.0
207
+ [1.2.1]: https://github.com/mohammadraziei/liburlparser/compare/v1.2.0...v1.2.1
208
+ [1.2.0]: https://github.com/mohammadraziei/liburlparser/compare/v1.1.0...v1.2.0
209
+ [1.1.0]: https://github.com/mohammadraziei/liburlparser/compare/v1.0.2...v1.1.0
210
+ [1.0.2]: https://github.com/mohammadraziei/liburlparser/compare/v1.0.1...v1.0.2
211
+ [1.0.1]: https://github.com/mohammadraziei/liburlparser/compare/v1.0.0...v1.0.1
212
+ [1.0.0]: https://github.com/mohammadraziei/liburlparser/releases/tag/v1.0.0
@@ -38,9 +38,20 @@ if (CYGWIN OR UNIX)
38
38
  endif()
39
39
 
40
40
 
41
+ # URLPARSER_SKBUILD is true only when liburlparser itself is the scikit-build-core
42
+ # project being built (the wheel build). SKBUILD alone is not enough: it is also
43
+ # defined when another scikit-build-core project (e.g. httpp) pulls this one in with
44
+ # add_subdirectory() or FetchContent, and then it must behave as a plain C++ library:
45
+ # no nanobind module, no early RETURN() before the liburlparser::urlparser target and the tests.
46
+ if(DEFINED SKBUILD AND CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
47
+ set(URLPARSER_SKBUILD ON)
48
+ else()
49
+ set(URLPARSER_SKBUILD OFF)
50
+ endif()
51
+
41
52
  find_package(Python3 REQUIRED COMPONENTS Interpreter)
42
53
 
43
- if(DEFINED SKBUILD)
54
+ if(URLPARSER_SKBUILD)
44
55
  set(PYTHON_PROJECT_NAME "${SKBUILD_PROJECT_NAME}")
45
56
  elseif(BUILD_PYTHON)
46
57
  set(PYTHON_PROJECT_NAME "${CMAKE_BINARY_DIR}")
@@ -102,7 +113,7 @@ embed_file_as_string(
102
113
  # Install layout: the wheel carries include/, lib/ and cmake/ inside the
103
114
  # `liburlparser` package (nanobind/pybind11 pattern, see get_cmake_dir() in
104
115
  # the Python package); a plain `cmake --install` uses the usual prefix layout.
105
- if(DEFINED SKBUILD)
116
+ if(URLPARSER_SKBUILD)
106
117
  set(_urlparser_lib_dest liburlparser/lib)
107
118
  set(_urlparser_inc_dest liburlparser/include)
108
119
  set(_urlparser_cmake_dest liburlparser/cmake)
@@ -113,16 +124,16 @@ else()
113
124
  endif()
114
125
 
115
126
  add_library(urlparser STATIC ${SOURCES})
116
- # The public target is `urlparser::urlparser` - the same name whether the
127
+ # The public target is `liburlparser::urlparser` - the same name whether the
117
128
  # library comes from FetchContent/add_subdirectory (this alias) or from an
118
129
  # installed package (find_package(liburlparser), exported below).
119
- add_library(urlparser::urlparser ALIAS urlparser)
130
+ add_library(liburlparser::urlparser ALIAS urlparser)
120
131
 
121
132
  set_target_properties(urlparser PROPERTIES
122
133
  POSITION_INDEPENDENT_CODE ON # linked into the Python extension
123
134
  CXX_VISIBILITY_PRESET hidden
124
135
  VISIBILITY_INLINES_HIDDEN ON
125
- EXPORT_NAME urlparser # installed as urlparser::urlparser (see install(EXPORT))
136
+ EXPORT_NAME urlparser # installed as liburlparser::urlparser (see install(EXPORT))
126
137
  OUTPUT_NAME urlparser # liburlparser.a / urlparser.lib
127
138
  )
128
139
  target_include_directories(urlparser
@@ -175,7 +186,7 @@ if(DEFINED PYTHON_PROJECT_NAME)
175
186
 
176
187
  target_link_libraries(${NB_MODULE} PRIVATE urlparser)
177
188
 
178
- if(DEFINED SKBUILD)
189
+ if(URLPARSER_SKBUILD)
179
190
  install(TARGETS ${NB_MODULE}
180
191
  CONFIGURATIONS Release
181
192
  LIBRARY DESTINATION
@@ -187,7 +198,7 @@ if(DEFINED PYTHON_PROJECT_NAME)
187
198
  endif()
188
199
  endif()
189
200
 
190
- # --- install: find_package(liburlparser CONFIG) -> urlparser::urlparser ---
201
+ # --- install: find_package(liburlparser CONFIG) -> liburlparser::urlparser ---
191
202
  include(CMakePackageConfigHelpers)
192
203
  install(TARGETS urlparser EXPORT liburlparserTargets
193
204
  ARCHIVE DESTINATION ${_urlparser_lib_dest}
@@ -195,7 +206,7 @@ install(TARGETS urlparser EXPORT liburlparserTargets
195
206
  install(DIRECTORY include/ DESTINATION ${_urlparser_inc_dest})
196
207
  install(EXPORT liburlparserTargets
197
208
  FILE liburlparserTargets.cmake
198
- NAMESPACE urlparser::
209
+ NAMESPACE liburlparser::
199
210
  DESTINATION ${_urlparser_cmake_dest})
200
211
 
201
212
  # urlparser_LIB_PATH / urlparser_INCLUDE_PATH for consumers that want plain
@@ -228,12 +239,15 @@ install(FILES
228
239
  ${PROJECT_BINARY_DIR}/liburlparserConfigVersion.cmake
229
240
  DESTINATION ${_urlparser_cmake_dest})
230
241
 
231
- if(DEFINED SKBUILD)
242
+ if(URLPARSER_SKBUILD)
232
243
  RETURN()
233
244
  endif()
234
245
 
235
- add_executable(example examples/main.cpp)
236
- target_link_libraries(example PRIVATE urlparser::urlparser)
246
+ # The example is only for the top-level build; as a dependency it would just be compiled for nothing.
247
+ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
248
+ add_executable(example examples/main.cpp)
249
+ target_link_libraries(example PRIVATE liburlparser::urlparser)
250
+ endif()
237
251
 
238
252
  enable_testing()
239
253
  find_package(Threads REQUIRED)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: liburlparser
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Fastest Url parser in the world
5
5
  Author-Email: Mohammad Raziei <mohammadraziei1375@gmail.com>
6
6
  Classifier: Development Status :: 4 - Beta
@@ -243,7 +243,7 @@ you can see all methods in python we can use in c++ very easily
243
243
  ### C++
244
244
 
245
245
  Requires a C++17 compiler and CMake >= 3.19. The library is a static library plus one header (`urlparser.h`),
246
- and its CMake target is **`urlparser::urlparser`** - the same name no matter how you get it:
246
+ and its CMake target is **`liburlparser::urlparser`** - the same name no matter how you get it:
247
247
 
248
248
  #### 1. FetchContent
249
249
 
@@ -256,7 +256,7 @@ FetchContent_Declare(
256
256
  )
257
257
  FetchContent_MakeAvailable(liburlparser)
258
258
 
259
- target_link_libraries(my_app PRIVATE urlparser::urlparser)
259
+ target_link_libraries(my_app PRIVATE liburlparser::urlparser)
260
260
  ```
261
261
 
262
262
  #### 2. From the pip package
@@ -274,7 +274,7 @@ execute_process(
274
274
  COMMAND_ERROR_IS_FATAL ANY)
275
275
 
276
276
  find_package(liburlparser CONFIG REQUIRED)
277
- target_link_libraries(my_app PRIVATE urlparser::urlparser)
277
+ target_link_libraries(my_app PRIVATE liburlparser::urlparser)
278
278
  ```
279
279
 
280
280
  For build systems that prefer plain paths over the target, `find_package` also sets:
@@ -321,7 +321,7 @@ Then, in your project (add `-DCMAKE_PREFIX_PATH=<prefix>` if you used a custom p
321
321
 
322
322
  ```cmake
323
323
  find_package(liburlparser CONFIG REQUIRED)
324
- target_link_libraries(my_app PRIVATE urlparser::urlparser)
324
+ target_link_libraries(my_app PRIVATE liburlparser::urlparser)
325
325
  ```
326
326
 
327
327
  ### Python and Command Line:
@@ -219,7 +219,7 @@ you can see all methods in python we can use in c++ very easily
219
219
  ### C++
220
220
 
221
221
  Requires a C++17 compiler and CMake >= 3.19. The library is a static library plus one header (`urlparser.h`),
222
- and its CMake target is **`urlparser::urlparser`** - the same name no matter how you get it:
222
+ and its CMake target is **`liburlparser::urlparser`** - the same name no matter how you get it:
223
223
 
224
224
  #### 1. FetchContent
225
225
 
@@ -232,7 +232,7 @@ FetchContent_Declare(
232
232
  )
233
233
  FetchContent_MakeAvailable(liburlparser)
234
234
 
235
- target_link_libraries(my_app PRIVATE urlparser::urlparser)
235
+ target_link_libraries(my_app PRIVATE liburlparser::urlparser)
236
236
  ```
237
237
 
238
238
  #### 2. From the pip package
@@ -250,7 +250,7 @@ execute_process(
250
250
  COMMAND_ERROR_IS_FATAL ANY)
251
251
 
252
252
  find_package(liburlparser CONFIG REQUIRED)
253
- target_link_libraries(my_app PRIVATE urlparser::urlparser)
253
+ target_link_libraries(my_app PRIVATE liburlparser::urlparser)
254
254
  ```
255
255
 
256
256
  For build systems that prefer plain paths over the target, `find_package` also sets:
@@ -297,7 +297,7 @@ Then, in your project (add `-DCMAKE_PREFIX_PATH=<prefix>` if you used a custom p
297
297
 
298
298
  ```cmake
299
299
  find_package(liburlparser CONFIG REQUIRED)
300
- target_link_libraries(my_app PRIVATE urlparser::urlparser)
300
+ target_link_libraries(my_app PRIVATE liburlparser::urlparser)
301
301
  ```
302
302
 
303
303
  ### Python and Command Line:
@@ -25,7 +25,7 @@ FetchContent_Declare(
25
25
  FetchContent_MakeAvailable(liburlparser ada)
26
26
 
27
27
  add_executable(bench_cpp bench.cpp)
28
- target_link_libraries(bench_cpp PRIVATE urlparser::urlparser ada::ada)
28
+ target_link_libraries(bench_cpp PRIVATE liburlparser::urlparser ada::ada)
29
29
  target_compile_definitions(bench_cpp PRIVATE
30
30
  URLPARSER_BENCH_DOMAINS_FILE="${URLPARSER_BENCH_DOMAINS_FILE}"
31
31
  URLPARSER_BENCH_URLS_FILE="${URLPARSER_BENCH_URLS_FILE}"
@@ -3,9 +3,9 @@
3
3
  # Usage (CMake >= 3.15):
4
4
  #
5
5
  # find_package(liburlparser CONFIG REQUIRED)
6
- # target_link_libraries(app PRIVATE urlparser::urlparser)
6
+ # target_link_libraries(app PRIVATE liburlparser::urlparser)
7
7
  #
8
- # `urlparser::urlparser` is the same target you get from
8
+ # `liburlparser::urlparser` is the same target you get from
9
9
  # FetchContent/add_subdirectory. It carries everything a consumer needs: the
10
10
  # compiled static library and the include directory for <urlparser.h>. All
11
11
  # paths are resolved relative to this file, so the package works wherever it
@@ -188,10 +188,10 @@ FetchContent_Declare(
188
188
  )
189
189
  FetchContent_MakeAvailable(liburlparser)
190
190
 
191
- target_link_libraries(my_app PRIVATE urlparser::urlparser)</code></pre>
191
+ target_link_libraries(my_app PRIVATE liburlparser::urlparser)</code></pre>
192
192
  </div>
193
193
  <div class="install-note">
194
- Requires CMake 3.19+ and a C++17-compatible compiler. Link against <code>urlparser::urlparser</code> and include <code>urlparser.h</code>.
194
+ Requires CMake 3.19+ and a C++17-compatible compiler. Link against <code>liburlparser::urlparser</code> and include <code>urlparser.h</code>.
195
195
  </div>
196
196
  </div>
197
197
 
@@ -19,7 +19,7 @@ execute_process(
19
19
  find_package(liburlparser CONFIG REQUIRED)
20
20
 
21
21
  add_executable(app main.cpp)
22
- target_link_libraries(app PRIVATE urlparser::urlparser)
22
+ target_link_libraries(app PRIVATE liburlparser::urlparser)
23
23
 
24
24
  # Plain paths are available too, for build systems that don't use the target:
25
25
  message(STATUS "urlparser_LIB_PATH = ${urlparser_LIB_PATH}")
@@ -48,7 +48,7 @@
48
48
  // - pyproject.toml's [tool.scikit-build.metadata.version] regex provider
49
49
  // - version.py (bump/tag helper)
50
50
  #define URLPARSER_VERSION_MAJOR 2
51
- #define URLPARSER_VERSION_MINOR 1
51
+ #define URLPARSER_VERSION_MINOR 2
52
52
  #define URLPARSER_VERSION_PATCH 0
53
53
 
54
54
  #define URLPARSER_VERSION_ENCODE(maj,min,pat) (((maj)*10000)+((min)*100)+(pat))