Skip to content

Commit c546682

Browse files
committed
Initial version
1 parent 4939379 commit c546682

21 files changed

Lines changed: 821 additions & 182 deletions

.github/workflows/build.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: build
2+
3+
on: [push, pull_request]
4+
5+
jobs:
6+
debian:
7+
runs-on: ubuntu-latest
8+
strategy:
9+
fail-fast: false
10+
matrix:
11+
container:
12+
- debian:bullseye-slim
13+
- debian:bookworm-slim
14+
- debian:trixie-slim
15+
container: ${{ matrix.container }}
16+
steps:
17+
- name: Install build tools
18+
run: |
19+
apt update
20+
apt install -y build-essential gcc g++ make cmake git python3 python3-pip python3-venv
21+
22+
- name: Checkout
23+
uses: actions/checkout@v4
24+
25+
- name: Build and install
26+
run: |
27+
python3 -m venv .venv
28+
. .venv/bin/activate
29+
pip install . pytest
30+
env:
31+
CMAKE_BUILD_PARALLEL_LEVEL: "8"
32+
33+
- name: Run tests
34+
run: |
35+
. .venv/bin/activate
36+
pytest tests/ -v
37+
38+
native:
39+
runs-on: ${{ matrix.os }}
40+
strategy:
41+
fail-fast: false
42+
matrix:
43+
os: [ubuntu-latest, macos-latest, windows-latest]
44+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
45+
steps:
46+
- name: Checkout
47+
uses: actions/checkout@v4
48+
49+
- name: Set up Python ${{ matrix.python-version }}
50+
uses: actions/setup-python@v5
51+
with:
52+
python-version: ${{ matrix.python-version }}
53+
allow-prereleases: true
54+
55+
- name: Install build tools (Ubuntu)
56+
if: matrix.os == 'ubuntu-latest'
57+
run: |
58+
sudo apt update
59+
sudo apt install -y build-essential gcc g++ cmake
60+
61+
- name: Build and install
62+
run: |
63+
pip install . pytest
64+
env:
65+
CMAKE_BUILD_PARALLEL_LEVEL: "8"
66+
67+
- name: Run tests
68+
run: pytest tests/ -v

.gitignore

Lines changed: 14 additions & 180 deletions
Original file line numberDiff line numberDiff line change
@@ -1,207 +1,41 @@
11
# Byte-compiled / optimized / DLL files
22
__pycache__/
3-
*.py[codz]
3+
*.py[cod]
44
*$py.class
55

66
# C extensions
77
*.so
88

99
# Distribution / packaging
10-
.Python
1110
build/
12-
develop-eggs/
1311
dist/
14-
downloads/
1512
eggs/
16-
.eggs/
17-
lib/
18-
lib64/
19-
parts/
20-
sdist/
21-
var/
22-
wheels/
23-
share/python-wheels/
2413
*.egg-info/
25-
.installed.cfg
2614
*.egg
27-
MANIFEST
2815

29-
# PyInstaller
30-
# Usually these files are written by a python script from a template
31-
# before PyInstaller builds the exe, so as to inject date/other infos into it.
32-
*.manifest
33-
*.spec
34-
35-
# Installer logs
36-
pip-log.txt
37-
pip-delete-this-directory.txt
16+
# Virtual environments
17+
.venv/
18+
venv/
3819

3920
# Unit test / coverage reports
21+
.pytest_cache/
4022
htmlcov/
41-
.tox/
42-
.nox/
4323
.coverage
4424
.coverage.*
45-
.cache
46-
nosetests.xml
4725
coverage.xml
48-
*.cover
49-
*.py.cover
50-
.hypothesis/
51-
.pytest_cache/
52-
cover/
53-
54-
# Translations
55-
*.mo
56-
*.pot
57-
58-
# Django stuff:
59-
*.log
60-
local_settings.py
61-
db.sqlite3
62-
db.sqlite3-journal
63-
64-
# Flask stuff:
65-
instance/
66-
.webassets-cache
67-
68-
# Scrapy stuff:
69-
.scrapy
70-
71-
# Sphinx documentation
72-
docs/_build/
73-
74-
# PyBuilder
75-
.pybuilder/
76-
target/
77-
78-
# Jupyter Notebook
79-
.ipynb_checkpoints
80-
81-
# IPython
82-
profile_default/
83-
ipython_config.py
84-
85-
# pyenv
86-
# For a library or package, you might want to ignore these files since the code is
87-
# intended to run in multiple environments; otherwise, check them in:
88-
# .python-version
89-
90-
# pipenv
91-
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92-
# However, in case of collaboration, if having platform-specific dependencies or dependencies
93-
# having no cross-platform support, pipenv may install dependencies that don't work, or not
94-
# install all needed dependencies.
95-
#Pipfile.lock
96-
97-
# UV
98-
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99-
# This is especially recommended for binary packages to ensure reproducibility, and is more
100-
# commonly ignored for libraries.
101-
#uv.lock
102-
103-
# poetry
104-
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105-
# This is especially recommended for binary packages to ensure reproducibility, and is more
106-
# commonly ignored for libraries.
107-
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108-
#poetry.lock
109-
#poetry.toml
110-
111-
# pdm
112-
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
113-
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
114-
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
115-
#pdm.lock
116-
#pdm.toml
117-
.pdm-python
118-
.pdm-build/
11926

120-
# pixi
121-
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
122-
#pixi.lock
123-
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
124-
# in the .venv directory. It is recommended not to include this directory in version control.
125-
.pixi
126-
127-
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
128-
__pypackages__/
129-
130-
# Celery stuff
131-
celerybeat-schedule
132-
celerybeat.pid
133-
134-
# SageMath parsed files
135-
*.sage.py
136-
137-
# Environments
138-
.env
139-
.envrc
140-
.venv
141-
env/
142-
venv/
143-
ENV/
144-
env.bak/
145-
venv.bak/
146-
147-
# Spyder project settings
148-
.spyderproject
149-
.spyproject
150-
151-
# Rope project settings
152-
.ropeproject
153-
154-
# mkdocs documentation
155-
/site
27+
# IDEs
28+
.idea/
29+
.vscode/
15630

15731
# mypy
15832
.mypy_cache/
159-
.dmypy.json
160-
dmypy.json
16133

162-
# Pyre type checker
163-
.pyre/
164-
165-
# pytype static type analyzer
166-
.pytype/
167-
168-
# Cython debug symbols
169-
cython_debug/
170-
171-
# PyCharm
172-
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
173-
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
174-
# and can be added to the global gitignore or merged into this file. For a more nuclear
175-
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
176-
#.idea/
177-
178-
# Abstra
179-
# Abstra is an AI-powered process automation framework.
180-
# Ignore directories containing user credentials, local state, and settings.
181-
# Learn more at https://abstra.io/docs
182-
.abstra/
183-
184-
# Visual Studio Code
185-
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
186-
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
187-
# and can be added to the global gitignore or merged into this file. However, if you prefer,
188-
# you could uncomment the following to ignore the entire vscode folder
189-
# .vscode/
190-
191-
# Ruff stuff:
34+
# Ruff
19235
.ruff_cache/
19336

194-
# PyPI configuration file
195-
.pypirc
196-
197-
# Cursor
198-
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
199-
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
200-
# refer to https://docs.cursor.com/context/ignore-files
201-
.cursorignore
202-
.cursorindexingignore
203-
204-
# Marimo
205-
marimo/_static/
206-
marimo/_lsp/
207-
__marimo__/
37+
# CMake build artifacts
38+
CMakeCache.txt
39+
CMakeFiles/
40+
cmake_install.cmake
41+
_deps/

CMakeLists.txt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
cmake_minimum_required(VERSION 3.16)
2+
project(fpcap-python LANGUAGES CXX)
3+
4+
set(CMAKE_CXX_STANDARD 20)
5+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
6+
set(CMAKE_CXX_EXTENSIONS OFF)
7+
8+
# Required for linking static libraries into a shared Python extension module
9+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
10+
11+
include(FetchContent)
12+
13+
# --- Fetch pybind11 ---
14+
FetchContent_Declare(
15+
pybind11
16+
GIT_REPOSITORY https://github.com/pybind/pybind11.git
17+
GIT_TAG v3.0.1
18+
)
19+
FetchContent_MakeAvailable(pybind11)
20+
21+
# --- Fetch fpcap ---
22+
FetchContent_Declare(
23+
fpcap
24+
GIT_REPOSITORY https://github.com/fpcap/fpcap.git
25+
GIT_TAG v0.2.0
26+
)
27+
set(FPCAP_BUILD_TESTS OFF CACHE BOOL "" FORCE)
28+
set(FPCAP_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
29+
FetchContent_MakeAvailable(fpcap)
30+
31+
# --- Build the Python extension module ---
32+
pybind11_add_module(_fpcap src/bindings.cpp)
33+
target_link_libraries(_fpcap PRIVATE fpcap::fpcap)
34+
35+
install(TARGETS _fpcap LIBRARY DESTINATION .)

LICENSE

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
This is free and unencumbered software released into the public domain.
2+
3+
Anyone is free to copy, modify, publish, use, compile, sell, or
4+
distribute this software, either in source code form or as a compiled
5+
binary, for any purpose, commercial or non-commercial, and by any
6+
means.
7+
8+
In jurisdictions that recognize copyright laws, the author or authors
9+
of this software dedicate any and all copyright interest in the
10+
software to the public domain. We make this dedication for the benefit
11+
of the public at large and to the detriment of our heirs and
12+
successors. We intend this dedication to be an overt act of
13+
relinquishment in perpetuity of all present and future rights to this
14+
software under copyright law.
15+
16+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19+
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22+
OTHER DEALINGS IN THE SOFTWARE.
23+
24+
For more information, please refer to <https://unlicense.org>

0 commit comments

Comments
 (0)