diff options
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/cpan-base.bbclass | 55 | ||||
-rw-r--r-- | meta/classes/cpan.bbclass | 52 | ||||
-rw-r--r-- | meta/classes/cpan_build.bbclass | 70 |
3 files changed, 161 insertions, 16 deletions
diff --git a/meta/classes/cpan-base.bbclass b/meta/classes/cpan-base.bbclass new file mode 100644 index 000000000..a5fdb3389 --- /dev/null +++ b/meta/classes/cpan-base.bbclass @@ -0,0 +1,55 @@ +# +# cpan-base providers various perl related information needed for building +# cpan modules +# +FILES_${PN} += "${libdir}/perl5 ${datadir}/perl5" + +DEPENDS += "perl perl-native" +RDEPENDS += "perl" + +# Determine the staged version of perl from the perl configuration file +def get_perl_version(d): + import os, bb, re + cfg = bb.data.expand('${STAGING_DIR}/${HOST_SYS}/perl/config.sh', d) + try: + f = open(cfg, 'r') + except IOError: + return None + l = f.readlines(); + f.close(); + r = re.compile("version='(\d\.\d\.\d)'") + for s in l: + m = r.match(s) + if m: + return m.group(1) + return None + +# Only 5.8.7 and 5.8.4 existed at the time we moved to the new layout +def is_new_perl(d): + ver = get_perl_version(d) + if ver == "5.8.4" or ver == "5.8.7": + return "no" + return "yes" + +# Determine where the library directories are +def perl_get_libdirs(d): + import bb + libdir = bb.data.getVar('libdir', d, 1) + if is_new_perl(d) == "yes": + libdirs = libdir + '/perl5' + else: + libdirs = libdir + '/*/*/perl5' + return libdirs + +def is_target(d): + import bb + if not bb.data.inherits_class('native', d): + return "yes" + return "no" + +IS_NEW_PERL = "${@is_new_perl(d)}" +PERLLIBDIRS = "${@perl_get_libdirs(d)}" + +FILES_${PN}-dbg += "${PERLLIBDIRS}/auto/*/.debug \ + ${PERLLIBDIRS}/auto/*/*/.debug \ + ${PERLLIBDIRS}/auto/*/*/*/.debug" diff --git a/meta/classes/cpan.bbclass b/meta/classes/cpan.bbclass index 159633d17..4fff5974c 100644 --- a/meta/classes/cpan.bbclass +++ b/meta/classes/cpan.bbclass @@ -1,32 +1,52 @@ # # This is for perl modules that use the old Makefile.PL build system # -FILES_${PN} += '${libdir}/perl5' -EXTRA_CPANFLAGS = "" +inherit cpan-base -DEPENDS += "perl-native perl" -RDEPENDS += "perl" +EXTRA_CPANFLAGS ?= "" + +# Env var which tells perl if it should use host (no) or target (yes) settings +export PERLCONFIGTARGET = "${@is_target(d)}" + +# Env var which tells perl where the perl include files are +export PERL_INC = "${STAGING_DIR}/${BUILD_SYS}/lib/perl/${@get_perl_version(d)}/CORE" cpan_do_configure () { - perl Makefile.PL ${EXTRA_CPANFLAGS} + yes '' | perl Makefile.PL ${EXTRA_CPANFLAGS} if [ "${BUILD_SYS}" != "${HOST_SYS}" ]; then . ${STAGING_DIR}/${TARGET_SYS}/perl/config.sh - sed -i -e "s:\(SITELIBEXP = \).*:\1${sitelibexp}:" \ - -e "s:\(SITEARCHEXP = \).*:\1${sitearchexp}:" \ - -e "s:\(INSTALLVENDORLIB = \).*:\1${D}${libdir}/perl5/site_perl/${version}:" \ - -e "s:\(INSTALLVENDORARCH = \).*:\1${D}${libdir}/perl5/site_perl/${version}:" \ - -e "s:\(LDDLFLAGS.*\)${STAGING_DIR}/${BUILD_SYS}/lib:\1${STAGING_LIBDIR}:" \ - Makefile + if [ "${IS_NEW_PERL}" = "yes" ]; then + sed -i -e "s:\(SITELIBEXP = \).*:\1${sitelibexp}:" \ + -e "s:\(SITEARCHEXP = \).*:\1${sitearchexp}:" \ + -e "s:\(INSTALLVENDORLIB = \).*:\1${D}${datadir}/perl5:" \ + -e "s:\(INSTALLVENDORARCH = \).*:\1${D}${libdir}/perl5:" \ + -e "s:\(LDDLFLAGS.*\)${STAGING_DIR}/${BUILD_SYS}/lib:\1${STAGING_LIBDIR}:" \ + Makefile + else + sed -i -e "s:\(SITELIBEXP = \).*:\1${sitelibexp}:" \ + -e "s:\(SITEARCHEXP = \).*:\1${sitearchexp}:" \ + -e "s:\(INSTALLVENDORLIB = \).*:\1${D}${libdir}/perl5/site_perl/${version}:" \ + -e "s:\(INSTALLVENDORARCH = \).*:\1${D}${libdir}/perl5/site_perl/${version}:" \ + -e "s:\(LDDLFLAGS.*\)${STAGING_DIR}/${BUILD_SYS}/lib:\1${STAGING_LIBDIR}:" \ + Makefile + fi fi } cpan_do_compile () { - # You must use gcc to link on sh - OPTIONS="" - if test ${TARGET_ARCH} = "sh3" -o ${TARGET_ARCH} = "sh4"; then - OPTIONS="LD=${TARGET_ARCH}-${TARGET_OS}-gcc" + if [ "${IS_NEW_PERL}" = "yes" ]; then + oe_runmake PASTHRU_INC="${CFLAGS}" CCFLAGS="${CFLAGS}" LD="${CCLD}" + else + # You must use gcc to link on sh + OPTIONS="" + if test ${TARGET_ARCH} = "sh3" -o ${TARGET_ARCH} = "sh4"; then + OPTIONS="LD=${TARGET_ARCH}-${TARGET_OS}-gcc" + fi + if test ${TARGET_ARCH} = "powerpc" ; then + OPTIONS="LD=${TARGET_ARCH}-${TARGET_OS}-gcc" + fi + oe_runmake PASTHRU_INC="${CFLAGS}" CCFLAGS="${CFLAGS}" $OPTIONS fi - oe_runmake PASTHRU_INC="${CFLAGS}" CCFLAGS="${CFLAGS}" $OPTIONS } cpan_do_install () { diff --git a/meta/classes/cpan_build.bbclass b/meta/classes/cpan_build.bbclass new file mode 100644 index 000000000..63e716c09 --- /dev/null +++ b/meta/classes/cpan_build.bbclass @@ -0,0 +1,70 @@ +# +# This is for perl modules that use the new Build.PL build system +# +inherit cpan-base + +INHIBIT_NATIVE_STAGE_INSTALL = "1" + +# +# We also need to have built libmodule-build-perl-native for +# everything except libmodule-build-perl-native itself (which uses +# this class, but uses itself as the provider of +# libmodule-build-perl) +# +def cpan_build_dep_prepend(d): + import bb; + if bb.data.getVar('CPAN_BUILD_DEPS', d, 1): + return '' + pn = bb.data.getVar('PN', d, 1) + if pn in ['libmodule-build-perl', 'libmodule-build-perl-native']: + return '' + return 'libmodule-build-perl-native ' + +DEPENDS_prepend = "${@cpan_build_dep_prepend(d)}" + +cpan_build_do_configure () { + if [ ${@is_target(d)} == "yes" ]; then + # build for target + . ${STAGING_DIR}/${TARGET_SYS}/perl/config.sh + if [ "${IS_NEW_PERL}" = "yes" ]; then + perl Build.PL --installdirs vendor \ + --destdir ${D} \ + --install_path lib="${datadir}/perl5" \ + --install_path arch="${libdir}/perl5" \ + --install_path script=${bindir} \ + --install_path bin=${bindir} \ + --install_path bindoc=${mandir}/man1 \ + --install_path libdoc=${mandir}/man3 + else + perl Build.PL --installdirs vendor \ + --destdir ${D} \ + --install_path lib="${libdir}/perl5/site_perl/${version}" \ + --install_path arch="${libdir}/perl5/site_perl/${version}/${TARGET_SYS}" \ + --install_path script=${bindir} \ + --install_path bin=${bindir} \ + --install_path bindoc=${mandir}/man1 \ + --install_path libdoc=${mandir}/man3 + fi + else + # build for host + perl Build.PL --installdirs site + fi +} + +cpan_build_do_compile () { + perl Build +} + +cpan_build_do_install () { + if [ ${@is_target(d)} == "yes" ]; then + perl Build install + fi +} + +do_stage_append () { + if [ ${@is_target(d)} == "no" ]; then + perl Build install + fi +} + +EXPORT_FUNCTIONS do_configure do_compile do_install |