# Tests by default. No tests: rpm -ba --define 'dotests 0' *.spec %{!?dotests: %define dotests 1} # compiler defauft gcc # To use xlc : --define 'gcc_compiler=0' %{?gcc_compiler:%define gcc_compiler 0} %{!?gcc_compiler:%define gcc_compiler 1} %{!?optimize:%define optimize 2} Name: ruby Version: 2.4.0 Release: 1 License: Distributable URL: http://www.ruby-lang.org/ Prefix: %{_prefix} # Fix ruby_version abuse. # https://bugs.ruby-lang.org/issues/11002 Patch0: ruby-2.3.0-ruby_version.patch # http://bugs.ruby-lang.org/issues/7807 Patch1: ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch # Allows to override libruby.so placement. Hopefully we will be able to return # to plain --with-rubyarchprefix. # http://bugs.ruby-lang.org/issues/8973 Patch2: ruby-2.1.0-Enable-configuration-of-archlibdir.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. Patch3: ruby-2.1.0-always-use-i386.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://bugs.ruby-lang.org/issues/5617 Patch4: ruby-2.1.0-custom-rubygems-location.patch # Make mkmf verbose by default Patch5: ruby-1.9.3-mkmf-verbose.patch # Adds support for '--with-prelude' configuration option. This allows to built # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch # Use miniruby to regenerate prelude.c. # https://bugs.ruby-lang.org/issues/10554 Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch # Prevent test failures on ARM. # https://bugs.ruby-lang.org/issues/12331 Patch8: ruby-2.4.0-increase-timeout-for-ARMv7.patch # Prevent test cannot load strcpy.o on AIX 64bits # Load : strcpy_64.o (test/fiddle/helper.rb) Patch20: ruby-2.3.0-test_helper.patch # skip test aix 64 bits : TestTime#test_a (test/ruby/test_time.rb) # skip test : TestPTY#test_commandline (test/test_pty.rb) # skip test : TestPTY#ttest_argv (test/test_pty.rb) Patch22: ruby-2.3.1-skip_test_aix.patch Source: %{name}-%{version}.tar.gz Source2: %{name}-%{version}-%{release}.build.log Source3: %{name}-%{version}.run_one_by_one-test.ksh BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root Provides: %{name}-libs Summary: An interpreter of object-oriented scripting language Group: Development/Languages %define _libdir64 %{_prefix}/lib64 %ifos aix6.1 %define buildhost powerpc-ibm-aix6.1.0.0 %endif %description Ruby is an interpreted scripting language for quick and easy object-oriented programming. It has many features to process text files and to do system management tasks. It is simple, straight-forward, and extensible. %if %{gcc_compiler} == 1 This version has been compiled with GCC. %else This version has been compiled with XLC. %endif %package devel Summary: A Ruby development environment Group: Development/Languages Requires: %{name}%{?_isa} = %{version}-%{release} # Requires: rubypick # Requires: rubygems %description devel Header files and libraries for building an extension library for the Ruby or an application embedding Ruby. %prep echo "dotests=%{dotests}" echo "gcc_compiler=%{gcc_compiler}" echo "optimize=%{optimize}" %setup -q -n %{name}-%{version} cp -p ./test/ruby/test_time.rb ./test/ruby/test_time.rb.origine cp -p ./test/test_pty.rb ./test/test_pty.rb.origine %patch0 -p0 %patch1 -p1 %patch2 -p1 # %patch3 -p1 # %patch4 -p1 %patch5 -p1 %patch6 -p1 %patch7 -p0 #%patch8 -p1 %patch20 -p1 %patch22 -p1 cp configure.in configure.in.save echo sed -e 's;-blibpath:${prefix}/lib;&64;' -e 's;blibpath:%1\\$-s:${prefix}/lib;&64;' -e ';-O3;-O%{optimize};' sed -e 's;-O3;-O%{optimize};' configure.in # Duplicate source for 32 & 64 bits rm -rf /tmp/%{name}-%{version}-32bit cp -pr . /tmp/%{name}-%{version}-32bit rm -fr * mv /tmp/%{name}-%{version}-32bit 32bit cp -pr 32bit 64bit cd 64bit cp configure.in configure.in.save2 sed -e 's;-blibpath:${prefix}/lib;&64;' -e 's;blibpath:%1\\$-s:${prefix}/lib;&64;' configure.in cd .. %build # save script for debugging cp $0 %{name}-%{version}_script_build.ksh # Ruby options export PATH=/usr/bin:/etc:/usr/sbin:/usr/bin/X11:/sbin:. export PKG_CONFIG_PATH= export CPPFLAGS="" export CONFIG_SHELL=/usr/bin/bash export LDR_CNTRL=MAXDATA=0x80000000 export MAKE="gmake --trace" export GLOBAL_CC_OPTIONS=" -D_LARGE_FILES -O2" #export CONFIG_SHELL=/opt/freeware/bin/bash export AR="/usr/bin/ar -X32_64" export NM="/usr/bin/nm -X32_64" # Choose XLC or GCC %if %{gcc_compiler} == 1 export CC__="/opt/freeware/bin/gcc" export CXX__="/opt/freeware/bin/g++" export FLAG32="-maix32" export FLAG64="-maix64" echo "CC Version:" $CC__ --version %else # XLC specific (do NOT compile yet...) export CC__="/usr/vac/bin/xlc" export CXX__="/usr/vacpp/bin/xlC" export FLAG32="-q32" export FLAG64="-q64" echo "CC Version:" $CC__ -qversion %endif export CC32=" ${CC__} ${FLAG32}" export CXX32="${CXX__} ${FLAG32}" export CC64=" ${CC__} ${FLAG64}" export CXX64="${CXX__} ${FLAG64}" # build on 64bit mode cd 64bit export OBJECT_MODE=64 export CC="${CC64} $GLOBAL_CC_OPTIONS" export CXX="${CXX64} $GLOBAL_CC_OPTIONS" export LDFLAGS="-L/opt/freeware/lib64 -L/opt/freeware/lib -Wl,-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib -Wl,-bmaxdata:0x80000000" autoconf ./configure \ --host=%{buildhost} --target=%{buildhost} --build=%{buildhost} \ --prefix=%{_prefix} \ --libdir=%{_libdir64} \ --libexecdir=%{_libdir64} \ --disable-rpath \ --enable-pthread \ --enable-shared ${MAKE} %{?_smp_mflags} COPY="cp -p" Q= if [ "%{dotests}" == 1 ] then [ -L /usr/local/bin/ruby ] && rm /usr/local/bin/ruby # ln -s $RPM_BUILD_DIR/%{name}-%{version}/64bit/ruby /usr/local/bin/ruby export PATH=/opt/freeware/bin:/usr/bin:/etc:/usr/sbin:/usr/bin/X11:/sbin:. export LANG=en_US.utf-8 ${MAKE} -k test | tee traces_test.log || true fi # build on 32bit mode cd ../32bit export OBJECT_MODE=32 export CC="${CC32} $GLOBAL_CC_OPTIONS" export CXX="${CXX32} $GLOBAL_CC_OPTIONS" export LDFLAGS="-L/opt/freeware/lib -Wl,-blibpath:/opt/freeware/lib:/usr/lib:/lib" autoconf ./configure \ --host=%{buildhost} --target=%{buildhost} --build=%{buildhost} \ --prefix=%{_prefix} \ --libdir=%{_libdir} \ --libexecdir=%{_libdir} \ --disable-rpath \ --enable-pthread \ --enable-shared ${MAKE} %{?_smp_mflags} COPY="cp -p" Q= if [ "%{dotests}" == 1 ] then [ -L /usr/local/bin/ruby ] && rm /usr/local/bin/ruby # ln -s $RPM_BUILD_DIR/%{name}-%{version}/32bit/ruby /usr/local/bin/ruby export PATH=/opt/freeware/bin:/usr/bin:/etc:/usr/sbin:/usr/bin/X11:/sbin:. export LANG=en_US.utf-8 ${MAKE} -k test | tee traces_test.log || true # ${MAKE} -k test-all | tee traces_test-all.loc || true fi %install # save script for debugging ls -lrtd $0 cp $0 %{name}-%{version}_script_install.ksh # Ruby options export MINIRUBYOPT="-v " export RBUILD=$PWD export INSTALL=/opt/freeware/bin/install export PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:. export LIBPATH= export AR="/usr/bin/ar -X32_64" export NM="/usr/bin/nm -X32_64" export RM="/usr/bin/rm -f" export CONFIG_SHELL=/opt/freeware/bin/bash export CONFIGURE_ENV_ARGS=/opt/freeware/bin/bash export GLOBAL_CC_OPTIONS="-O2 -D_LARGE_FILES" export MAKE="gmake --trace" echo "RPM_BUILD_ROOT = $RPM_BUILD_ROOT" [ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT # building in 32bit mode # Choose XLC or GCC %if %{gcc_compiler} == 1 export CC__="/opt/freeware/bin/gcc" export CXX__="/opt/freeware/bin/g++" export FLAG32="-maix32" export FLAG64="-maix64" echo "CC Version:" $CC__ --version %else # XLC specific (do NOT compile yet...) export CC__="/usr/vac/bin/xlc" export CXX__="/usr/vacpp/bin/xlC" export FLAG32="-q32" export FLAG64="-q64" echo "CC Version:" $CC__ -qversion %endif export CC32=" ${CC__} ${FLAG32}" export CXX32="${CXX__} ${FLAG32}" export CC64=" ${CC__} ${FLAG64}" export CXX64="${CXX__} ${FLAG64}" cd 32bit export OBJECT_MODE=32 export CC="${CC32} $GLOBAL_CC_OPTIONS" export CXX="${CXX32} $GLOBAL_CC_OPTIONS" export LD_LIBRARY_PATH=/opt/freeware/lib:/usr/lib:/lib export LIBPATH="" ${MAKE} DESTDIR=$RPM_BUILD_ROOT install prefix=$RPM_BUILD_ROOT%{prefix} strip $RPM_BUILD_ROOT%{_bindir}/%{name} # move (/opt/freeware/) bin to _32 ( cd $RPM_BUILD_ROOT/%{_prefix} for dir in bin do cd $dir for fic in *; do [ -L "$fic" ] && continue; [ -f "$fic" ] || continue; echo $fic | grep -e _32 -e _64 && continue; mv $fic $fic"_32" done cd - done ) # Installing in 64bit mode cd '%{_builddir}'/%{name}-%{version}/64bit export OBJECT_MODE=64 export CC="${CC64} $GLOBAL_CC_OPTIONS" export CXX="${CXX64} $GLOBAL_CC_OPTIONS" export LIBPATH="/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib" export LD_LIBRARY_PATH="/opt/freeware/lib64:/usr/lib:/lib" export LDFLAGS="-L/opt/freeware/lib64" ${MAKE} DESTDIR=$RPM_BUILD_ROOT install prefix=$RPM_BUILD_ROOT%{prefix} strip $RPM_BUILD_ROOT%{_bindir}/%{name} # move (/opt/freeware/) bin to _64 ( cd $RPM_BUILD_ROOT/%{_prefix} for dir in bin do cd $dir for fic in *; do [ -L "$fic" ] && continue; [ -f "$fic" ] || continue; echo $fic | grep -e _32 -e _64 && continue; mv $fic $fic"_64" ln -s $fic"_64" $fic done cd - done ) # add the 64-bit shared objects to the shared libraries containing already the # 32-bit shared objects # echo "ruby .2.3.0 " > input.lib.$$.tmp # # cat input.lib.$$.tmp | while read lib number pad; # do # [ $number == "NULL" ] && { number=""; } # # extract then add the 64-bit shared object to the shared library containing already the # 32-bit shared object # $AR -X64 -x ${RPM_BUILD_ROOT}%{_libdir64}/lib"$lib".a # $AR -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/lib"$lib".a lib"$lib".so"$number" # ( # Make the 64bits version of lib"$lib".a as a symbolic link to the 32bits version # $RM ${RPM_BUILD_ROOT}%{_libdir64}/lib"$lib".a # cd ${RPM_BUILD_ROOT}%{_libdir64} # ln -s ../lib/lib"$lib".a lib"$lib".a # ) # done # rm -f input.lib.$$.tmp # Link ruby into /usr/bin /usr/lib /usr/lib64 ans /usr/include ( cd $RPM_BUILD_ROOT for dir in bin lib lib64 include do mkdir -p usr/${dir} cd usr/${dir} ln -sf ../..%{prefix}/${dir}/* . cd - done ) # replace lib64 duplicate files by a link ( cd $RPM_BUILD_ROOT%{_libdir64} for fic in $(find . -type f); do f=$(echo $fic| sed -e 's|^\./||') [ -f ../lib/$f ] || continue; cmp $f ../lib/$f >/dev/null || continue; dn=$(dirname $f) bn=$(basename $f) ( cd $dn rm $bn c=$(echo $f|awk -F/ '{printf "%s",substr ("../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../",1,(NF)*3)}') s=$c"lib/"$f; ln -s $s $bn ) done ) %clean [ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT %files %defattr(-, root, system) %{_prefix}/bin/* %{_prefix}/lib/libruby* %{_prefix}/lib/ruby %{_prefix}/lib/pkgconfig/%{name}-2.4.pc %{_prefix}/lib64/libruby* %{_prefix}/lib64/ruby %{_prefix}/lib64/pkgconfig/%{name}-2.4.pc %{_prefix}/share/ri /usr/bin/* /usr/lib/libruby* /usr/lib/ruby /usr/lib64/libruby* /usr/lib64/ruby %doc %{_prefix}/share/man/man1/*.1 %doc 32bit/README.md 32bit/COPYING 32bit/LEGAL 32bit/NEWS 32bit/README.EXT %files devel %defattr(-, root, system) %doc 32bit/BSDL %doc 32bit/COPYING %lang(ja) %doc 32bit/COPYING.ja %doc 32bit/GPL %doc 32bit/LEGAL # %{_rpmconfigdir}/macros.d/macros.ruby %{_includedir}/* /usr/include/* %changelog * Wed Jun 30 2017 Reshma V Kumar 2.4.0-1 - Update to latest version * Tue Nov 29 2016 Jean Girardet 2.3.1-5 - correct this erreur echo "print 'toto'" | ruby ==> :4:in require: cannot load such file -- rubygems.rb (LoadError) * Thu Nov 14 2016 Jean Girardet 2.3.1 - Add ruby-2.3.1.run_one_by_one-test.ksh test script for test failed * Thu Sep 29 2016 Jean Girardet 2.3.1-3 - Adaptation for 2.3.1 and add devel package * Tue Mar 10 2016 Laurent GAY 2.3.0-2 - Correction of GC randomize bug * Wed Feb 10 2016 Laurent GAY 2.3.0-1 - Adaptation for 2.3.0 * Tue Jan 07 2016 Tony Reix 2.3.0-1 - Update to version 2.3.0 * Tue Sep 17 2015 Tony Reix 2.2.3-1 - Update to version 2.2.3 * Wed Apr 23 2014 Gerard Visiedo 2.1.1-1 - Update to version 2.1.1 * Wed Jan 30 2013 by Bernard CAHEN 1.9.3-1 - Version for AIX 61 * Tue Aug 14 2007 by Christophe BELLE 1.8.6-1 - Version for AIX 52S