#
# This is for perl modules that use the new Build.PL build system
#
inherit cpan-base perlnative

EXTRA_CPAN_BUILD_FLAGS ?= ""

# Env var which tells perl if it should use host (no) or target (yes) settings
export PERLCONFIGTARGET = "${@is_target(d)}"
export PERL_ARCHLIB = "${STAGING_LIBDIR}${PERL_OWN_DIR}/perl5/${@get_perl_version(d)}/${@get_perl_arch(d)}"
export PERLHOSTLIB = "${STAGING_LIBDIR_NATIVE}/perl5/${@get_perl_version(d)}/"
export PERLHOSTARCHLIB = "${STAGING_LIBDIR_NATIVE}/perl5/${@get_perl_version(d)}/${@get_perl_hostarch(d)}/"
export LD = "${CCLD}"

cpan_build_do_configure () {
	if [ "${@is_target(d)}" = "yes" ]; then
		# build for target
		. ${STAGING_LIBDIR}/perl5/config.sh
	fi

	perl Build.PL --installdirs vendor --destdir ${D} \
			${EXTRA_CPAN_BUILD_FLAGS}

	# Build.PLs can exit with success without generating a
	# Build, e.g. in cases of missing configure time
	# dependencies. This is considered a best practice by
	# cpantesters.org. See:
	#  * http://wiki.cpantesters.org/wiki/CPANAuthorNotes
	#  * http://www.nntp.perl.org/group/perl.qa/2008/08/msg11236.html
	[ -e Build ] || bbfatal "No Build was generated by Build.PL"
}

cpan_build_do_compile () {
        perl Build --perl "${bindir}/perl" verbose=1
}

cpan_build_do_install () {
	perl Build install --destdir ${D}
}

EXPORT_FUNCTIONS do_configure do_compile do_install
