# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=5
inherit eutils multilib toolchain-funcs

DESCRIPTION="The Portable OpenGL FrameWork"
HOMEPAGE="http://www.glfw.org/"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"

LICENSE="ZLIB"
SLOT="0"
KEYWORDS="amd64 x86"
IUSE="examples static-libs"

DEPEND="x11-libs/libX11
	x11-libs/libXrandr
	virtual/glu
	virtual/opengl"
RDEPEND="${DEPEND}"

src_prepare() {
	sed -i \
		-e "s:\"docs/:\"/usr/share/doc/${PF}/pdf/:" \
		readme.html || die

	epatch "${FILESDIR}"/${P}-{dyn,pkgconfig}.patch

	# respect ldflags
	sed -i \
		-e "s/\$(LFLAGS)/\$(LDFLAGS) \$(LFLAGS)/" \
		{lib/x11,examples}/Makefile.x11.in || die

	# respect cflags in linking command
	# build system is messing up CFLAGS variable, so sed is the easy way to go
	sed -i \
		-e "/^libglfw.so/{n;s/\$(CC)/\$(CC) ${CFLAGS}/;}" \
		lib/x11/Makefile.x11.in || die

	if use !static-libs ; then
		sed -i \
			-e '/^all:/s/libglfw.a//' \
			lib/x11/Makefile.x11.in || die
	fi
}

src_configure() {
	sh ./compile.sh
}

src_compile() {
	emake -C lib/x11 AR=$(tc-getAR) CC=$(tc-getCC) PREFIX=/usr LIBDIR=$(get_libdir) -f Makefile.x11 all libglfw.pc
	use examples && emake -C examples CC=$(tc-getCC) -f Makefile.x11 all
}

src_install() {
	use static-libs && dolib.a lib/x11/libglfw.a
	dolib.so lib/x11/libglfw.so.2.7.7
	dosym libglfw.so.2.7.7 /usr/$(get_libdir)/libglfw.so

	insinto /usr/$(get_libdir)/pkgconfig
	doins lib/x11/libglfw.pc
	doheader -r include/GL
	dohtml -r readme.html
	insinto /usr/share/doc/${PF}/pdf
	doins docs/*.pdf
	dodoc docs/readme.txt

	if use examples; then
		local f
		local MY_EXAMPLES="boing gears listmodes mipmaps
			mtbench mthello particles pong3d splitview
			triangle wave"
		local MY_PICS="mipmaps.tga pong3d_field.tga pong3d_instr.tga
			pong3d_menu.tga pong3d_title.tga
			pong3d_winner1.tga pong3d_winner2.tga"

		docompress -x /usr/share/doc/${PF}/examples
		insinto /usr/share/doc/${PF}/examples

		doins examples/Makefile.x11
		for f in $MY_EXAMPLES; do
			doins examples/${f}.c
		done
		for f in $MY_PICS; do
			doins examples/${f}
		done

		insopts -m0755
		for f in $MY_EXAMPLES; do
			doins examples/${f}
		done
	fi
}
