summaryrefslogtreecommitdiff
blob: c95b850e796611cdadd809d4e1a4691b3ea1300f (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
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

PYTHON_COMPAT=( python3_{9..11} )
inherit autotools bash-completion-r1 elisp-common python-single-r1

DESCRIPTION="Program matching and transformation engine"
HOMEPAGE="https://coccinelle.gitlabpages.inria.fr/website/ https://gitlab.inria.fr/coccinelle/coccinelle"
SRC_URI="https://gitlab.inria.fr/coccinelle/coccinelle/-/archive/${PV}/${P}.tar.bz2"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="doc emacs +ocamlopt pcre python test"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
# Test failures need investigation
RESTRICT="strip !test? ( test ) test"

RDEPEND="
	>=dev-lang/ocaml-3.12:=[ocamlopt?]
	dev-ml/sexplib:=[ocamlopt(+)?]
	dev-ml/menhir:=[ocamlopt?]
	dev-ml/camlp4:=[ocamlopt?]
	dev-ml/parmap:=[ocamlopt?]
	dev-ml/findlib:=[ocamlopt?]
	dev-ml/stdcompat:=
	emacs? ( >=app-editors/emacs-23.1:* )
	pcre? (
		dev-libs/libpcre
		dev-ml/pcre-ocaml:=[ocamlopt?]
	)
	python? ( ${PYTHON_DEPS} )
"
DEPEND="${RDEPEND}"
# dev-texlive/texlive-fontsextra contains 'ifsym.sty'
BDEPEND="
	virtual/pkgconfig
	doc? (
		dev-texlive/texlive-latexextra
		dev-texlive/texlive-fontsextra
		virtual/latex-base
		dev-tex/hevea
	)
"

DOCS=( authors.txt bugs.txt changes.txt credits.txt readme.txt )
PATCHES=(
	"${FILESDIR}"/${P}-bash-completion.patch
	"${FILESDIR}"/${P}-find-xxdate.patch
)
SITEFILE=50coccinelle-gentoo.el

pkg_setup() {
	use python && python-single-r1_pkg_setup
}

src_prepare() {
	default

	eautoreconf

	if use python ; then
		# Fix python install location
		sed -e "s:\$(LIBDIR)/python:$(python_get_sitedir):" \
			-i Makefile || die
	fi
}

src_configure() {
	local myeconfargs=(
		--enable-ocaml
		--with-bash-completion="$(get_bashcompdir)"
		--with-python="${EPYTHON}"

		$(use_enable python)
		$(use_enable pcre)
		$(use_enable pcre pcre-syntax)
		$(use_enable ocamlopt opt)
	)

	CONFIG_SHELL="${BROOT}"/bin/bash econf "${myeconfargs[@]}"
}

src_compile() {
	export TARGET_SPATCH=$(usev !ocamlopt 'byte-only')

	emake VERBOSE=yes -j1 $(usex ocamlopt 'all.opt' 'all-dev')

	if use doc ; then
		VARTEXFONTS="${T}"/fonts emake VERBOSE=yes docs
	fi

	if use emacs ; then
		elisp-compile editors/emacs/cocci.el || die
	fi
}

src_test() {
	# TODO: See Fedora's method?
	# https://src.fedoraproject.org/rpms/coccinelle/blob/rawhide/f/coccinelle.spec#_231
	emake VERBOSE=yes check $(usev python pycocci-check)
}

src_install() {
	emake DESTDIR="${D}" PREFIX="${EPREFIX}" VERBOSE=yes -j1 install

	if use python ; then
		python_optimize
	else
		rm -rf "${ED}/usr/$(get_libdir)/${PN}/python" || die
	fi

	if use emacs ; then
		elisp-install ${PN} editors/emacs/*
		elisp-site-file-install "${FILESDIR}"/${SITEFILE}
	fi

	einstalldocs
	use doc && dodoc docs/manual/*.pdf

	newdoc editors/vim/README README-vim
	rm editors/vim/README || die
	insinto /usr/share/vim/vimfiles
	doins -r editors/vim/*
}

pkg_postinst() {
	use emacs && elisp-site-regen
}

pkg_postrm() {
	use emacs && elisp-site-regen
}