summaryrefslogtreecommitdiff
blob: 5abfadcc3ce5a979fe08d23172fa23ff33070976 (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
143
144
145
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# TODO:
# check the src files referenced in 51opencascade, i.e. resources and the like
# check where cmake gets it's '-s' linker flag to avoid pre-stripping (QA)

EAPI=7

inherit check-reqs cmake flag-o-matic java-pkg-opt-2

DESCRIPTION="Development platform for CAD/CAE, 3D surface/solid modeling and data exchange"
HOMEPAGE="https://www.opencascade.com"
MY_PV="$(ver_rs 1- '_')"
SRC_URI="https://git.dev.opencascade.org/gitweb/?p=occt.git;a=snapshot;h=refs/tags/V${MY_PV};sf=tgz -> ${P}.tar.gz"

LICENSE="|| ( Open-CASCADE-LGPL-2.1-Exception-1.0 LGPL-2.1 )"
SLOT="${PV}"
KEYWORDS="~amd64 ~x86"
# gl2ps
IUSE="debug doc examples ffmpeg freeimage gles2 inspector java optimize qt5 tbb +vtk"

REQUIRED_USE="
	inspector? ( qt5 )
	?? ( optimize tbb )
"

#	gl2ps? ( x11-libs/gl2ps )
RDEPEND="
	app-eselect/eselect-opencascade
	dev-cpp/eigen
	dev-lang/tcl:0=
	dev-lang/tk:0=
	dev-tcltk/itcl
	dev-tcltk/itk
	dev-tcltk/tix
	media-libs/freetype:2
	media-libs/ftgl
	virtual/glu
	virtual/opengl
	x11-libs/libXmu
	ffmpeg? ( media-video/ffmpeg )
	freeimage? ( media-libs/freeimage )
	java? ( virtual/jdk:1.8 )
	qt5? (
		dev-qt/qtcore:5
		dev-qt/qtgui:5
		dev-qt/qtquickcontrols2:5
		dev-qt/qtwidgets:5
		dev-qt/qtxml:5
	)
	tbb? ( dev-cpp/tbb )
	vtk? ( >=sci-libs/vtk-8.1.0[rendering] )
"
DEPEND="${RDEPEND}"
BDEPEND="
	doc? (
		app-doc/doxygen
		qt5? ( dev-qt/linguist-tools:5 )
	)
"

# There's no easy way to test. Testing needs a rather big environment
# properly set up.
RESTRICT="test"

CHECKREQS_MEMORY="256M"
CHECKREQS_DISK_BUILD="3584M"

CMAKE_BUILD_TYPE=Release

S="${WORKDIR}/occt-V${MY_PV}"

PATCHES=(
	"${FILESDIR}/${P}-find-qt.patch"
	"${FILESDIR}/${P}-fix-install.patch"
)

pkg_setup() {
	check-reqs_pkg_setup
	use java && java-pkg-opt-2_pkg_setup
}

src_prepare() {
	cmake_src_prepare
	use java && java-pkg-opt-2_src_prepare
}

src_configure() {
	local mycmakeargs=(
		-DBUILD_DOC_Overview=$(usex doc)
		-DBUILD_Inspector=$(usex inspector)
		-DBUILD_WITH_DEBUG=$(usex debug)
		-DCMAKE_CONFIGURATION_TYPES="Gentoo"
		-DCMAKE_INSTALL_PREFIX="/usr/$(get_libdir)/${P}/ros"
		-DINSTALL_DIR_DOC="/usr/share/doc/${PF}"
		-DINSTALL_DIR_CMAKE="/usr/$(get_libdir)/cmake"
#		-DINSTALL_DOC_Overview=$(usex doc)
		-DINSTALL_SAMPLES=$(usex examples)
		-DINSTALL_TEST_CASES=NO
		-DUSE_D3D=no
		-DUSE_FFMPEG=$(usex ffmpeg)
		-DUSE_FREEIMAGE=$(usex freeimage)
#		-DUSE_GL2PS=$(usex gl2ps)
		-DUSE_GLES2=$(usex gles2)
		-DUSE_TBB=$(usex tbb)
		-DUSE_VTK=$(usex vtk)
	)

	use examples && mycmakeargs+=( -DBUILD_SAMPLES_QT=$(usex qt5) )

	cmake_src_configure

	# prepare /etc/env.d file
	sed -e 's|VAR_CASROOT|'${EROOT%}'/usr/'$(get_libdir)'/'${P}'/ros|g' < "${FILESDIR}/${P}.env.in" >> "${T}/${PV}" || die
	sed -i -e 's|ros/lib|ros/'$(get_libdir)'|' "${T}/${PV}" || die

	# use TBB for memory allocation optimizations?
	use tbb && (sed -i -e 's|^#MMGT_OPT=0$|MMGT_OPT=2|' "${T}/${PV}" || die)

	if use optimize ; then
		# use internal optimized memory manager?
		sed -i -e 's|^#MMGT_OPT=0$|MMGT_OPT=1|' "${T}/${PV}" || die
		# don't clear memory ?
		sed -i -e 's|^#MMGT_CLEAR=1$|MMGT_CLEAR=0|' "${T}/${PV}" || die
	fi
}

src_install() {
	cmake_src_install

	# respect slotting
	insinto "/etc/env.d/${PN}"
	doins "${T}/${PV}"

	# remove examples
	use examples || (rm -rf "${ED}/usr/$(get_libdir)/${P}/ros/share/${PN}/samples" || die)
	use java || (rm -rf "${ED}/usr/$(get_libdir)/${P}/ros/share/${PN}/samples/java" || die)
	use qt5 || (rm -rf "${ED}/usr/$(get_libdir)/${P}/ros/share/${PN}/samples/qt" || die)
}

pkg_postinst() {
	eselect ${PN} set ${PV} || die "failed to switch to updated implementation"
	einfo "You can switch between available ${PN} implementations using eselect ${PN}"
}