| # Copyright 1999-2014 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| # $Id$ |
| |
| inherit eutils flag-o-matic gnatbuild |
| |
| DESCRIPTION="The Ada Semantic Interface Specification (tools tied to compiler). GnuAda version" |
| HOMEPAGE="http://gnuada.sourceforge.net/" |
| LICENSE="GMGPL" |
| |
| KEYWORDS="~amd64 x86" |
| |
| Gnat_Name="gnat-gcc" |
| My_PN="asis" |
| My_PV="3.4.4" |
| |
| SRC_URI="https://dev.gentoo.org/~george/src/${My_PN}-${My_PV}.tar.bz2" |
| |
| IUSE="doc" |
| RDEPEND="=dev-lang/gnat-gcc-${PV}*" |
| DEPEND="${RDEPEND} |
| doc? ( virtual/latex-base |
| app-text/texi2html |
| app-text/ghostscript-gpl )" |
| |
| S="${WORKDIR}/${My_PN}-${My_PV}" |
| |
| # Execstack is not nearly as dangerous in Ada as in C and would require a lot of |
| # work to work around. See bug #141315. |
| QA_EXECSTACK="usr/$(get_libdir)/gnat-gcc/*/${SLOT}/adalib/libasis-${SLOT}.so |
| usr/$(get_libdir)/gnat-gcc/*/${SLOT}/adalib/libasis.a |
| usr/*/gnat-gcc-bin/${SLOT}/*" |
| |
| # it may be even better to force plain -O2 -pipe -ftracer here |
| replace-flags -O3 -O2 |
| |
| # we need to adjust some vars defined in gnatbuild.eclass so that they use |
| # gnat-gcc instead of asis |
| My_LIBPATH=${LIBPATH/${PN}/${Gnat_Name}} |
| My_BINPATH=${BINPATH/${PN}/${Gnat_Name}} |
| My_DATAPATH=${DATAPATH/${PN}/${Gnat_Name}} |
| |
| pkg_setup() { |
| currGnat=$(eselect gnat show | grep "gnat-" | awk '{ print $1 }') |
| if [[ "${currGnat}" != "${CTARGET}-${Gnat_Name}-${SLOT}" ]]; then |
| echo |
| eerror "The active gnat profile does not correspond to the selected" |
| eerror "version of asis! Please install the appropriate gnat (if you" |
| eerror "did not so yet) and run:" |
| eerror "eselect gnat set ${CTARGET}-${Gnat_Name}-${SLOT}" |
| eerror "env-update && source /etc/profile" |
| eerror "and then emerge =dev-ada/asis-${PV} again.." |
| echo |
| die |
| fi |
| if [[ -e ${My_LIBPATH}/adalib/libasis.a ]] ; then |
| echo |
| ewarn "gnatmake of gnat-gcc unfortunately has problems forcind the build" |
| ewarn "if the package is already installed." |
| eerror "Please unmerge asis-gcc first and then resume the merge:" |
| eerror "emerge --unmerge asis-gcc && emerge asis-gcc" |
| echo |
| die |
| fi |
| } |
| |
| src_unpack() { |
| unpack ${A} |
| } |
| |
| src_compile() { |
| # Build the shared library first, we need -fPIC here |
| gnatmake -Pasis -cargs ${CFLAGS} || die "building libasis.a failed" |
| gnatmake -Pasis_dyn -f -cargs ${CFLAGS} || die "building libasis.so failed" |
| |
| # build tools |
| # we need version.o generated for all the tools |
| gcc -c -o obj/version.o gnat/version.c |
| for fn in asistant gnatelim gnatstub ; do |
| pushd tools/${fn} |
| gnatmake -o ${fn} ${fn}-driver.adb -I../../asis/ -I../../gnat/ \ |
| -L../../lib -cargs ${CFLAGS} -largs -lasis ../../obj/version.o \ |
| || die "building ${fn} failed" |
| popd |
| done |
| |
| pushd tools/adabrowse |
| gcc -c util-nl.c |
| gnatmake -I../../asis -I../../gnat adabrowse -L../../lib -cargs ${CFLAGS} \ |
| -largs -lasis ../../obj/version.o || die |
| popd |
| pushd tools/semtools |
| gnatmake -I../../asis -I../../gnat adadep -L../../lib \ |
| -cargs ${CFLAGS} -largs -lasis ../../obj/version.o || die |
| gnatmake -I../../asis -I../../gnat adasubst -L../../lib \ |
| -cargs ${CFLAGS} -largs -lasis ../../obj/version.o || die |
| popd |
| |
| # common stuff is just docs in this case |
| if use doc; then |
| pushd documentation |
| make all || die "Failed while compiling documentation" |
| for fn in *.ps; do ps2pdf ${fn}; done |
| popd |
| fi |
| } |
| |
| src_install () { |
| # install the lib |
| dodir ${My_LIBPATH}/adalib |
| chmod 0755 lib_dyn/libasis.so |
| cp lib_dyn/libasis.so "${D}${My_LIBPATH}"/adalib/libasis-${SLOT}.so |
| insinto ${My_LIBPATH}/adalib |
| doins obj/*.ali |
| doins lib/libasis.a |
| # make appropriate symlinks |
| pushd "${D}${My_LIBPATH}"/adalib |
| ln -s libasis-${SLOT}.so libasis.so |
| popd |
| # sources |
| insinto ${My_LIBPATH}/adainclude |
| doins gnat/*.ad[sb] |
| doins asis/*.ad[sb] |
| # two files are already part of gnat, removing to avoid collision |
| rm "${D}${My_LIBPATH}"/adainclude/g-string.ad? |
| |
| # tools |
| mkdir -p "${D}${My_BINPATH}" |
| for fn in tools/{adabrowse,asistant,gnatelim,gnatstub}; do |
| cp ${fn}/${fn:6} "${D}${My_BINPATH}" |
| done |
| cp tools/semtools/ada{dep,subst} "${D}${My_BINPATH}" |
| |
| if use doc; then |
| # docs and examples |
| dodoc documentation/*.{txt,ps} |
| dohtml documentation/*.html |
| insinto /usr/share/doc/${PF} |
| doins -r documentation/*.pdf |
| # info's should go into gnat-gpl dirs |
| insinto ${My_DATAPATH}/info/ |
| doins documentation/*.info |
| fi |
| |
| insinto /usr/share/doc/${PF} |
| doins -r examples/ tutorial/ templates/ |
| } |
| |
| pkg_postinst() { |
| echo |
| elog "The ASIS is installed for the active gnat compiler at gnat's location." |
| elog "No further configuration is necessary. Enjoy." |
| echo |
| } |