From aac3d2b402fd2b8b91f125cf9314f4805b88f72a Mon Sep 17 00:00:00 2001 From: Maxime Hadjinlian Date: Tue, 18 Feb 2014 00:37:12 +0100 Subject: infra: Introduce BR2_HOST_NEEDS_JAVA XBMC needs Java on the host in order to build, because it uses a code-generator which is built in two phases: In the first phase SWIG is used to parse C++ header files that define the API. SWIG outputs an XML file that contains a complete description of the structure of the API. In the second phase, the XML file is ingested by a Groovy (Java) program that then creates C++ code that forms the bridge to the scripting language (Python). The second phase is why we need java on the host. You can learn more at the XBMC's wiki: http://wiki.xbmc.org/index.php?title=Codegeneration#How_it_works In order to check that, this patch introduce this mechanism in dependencies.sh, and it also defines the variable in Config.in [Peter: fix error message] Signed-off-by: Maxime Hadjinlian Signed-off-by: Peter Korsgaard --- Config.in | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Config.in') diff --git a/Config.in b/Config.in index bcfefc79f..8afd156cb 100644 --- a/Config.in +++ b/Config.in @@ -18,6 +18,11 @@ config BR2_EXTERNAL string option env="BR2_EXTERNAL" +# Hidden boolean selected by packages in need of Java in order to build +# (example: xbmc) +config BR2_HOST_NEEDS_JAVA + bool + # Hidden boolean selected by pre-built packages for x86, when they # need to run on x86-64 machines (example: pre-built external # toolchains, binary tools like SAM-BA, etc.). -- cgit v1.2.3 From 0721c7133022d270e997c0c42ef044b48c5c5943 Mon Sep 17 00:00:00 2001 From: Maxime Hadjinlian Date: Wed, 19 Feb 2014 16:33:50 +0100 Subject: infra: Change BR2_HOST_NEEDS_JAVA name Change BR2_HOST_NEEDS_JAVA to BR2_NEEDS_HOST_JAVA as it makes more sense. The host doesn't need Java but Buildroot needs the host to have Java in order to build the package that select this option. Signed-off-by: Maxime Hadjinlian Signed-off-by: Peter Korsgaard --- Config.in | 2 +- support/dependencies/dependencies.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'Config.in') diff --git a/Config.in b/Config.in index 8afd156cb..c5c8aa822 100644 --- a/Config.in +++ b/Config.in @@ -20,7 +20,7 @@ config BR2_EXTERNAL # Hidden boolean selected by packages in need of Java in order to build # (example: xbmc) -config BR2_HOST_NEEDS_JAVA +config BR2_NEEDS_HOST_JAVA bool # Hidden boolean selected by pre-built packages for x86, when they diff --git a/support/dependencies/dependencies.sh b/support/dependencies/dependencies.sh index a965c6882..a8261b3b0 100755 --- a/support/dependencies/dependencies.sh +++ b/support/dependencies/dependencies.sh @@ -191,7 +191,7 @@ if grep -q ^BR2_PACKAGE_CLASSPATH=y $BR2_CONFIG ; then done fi -if grep -q ^BR2_HOST_NEEDS_JAVA=y $BR2_CONFIG ; then +if grep -q ^BR2_NEEDS_HOST_JAVA=y $BR2_CONFIG ; then if ! which java > /dev/null ; then echo >&2 echo "You must install 'java' on your build machine" >&2 -- cgit v1.2.3 From eda3d0e1d01c3f3e32a24759ddd107574a118c8c Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN" Date: Wed, 29 Jan 2014 22:48:24 +0100 Subject: Config: default BR2_PACKAGE_OVERRIDE_FILE to $(CONFIG_DIR)/local.mk The current default for BR2_PACKAGE_OVERRIDE_FILE points to: $(TOPDIR)/local.mk This works well for in-tree builds, but is not very useful for out-of-tree builds, when the Buildroot source tree may be shared for different concurrent builds. Also, it seems to be more sensible to have local.mk alognside the .config file. Hence, change the default for BR2_PACKAGE_OVERRIDE_FILE to point to: $(CONFIG_DIR)/local.mk Note that this does not change the current behaviour for in-tree builds, since in that case $(CONFIG_DIR) == $(TOPDIR). Signed-off-by: "Yann E. MORIN" Cc: Thomas De Schampheleire Acked-by: Arnout Vandecappelle (Essensium/Mind) Signed-off-by: Peter Korsgaard --- Config.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Config.in') diff --git a/Config.in b/Config.in index c5c8aa822..55f5fd81a 100644 --- a/Config.in +++ b/Config.in @@ -475,7 +475,7 @@ config BR2_PREFER_STATIC_LIB config BR2_PACKAGE_OVERRIDE_FILE string "location of a package override file" - default "$(TOPDIR)/local.mk" + default "$(CONFIG_DIR)/local.mk" help A package override file is a short makefile that contains variable definitions of the form _OVERRIDE_SRCDIR, -- cgit v1.2.3 From 9fbb169976a313a20b6fdaf37e67ce80c4771650 Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Sun, 23 Feb 2014 15:17:16 +0100 Subject: pkg-perl: new infrastructure Signed-off-by: Francois Perrad Acked-by: Arnout Vandecappelle (Essensium/Mind) Signed-off-by: Peter Korsgaard --- Config.in | 11 ++++ package/Makefile.in | 4 +- package/pkg-perl.mk | 181 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 package/pkg-perl.mk (limited to 'Config.in') diff --git a/Config.in b/Config.in index 55f5fd81a..5a2a09813 100644 --- a/Config.in +++ b/Config.in @@ -230,6 +230,17 @@ config BR2_LUAROCKS_MIRROR See http://luarocks.org +config BR2_CPAN_MIRROR + string "CPAN mirror (Perl packages)" + default "http://search.cpan.org/CPAN" + help + CPAN (Comprehensive Perl Archive Network) is a repository + of Perl packages. It has multiple software mirrors scattered + around the world. This option allows you to select a mirror. + + The list of mirrors is available at: + http://search.cpan.org/mirror + endmenu config BR2_JLEVEL diff --git a/package/Makefile.in b/package/Makefile.in index eea7043d9..454f61442 100644 --- a/package/Makefile.in +++ b/package/Makefile.in @@ -206,7 +206,8 @@ HOST_PATH=$(HOST_DIR)/bin:$(HOST_DIR)/usr/bin:$(PATH) HOSTCC_VERSION:=$(shell $(HOSTCC_NOCCACHE) --version | \ sed -n 's/^.* \([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[ ]*.*$$/\1\2\3/p') -export PERL5LIB := $(HOST_DIR)/usr/lib/perl +HOST_PERL_ARCHNAME := $(shell perl -MConfig -e "print Config->{archname}") +export PERL5LIB := $(HOST_DIR)/usr/lib/perl5/$(HOST_PERL_ARCHNAME):$(HOST_DIR)/usr/lib/perl5 TARGET_CONFIGURE_OPTS=PATH=$(TARGET_PATH) \ AR="$(TARGET_AR)" \ @@ -359,5 +360,6 @@ include package/pkg-download.mk include package/pkg-autotools.mk include package/pkg-cmake.mk include package/pkg-luarocks.mk +include package/pkg-perl.mk include package/pkg-python.mk include package/pkg-generic.mk diff --git a/package/pkg-perl.mk b/package/pkg-perl.mk new file mode 100644 index 000000000..fdf1580fa --- /dev/null +++ b/package/pkg-perl.mk @@ -0,0 +1,181 @@ +################################################################################ +# Perl package infrastructure +# +# This file implements an infrastructure that eases development of +# package .mk files for Perl packages. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# In terms of implementation, this perl infrastructure requires +# the .mk file to only specify metadata information about the +# package: name, version, download URL, etc. +# +# We still allow the package .mk file to override what the different +# steps are doing, if needed. For example, if _BUILD_CMDS is +# already defined, it is used as the list of commands to perform to +# build the package, instead of the default perl behaviour. The +# package can also define some post operation hooks. +# +################################################################################ + +PERL_ARCHNAME = $(ARCH)-linux + +################################################################################ +# inner-perl-package -- defines how the configuration, compilation and +# installation of a perl package should be done, implements a +# few hooks to tune the build process for perl specifities and +# calls the generic package infrastructure to generate the necessary +# make targets +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including an HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +################################################################################ + +define inner-perl-package + +# +# Configure step. Only define it if not already defined by the package +# .mk file. And take care of the differences between host and target +# packages. +# +ifndef $(2)_CONFIGURE_CMDS +ifeq ($(4),target) + +# Configure package for target +define $(2)_CONFIGURE_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \ + perl Build.PL \ + --config ar="$(TARGET_AR)" \ + --config full_ar="$(TARGET_AR)" \ + --config cc="$(TARGET_CC)" \ + --config ccflags="$(TARGET_CFLAGS)" \ + --config ld="$(TARGET_CC)" \ + --config lddlflags="-shared $(TARGET_LDFLAGS)" \ + --config ldflags="$(TARGET_LDFLAGS)" \ + --include_dirs $$(STAGING_DIR)/usr/lib/perl5/$$(PERL_VERSION)/$(PERL_ARCHNAME)/CORE \ + --destdir $$(TARGET_DIR) \ + --installdirs vendor \ + --install_path lib=/usr/lib/perl5/site_perl/$$(PERL_VERSION) \ + --install_path arch=/usr/lib/perl5/site_perl/$$(PERL_VERSION)/$(PERL_ARCHNAME) \ + --install_path bin=/usr/bin \ + --install_path script=/usr/bin \ + --install_path bindoc=/usr/share/man/man1 \ + --install_path libdoc=/usr/share/man/man3 \ + $$($(2)_CONF_OPT); \ + else \ + PERL_AUTOINSTALL=--skipdeps \ + perl Makefile.PL \ + AR="$(TARGET_AR)" \ + FULL_AR="$(TARGET_AR)" \ + CC="$(TARGET_CC)" \ + CCFLAGS="$(TARGET_CFLAGS)" \ + LD="$(TARGET_CC)" \ + LDDLFLAGS="-shared $(TARGET_LDFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" \ + DESTDIR=$$(TARGET_DIR) \ + INSTALLDIRS=vendor \ + INSTALLVENDORLIB=/usr/lib/perl5/site_perl/$$(PERL_VERSION) \ + INSTALLVENDORARCH=/usr/lib/perl5/site_perl/$$(PERL_VERSION)/$(PERL_ARCHNAME) \ + INSTALLVENDORBIN=/usr/bin \ + INSTALLVENDORSCRIPT=/usr/bin \ + INSTALLVENDORMAN1DIR=/usr/share/man/man1 \ + INSTALLVENDORMAN3DIR=/usr/share/man/man3 \ + $$($(2)_CONF_OPT); \ + fi +endef +else + +# Configure package for host +define $(2)_CONFIGURE_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \ + perl Build.PL \ + --install_base $$(HOST_DIR)/usr \ + --installdirs vendor \ + $$($(2)_CONF_OPT); \ + else \ + PERL_AUTOINSTALL=--skipdeps \ + perl Makefile.PL \ + INSTALL_BASE=$$(HOST_DIR)/usr \ + INSTALLDIRS=vendor \ + $$($(2)_CONF_OPT); \ + fi +endef +endif +endif + +# +# Build step. Only define it if not already defined by the package .mk +# file. And take care of the differences between host and target +# packages. +# +ifndef $(2)_BUILD_CMDS +ifeq ($(4),target) + +# Build package for target +define $(2)_BUILD_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \ + perl Build $$($(2)_BUILD_OPT) build; \ + else \ + $(MAKE1) \ + PERL_INC=$$(STAGING_DIR)/usr/lib/perl5/$$(PERL_VERSION)/$(PERL_ARCHNAME)/CORE \ + $$($(2)_BUILD_OPT) pure_all; \ + fi +endef +else + +# Build package for host +define $(2)_BUILD_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \ + perl Build $$($(2)_BUILD_OPT) build; \ + else \ + $(MAKE1) $$($(2)_BUILD_OPT) pure_all; \ + fi +endef +endif +endif + +# +# Host installation step. Only define it if not already defined by the +# package .mk file. +# +ifndef $(2)_INSTALL_CMDS +define $(2)_INSTALL_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \ + perl Build $$($(2)_INSTALL_TARGET_OPT) install; \ + else \ + $(MAKE1) $$($(2)_INSTALL_TARGET_OPT) pure_install; \ + fi +endef +endif + +# +# Target installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_TARGET_CMDS +define $(2)_INSTALL_TARGET_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] ; then \ + perl Build $$($(2)_INSTALL_TARGET_OPT) install; \ + else \ + $(MAKE1) $$($(2)_INSTALL_TARGET_OPT) pure_install; \ + fi +endef +endif + +# Call the generic package infrastructure to generate the necessary +# make targets +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +endef + +################################################################################ +# perl-package -- the target generator macro for Perl packages +################################################################################ + +perl-package = $(call inner-perl-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) +host-perl-package = $(call inner-perl-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) -- cgit v1.2.3