# Copyright 1999-2017 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 EAPI=6 CMAKE_BUILD_TYPE=Release FORTRAN_NEEDED="fortran" PYTHON_COMPAT=( python2_7 python3_{4,5,6} ) inherit cmake-utils elisp-common eutils fortran-2 multilib \ python-single-r1 toolchain-funcs user versionator xdg-utils DESCRIPTION="C++ data analysis framework and interpreter from CERN" HOMEPAGE="https://root.cern" SRC_URI="https://root.cern.ch/download/${PN}_v${PV}.source.tar.gz" IUSE="+X afs avahi aqua asimage emacs examples fits fftw fortran +gdml geocad graphviz gsl http jemalloc kerberos ldap +math +memstat minuit mpi mysql odbc +opengl openmp oracle postgres prefix pythia6 pythia8 +python qt4 R roofit root7 shadow sqlite ssl table tbb test threads +tiff tmva vc xinetd +xml xrootd" MY_PV="$(get_version_component_range 1-2 ${PV})" MY_P="${PN}/$(get_version_component_range 1-2 ${PV})" SLOT="${MY_PV}/$(get_version_component_range 3 ${PV})" LICENSE="LGPL-2.1 freedist MSttfEULA LGPL-3 libpng UoI-NCSA" KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux ~x64-macos" REQUIRED_USE=" !X? ( !asimage !opengl !qt4 !tiff ) mpi? ( math !openmp ) openmp? ( math !mpi ) python? ( ${PYTHON_REQUIRED_USE} ) pythia6? ( !pythia8 ) pythia8? ( !pythia6 ) tmva? ( math ) " CDEPEND=" app-arch/xz-utils:0= fortran? ( dev-lang/cfortran ) dev-libs/libpcre:3= media-fonts/dejavu media-libs/freetype:2= media-libs/libpng:0= sys-devel/clang:= sys-libs/ncurses:= sys-libs/zlib:0= X? ( x11-libs/libX11:0= x11-libs/libXext:0= x11-libs/libXpm:0= opengl? ( media-libs/ftgl:0= media-libs/glew:0= virtual/opengl virtual/glu x11-libs/gl2ps:0= ) qt4? ( dev-qt/qtcore:4= dev-qt/qtgui:4= opengl? ( dev-qt/qtopengl:4= ) ) x11-libs/libXft:0= ) asimage? ( || ( media-libs/libafterimage[gif,jpeg,png,tiff?] >=x11-wm/afterstep-2.2.11[gif,jpeg,png,tiff?] ) ) afs? ( net-fs/openafs ) avahi? ( net-dns/avahi[mdnsresponder-compat] ) fits? ( sci-libs/cfitsio:0= ) fftw? ( sci-libs/fftw:3.0= ) geocad? ( =sys-devel/gcc[cxx]-$2\n"\ " >=sys-devel/clang-$3\n"\ " >=dev-lang/icc-$4" } pkg_setup() { use fortran && fortran-2_pkg_setup use python && python-single-r1_pkg_setup echo elog "There are extra options on packages not yet in Gentoo:" elog "Afdsmgrd, AliEn, castor, Chirp, dCache, gfal, Globus, gLite," elog "HDFS, Monalisa, MaxDB/SapDB, SRP, VecCore." elog "You can use the env variable EXTRA_ECONF variable for this." elog "For example, for SRP, you would set: " elog "EXTRA_ECONF=\"-Dchirp=ON\"" echo enewgroup rootd enewuser rootd -1 -1 /var/spool/rootd rootd if use math; then if use openmp; then if [[ "$(tc-getCXX)" == *g++* && "$(tc-getCXX)" != *clang++* ]] && ! tc-has-openmp; then ewarn "You are using a g++ without OpenMP capabilities" die "Need an OpenMP capable compiler" else export USE_OPENMP=1 USE_PARALLEL_MINUIT2=1 fi elif use mpi; then export USE_MPI=1 USE_PARALLEL_MINUIT2=1 fi fi # Active version of opencascade may be >= $OC_UNSUPPORTED, # so we need to eselect proper version (it must exist due to DEPEND requirement) if use geocad; then oc_current=$(eselect opencascade show) # Proceed only if active version is unsupported if version_is_at_least "${OC_UNSUPPORTED}" "${oc_current}"; then local -a vlist vlist=( $(version_sort $(eselect opencascade list | awk '/^ / { print $2 }')) ) local i # search for higehr version < $OC_UNSUPPORTED # list is sorted acsending, so loop backwards for (( i=$(( ${#vlist[@]} -1 )); i>=0; i-- )); do version_is_at_least "${OC_UNSUPPORTED}" "${vlist[i]}" || break done [[ $i == "-1" ]] && die "No suitable opencascade eselect slot is available (<${OC_UNSUPPORTED})" einfo "Switching opencascade to supported slot: ${oc_current} -> ${vlist[i]}" eselect opencascade set ${vlist[i]} > /dev/null || die "eselect opencascade set ${vlist[i]} failed!" else # forget it, effectively disabling eselect cleanup unset oc_current fi fi } src_prepare() { cmake-utils_src_prepare epatch \ "${FILESDIR}"/${PN}-5.28.00b-glibc212.patch \ "${FILESDIR}"/${PN}-5.32.00-afs.patch \ "${FILESDIR}"/${PN}-5.32.00-cfitsio.patch \ "${FILESDIR}"/${PN}-5.32.00-chklib64.patch \ "${FILESDIR}"/${PN}-6.00.01-dotfont.patch \ "${FILESDIR}"/${PN}-6.11.02-hsimple.patch # make sure we use system libs and headers rm montecarlo/eg/inc/cfortran.h README/cfortran.doc || die rm -r graf2d/asimage/src/libAfterImage || die rm -r graf3d/ftgl/{inc,src} || die rm -r graf2d/freetype/src || die rm -r graf3d/gl/src/gl2ps* || die rm -r graf3d/glew/{inc,src} || die rm -r core/pcre/src || die rm -r math/unuran/src/unuran-*.tar.gz || die rm -r core/lzma/src/*.tar.gz || die LANG=C LC_ALL=C find core/zip -type f -name "[a-z]*" -print0 | xargs -0 rm || die # CSS should use local images sed -i -e 's,http://.*/,,' etc/html/ROOT.css || die "html sed failed" # ROOT only look for older version of Oracle client, add newer one by hand # sed -i -e 's@ociw32@nnz12 libnnz12 ociw32@' cmake/modules/FindOracle.cmake || die # do not install hsimple.root sed -i -e '/install.*hsimple.root/d;' CMakeLists.txt } # Note: ROOT uses bundled LLVM, because it is patched and API-incompatible with system LLVM. # Note: ROOT will install many compiler headers and other files into suboptimal places, so # we install it into /opt due to QA concerns over the files installed into /etc src_configure() { local mycmakeargs=( -DCMAKE_C_FLAGS="${CFLAGS}" -DCMAKE_CXX_FLAGS="${CXXFLAGS}" -DCMAKE_INSTALL_PREFIX="${EPREFIX}/opt/${MY_P}" #-DCMAKE_INSTALL_LIBDIR="${EPREFIX}/usr/$(get_libdir)/${PN}" #-DCMAKE_INSTALL_INCLUDEDIR="${EPREFIX}/usr/include/${PN}" #-DCMAKE_INSTALL_SYSCONFDIR="${EPREFIX}/etc/${PN}" #-DCMAKE_INSTALL_DATAROOTDIR="${EPREFIX}/usr/share" #-DCMAKE_INSTALL_DATADIR="${EPREFIX}/usr/share/${PN}" #-DCMAKE_INSTALL_MANDIR="${EPREFIX}/usr/share/man" #-DCMAKE_INSTALL_MACRODIR="${EPREFIX}/usr/share/${PN}/macros" #-DCMAKE_INSTALL_CINTINCDIR="${EPREFIX}/usr/include/${PN}/cint" # unused #-DCMAKE_INSTALL_SRCDIR="${EPREFIX}/usr/src/${PN}" #-DCMAKE_INSTALL_FONTDIR="${EPREFIX}/usr/share/fonts" #-DCMAKE_INSTALL_DOCDIR="${EPREFIX}/usr/share/doc/${PF}" #-DCMAKE_INSTALL_TESTDIR="${EPREFIX}/usr/share/${PN}/examples/tests" #-DCMAKE_INSTALL_TUTDIR="${EPREFIX}/usr/share/${PN}/examples/tutorials" #-DCMAKE_INSTALL_ACLOCALDIR="${EPREFIX}/usr/share/aclocal" #-DCMAKE_INSTALL_CMAKEDIR="${EPREFIX}/usr/$(get_libdir)/cmake/${PN^^}" #-DCMAKE_INSTALL_ELISPDIR="${EPREFIX}/usr/share/emacs" -Dexplicitlink=ON -Dexceptions=ON -Dfail-on-missing=ON -Dshared=ON -Dsoversion=ON -Dbuiltin_llvm=ON -Dbuiltin_afterimage=OFF -Dbuiltin_cfitsio=OFF -Dbuiltin_davix=OFF -Dbuiltin_fftw3=OFF -Dbuiltin_freetype=OFF -Dbuiltin_ftgl=OFF -Dbuiltin_glew=OFF -Dbuiltin_gsl=OFF -Dbuiltin_lzma=OFF -Dbuiltin_pcre=OFF -Dbuiltin_tbb=OFF -Dbuiltin_unuran=OFF -Dbuiltin_vc=OFF -Dbuiltin_xrootd=OFF -Dbuiltin_zlib=OFF -Dx11=$(usex X) -Dxft=$(usex X) -Dafs=$(usex afs) # option not completely implemented -Dasimage=$(usex asimage) -Dastiff=$(usex tiff) -Dbonjour=$(usex avahi) # -Dlibcxx=$(usex libcxx) # default OFF -Dccache=ON -Dcastor=OFF # $(usex castor) # default ON -Dchirp=OFF # $(usex chirp) # default ON # -Dcling=$(usex cling) # default ON -Dcocoa=$(usex aqua) # default * -Ddavix=OFF #$(usex davix) # default * -Ddcache=OFF # $(usex dcache) # default ON -Dfftw3=$(usex fftw) # default ON -Dfitsio=$(usex fits) # default ON -Dfortran=$(usex fortran) # default * -Dgdml=$(usex gdml) # default * -Dgeocad=$(usex geocad) # default OFF -Dgenvector=$(usex math) # default ON -Dgfal=OFF # $(usex gfal) # default ON -Dglite=OFF #$(usex glite) # default ON (unimplemented option) -Dglobus=OFF #$(usex globus) # default OFF #-Dgminimal=$(usex gminimal) # default OFF #-Dgnuinstall=$(usex gnuinstall) # default OFF -Dgsl_shared=$(usex gsl) # default OFF -Dgviz=$(usex graphviz) # default ON -Dhdfs=OFF # $(usex hdfs) # default ON -Dhttp=$(usex http) # default * -Dimt=$(usex tbb) # default OFF -Djemalloc=$(usex jemalloc) # default OFF -Dkrb5=$(usex kerberos) # default ON -Dldap=$(usex ldap) # default ON -Dmathmore=$(usex math) # default ON -Dmemstat=$(usex memstat) # default * #-Dminimal=$(usex minimal) # default OFF -Dminuit=$(usex minuit) -Dminuit2=OFF # $(usex minuit) # default * (broken) -Dmonalisa=OFF # $(usex monalisa) # default ON -Dmt=$(usex threads) # default OFF -Dmysql=$(usex mysql) # default ON -Dodbc=$(usex odbc) # default ON -Dopengl=$(usex opengl) # default ON -Doracle=$(usex oracle) # default ON -Dpgsql=$(usex postgres) # default ON -Dpythia6=$(usex pythia6) # default ON -Dpythia8=$(usex pythia8) # default ON -Dpython=$(usex python) # default ON -Dqt=$(usex qt4) # default Qt -Dqtgsi=$(usex qt4) # default * -Droofit=$(usex roofit) # default * -Droot7=$(usex root7) # default OFF #-Droottest=$(usex test) # default OFF #-Druby=$(usex ruby) # default OFF -Dr=$(usex R) # default OFF -Drfio=OFF # $(usex rfio) # default ON -Drpath=$(usex prefix) # default OFF -Dsapdb=OFF # $(usex sapdb) # default ON -Dshadowpw=$(usex shadow) # default ON -Dsqlite=$(usex sqlite) # default ON -Dsrp=OFF # $(usex srp) # default ON (unimplemented option) -Dssl=$(usex ssl) # default ON -Dtbb=$(usex tbb) # default OFF -Dtable=$(usex table) # default * -Dtcmalloc=OFF # $(usex tcmalloc) # default OFF -Dtesting=$(usex test) # default OFF -Dthread=$(usex threads) # default ON -Dtmva=$(usex tmva) # default ON -Dunuran=$(usex math) # default * -Dvc=$(usex vc) # default * -Dvdt=OFF # $(usex math) # default ON -Dxml=$(usex xml) # default ON -Dxrootd=$(usex xrootd) # default ON ${EXTRA_ECONF} ) if use oracle ; then mycmakeargs+=( -DORACLE_PATH_INCLUDES="${ORACLE_HOME}/include" -DORACLE_PATH_LIB="${ORACLE_HOME}/$(get_libdir)" ) fi cmake-utils_src_configure } daemon_install() { local daemons="rootd proofd" dodir /var/spool/rootd fowners rootd:rootd /var/spool/rootd dodir /var/spool/rootd/{pub,tmp} fperms 1777 /var/spool/rootd/{pub,tmp} local i for i in ${daemons}; do newinitd "${FILESDIR}"/${i}.initd ${i} newconfd "${FILESDIR}"/${i}.confd ${i} done if use xinetd; then insinto /etc/xinetd doins "${BUILD_DIR}"/etc/daemons/{rootd,proofd}.xinetd fi } desktop_install() { pushd "${S}" > /dev/null echo "Icon=root-system-bin" >> etc/root.desktop domenu etc/root.desktop doicon build/package/debian/root-system-bin.png insinto /usr/share/icons/hicolor/48x48/mimetypes doins build/package/debian/application-x-root.png insinto /usr/share/icons/hicolor/48x48/apps doicon build/package/debian/root-system-bin.xpm } src_install() { cmake-utils_src_install # root fails without this symlink, because it looks only into lib [[ -d lib ]] || dosym $(get_libdir) /opt/${MY_P}/lib use emacs && elisp-install ${PN} "${BUILD_DIR}"/root-help.el echo "PATH=${EPREFIX}/opt/${MY_P}/bin" > 99root echo "LDPATH=${EPREFIX}/opt/${MY_P}/$(get_libdir)" >> 99root use pythia8 && echo "PYTHIA8=${EPREFIX}/usr" >> 99root if use python; then echo "PYTHONPATH=${EPREFIX}/opt/${MY_P}/lib" >> 99root python_optimize "${ED}/opt/${MY_P}/lib" fi doenvd 99root daemon_install desktop_install pushd "${ED}" > /dev/null rm -r opt/${MY_P}/{config,emacs,etc/vmc,fonts} || die use examples || rm -r opt/${MY_P}/{test,tutorials} || die use tmva && rm -r opt/${MY_P}/tmva || die # do not copress files used by ROOT's CLI (.credit, .demo, .license) docompress -x "opt/${MY_P}/README/CREDITS" use examples && docompress -x "opt/${MY_P}/tutorials" } pkg_postinst() { xdg_desktop_database_update # restore opencascade eselect slot if use geocad && [[ -n ${oc_current} ]]; then einfo "Switching to user set slot: $(eselect opencascade show) -> ${oc_current}" eselect opencascade set ${oc_current} > /dev/null || eerror "eselect opencascade set ${vlist[i]} failed!" unset oc_current fi } pkg_postrm() { xdg_desktop_database_update }