Skip to content

Commit

Permalink
media-gfx/freecad: add 0.20
Browse files Browse the repository at this point in the history
Closes: https://bugs.gentoo.org/851852
Signed-off-by: Bernd Waibel <[email protected]>
Closes: gentoo#26283
Signed-off-by: Matthew Smith <[email protected]>
  • Loading branch information
waebbl authored and MatthewGentoo committed Jul 9, 2022
1 parent a5a8086 commit 319168a
Show file tree
Hide file tree
Showing 2 changed files with 327 additions and 0 deletions.
1 change: 1 addition & 0 deletions media-gfx/freecad/Manifest
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
DIST freecad-0.19.2-0005-Make-smesh-compile-with-vtk9.patch.xz 5368 BLAKE2B 69bafefd049effe3c31719bb2c23d32e8ba7ad58235c58ac8279ba6c036feaf1b97d5751cf2d68896e7489803103b2d0f92f76e61b3ccc97ef05a95b337ca5c2 SHA512 66585cc13fb3b0b026cf9dbd761c8ba1c1fe4d4f7db2e144ddd97706e02ccd78f4a43ac7cd93ddcae6e73933bf41d4cbd4d94bcdff8804b81378a6d946c7b070
DIST freecad-0.19.4.tar.gz 296990652 BLAKE2B 6b252198616f7731144d000307a7f186eb2b24e07b85e008d0aae0f60a732fef5598c06c5c66b70fa44114f05afbc7d81b15c71bbb147bc2e458ea90cc81ee45 SHA512 58e5e6bb4ed40ce7f3a0b653cdb0371208189b9ca266f1c29a8f9077c4e56861b3925f695718fba34781254220f8a8919a2e2a501d43573b2c733f8b21c12c1f
DIST freecad-0.20.tar.gz 75452957 BLAKE2B 600baf30541dabb7cf5df22a2d0fef0972d1b9cbf7c8425b9e2fadae54a0b0a1b75bb252fa18ecbf68fa5649ce459a88c71d69e000899e4b46d5c59fe956fcd1 SHA512 b1d91efa873f180bf635f6006d6c4b7a33b64b630955c639fe923bb340ce8104474688e05eea151d1ac1557388947ae81618cfc8a578f14706aa07b5cdc45cda
326 changes: 326 additions & 0 deletions media-gfx/freecad/freecad-0.20.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,326 @@
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

PYTHON_COMPAT=( python3_{8..10} )

inherit check-reqs cmake optfeature python-single-r1 xdg

DESCRIPTION="QT based Computer Aided Design application"
HOMEPAGE="https://www.freecadweb.org/ https://github.com/FreeCAD/FreeCAD"

MY_PN=FreeCAD

if [[ ${PV} = *9999 ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/${MY_PN}/${MY_PN}.git"
S="${WORKDIR}/freecad-${PV}"
else
MY_PV=$(ver_cut 1-2)
MY_PV=$(ver_rs 1 '_' ${MY_PV})
SRC_URI="https://github.com/${MY_PN}/${MY_PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
KEYWORDS="~amd64"
S="${WORKDIR}/FreeCAD-${PV}"
fi

# code is licensed LGPL-2
# examples are licensed CC-BY-SA (without note of specific version)
LICENSE="LGPL-2 CC-BY-SA-4.0"
SLOT="0"
# directory for USE=designer not yet packaged in tarball
# see https://forum.freecadweb.org/viewtopic.php?f=4&t=69450
IUSE="debug headless test"

FREECAD_EXPERIMENTAL_MODULES="cloud pcl plot ship"
FREECAD_STABLE_MODULES="addonmgr fem idf image inspection material
openscad part-design path points raytracing robot show surface
techdraw tux"

for module in ${FREECAD_STABLE_MODULES}; do
IUSE="${IUSE} +${module}"
done
for module in ${FREECAD_EXPERIMENTAL_MODULES}; do
IUSE="${IUSE} ${module}"
done
unset module

RESTRICT="!test? ( test )"

RDEPEND="
${PYTHON_DEPS}
dev-libs/OpenNI2[opengl(+)]
dev-libs/libspnav[X]
dev-libs/xerces-c[icu]
dev-qt/designer:5
dev-qt/qtconcurrent:5
dev-qt/qtcore:5
dev-qt/qtgui:5
dev-qt/qtnetwork:5
dev-qt/qtopengl:5
dev-qt/qtprintsupport:5
dev-qt/qtsvg:5
dev-qt/qtwebengine:5[widgets]
dev-qt/qtwidgets:5
dev-qt/qtx11extras:5
dev-qt/qtxml:5
>=media-libs/coin-4.0.0
media-libs/freetype
media-libs/qhull:=
sci-libs/flann[openmp]
sci-libs/hdf5:=[fortran,zlib]
>=sci-libs/med-4.0.0-r1[python,${PYTHON_SINGLE_USEDEP}]
sci-libs/opencascade:=[json,vtk]
sci-libs/orocos_kdl:=
sys-libs/zlib
virtual/glu
virtual/libusb:1
virtual/opengl
cloud? (
dev-libs/openssl:=
net-misc/curl
)
fem? ( sci-libs/vtk:=[boost(+),python,qt5,rendering,${PYTHON_SINGLE_USEDEP}] )
openscad? ( media-gfx/openscad )
pcl? ( >=sci-libs/pcl-1.8.1:=[opengl,openni2,qt5,vtk] )
$(python_gen_cond_dep '
dev-libs/boost:=[python,threads(+),${PYTHON_USEDEP}]
dev-python/matplotlib[${PYTHON_USEDEP}]
dev-python/numpy[${PYTHON_USEDEP}]
>=dev-python/pivy-0.6.5[${PYTHON_USEDEP}]
dev-python/pybind11[${PYTHON_USEDEP}]
dev-python/pyside2[gui,svg,webchannel,webengine,${PYTHON_USEDEP}]
dev-python/shiboken2[${PYTHON_USEDEP}]
addonmgr? ( dev-python/GitPython[${PYTHON_USEDEP}] )
fem? ( dev-python/ply[${PYTHON_USEDEP}] )
')
"
DEPEND="
${RDEPEND}
>=dev-cpp/eigen-3.3.1:3
"
BDEPEND="
app-text/dos2unix
dev-lang/swig
"

# To get required dependencies:
# 'grep REQUIRES_MODS cMake/FreeCAD_Helpers/CheckInterModuleDependencies.cmake'
# We set the following requirements by default:
# arch, draft, drawing, import, mesh, part, qt5, sketcher, spreadsheet, start, web.
#
# Additionally, we auto-enable mesh_part, flat_mesh and smesh
# Fem actually needs smesh, but as long as we don't have a smesh package, we enable
# smesh through the mesh USE flag. Note however, the fem<-smesh dependency isn't
# reflected by the REQUIRES_MODS macro, but at
# cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake:187.
#
# The increase in auto-enabled workbenches is due to their need in parts of the
# test suite when compiled with a minimal set of USE flags.
REQUIRED_USE="
${PYTHON_REQUIRED_USE}
inspection? ( points )
path? ( robot )
ship? ( image plot )
"

PATCHES=(
"${FILESDIR}"/${PN}-0.19.4-Gentoo-specific-don-t-check-vcs.patch
"${FILESDIR}"/${PN}-0.19.1-0001-Gentoo-specific-Remove-ccache-usage.patch
)

DOCS=( CODE_OF_CONDUCT.md ChangeLog.txt README.md )

CHECKREQS_DISK_BUILD="2G"

pkg_setup() {
check-reqs_pkg_setup
python-single-r1_pkg_setup
[[ -z ${CASROOT} ]] && die "\${CASROOT} not set, please run eselect opencascade"
}

src_prepare() {
# the upstream provided file doesn't find the coin doc tag file,
# but cmake ships a working one, so we use this.
rm "${S}/cMake/FindCoin3D.cmake" || die

# Fix desktop file
sed -e 's/Exec=FreeCAD/Exec=freecad/' -i src/XDGData/org.freecadweb.FreeCAD.desktop || die

find "${S}" -type f -exec dos2unix -q {} \; || die "failed to convert to unix line endings"

cmake_src_prepare
}

src_configure() {
local mycmakeargs=(
-DBUILD_ADDONMGR=$(usex addonmgr)
-DBUILD_ARCH=ON
-DBUILD_ASSEMBLY=OFF # deprecated
-DBUILD_CLOUD=$(usex cloud)
-DBUILD_COMPLETE=OFF # deprecated
-DBUILD_DRAFT=ON
# -DBUILD_DESIGNER_PLUGIN=$(usex designer)
-DBUILD_DRAWING=ON
-DBUILD_ENABLE_CXX_STD:STRING="C++17" # needed for >=boost-1.77.0
-DBUILD_FEM=$(usex fem)
-DBUILD_FEM_NETGEN=OFF
-DBUILD_FLAT_MESH=ON
-DBUILD_FORCE_DIRECTORY=ON # force building in a dedicated directory
-DBUILD_FREETYPE=ON # automagic dep
-DBUILD_GUI=$(usex !headless)
-DBUILD_IDF=$(usex idf)
-DBUILD_IMAGE=$(usex image)
-DBUILD_IMPORT=ON # import module for various file formats
-DBUILD_INSPECTION=$(usex inspection)
-DBUILD_JTREADER=OFF # code has been removed upstream, but option is still there
-DBUILD_MATERIAL=$(usex material)
-DBUILD_MESH=ON
-DBUILD_MESH_PART=ON
-DBUILD_OPENSCAD=$(usex openscad)
-DBUILD_PART=ON
-DBUILD_PART_DESIGN=$(usex part-design)
-DBUILD_PATH=$(usex path)
-DBUILD_PLOT=$(usex plot) # conflicts with possible external workbench
-DBUILD_POINTS=$(usex points)
-DBUILD_QT5=ON # OFF means to use Qt4
-DBUILD_RAYTRACING=$(usex raytracing)
-DBUILD_REVERSEENGINEERING=OFF # currently only an empty sandbox
-DBUILD_ROBOT=$(usex robot)
-DBUILD_SHIP=$(usex ship) # conflicts with possible external workbench
-DBUILD_SHOW=$(usex show)
-DBUILD_SKETCHER=ON # needed by draft workspace
-DBUILD_SMESH=ON
-DBUILD_SPREADSHEET=ON
-DBUILD_START=ON
-DBUILD_SURFACE=$(usex surface)
-DBUILD_TECHDRAW=$(usex techdraw)
-DBUILD_TEST=ON # always build test workbench for run-time testing
-DBUILD_TUX=$(usex tux)
-DBUILD_VR=OFF
-DBUILD_WEB=ON # needed by start workspace
-DBUILD_WITH_CONDA=OFF

-DCMAKE_INSTALL_DATADIR=/usr/share/${PN}/data
-DCMAKE_INSTALL_DOCDIR=/usr/share/doc/${PF}
-DCMAKE_INSTALL_INCLUDEDIR=/usr/include/${PN}
-DCMAKE_INSTALL_PREFIX=/usr/$(get_libdir)/${PN}

-DFREECAD_BUILD_DEBIAN=OFF

-DFREECAD_USE_EXTERNAL_KDL=ON
-DFREECAD_USE_EXTERNAL_SMESH=OFF # no package in Gentoo
-DFREECAD_USE_EXTERNAL_ZIPIOS=OFF # doesn't work yet, also no package in Gentoo tree
-DFREECAD_USE_FREETYPE=ON
-DFREECAD_USE_OCC_VARIANT:STRING="Official Version"
-DFREECAD_USE_PCL=$(usex pcl)
-DFREECAD_USE_PYBIND11=ON
-DFREECAD_USE_QT_FILEDIALOG=ON
-DFREECAD_USE_QTWEBMODULE:STRING="Qt WebEngine"

# install python modules to site-packages' dir. True only for the main package,
# sub-packages will still be installed inside /usr/lib64/freecad
-DINSTALL_TO_SITEPACKAGES=ON

# Use the version of shiboken2 that matches the selected python version
-DPYTHON_CONFIG_SUFFIX="-${EPYTHON}"
-DPython3_EXECUTABLE=${PYTHON}
)

if use debug; then
# BUILD_SANDBOX currently broken, see
# https://forum.freecadweb.org/viewtopic.php?f=4&t=36071&start=30#p504595
mycmakeargs+=(
-DBUILD_SANDBOX=OFF
-DBUILD_TEMPLATE=ON
)
else
mycmakeargs+=(
-DBUILD_SANDBOX=OFF
-DBUILD_TEMPLATE=OFF
)
fi

cmake_src_configure
}

# We use the FreeCADCmd binary instead of the FreeCAD binary here
# for two reasons:
# 1. It works out of the box with USE=headless as well, not needing a guard
# 2. We don't need virtualx.eclass and it's dependencies
# The exported environment variables are needed, so freecad does know
# where to save it's temporary files, and where to look and write it's
# configuration. Without those, there are sandbox violation, when it
# tries to create /var/lib/portage/home/.FreeCAD directory.
src_test() {
pushd "${BUILD_DIR}" > /dev/null || die
export FREECAD_USER_HOME="${HOME}"
export FREECAD_USER_DATA="${T}"
export FREECAD_USER_TEMP="${T}"
nonfatal ./bin/FreeCADCmd --run-test 0
popd > /dev/null || die
}

src_install() {
cmake_src_install

dobin src/Tools/freecad-thumbnailer

if ! use headless; then
dosym -r /usr/$(get_libdir)/${PN}/bin/FreeCAD /usr/bin/freecad
mv "${ED}"/usr/$(get_libdir)/${PN}/share/* "${ED}"/usr/share || die "failed to move shared resources"
fi
dosym -r /usr/$(get_libdir)/${PN}/bin/FreeCADCmd /usr/bin/freecadcmd

python_optimize "${ED}"/usr/share/${PN}/data/Mod/Start/StartPage "${ED}"/usr/$(get_libdir)/${PN}{/Ext,/Mod}/
# compile main package in python site-packages as well
python_optimize
}

pkg_postinst() {
xdg_pkg_postinst

if use plot; then
einfo "Note: You are enabling the 'plot' USE flag."
einfo "This conflicts with the plot workbench that can be loaded"
einfo "via the addon manager! You can only install one of those."
fi

if use ship; then
einfo "Note: You are enabling the 'ship' USE flag."
einfo "This conflicts with the ship workbench that can be loaded"
einfo "via the addon manager! You can only install one of those."
fi

einfo "You can load a lot of additional workbenches using the integrated"
einfo "AddonManager."

# ToDo: check opencv, pysolar (::science), elmerfem (::science)
# ifc++, ifcopenshell, netgen, z88 (no pkgs), calculix-ccx (::waebbl)
einfo "There are a lot of additional tools, for which FreeCAD has builtin"
einfo "support. Some of them are available in Gentoo. Take a look at"
einfo "https://wiki.freecadweb.org/Installing#External_software_supported_by_FreeCAD"
optfeature_header "Computational utilities"
optfeature "BLAS library" sci-libs/openblas
optfeature "Statistical computation with Python" dev-python/pandas
optfeature "Use scientific computation with Python" dev-python/scipy
optfeature "Use symbolic math with Python" dev-python/sympy
optfeature_header "Imaging, Plotting and Rendering utilities"
optfeature "Dependency graphs" media-gfx/graphviz
optfeature "PBR Rendering" media-gfx/povray
optfeature_header "Import / Export"
optfeature "Interact with git repositories" dev-python/GitPython
optfeature "Work with COLLADA documents" dev-python/pycollada
optfeature "YAML importer and emitter" dev-python/pyyaml
optfeature "Importing and exporting 2D AutoCAD DWG files" media-gfx/libredwg
optfeature "Importing and exporting geospatial data formats" sci-libs/gdal
optfeature "Working with projection data" sci-libs/proj
optfeature_header "Meshing and FEM"
optfeature "FEM mesh generator" sci-libs/gmsh
optfeature "Triangulating meshes" sci-libs/gts
optfeature "Visualization" sci-visualization/paraview
}

pkg_postrm() {
xdg_pkg_postrm
}

0 comments on commit 319168a

Please sign in to comment.