summaryrefslogtreecommitdiff
blob: 029a36faab2c38f4265adac4581c3ceb6be56a0f (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
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI="2"

inherit eutils toolchain-funcs

DESCRIPTION="Small yet efficient SAT solver with reference paper"
HOMEPAGE="http://minisat.se/Main.html"
SRC_URI="http://minisat.se/downloads/${P}.tar.gz
	doc? ( http://minisat.se/downloads/MiniSat.pdf )"

SLOT="0"
KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
LICENSE="MIT"

IUSE="debug doc extended-solver"

DEPEND="sys-libs/zlib"
RDEPEND="${DEPEND}"

S=${WORKDIR}/${PN}

pkg_setup() {
	if use debug; then
		myconf="d"
		myext="debug"
	else
		myconf="r"
		myext="release"
	fi

	if use extended-solver; then
		mydir="simp"
	else
		mydir="core"
	fi
	tc-export CXX

	if has_version "=sci-mathematics/minisat-2.1*" ; then
		elog ""
		elog "The minisat2 2.1 and 2.2 ABIs are not compatible and there"
		elog "is currently no slotting.  Please mask it yourself (eg, in"
		elog "packages.mask) if you still need the older version."
		elog ""
		epause 5
	fi
}

src_prepare() {
	sed -e "s/\$(CXX) \$^/\$(CXX) \$(LDFLAGS) \$^/" \
		-i -e "s|-O3|${CFLAGS}|" mtl/template.mk || die
}

src_compile() {
	export MROOT="${S}"
	emake -C ${mydir} "$myconf" || die
	LIB="${PN}" emake -C ${mydir} lib"$myconf" || die
}

src_install() {
	# somewhat brute-force, but so is the build setup...
	fix_headers

	insinto /usr/include/${PN}2/mtl
	doins mtl/*.h || die

	insinto /usr/include/${PN}2/core
	doins core/Solver*.h || die

	insinto /usr/include/${PN}2/simp
	doins simp/Simp*.h || die

	insinto /usr/include/${PN}2/utils
	doins utils/*.h || die

	newbin ${mydir}/${PN}_${myext} ${PN} || die
	newlib.a ${mydir}/lib${PN}_${myext}.a lib${PN}.a || die

	dodoc README doc/ReleaseNotes-2.2.0.txt || die
	if use doc; then
		dodoc "${DISTDIR}"/MiniSat.pdf || die
	fi
}

fix_headers() {
	# need to fix the circular internal includes a bit for standard usage
	elog "Fixing header files..."

	patch -p0 < "${FILESDIR}"/${P}-header_fix.patch \
		|| die "header patch failed..."
}