#############################################################
#
# microperl
#
#############################################################

MICROPERL_VERSION = 5.12.4
MICROPERL_SITE = http://www.cpan.org/src/5.0
MICROPERL_SOURCE = perl-$(MICROPERL_VERSION).tar.bz2
MICROPERL_LICENSE = Artistic
MICROPERL_LICENSE_FILES = Artistic
MICROPERL_DEPENDENCIES = host-microperl
MICROPERL_MODS_DIR = /usr/lib/perl5/$(MICROPERL_VERSION)
MICROPERL_ARCH_DIR = $(MICROPERL_MODS_DIR)/$(GNU_TARGET_NAME)
MICROPERL_MODS = $(call qstrip,$(BR2_PACKAGE_MICROPERL_MODULES))

# Minimal set of modules required for 'perl -V' to work
MICROPERL_ARCH_MODS = Config.pm Config_git.pl Config_heavy.pl
MICROPERL_BASE_MODS = strict.pm

# CGI bundle
ifeq ($(BR2_PACKAGE_MICROPERL_BUNDLE_CGI),y)
MICROPERL_MODS += constant.pm CGI CGI.pm Carp.pm Exporter.pm overload.pm \
	vars.pm warnings.pm warnings/register.pm
endif

# Host microperl is actually full-blown perl
define HOST_MICROPERL_CONFIGURE_CMDS
	cd $(@D) ; \
	./Configure -Dcc="$(HOSTCC)" -Dprefix="$(HOST_DIR)/usr" \
		-Dloclibpth='/lib /lib64 /usr/lib /usr/lib64' -des
endef

define HOST_MICROPERL_BUILD_CMDS
	$(MAKE) -C $(@D)
endef

define HOST_MICROPERL_INSTALL_CMDS
	$(MAKE) -C $(@D) install
endef

ifeq ($(BR2_ENDIAN),"BIG")
define MICROPERL_BIGENDIAN
	$(SED) '/^byteorder=/d' $(@D)/uconfig.sh
	echo "byteorder='4321'" >>$(@D)/uconfig.sh
endef
endif

ifeq ($(BR2_LARGEFILE),y)
define MICROPERL_LARGEFILE
	$(SED) '/^uselargefiles=/d' $(@D)/uconfig.sh
	echo "uselargefiles='define'" >>$(@D)/uconfig.sh
endef
endif

ifeq ($(BR2_USE_WCHAR),y)
define MICROPERL_WCHAR
	$(SED) '/^d_mbstowcs=/d' -e '/^d_mbtowc=/d' -e '/^d_wcstombs=/d' \
		-e '/^d_wctomb=/d' $(@D)/uconfig.sh
	echo "d_mbstowcs='define'" >>$(@D)/uconfig.sh
	echo "d_mbtowc='define'" >>$(@D)/uconfig.sh
	echo "d_wcstombs='define'" >>$(@D)/uconfig.sh
	echo "d_wctomb='define'" >>$(@D)/uconfig.sh
endef
endif

define MICROPERL_CONFIGURE_CMDS
	$(SED) '/^archlib=/d' -e '/^archlibexp=/d' -e '/^optimize=/d' \
		-e '/^archname=/d' -e '/^d_poll=/d' -e '/^i_poll=/d' \
		-e '/^osname=/d' -e '/^u32type=/d' -e '/^d_archlib=/d' \
		-e '/^d_memset=/d' -e '/^i_fcntl=/d' -e '/^useperlio=/d' \
		-e '/^need_va_copy=/d' $(@D)/uconfig.sh
	$(SED) 's/5.12/$(MICROPERL_VERSION)/' $(@D)/uconfig.sh
	echo "archlib='$(MICROPERL_ARCH_DIR)'" >>$(@D)/uconfig.sh
	echo "archlibexp='$(MICROPERL_ARCH_DIR)'" >>$(@D)/uconfig.sh
	echo "d_archlib='define'" >>$(@D)/uconfig.sh
	echo "archname='$(GNU_TARGET_NAME)'" >>$(@D)/uconfig.sh
	echo "osname='linux'" >>$(@D)/uconfig.sh
	echo "cc='$(TARGET_CC)'" >>$(@D)/uconfig.sh
	echo "ccflags='$(TARGET_CFLAGS)'" >>$(@D)/uconfig.sh
	echo "optimize='$(TARGET_CFLAGS)'" >>$(@D)/uconfig.sh
	echo "usecrosscompile='define'" >>$(@D)/uconfig.sh
	echo "d_memset='define'" >>$(@D)/uconfig.sh
	echo "i_fcntl='define'" >>$(@D)/uconfig.sh
	echo "useperlio='define'" >>$(@D)/uconfig.sh
	echo "u32type='unsigned int'" >>$(@D)/uconfig.sh
	echo "need_va_copy='define'" >>$(@D)/uconfig.sh
	echo "d_poll='define'" >>$(@D)/uconfig.sh
	echo "i_poll='define'" >>$(@D)/uconfig.sh
	$(SED) 's/UNKNOWN-/Buildroot $(BR2_VERSION_FULL) /' $(@D)/patchlevel.h
	$(SED) 's/local\///' $(@D)/uconfig.sh
	$(MICROPERL_BIGENDIAN)
	$(MICROPERL_LARGEFILE)
	$(MICROPERL_WCHAR)
	$(MAKE) -C $(@D) -f Makefile.micro regen_uconfig
	cp -f $(@D)/uconfig.h $(@D)/config.h
	cp -f $(@D)/uconfig.sh $(@D)/config.sh
	echo "ccname='$(TARGET_CC)'" >>$(@D)/config.sh
	echo "PERL_CONFIG_SH=true" >>$(@D)/config.sh
	cd $(@D) ; $(HOST_DIR)/usr/bin/perl make_patchnum.pl ; \
	$(HOST_DIR)/usr/bin/perl configpm
endef

define MICROPERL_BUILD_CMDS
	$(MAKE) -f Makefile.micro -C $(@D) \
		CC="$(HOSTCC)" bitcount.h
	$(MAKE) -f Makefile.micro -C $(@D) \
		CC="$(TARGET_CC)" OPTIMIZE="$(TARGET_CFLAGS)"
endef

# Some extensions don't need a build run
# We try to build anyway to avoid a huge black list
# Just ignore make_ext.pl warning/errors
define MICROPERL_BUILD_EXTENSIONS
	for i in $(MICROPERL_MODS); do \
	cd $(@D); ln -sf $(HOST_DIR)/usr/bin/perl miniperl; \
		PERL5LIB=$(TARGET_DIR)/$(MICROPERL_ARCH_DIR) \
		$(HOST_DIR)/usr/bin/perl make_ext.pl MAKE="$(MAKE)" --nonxs \
		`echo $$i|sed -e 's/.pm//'`; \
	done
endef

define MICROPERL_INSTALL_TARGET_CMDS
	$(INSTALL) -m 0755 -D $(@D)/microperl $(TARGET_DIR)/usr/bin/microperl
	ln -sf microperl $(TARGET_DIR)/usr/bin/perl
	for i in $(MICROPERL_ARCH_MODS); do \
		$(INSTALL) -m 0644 -D $(@D)/lib/$$i \
			$(TARGET_DIR)/$(MICROPERL_ARCH_DIR)/$$i; \
	done
	for i in $(MICROPERL_BASE_MODS); do \
		$(INSTALL) -m 0644 -D $(@D)/lib/$$i \
			$(TARGET_DIR)/$(MICROPERL_MODS_DIR)/$$i; \
	done
	$(MICROPERL_BUILD_EXTENSIONS)
	for i in $(MICROPERL_MODS); do \
		j=`echo $$i|cut -d : -f 1` ; \
		if [ -d $(@D)/lib/$$j ] ; then \
			cp -af $(@D)/lib/$$j $(TARGET_DIR)/$(MICROPERL_MODS_DIR) ; \
		fi ; \
		if [ -f $(@D)/lib/$$i ] ; then \
			$(INSTALL) -m 0644 -D $(@D)/lib/$$i $(TARGET_DIR)/$(MICROPERL_MODS_DIR)/$$i; \
		fi ; \
	done
	# Remove test files
	find $(TARGET_DIR)/$(MICROPERL_MODS_DIR) -type f -name *.t \
		-exec rm -f {} \;
endef

define MICROPERL_UNINSTALL_TARGET_CMDS
	rm -f $(TARGET_DIR)/usr/bin/perl
	rm -f $(TARGET_DIR)/usr/bin/microperl
	rm -rf $(TARGET_DIR)/usr/lib/perl5
endef

$(eval $(generic-package))
$(eval $(host-generic-package))
