microperl.mk 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #############################################################
  2. #
  3. # microperl
  4. #
  5. #############################################################
  6. MICROPERL_VERSION = 5.12.4
  7. MICROPERL_SITE = http://www.cpan.org/src/5.0
  8. MICROPERL_SOURCE = perl-$(MICROPERL_VERSION).tar.bz2
  9. MICROPERL_DEPENDENCIES = host-microperl
  10. MICROPERL_MODS_DIR = /usr/lib/perl5/$(MICROPERL_VERSION)
  11. MICROPERL_ARCH_DIR = $(MICROPERL_MODS_DIR)/$(GNU_TARGET_NAME)
  12. MICROPERL_MODS = $(call qstrip,$(BR2_PACKAGE_MICROPERL_MODULES))
  13. # Minimal set of modules required for 'perl -V' to work
  14. MICROPERL_ARCH_MODS = Config.pm Config_git.pl Config_heavy.pl
  15. MICROPERL_BASE_MODS = strict.pm
  16. # CGI bundle
  17. ifeq ($(BR2_PACKAGE_MICROPERL_BUNDLE_CGI),y)
  18. MICROPERL_MODS += constant.pm CGI CGI.pm Carp.pm Exporter.pm overload.pm \
  19. vars.pm warnings.pm warnings/register.pm
  20. endif
  21. # Host microperl is actually full-blown perl
  22. define HOST_MICROPERL_CONFIGURE_CMDS
  23. cd $(@D) ; \
  24. ./Configure -Dcc="$(HOSTCC)" -Dprefix="$(HOST_DIR)/usr" \
  25. -Dloclibpth='/lib /lib64 /usr/lib /usr/lib64' -des
  26. endef
  27. define HOST_MICROPERL_BUILD_CMDS
  28. $(MAKE) -C $(@D)
  29. endef
  30. define HOST_MICROPERL_INSTALL_CMDS
  31. $(MAKE) -C $(@D) install
  32. endef
  33. ifeq ($(BR2_ENDIAN),"BIG")
  34. define MICROPERL_BIGENDIAN
  35. $(SED) '/^byteorder=/d' $(@D)/uconfig.sh
  36. echo "byteorder='4321'" >>$(@D)/uconfig.sh
  37. endef
  38. endif
  39. ifeq ($(BR2_LARGEFILE),y)
  40. define MICROPERL_LARGEFILE
  41. $(SED) '/^uselargefiles=/d' $(@D)/uconfig.sh
  42. echo "uselargefiles='define'" >>$(@D)/uconfig.sh
  43. endef
  44. endif
  45. ifeq ($(BR2_USE_WCHAR),y)
  46. define MICROPERL_WCHAR
  47. $(SED) '/^d_mbstowcs=/d' -e '/^d_mbtowc=/d' -e '/^d_wcstombs=/d' \
  48. -e '/^d_wctomb=/d' $(@D)/uconfig.sh
  49. echo "d_mbstowcs='define'" >>$(@D)/uconfig.sh
  50. echo "d_mbtowc='define'" >>$(@D)/uconfig.sh
  51. echo "d_wcstombs='define'" >>$(@D)/uconfig.sh
  52. echo "d_wctomb='define'" >>$(@D)/uconfig.sh
  53. endef
  54. endif
  55. define MICROPERL_CONFIGURE_CMDS
  56. $(SED) '/^archlib=/d' -e '/^archlibexp=/d' -e '/^optimize=/d' \
  57. -e '/^archname=/d' -e '/^d_poll=/d' -e '/^i_poll=/d' \
  58. -e '/^osname=/d' -e '/^u32type=/d' -e '/^d_archlib=/d' \
  59. -e '/^d_memset=/d' -e '/^i_fcntl=/d' -e '/^useperlio=/d' \
  60. -e '/^need_va_copy=/d' $(@D)/uconfig.sh
  61. $(SED) 's/5.12/$(MICROPERL_VERSION)/' $(@D)/uconfig.sh
  62. echo "archlib='$(MICROPERL_ARCH_DIR)'" >>$(@D)/uconfig.sh
  63. echo "archlibexp='$(MICROPERL_ARCH_DIR)'" >>$(@D)/uconfig.sh
  64. echo "d_archlib='define'" >>$(@D)/uconfig.sh
  65. echo "archname='$(GNU_TARGET_NAME)'" >>$(@D)/uconfig.sh
  66. echo "osname='linux'" >>$(@D)/uconfig.sh
  67. echo "cc='$(TARGET_CC)'" >>$(@D)/uconfig.sh
  68. echo "ccflags='$(TARGET_CFLAGS)'" >>$(@D)/uconfig.sh
  69. echo "optimize='$(TARGET_CFLAGS)'" >>$(@D)/uconfig.sh
  70. echo "usecrosscompile='define'" >>$(@D)/uconfig.sh
  71. echo "d_memset='define'" >>$(@D)/uconfig.sh
  72. echo "i_fcntl='define'" >>$(@D)/uconfig.sh
  73. echo "useperlio='define'" >>$(@D)/uconfig.sh
  74. echo "u32type='unsigned int'" >>$(@D)/uconfig.sh
  75. echo "need_va_copy='define'" >>$(@D)/uconfig.sh
  76. echo "d_poll='define'" >>$(@D)/uconfig.sh
  77. echo "i_poll='define'" >>$(@D)/uconfig.sh
  78. $(SED) 's/UNKNOWN-/Buildroot $(BR2_VERSION_FULL) /' $(@D)/patchlevel.h
  79. $(SED) 's/local\///' $(@D)/uconfig.sh
  80. $(MICROPERL_BIGENDIAN)
  81. $(MICROPERL_LARGEFILE)
  82. $(MICROPERL_WCHAR)
  83. $(MAKE) -C $(@D) -f Makefile.micro regen_uconfig
  84. cp -f $(@D)/uconfig.h $(@D)/config.h
  85. cp -f $(@D)/uconfig.sh $(@D)/config.sh
  86. echo "ccname='$(TARGET_CC)'" >>$(@D)/config.sh
  87. echo "PERL_CONFIG_SH=true" >>$(@D)/config.sh
  88. cd $(@D) ; $(HOST_DIR)/usr/bin/perl make_patchnum.pl ; \
  89. $(HOST_DIR)/usr/bin/perl configpm
  90. endef
  91. define MICROPERL_BUILD_CMDS
  92. $(MAKE) -f Makefile.micro -C $(@D) \
  93. CC="$(HOSTCC)" bitcount.h
  94. $(MAKE) -f Makefile.micro -C $(@D) \
  95. CC="$(TARGET_CC)" OPTIMIZE="$(TARGET_CFLAGS)"
  96. endef
  97. # Some extensions don't need a build run
  98. # We try to build anyway to avoid a huge black list
  99. # Just ignore make_ext.pl warning/errors
  100. define MICROPERL_BUILD_EXTENSIONS
  101. for i in $(MICROPERL_MODS); do \
  102. cd $(@D); ln -sf $(HOST_DIR)/usr/bin/perl miniperl; \
  103. PERL5LIB=$(TARGET_DIR)/$(MICROPERL_ARCH_DIR) \
  104. $(HOST_DIR)/usr/bin/perl make_ext.pl MAKE="$(MAKE)" --nonxs \
  105. `echo $$i|sed -e 's/.pm//'`; \
  106. done
  107. endef
  108. define MICROPERL_INSTALL_TARGET_CMDS
  109. $(INSTALL) -m 0755 -D $(@D)/microperl $(TARGET_DIR)/usr/bin/microperl
  110. ln -sf microperl $(TARGET_DIR)/usr/bin/perl
  111. for i in $(MICROPERL_ARCH_MODS); do \
  112. $(INSTALL) -m 0644 -D $(@D)/lib/$$i \
  113. $(TARGET_DIR)/$(MICROPERL_ARCH_DIR)/$$i; \
  114. done
  115. for i in $(MICROPERL_BASE_MODS); do \
  116. $(INSTALL) -m 0644 -D $(@D)/lib/$$i \
  117. $(TARGET_DIR)/$(MICROPERL_MODS_DIR)/$$i; \
  118. done
  119. $(MICROPERL_BUILD_EXTENSIONS)
  120. for i in $(MICROPERL_MODS); do \
  121. j=`echo $$i|cut -d : -f 1` ; \
  122. if [ -d $(@D)/lib/$$j ] ; then \
  123. cp -af $(@D)/lib/$$j $(TARGET_DIR)/$(MICROPERL_MODS_DIR) ; \
  124. fi ; \
  125. if [ -f $(@D)/lib/$$i ] ; then \
  126. $(INSTALL) -m 0644 -D $(@D)/lib/$$i $(TARGET_DIR)/$(MICROPERL_MODS_DIR)/$$i; \
  127. fi ; \
  128. done
  129. # Remove test files
  130. find $(TARGET_DIR)/$(MICROPERL_MODS_DIR) -type f -name *.t \
  131. -exec rm -f {} \;
  132. endef
  133. define MICROPERL_UNINSTALL_TARGET_CMDS
  134. rm -f $(TARGET_DIR)/usr/bin/perl
  135. rm -f $(TARGET_DIR)/usr/bin/microperl
  136. rm -rf $(TARGET_DIR)/usr/lib/perl5
  137. endef
  138. $(eval $(call GENTARGETS))
  139. $(eval $(call GENTARGETS,host))