mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-04-07 03:10:15 -04:00
Part-of: https://github.com/gentoo/guru/pull/447 Closes: https://github.com/gentoo/guru/pull/447 Signed-off-by: David Roman <stkw0@disroot.org>
114 lines
3.5 KiB
Bash
114 lines
3.5 KiB
Bash
# Copyright 1999-2025 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
EAPI=8
|
|
|
|
DISTUTILS_USE_PEP517=poetry
|
|
PYTHON_COMPAT=( python3_{12..14} )
|
|
inherit distutils-r1 pypi
|
|
|
|
DESCRIPTION="KiCad API Python Bindings for interacting with running KiCad sessions"
|
|
HOMEPAGE="https://gitlab.com/kicad/code/kicad-python https://pypi.org/project/kicad-python"
|
|
|
|
# Proto files version should match kicad release
|
|
KICAD_TAG="9.0.6"
|
|
KICAD_PROTO_BASE="https://gitlab.com/kicad/code/kicad/-/raw/${KICAD_TAG}/api/proto"
|
|
|
|
# List of proto files needed
|
|
PROTO_FILES=(
|
|
"board/board.proto"
|
|
"board/board_commands.proto"
|
|
"board/board_types.proto"
|
|
"common/commands/base_commands.proto"
|
|
"common/commands/editor_commands.proto"
|
|
"common/commands/project_commands.proto"
|
|
"common/envelope.proto"
|
|
"common/types/base_types.proto"
|
|
"common/types/enums.proto"
|
|
"common/types/project_settings.proto"
|
|
"schematic/schematic_commands.proto"
|
|
"schematic/schematic_types.proto"
|
|
)
|
|
|
|
SRC_URI="$(pypi_sdist_url)"
|
|
for _p in "${PROTO_FILES[@]}"; do
|
|
SRC_URI+=" ${KICAD_PROTO_BASE}/${_p} -> kicad-${KICAD_TAG}-${_p//\//-}"
|
|
done
|
|
unset _p
|
|
|
|
LICENSE="MIT"
|
|
SLOT=0
|
|
KEYWORDS="~amd64"
|
|
|
|
# Tests not included in PyPI sdist
|
|
RESTRICT="test"
|
|
|
|
# Regenerate protobuf files at build time to match system protobuf version
|
|
# Use := slot operator to trigger rebuild when protobuf is upgraded
|
|
RDEPEND="
|
|
>=dev-python/protobuf-5.29:=[${PYTHON_USEDEP}]
|
|
>=dev-python/pynng-0.8.0[${PYTHON_USEDEP}]
|
|
<dev-python/pynng-0.9.0[${PYTHON_USEDEP}]
|
|
$(python_gen_cond_dep '
|
|
>=dev-python/typing-extensions-4.13.2[${PYTHON_USEDEP}]
|
|
' python3_{10..12})
|
|
"
|
|
BDEPEND="
|
|
${RDEPEND}
|
|
dev-libs/protobuf[protoc(+)]
|
|
"
|
|
|
|
src_prepare() {
|
|
# Remove build script config from pyproject.toml
|
|
sed -i '/\[tool.poetry.build\]/,/^$/d' pyproject.toml || die
|
|
rm -f setup.py build.py || die
|
|
|
|
# Setup proto source directory
|
|
local proto_src="${WORKDIR}/proto"
|
|
mkdir -p "${proto_src}"/{board,common/commands,common/types,schematic} || die
|
|
|
|
# Copy downloaded proto files to proper structure
|
|
local _p _f
|
|
for _p in "${PROTO_FILES[@]}"; do
|
|
_f="kicad-${KICAD_TAG}-${_p//\//-}"
|
|
cp "${DISTDIR}/${_f}" "${proto_src}/${_p}" || die
|
|
done
|
|
|
|
einfo "Regenerating protobuf files with system protoc..."
|
|
|
|
# Remove only pre-generated _pb2.py and _pb2.pyi files, keep __init__.py
|
|
find "${S}"/kipy/proto -name '*_pb2.py' -delete || die
|
|
find "${S}"/kipy/proto -name '*_pb2.pyi' -delete || die
|
|
rm -rf "${S}"/build/lib/kipy/proto || die
|
|
|
|
# Compile all proto files (output to temp dir first)
|
|
local proto_out="${WORKDIR}/proto_out"
|
|
mkdir -p "${proto_out}" || die
|
|
|
|
protoc \
|
|
--proto_path="${proto_src}" \
|
|
--python_out="${proto_out}" \
|
|
--pyi_out="${proto_out}" \
|
|
"${proto_src}"/board/*.proto \
|
|
"${proto_src}"/common/*.proto \
|
|
"${proto_src}"/common/commands/*.proto \
|
|
"${proto_src}"/common/types/*.proto \
|
|
"${proto_src}"/schematic/*.proto \
|
|
|| die "protoc failed"
|
|
|
|
# Copy only _pb2.py and _pb2.pyi files to kipy/proto, preserving original __init__.py
|
|
find "${proto_out}" \( -name '*_pb2.py' -o -name '*_pb2.pyi' \) | while read -r f; do
|
|
local rel="${f#${proto_out}/}"
|
|
cp "${f}" "${S}/kipy/proto/${rel}" || die
|
|
done
|
|
|
|
# Fix imports: protoc generates absolute imports (e.g., "from common.types import ...")
|
|
# but kipy expects them relative to kipy.proto (e.g., "from kipy.proto.common.types import ...")
|
|
find "${S}/kipy/proto" \( -name '*_pb2.py' -o -name '*_pb2.pyi' \) -exec \
|
|
sed -i -E \
|
|
-e 's/^(from|import) (common|board|schematic)([ .])/\1 kipy.proto.\2\3/g' \
|
|
{} + || die "failed to fix protobuf imports"
|
|
|
|
distutils-r1_src_prepare
|
|
}
|