diff --git a/srcpkgs/mruby/template b/srcpkgs/mruby/template index 068e8810ccc..831e21e9a07 100644 --- a/srcpkgs/mruby/template +++ b/srcpkgs/mruby/template @@ -1,8 +1,8 @@ # Template file for 'mruby' pkgname=mruby version=2.1.0 -revision=1 -hostmakedepends="bison ruby" +revision=2 +hostmakedepends="bison clang ruby" short_desc="Lightweight implementation of the Ruby language (Ruby 1.9)" maintainer="Jürgen Buchmüller " license="MIT" @@ -10,35 +10,59 @@ homepage="https://mruby.org/" distfiles="https://github.com/mruby/mruby/archive/${version}.tar.gz>${pkgname}-${version}.tar.gz" checksum=d6733742a07e553c52ab71df08b0604b3b571768bbc0c2729fbf0389d1bb5d13 lib32disabled=yes +# I cannot get clang to link a PIE executable +nopie=yes -if [ "$XBPS_TARGET_WORDSIZE" = 32 ]; then - broken="Currently fails to build for 32 bit architectures" -fi +# Note: we use clang to build for the host because with gcc the build fails +# for i686 (native) and also when i686 is the host architecture for cross builds. +LIBS="m" do_configure() { vsed -i mrbgems/mruby-compiler/core/parse.y -e "s;%pure-parser;%define api.pure;" - cat <<-EOF > xbps_config.rb - MRuby::Build.new do |conf| - toolchain :gcc - conf.gem "#{root}/mrbgems/mruby-bin-mruby" - conf.gem "#{root}/mrbgems/mruby-bin-mrbc" - conf.cc do |cc| - cc.command = 'gcc' - cc.flags = [ENV['CFLAGS_host'] || %w()] - cc.include_paths = ["#{root}/include"] - end - conf.linker do |linker| - linker.command = 'gcc' - linker.libraries = 'm' - end - conf.archiver do |archiver| - archiver.command = 'ar' - end - end - EOF - if [ "$CROSS_BUILD" ]; then - cat <<-EOF >> xbps_config.rb + if [ -z "$CROSS_BUILD" ]; then + # Native build + cat <<-EOF > xbps_config.rb + MRuby::Build.new do |conf| + toolchain :clang + conf.gem "#{root}/mrbgems/mruby-bin-mruby" + conf.gem "#{root}/mrbgems/mruby-bin-mrbc" + conf.cc do |cc| + cc.command = 'clang' + cc.flags = [ENV['CFLAGS'] || %w()] + cc.include_paths = ["#{root}/include"] + end + conf.linker do |linker| + linker.command = 'clang' + linker.flags = [ENV['LDFLAGS'] || %w()] + linker.libraries = [ENV['LIBS'] || 'm'] + end + conf.archiver do |archiver| + archiver.command = 'ar' + end + end + EOF + else + # Cross build + cat <<-EOF > xbps_config.rb + MRuby::Build.new do |conf| + toolchain :clang + conf.gem "#{root}/mrbgems/mruby-bin-mruby" + conf.gem "#{root}/mrbgems/mruby-bin-mrbc" + conf.cc do |cc| + cc.command = 'clang' + cc.flags = [ENV['CFLAGS_host'] || %w()] + cc.include_paths = ["#{root}/include"] + end + conf.linker do |linker| + linker.command = 'clang' + linker.flags = [ENV['LDFLAGS_host'] || %w()] + linker.libraries = [ENV['LIBS'] || 'm'] + end + conf.archiver do |archiver| + archiver.command = 'ar' + end + end MRuby::CrossBuild.new('${XBPS_CROSS_TRIPLET}') do |conf| toolchain :gcc conf.gem "#{root}/mrbgems/mruby-bin-mruby" @@ -54,8 +78,8 @@ do_configure() { end conf.linker do |linker| linker.command = ENV['CC'] || '${XBPS_CROSS_TRIPLET}-gcc' - linker.libraries = ENV['LIBS'] || 'm' - linker.flags_after_libraries = [ENV['LDFLAGS'] || %w()] + linker.flags = [ENV['LDFLAGS'] || %w()] + linker.libraries = [ENV['LIBS'] || 'm'] linker.library_paths = '${XBPS_CROSS_BASE}/usr/lib' end conf.archiver do |archiver| @@ -67,7 +91,28 @@ do_configure() { } do_build() { - MRUBY_CONFIG=xbps_config.rb ruby ./minirake + # Enable verbosity and/or trace + # vsed -i minirake -e '/^$rake_failed/a $verbose = 1' + # vsed -i minirake -e '/^$rake_failed/a $trace = 1' + + # Set the number of parallel jobs from $makejobs + vsed -i minirake -e "s;^\(\$rake_jobs =\).*;\1 ${makejobs/-j/};" + + # clang does not understand -fstack-clash-protection + CFLAGS="${CFLAGS/-fstack-clash-protection/}" + + if [ "$CROSS_BUILD" ]; then + CFLAGS_host="${CFLAGS_host/-fstack-clash-protection/}" + echo "CFLAGS_host : $CFLAGS_host" + echo "LDFLAGS_host : $LDFLAGS_host" + fi + echo "CFLAGS : $CFLAGS" + echo "LDFLAGS : $LDFLAGS" + echo "LIBS : $LIBS" + CFLAGS="$CFLAGS" CFLAGS_host="$CFLAGS_host" \ + LDFLAGS="$LDFLAGS" LDFLAGS_host="$LDFLAGS_host" \ + LIBS="$LIBS" MRUBY_CONFIG=xbps_config.rb VERBOS=1 \ + ruby minirake } do_install() {