# $Id: Makefile 4033 2006-06-21 02:32:39Z nbd $

include $(TOPDIR)/rules.mk

PKG_NAME:=perl
PKG_VERSION:=5.8.8
PKG_RELEASE:=1
PKG_MD5SUM:=a377c0c67ab43fd96eeec29ce19e8382

PKG_SOURCE_URL:=ftp://ftp.cpan.org/pub/CPAN/src/5.0 \
		ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/src/5.0 \
		ftp://ftp.gmd.de/mirrors/CPAN/src/5.0 \
		ftp://ftp.funet.fi/pub/languages/perl/CPAN/src/5.0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_CAT:=bzcat

PKG_BUILD_DEPENDS:=db, gdbm

PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_NAME)-$(PKG_VERSION)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install


include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/package/perlmod.mk
include perlmod.mk

# override the PERL_LDFLAGS
PERL_LDFLAGS=	-L$(STAGING_DIR)/lib -L$(STAGING_DIR)/usr/lib
# -Wl,-rpath ${PERL_PREFIX}/lib/perl5/$(PKG_VERSION)/$(PERL_ARCH)/CORE

PERL_POST_CONFIGURE_PATCHES=./files/Makefile-pp_hot.patch
PERL_SOURCE_DIR=${TOPDIR}/package/perl/files

GNU_TARGET_NAME=$(shell echo $(CONFIG_ARCH) | sed 's/"//g')-linux-uclibc

define Package/perl
  SECTION:=lang
  CATEGORY:=Languages
  URL:=http://www.cpan.org/
  MAINTAINER:=Christian Magnusson <mag@mag.cx>
  TITLE:=Perl language
endef

define Build/Configure
endef

define Build/Compile
	@echo
	@echo "===> Stage 1: Configure host perl"
	@echo
	rm -rf $(PERL_HOST_BUILD_DIR)
	cp -Rp $(PKG_BUILD_DIR) $(PERL_HOST_BUILD_DIR)
	(cd $(PERL_HOST_BUILD_DIR); \
		rm -f config.sh Policy.sh; \
		sh ./Configure -des \
			-Dinstallstyle='lib/perl5' \
			-Darchname=$(PERL_ARCH) \
			-Dstartperl='#!$(PERL_PREFIX)/bin/perl' \
			-Dprefix=$(PERL_HOST_BUILD_DIR)/staging-install; \
	)

	@echo
	@echo "===> Stage 2: Build host perl binary with static extensions"
	@echo
	(cd $(PERL_HOST_BUILD_DIR); \
		make install.perl; \
	)

	@echo
	@echo "===> Stage 3: Configure target perl"
	@echo
	-$(MAKE) -C $(PKG_BUILD_DIR) clean
	sed -i -e '/LIBS/s|-L/usr/local/lib|-L$(STAGING_DIR)$(PERL_PREFIX)/lib|' $(PKG_BUILD_DIR)/ext/*/Makefile.PL
	# Errno.PL is stupidly hardwired to only look for errno.h in /usr/include
	sed -i.orig \
		-e 's:/usr/include/errno.h:$(STAGING_DIR)/include/errno.h:g' \
		-e '/^# *warn/s:^#::' \
		-e 's:= $$Config{cppstdin}:= $(TARGET_CROSS)gcc -E:' \
		$(PKG_BUILD_DIR)/ext/Errno/Errno_pm.PL
	ln -sf $(PERL_HOST_MINIPERL) $(PKG_BUILD_DIR)/hostperl
#	add this
#	ln -sf $(PERL_HOST_MINIPERL) $(STAGING_DIR)/usr/bin/hostperl
	( [ -e $(PERL_SOURCE_DIR)/Cross/config.sh-$(PERL_ARCH) ] && \
		cp -f $(PERL_SOURCE_DIR)/Cross/config.sh-$(PERL_ARCH) $(PKG_BUILD_DIR)/Cross/config.sh-$(GNU_TARGET_NAME) ) || \
	( [ -e $(PERL_SOURCE_DIR)/Cross/config.sh-$(GNU_TARGET_NAME) ] && \
		cp -f $(PERL_SOURCE_DIR)/Cross/config.sh-$(GNU_TARGET_NAME) $(PKG_BUILD_DIR)/Cross/ ) || \
		@echo "error finding config.sh-$(GNU_TARGET_NAME)"
	(cd $(PKG_BUILD_DIR)/Cross; \
		rm -f config; \
		printf "### Target Arch\nARCH = `echo $(GNU_TARGET_NAME) | sed s/-linux.*//`\n" > config; \
		printf "### Target OS\nOS = `echo $(GNU_TARGET_NAME) | sed s/.*-linux/linux/`\n" >> config; \
		cp -f $(PERL_SOURCE_DIR)/Cross/Makefile . ; \
		cp -f $(PERL_SOURCE_DIR)/Cross/Makefile.SH.patch . ; \
		CPPFLAGS="$(STAGING_CPPFLAGS) $(PERL_CPPFLAGS)" \
		LDFLAGS="$(STAGING_LDFLAGS) $(PERL_LDFLAGS)" \
		$(MAKE) patch perl_Configure; \
	)

	if test -n "$(PERL_POST_CONFIGURE_PATCHES)" ; then \
		cat $(PERL_POST_CONFIGURE_PATCHES) | patch -d $(PKG_BUILD_DIR) -p0 ; \
	fi

	@echo
	@echo "===> Stage 4: Build target perl binary"
	@echo
	(cd $(PKG_BUILD_DIR)/Cross; \
		$(TARGET_CONFIGURE_OPTS) \
		CFLAGS="$(TARGET_CFLAGS) $(CFLAGS_LARGEFILE) -I$(STAGING_DIR)/usr/include" \
		CPPFLAGS="-I$(STAGING_DIR)/usr/include" \
		LDFLAGS="-L$(STAGING_DIR)/usr/lib" \
		PATH="${PATH}:$(PKG_BUILD_DIR)" \
		$(MAKE) perl \
			PASTHRU_INC="$(TARGET_CFLAGS) $(PERL_CPPFLAGS) -I$(STAGING_DIR)/include -I$(STAGING_DIR)/usr/include" \
			OTHERLDFLAGS="-L$(STAGING_DIR)/usr/lib -rpath $(PERL_PREFIX)/lib" \
	)

	@echo
	@echo "===> Stage 5: Install Perl into staging dir"
	@echo
#	PATH="`dirname $(TARGET_CC)`:$(PKG_BUILD_DIR):${PATH}" 
	PATH="${PATH}:$(PKG_BUILD_DIR)" \
		$(MAKE) -C $(PKG_BUILD_DIR) DESTDIR=$(STAGING_DIR) INSTALL_DEPENDENCE="" install-strip
	for so in `find $(STAGING_DIR)$(PERL_PREFIX)/lib/perl5/ -name '*.so'`; do \
		chmod u+w ${so}; $(STRIP) ${so}; done
	(cd $(STAGING_DIR)$(PERL_PREFIX)/bin; \
		rm -f perl; \
		ln -s perl$(PKG_VERSION) perl; \
	)

	@echo
	@echo "===> Stage 6: Install Perl into a temporary root"
	@echo
#	PATH="`dirname $(TARGET_CC)`:$(PKG_BUILD_DIR):${PATH}" 
	PATH="${PATH}:$(PKG_BUILD_DIR)" \
		$(MAKE) -C $(PKG_BUILD_DIR) DESTDIR=$(PKG_INSTALL_DIR) INSTALL_DEPENDENCE="" install-strip
	for so in `find $(PKG_INSTALL_DIR)$(PERL_PREFIX)/lib/perl5/ -name '*.so'`; do \
		chmod u+w ${so}; $(STRIP) ${so}; done
	(cd $(PKG_INSTALL_DIR)$(PERL_PREFIX)/bin; \
		rm -f perl; \
		ln -s perl$(PKG_VERSION) perl; \
	)
endef

define Package/perl/install
	$(INSTALL_DIR) $(1)/opt/bin
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/opt/bin/perl$(PKG_VERSION) $(1)/opt/bin
	ln -f $(1)/opt/bin/perl$(PKG_VERSION) $(1)/opt/bin/perl
endef

$(eval $(call BuildPackage,perl))

-include perlbase.mk
