%global uvcommit 5d608abc3c2e9dc37da04030a0e07ba0af5ae57d %global uvshortcommit %(c=%{uvcommit}; echo ${c:0:7}) %global uvversion 0.11.22 %global Rmathcommit e432b0c4b01c560353412b3f097d179eef5c0ba2 %global Rmathshortcommit %(c=%{Rmathcommit}; echo ${c:0:7}) %global Rmathversion 3.0.1 Name: julia Version: 0.3.2 Release: 2%{dist} Summary: High-level, high-performance dynamic language for technical computing Group: Development/Languages # Julia itself is MIT, with a few LGPLv2+ and GPLv2+ files # libuv is MIT # Rmath is GPLv2+ License: MIT and LGPLv2+ and GPLv2+ URL: http://julialang.org/ Source0: https://github.com/JuliaLang/julia/archive/v%{version}.tar.gz#/julia-%{version}.tar.gz # Julia currently uses a custom version of libuv, patches are not yet upstream Source1: https://github.com/JuliaLang/libuv/archive/%{uvcommit}/archive/libuv.tar.gz#/libuv-%{uvcommit}.tar.gz # Julia currently uses a custom version of Rmath, called Rmath-julia, with a custom RNG system (temporary) Source2: https://github.com/JuliaLang/Rmath/archive/%{Rmathcommit}/archive/Rmath.tar.gz#/Rmath-%{Rmathcommit}.tar.gz Patch0: %{name}_juliadoc.patch Provides: bundled(libuv) = %{uvversion} Provides: bundled(Rmath) = %{Rmathversion} BuildRequires: arpack-devel BuildRequires: desktop-file-utils BuildRequires: double-conversion-devel >= 1.1.1 BuildRequires: dSFMT-devel BuildRequires: fftw-devel >= 3.3.2 BuildRequires: gcc-gfortran # Needed to test package installation BuildRequires: git BuildRequires: gmp-devel >= 5.0 BuildRequires: ImageMagick BuildRequires: libunwind-devel BuildRequires: llvm-devel BuildRequires: llvm-static BuildRequires: mpfr-devel >= 3.0 BuildRequires: openblas-devel BuildRequires: openlibm-devel >= 0.4 BuildRequires: openspecfun-devel >= 0.4 BuildRequires: patchelf BuildRequires: pcre-devel >= 8.31 BuildRequires: perl # To build HTML documentation BuildRequires: python-pip BuildRequires: python-sphinx BuildRequires: python-sphinx_rtd_theme BuildRequires: suitesparse-devel BuildRequires: utf8proc-devel BuildRequires: zlib-devel # Dependencies loaded at run time by Julia code # and thus not detected by find-requires Requires: arpack Requires: dSFMT Requires: fftw >= 3.3.2 # Needed for package installation Requires: git Requires: gmp >= 5.0 Requires: julia-common = %{version}-%{release} Requires: mpfr >= 3.0 Requires: openblas-threads Requires: openlibm >= 0.4 Requires: openspecfun >= 0.4 Requires: pcre >= 8.31 # Currently, Julia, openlibm and openblas do not build on non-x86 architectures # https://github.com/JuliaLang/julia/issues/3134 # https://github.com/JuliaLang/openlibm/issues/18 # https://github.com/xianyi/OpenBLAS/issues/17 ExclusiveArch: %{ix86} x86_64 %description Julia is a high-level, high-performance dynamic programming language for technical computing, with syntax that is familiar to users of other technical computing environments. It provides a sophisticated compiler, distributed parallel execution, numerical accuracy, and an extensive mathematical function library. The library, largely written in Julia itself, also integrates mature, best-of-breed C and Fortran libraries for linear algebra, random number generation, signal processing, and string processing. This package only contains the essential parts of the Julia environment: the julia executable and the standard library. %package common Summary: Julia architecture-independent files Group: Development/Languages BuildArch: noarch Requires: julia = %{version}-%{release} %description common Contains architecture-independent files required to run Julia. %package doc Summary: Julia documentation and code examples Group: Documentation BuildArch: noarch Requires: julia = %{version}-%{release} %description doc Contains the Julia manual, the reference documentation of the standard library and code examples. %package devel Summary: Julia development, debugging and testing files Group: Development/Libraries Requires: julia%{?_isa} = %{version}-%{release} %description devel Contains library symbolic links and header files for developing applications linking to the Julia library, in particular embedding it, as well as tests and a debugging version of Julia. This package is normally not needed when programming in the Julia language, but rather for embedding Julia into external programs or debugging Julia itself. %prep %setup -qn %{name}-%{version} %patch0 -p 1 # .gitignore files make rpmlint complain find . -name ".git*" -exec rm {} \; pushd deps tar xzf %SOURCE1 && mv -T libuv-%{uvcommit} libuv tar xzf %SOURCE2 && mv -T Rmath-%{Rmathcommit} Rmath # systemtap 2.5 no longer accepts this option # https://github.com/joyent/libuv/issues/1478 sed -i 's/-xnolibs//' libuv/Makefile.in popd # Required so that the image is not optimized for the build CPU # (i386 does not work yet: https://github.com/JuliaLang/julia/issues/7185) # Without specifying MARCH, the Julia system image would only work on native CPU %ifarch %ix86 %global march pentium4 %else %global march x86-64 %endif # USE_BLAS64=0 means that BLAS was built with 32-bit integers, even if the library is 64 bits # About build, build_libdir and build_bindir, see https://github.com/JuliaLang/julia/issues/5063#issuecomment-32628111 %global julia_builddir %{_builddir}/%{name}-%{version}/build %global commonopts USE_SYSTEM_LLVM=1 USE_SYSTEM_LIBUNWIND=1 USE_SYSTEM_READLINE=1 USE_SYSTEM_PCRE=1 USE_SYSTEM_OPENSPECFUN=1 USE_SYSTEM_LIBM=0 USE_SYSTEM_OPENLIBM=1 USE_SYSTEM_BLAS=1 USE_SYSTEM_LAPACK=1 USE_SYSTEM_FFTW=1 USE_SYSTEM_GMP=1 USE_SYSTEM_MPFR=1 USE_SYSTEM_ARPACK=1 USE_SYSTEM_SUITESPARSE=1 USE_SYSTEM_ZLIB=1 USE_SYSTEM_GRISU=1 USE_SYSTEM_DSFMT=1 USE_SYSTEM_LIBUV=0 USE_SYSTEM_RMATH=0 USE_LLVM_SHLIB=1 USE_SYSTEM_UTF8PROC=1 LIBBLAS=-lopenblasp LIBBLASNAME=libopenblasp.so.0 LIBLAPACK=-lopenblasp LIBLAPACKNAME=libopenblasp.so.0 VERBOSE=1 USE_BLAS64=0 MARCH=%{march} prefix=%{_prefix} bindir=%{_bindir} libdir=%{_libdir} libexecdir=%{_libexecdir} datarootdir=%{_datarootdir} includedir=%{_includedir} sysconfdir=%{_sysconfdir} build_prefix=%{julia_builddir} build_bindir=%{julia_builddir}%{_bindir} build_libdir=%{julia_builddir}%{_libdir} build_private_libdir=%{julia_builddir}%{_libdir}/julia build_libexecdir=%{julia_builddir}%{_libexecdir} build_datarootdir=%{julia_builddir}%{_datarootdir} build_includedir=%{julia_builddir}%{_includedir} build_sysconfdir=%{julia_builddir}%{_sysconfdir} %build make %{?_smp_mflags} CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" FFLAGS="%{optflags}" %commonopts make -C doc html %check pushd test # make all # Backtrace test fails with LLVM 3.4, disabled for now # https://github.com/JuliaLang/julia/issues/8099 make %commonopts core keywordargs numbers strings collections hashing \ remote iobuffer arrayops reduce reducedim \ simdloop linalg blas fft dsp sparse bitarray random \ math functional bigint sorting statistics spawn parallel arpack file \ resolve suitesparse complex version pollfd mpfr broadcast \ socket floatapprox priorityqueue readdlm regex float16 combinatorics \ sysinfo rounding ranges mod2pi euler show lineedit \ replcompletions repl test goto popd %install make %commonopts DESTDIR=%{buildroot} install # Not useful and not functional out of the Julia source tree find %{buildroot}%{_datarootdir}/julia -name "Makefile" -exec rm {} \; rm %{buildroot}%{_datarootdir}/julia/base/version_git.sh # Move documentation to docdir # https://github.com/JuliaLang/julia/issues/8367 mkdir -p %{buildroot}%{_docdir} mv %{buildroot}%{_datarootdir}/julia/doc %{buildroot}%{_docdir}/julia/ mv %{buildroot}%{_datarootdir}/julia/examples %{buildroot}%{_docdir}/julia/ cp -p CONTRIBUTING.md LICENSE.md NEWS.md README.md %{buildroot}%{_docdir}/julia/ # Install HTML manual and remove unwanted files # https://github.com/JuliaLang/julia/issues/8378 pushd %{buildroot}%{_docdir}/julia/ mv %{_builddir}/%{name}-%{version}/doc/_build/html/ html/ rm html/.buildinfo html/objects.inv popd pushd %{buildroot}%{_docdir}/julia rm -R devdocs/ images/ juliadoc/ man/ manual/ stdlib/ _build/ _templates/ # helpdb.jl is duplicated at %{_datarootdir}/julia/helpdb.jl rm conf.py DocCheck.jl helpdb.jl index.rst latex.rst NEWS-update.jl requirements.txt popd pushd %{buildroot}%{_prefix}/share/man/man1/ ln -s julia.1.gz julia-debug.1.gz popd # Install .desktop file and icons mkdir -p %{buildroot}%{_datarootdir}/icons/hicolor/scalable/apps/ mkdir -p %{buildroot}%{_datarootdir}/icons/hicolor/16x16/apps/ mkdir -p %{buildroot}%{_datarootdir}/icons/hicolor/24x24/apps/ mkdir -p %{buildroot}%{_datarootdir}/icons/hicolor/32x32/apps/ mkdir -p %{buildroot}%{_datarootdir}/icons/hicolor/48x48/apps/ mkdir -p %{buildroot}%{_datarootdir}/icons/hicolor/256x256/apps/ cp -p doc/juliadoc/juliadoc/theme/julia/static/julia-logo.svg \ %{buildroot}%{_datarootdir}/icons/hicolor/scalable/apps/%{name}.svg convert -scale 16x16 doc/juliadoc/juliadoc/theme/julia/static/julia-logo.svg \ %{buildroot}%{_datarootdir}/icons/hicolor/16x16/apps/%{name}.png convert -scale 24x24 doc/juliadoc/juliadoc/theme/julia/static/julia-logo.svg \ %{buildroot}%{_datarootdir}/icons/hicolor/24x24/apps/%{name}.png convert -scale 32x32 doc/juliadoc/juliadoc/theme/julia/static/julia-logo.svg \ %{buildroot}%{_datarootdir}/icons/hicolor/32x32/apps/%{name}.png convert -scale 48x48 doc/juliadoc/juliadoc/theme/julia/static/julia-logo.svg \ %{buildroot}%{_datarootdir}/icons/hicolor/48x48/apps/%{name}.png convert -scale 256x256 doc/juliadoc/juliadoc/theme/julia/static/julia-logo.svg \ %{buildroot}%{_datarootdir}/icons/hicolor/256x256/apps/%{name}.png mkdir -p %{buildroot}%{_datarootdir}/applications cat > %{buildroot}%{_datarootdir}/applications/%{name}.desktop << EOF [Desktop Entry] Name=Julia Comment=High-level, high-performance dynamic language for technical computing Exec=julia Icon=%{name} Terminal=true Type=Application Categories=Science;Math; EOF desktop-file-validate %{buildroot}%{_datarootdir}/applications/%{name}.desktop %files %dir %{_docdir}/julia/ %{_docdir}/julia/LICENSE.md %doc %{_docdir}/julia/CONTRIBUTING.md %doc %{_docdir}/julia/NEWS.md %doc %{_docdir}/julia/README.md %{_bindir}/julia %{_libdir}/julia/ %exclude %{_libdir}/julia/libjulia-debug.so %{_mandir}/man1/julia.1* %{_datarootdir}/appdata/%{name}.appdata.xml %{_datarootdir}/applications/%{name}.desktop %{_datarootdir}/icons/hicolor/scalable/apps/%{name}.svg %{_datarootdir}/icons/hicolor/16x16/apps/%{name}.png %{_datarootdir}/icons/hicolor/24x24/apps/%{name}.png %{_datarootdir}/icons/hicolor/32x32/apps/%{name}.png %{_datarootdir}/icons/hicolor/48x48/apps/%{name}.png %{_datarootdir}/icons/hicolor/256x256/apps/%{name}.png %files common %dir %{_datarootdir}/julia/ %{_datarootdir}/julia/base/ %exclude %{_datarootdir}/julia/base/build.h %{_datarootdir}/julia/helpdb.jl %dir %{_sysconfdir}/julia/ %config(noreplace) %{_sysconfdir}/julia/juliarc.jl %files doc %doc %{_docdir}/julia/examples/ %doc %{_docdir}/julia/html/ %files devel %{_bindir}/julia-debug %{_libdir}/julia/libjulia-debug.so %{_includedir}/julia/ %{_datarootdir}/julia/test/ %{_mandir}/man1/julia-debug.1* %post /sbin/ldconfig # Julia currently needs the unversioned .so files: # https://github.com/JuliaLang/julia/issues/6742 ln -sf %{_libdir}/libarpack.so.2 %{_libdir}/julia/libarpack.so ln -sf %{_libdir}/libdSFMT.so.2 %{_libdir}/julia/libdSFMT.so ln -sf %{_libdir}/libgmp.so.10 %{_libdir}/julia/libgmp.so ln -sf %{_libdir}/libmpfr.so.4 %{_libdir}/julia/libmpfr.so ln -sf %{_libdir}/libopenlibm.so.1 %{_libdir}/julia/libopenlibm.so ln -sf %{_libdir}/libopenspecfun.so.1 %{_libdir}/julia/libopenspecfun.so ln -sf %{_libdir}/libpcre.so.1 %{_libdir}/julia/libpcre.so /bin/touch --no-create %{_datarootdir}/icons/hicolor &>/dev/null || : exit 0 %postun /sbin/ldconfig if [ $1 -eq 0 ] ; then rm -f %{_libdir}/julia/libarpack.so rm -f %{_libdir}/julia/libdSFMT.so rm -f %{_libdir}/julia/libgmp.so rm -f %{_libdir}/julia/libmpfr.so rm -f %{_libdir}/julia/libopenlibm.so rm -f %{_libdir}/julia/libopenspecfun.so rm -f %{_libdir}/julia/libpcre.so /bin/touch --no-create %{_datarootdir}/icons/hicolor &>/dev/null /usr/bin/gtk-update-icon-cache %{_datarootdir}/icons/hicolor &>/dev/null || : fi exit 0 %posttrans /usr/bin/gtk-update-icon-cache %{_datarootdir}/icons/hicolor &>/dev/null || : %changelog * Thu Oct 23 2014 Milan Bouchet-Valat - 0.3.2-1 - New upstream release. * Sun Oct 12 2014 Milan Bouchet-Valat - 0.3.1-3 - Fix missing symlinks to libarpack, libpcre, libgmp and libmpfr, which could prevent Julia from working correcly if the -devel packages were missing. - Fix invalid hard-coded reference to /usr/lib64. * Fri Sep 26 2014 Milan Bouchet-Valat - 0.3.1-2 - Add git to dependencies, as it is needed to install packages. * Mon Sep 22 2014 Milan Bouchet-Valat - 0.3.1-1 - New upstream version. - Depend on openblas-threads instead of openblas. - Make source URL automatically depend on version. * Sat Sep 20 2014 Peter Robinson 0.3.0-10 - Add dist tag * Fri Sep 19 2014 Milan Bouchet-Valat - 0.3.0-9 - Use libopenblasp to enable threading. - Make julia-common depend on julia. * Fri Sep 19 2014 Milan Bouchet-Valat - 0.3.0-8 - Use versioned OpenBLAS library.so to work without openblas-devel. - Use LAPACK from OpenBLAS instead of reference implementation. - Add .desktop file. - Remove objects.inv feil from HTML documentation. * Thu Sep 18 2014 Milan Bouchet-Valat - 0.3.0-7 - Fix double inclusion of HTML documentation. - Improve working directory logic. * Thu Sep 18 2014 Milan Bouchet-Valat - 0.3.0-6 - Do not remove _sources directory in HTML documentation. - Make -doc depend on julia to avoid mismatches. * Wed Sep 17 2014 Milan Bouchet-Valat - 0.3.0-5 - Revert to installing performance suite (needed to run tests). - Fix double inclusion of some documentation files. - Move architecture-independent files to a -common subpackage. - Install HTML documentation instead of .rst files. - Fix build and install paths. - Remove dependencies on dSFMT-devel, openlibm-devel and openlibm-devel, replacing them with private symbolic links. - Stop installing libjulia.so to libdir. * Mon Sep 15 2014 Milan Bouchet-Valat - 0.3.0-4 - Do not install non-functional performance test suite and Makefiles. - Install documentation to docdir instead of /usr/share/julia/doc. - Clarify comment about Julia's license. * Mon Sep 15 2014 Milan Bouchet-Valat - 0.3.0-3 - Remove -xnolibs argument passed by libuv to dtrace (no longer supported by systemtap 2.5). * Fri Sep 5 2014 Milan Bouchet-Valat - 0.3.0-2 - Claim ownership of Julia directories where needed. - Move libjulia.so to the base package instead of -devel. * Thu Aug 28 2014 Milan Bouchet-Valat - 0.3.0-1 - New upstream 0.3 final release. - Set MARCH=pentium4 for 32-bit builds to work on CPUs older than core2. - Use llvm package instead of requiring llvm3.3. - Temporarily disable failing backtrace test. * Sat Jul 26 2014 Milan Bouchet-Valat - 0.3.0-0.6.rc1 - Add dSFMT-devel to Requires. - Use versioned tarball names for libuv and Rmath. * Sun Jul 06 2014 Milan Bouchet-Valat - 0.3.0-0.5.git - Bump libuv and libRmath, simplify tarball names. * Sat Jun 28 2014 Milan Bouchet-Valat - 0.3.0-0.4.git - Use system dSFMT instead of bundling it. * Thu Jun 12 2014 Milan Bouchet-Valat - 0.3.0-0.3.git - Use llvm3.3 package when llvm is 3.4 to avoid failures. - Fixes to support EPEL. * Sun May 4 2014 Milan Bouchet-Valat - 0.3.0-0.2.git - Automatically use the installed LLVM version. - Mark dSFMT as bundled library and store version in a macro. * Tue Apr 29 2014 Milan Bouchet-Valat - 0.3.0-0.1.git - New upstream version 0.3.0. - Switch to LLVM 3.4. - Drop useless %%exclude. - Add blank lines between changelog entries. * Thu Dec 12 2013 Milan Bouchet-Valat - 0.2.0-2 - Make julia a meta-package and move essential parts to julia-base. - Use %%{ix86} in ExclusiveArch rather than i386. - Use %%{buildroot}/%%{_prefix}, %%{_sysconfdir}, %%{_libdir} and %%{_mandir} instead of hardcoding paths. - Use glob pattern to match compressed or uncompressed man pages. - Move %%post and %%postun before %%files. - Add blank lines between Changelog entries. * Wed Dec 11 2013 Milan Bouchet-Valat - 0.2.0-1 - Update to upstream version 0.2.0 and use system libraries as much as possible. * Thu Jun 14 2012 Orion Poplawski - 0-0.1.giteecafbe656863a6a8ad4969f53eed358ec2e7555 - Initial package