blob: ce90240082b4dd2659631dcbc20e9cc61de449aa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
MY_PV_YEAR="$(ver_cut 1)"
MY_PV="$(ver_cut 2).$(ver_cut 3).$(ver_cut 4).$(ver_cut 5)"
# The 2026 deb dropped the com.zwsoft prefix and the files/ sub-directory,
# so PKG_NAME is just zwcadYYYY and the install root is /opt/apps/PKG_NAME.
PKG_NAME="${PN}${MY_PV_YEAR}"
inherit desktop unpacker xdg
DESCRIPTION="CAD software for 2D drawing, reviewing and printing work"
HOMEPAGE="https://www.zwsoft.cn/product/zwcad/linux"
URI_ANACONDA="https://anaconda.org/anaconda"
SRC_URI="
${PKG_NAME}_${MY_PV}_amd64.deb
${URI_ANACONDA}/python/3.8.20/download/linux-64/python-3.8.20-he870216_0.tar.bz2 -> ${PN}-python-3.8.20.tar.bz2
"
S=${WORKDIR}
LICENSE="all-rights-reserved"
SLOT="0"
KEYWORDS="-* ~amd64"
RESTRICT="strip mirror bindist fetch"
# ZWCAD ships its own Qt and dotnet runtimes inside /opt/apps/${PKG_NAME}/
# (RPATH below points there), so no system dev-qt/* deps are required.
RDEPEND="
media-libs/fontconfig
media-libs/libglvnd
media-libs/tiff-compat:4
sys-apps/util-linux
virtual/libcrypt:=
virtual/zlib
"
DEPEND="${RDEPEND}"
BDEPEND="dev-util/patchelf"
QA_PREBUILT="*"
src_unpack() {
unpack_deb "${DISTDIR}/${PKG_NAME}_${MY_PV}_amd64.deb"
tar -xf "${DISTDIR}/${PN}-python-3.8.20.tar.bz2" \
-C "${S}/opt/apps/${PKG_NAME}/ZwPyRuntime/python3.8/" || die
}
src_install() {
# Drop bundled older Python runtimes that we are not using
local v
for v in 3.4 3.5 3.6; do
rm -rf "${S}/opt/apps/${PKG_NAME}/ZwPyRuntime/python${v}" || die
rm -f "${S}/opt/apps/${PKG_NAME}/libZwPythonLoad${v#3.}.so" || die
done
rm -rf "${S}/opt/apps/${PKG_NAME}/ZwPyRuntime/python3.8/compiler_compat" || die
# Set RPATH so the bundled libs in /opt/apps/${PKG_NAME}/ are found
pushd "${S}/opt/apps/${PKG_NAME}" || die
local x RPATH_ROOT="/opt/apps/${PKG_NAME}"
local RPATH_S="${RPATH_ROOT}/:"
RPATH_S+="${RPATH_ROOT}/lib/:"
RPATH_S+="${RPATH_ROOT}/lib/stdcpp/:"
RPATH_S+="${RPATH_ROOT}/lib/GL/:"
RPATH_S+="${RPATH_ROOT}/lib/freetype/:"
RPATH_S+="${RPATH_ROOT}/plugins/:"
RPATH_S+="${RPATH_ROOT}/zh-CN/:"
RPATH_S+="${RPATH_ROOT}/ZwPyRuntime/python3.7/lib"
for x in $(find); do
# Use \x7fELF header to separate ELF executables and libraries
[[ -f "${x}" && "${x: -2}" != ".o" && $(od -t x1 -N 4 "${x}") == *"7f 45 4c 46"* ]] || continue
patchelf --set-rpath "${RPATH_S}" "${x}" || \
die "patchelf failed on ${x}"
done
popd || die
# Fix .desktop file: drop non-standard Application category and the
# upstream Version=26.1.3.4 (this field is the desktop-file spec
# version, not the application version).
sed -E -i 's/^Categories=.*$/Categories=Graphics;VectorGraphics;Engineering;Construction;2DGraphics;/' \
"${S}/usr/share/applications/${PKG_NAME}.desktop" || die
sed -E -i 's/^Version=.*$/Version=1.0/' \
"${S}/usr/share/applications/${PKG_NAME}.desktop" || die
domenu "${S}/usr/share/applications/${PKG_NAME}.desktop"
# Let the user's running input method override the hard-coded
# QT_IM_MODULE=fcitx that ZWCADRUN.sh exports otherwise.
sed -E -i 's/export QT_IM_MODULE=fcitx//' \
"${S}/opt/apps/${PKG_NAME}/ZWCADRUN.sh" || die
# Install zwcad wrapper
cat >> "${S}/opt/apps/${PKG_NAME}/zwcad" <<- EOF || die
#!/bin/sh
if [[ -z "\${QT_IM_MODULE}" ]]
then
if [[ -n "\$(pidof fcitx5)" ]]
then
export XMODIFIERS="@im=fcitx"
export QT_IM_MODULE=fcitx
elif [[ -n "\$(pidof ibus-daemon)" ]]
then
export XMODIFIERS="@im=ibus"
export QT_IM_MODULE=ibus
elif [[ -n "\$(pidof fcitx)" ]]
then
export XMODIFIERS="@im=fcitx"
export QT_IM_MODULE=fcitx
fi
fi
sh /opt/apps/${PKG_NAME}/ZWCADRUN.sh \$*
EOF
mkdir -p "${S}/usr/bin/" || die
ln -s "/opt/apps/${PKG_NAME}/zwcad" "${S}/usr/bin/zwcad" || die
# Install package and fix permissions
insinto /opt/apps/
doins -r "opt/apps/${PKG_NAME}"
insinto /usr
doins -r usr/*
fperms 0755 "/opt/apps/${PKG_NAME}/zwcad"
pushd "${S}" || die
for x in $(find "opt/apps/${PKG_NAME}") ; do
# Fix shell script permissions
[[ "${x: -3}" == ".sh" ]] && fperms 0755 "/${x}"
# Use \x7fELF header to separate ELF executables and libraries
[[ -f ${x} && $(od -t x1 -N 4 "${x}") == *"7f 45 4c 46"* ]] && fperms 0755 "/${x}"
done
popd || die
}
pkg_nofetch() {
einfo "Please download the installation file ${SRC_URI}"
einfo "and place the file in your DISTDIR directory."
einfo "Note that to actually run and use ${P} you need a valid license."
}
|