# [ebuild] Création ebuild SAGA GIS 2.0.4

## Fenril

Bonjour,

J'ai trouvé un logiciel nommé SAGA GIS qui me sera très utile, disponible ici http://www.saga-gis.org/en/index.html et dont le wiki explique comment compiler sous Linux : http://sourceforge.net/apps/trac/saga-gis/wiki/Compiling%20a%20Linux%20Unicode%20version

J'ai cherché partout et je n'ai pas trouvé d'ebuild pour Gentoo (il n'est pas proposé dans l'overlay gentoo-gis), donc j'aimerai créer un ebuild pour avoir une install propre.

Si j'ai bien à peu près saisi la construction d'un ebuild grâce au guide, en revanche je cale complètement au sujet de l'installation du paquet compilé (c'est pourquoi la section est vide  :Very Happy:  ) ; par exemple, je ne sais pas comment gérer où il s'installe, et copier l'icône pour qu'il apparaisse dans le menu de tous les DE classiques (Gnome, KDE, Xfce). Donc j'aimerai avoir votre aide pour réaliser mon premier ebuild de manière solide, et de devenir un bon constructeur d'ebuild pour me débrouiller ensuite  :Very Happy: 

Voici donc mon ebuild pour l'instant :

```
 Copyright 1999-2009 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: /var/cvsroot/gentoo-x86/sci-geosciences/saga-gis/saga-gis-2.0.4.ebuild,v 0.5 2009/10/20 15:51:03 Fenril Exp $

inherit eutils flag-o-matic versionator

DESCRIPTION="System for Automated Geoscientific Analyses"

HOMEPAGE="http://www.saga-gis.org/"

SRC_URI="http://download.sourceforge.net/saga-gis/saga_${PV}_src_linux.tar.gz"

LICENSE="GPL-FOSS"

SLOT="0"

KEYWORDS="~amd64 ~x86"

IUSE="debug"

RDEPEND="sci-libs/gdal

      sci-libs/proj

      sys-devel/automake

      media-libs/sdl-ttf

      media-libs/jasper

      x11-libs/wxGTK"

MY_PV=$(get_version_component_range 1-2)

DIRSOURCE=${WORKDIR}/saga-${MY_PV}

src_unpack() {

   unpack ${A} || die "unpack failed"

}

src_prepare() {

   cd ${DIRSOURCE}

   autoreconf -i

   if use amd64 ; then

      ./configure --enable-unicode CC="gcc -arch x86_64 --enable-FEATURE=x86_64" "CFLAGS=${CFLAGS}" \

             CXX="gcc -arch x86_64 --enable-FEATURE=x86_64" "CXXFLAGS=${CXXFLAGS}" || die "econf failed"

   else

      ./configure --enable-unicode CC="gcc" "CFLAGS=${CFLAGS}" \

             CXX="gcc" "CXXFLAGS=${CXXFLAGS}" || die "econf failed"

   fi

}

src_compile() {

   cd ${DIRSOURCE}

   make || die "make failed"

}

src_install() {

   cd ${DIRSOURCE}

   einfo "Installing ${P}..."

   make install || die "make install failed"

}

 
```

Merci d'avance.Last edited by Fenril on Fri Oct 30, 2009 12:50 pm; edited 1 time in total

----------

## Fenril

OK, bon la compilation (sur x86) se passe sans souci, mais ça échoue au "make install" et cela me retourne l'erreur suivante :

```
ACCESS DENIED  open_wr:      /usr/local/lib/libsaga_api.so.0.0.0

/usr/bin/install: cannot create regular file `/usr/local/lib/libsaga_api.so.0.0.0': Permission denied
```

Le log sandbox :

```
--------------------------- ACCESS VIOLATION SUMMARY ---------------------------

LOG FILE "/var/log/sandbox/sandbox-8070.log"

VERSION 1.0

FORMAT: F - Function called

FORMAT: S - Access Status

FORMAT: P - Path as passed to function

FORMAT: A - Absolute Path (not canonical)

FORMAT: R - Canonical Path

FORMAT: C - Command Line

F: open_wr

S: deny

P: /usr/local/lib/libsaga_api.so.0.0.0

A: /usr/local/lib/libsaga_api.so.0.0.0

R: /usr/local/lib/libsaga_api.so.0.0.0

C: /usr/bin/install -c .libs/libsaga_api.so.0.0.0 /usr/local/lib/libsaga_api.so.0.0.0 

--------------------------------------------------------------------------------
```

Il cherche à installer en /usr/local/lib/, ce qui semble poser problème. Faut-il que je change le PREFIX ou le problème est ailleurs ?

----------

## Fenril

Et si j'utilisais insinto, dolib ou autre à la place de "make install", cela me permettrait de rester dans le cadre de Portage et éviter d'alerter la sandbox ? Quelqu'un peut m'aider ?

----------

## netfab

Non, tu dois probablement utiliser une variable du type DESTDIR, regarde le makefile au niveau de la phase install.

```

emake DESTDIR="${D}" install 

```

Pour utiliser un répertoire miroir et ne pas franchir les limites de la sandbox lors de l'installation.

----------

## Fenril

OK, c'est là où je me sens un peu perdu. Il y a tellement de variables. Serait-ce prefix ? pkgdatadir ? Je colle le Makefile créé et demande quelle est la valeur :

```
# Makefile.in generated by automake 1.10.2 from Makefile.am.

# Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,

# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.

# This Makefile.in is free software; the Free Software Foundation

# gives unlimited permission to copy and/or distribute it,

# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,

# but WITHOUT ANY WARRANTY, to the extent permitted by law; without

# even the implied warranty of MERCHANTABILITY or FITNESS FOR A

# PARTICULAR PURPOSE.

pkgdatadir = $(datadir)/saga

pkglibdir = $(libdir)/saga

pkgincludedir = $(includedir)/saga

am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd

install_sh_DATA = $(install_sh) -c -m 644

install_sh_PROGRAM = $(install_sh) -c

install_sh_SCRIPT = $(install_sh) -c

INSTALL_HEADER = $(INSTALL_DATA)

transform = $(program_transform_name)

NORMAL_INSTALL = :

PRE_INSTALL = :

POST_INSTALL = :

NORMAL_UNINSTALL = :

PRE_UNINSTALL = :

POST_UNINSTALL = :

build_triplet = i686-pc-linux-gnu

host_triplet = i686-pc-linux-gnu

subdir = .

DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \

   $(srcdir)/Makefile.in $(srcdir)/config.h.in \

   $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \

   config.guess config.sub depcomp install-sh ltmain.sh missing

ACLOCAL_M4 = $(top_srcdir)/aclocal.m4

am__aclocal_m4_deps = $(top_srcdir)/configure.in

am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \

   $(ACLOCAL_M4)

am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \

 configure.lineno config.status.lineno

mkinstalldirs = $(install_sh) -d

CONFIG_HEADER = config.h

CONFIG_CLEAN_FILES =

SOURCES =

DIST_SOURCES =

RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \

   html-recursive info-recursive install-data-recursive \

   install-dvi-recursive install-exec-recursive \

   install-html-recursive install-info-recursive \

   install-pdf-recursive install-ps-recursive install-recursive \

   installcheck-recursive installdirs-recursive pdf-recursive \

   ps-recursive uninstall-recursive

RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive   \

  distclean-recursive maintainer-clean-recursive

ETAGS = etags

CTAGS = ctags

DIST_SUBDIRS = $(SUBDIRS)

DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)

distdir = $(PACKAGE)-$(VERSION)

top_distdir = $(distdir)

am__remove_distdir = \

  { test ! -d $(distdir) \

    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \

         && rm -fr $(distdir); }; }

DIST_ARCHIVES = $(distdir).tar.gz

GZIP_ENV = --best

distuninstallcheck_listfiles = find . -type f -print

distcleancheck_listfiles = find . -type f -print

ACLOCAL = ${SHELL} /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0/missing --run aclocal-1.10

AMTAR = ${SHELL} /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0/missing --run tar

AR = ar

AUTOCONF = ${SHELL} /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0/missing --run autoconf

AUTOHEADER = ${SHELL} /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0/missing --run autoheader

AUTOMAKE = ${SHELL} /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0/missing --run automake-1.10

AWK = gawk

CC = gcc

CCDEPMODE = depmode=gcc3

CFLAGS = -march=athlon-xp -O2 -pipe -fomit-frame-pointer

CPP = gcc -E

CPPFLAGS = 

CXX = gcc

CXXCPP = gcc -E

CXXDEPMODE = depmode=gcc3

CXXFLAGS = -march=athlon-xp -O2 -pipe -fomit-frame-pointer

CYGPATH_W = echo

DEFS = -DHAVE_CONFIG_H

DEPDIR = .deps

DSYMUTIL = 

DUMPBIN = 

ECHO_C = 

ECHO_N = -n

ECHO_T = 

EGREP = /bin/grep -E

EXEEXT = 

FGREP = /bin/grep -F

GREP = /bin/grep

INSTALL = /usr/bin/install -c

INSTALL_DATA = ${INSTALL} -m 644

INSTALL_PROGRAM = ${INSTALL}

INSTALL_SCRIPT = ${INSTALL}

INSTALL_STRIP_PROGRAM = $(install_sh) -c -s

LD = /usr/i686-pc-linux-gnu/bin/ld

LDFLAGS = -Wl,-O1

LIBOBJS = 

LIBS = 

LIBTOOL = $(SHELL) $(top_builddir)/libtool

LIPO = 

LN_S = ln -s

LTLIBOBJS = 

MAKEINFO = ${SHELL} /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0/missing --run makeinfo

MKDIR_P = /bin/mkdir -p

NM = /usr/bin/nm -B

NMEDIT = 

OBJDUMP = objdump

OBJEXT = o

OTOOL = 

OTOOL64 = 

PACKAGE = saga

PACKAGE_BUGREPORT = BUG-REPORT-ADDRESS

PACKAGE_NAME = saga

PACKAGE_STRING = saga 2.0

PACKAGE_TARNAME = saga

PACKAGE_VERSION = 2.0

PATH_SEPARATOR = :

POW_LIB = 

RANLIB = ranlib

SED = /bin/sed

SET_MAKE = 

SHELL = /bin/sh

STRIP = strip

VERSION = 2.0

abs_builddir = /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0

abs_srcdir = /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0

abs_top_builddir = /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0

abs_top_srcdir = /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0

ac_ct_CC = gcc

ac_ct_CXX = 

ac_ct_DUMPBIN = 

am__include = include

am__leading_dot = .

am__quote = 

am__tar = tar --format=ustar -chf - "$$tardir"

am__untar = tar -xf -

bindir = ${exec_prefix}/bin

build = i686-pc-linux-gnu

build_alias = 

build_cpu = i686

build_os = linux-gnu

build_vendor = pc

builddir = .

datadir = ${datarootdir}

datarootdir = ${prefix}/share

docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}

dvidir = ${docdir}

exec_prefix = ${prefix}

host = i686-pc-linux-gnu

host_alias = 

host_cpu = i686

host_os = linux-gnu

host_vendor = pc

htmldir = ${docdir}

includedir = ${prefix}/include

infodir = ${datarootdir}/info

install_sh = $(SHELL) /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0/install-sh

libdir = ${exec_prefix}/lib

libexecdir = ${exec_prefix}/libexec

localedir = ${datarootdir}/locale

localstatedir = ${prefix}/var

lt_ECHO = echo

mandir = ${datarootdir}/man

mkdir_p = /bin/mkdir -p

oldincludedir = /usr/include

pdfdir = ${docdir}

prefix = /usr/local

program_transform_name = s,x,x,

psdir = ${docdir}

sbindir = ${exec_prefix}/sbin

sharedstatedir = ${prefix}/com

srcdir = .

sysconfdir = ${prefix}/etc

target_alias = 

top_build_prefix = 

top_builddir = .

top_srcdir = .

SUBDIRS = . src

#AM_CFLAGS = -g -DDEBUG

#AM_CXXFLAGS = -g -DDEBUG

all: config.h

   $(MAKE) $(AM_MAKEFLAGS) all-recursive

.SUFFIXES:

am--refresh:

   @:

$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)

   @for dep in $?; do \

     case '$(am__configure_deps)' in \

       *$$dep*) \

         echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \

         cd $(srcdir) && $(AUTOMAKE) --gnu  \

      && exit 0; \

         exit 1;; \

     esac; \

   done; \

   echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \

   cd $(top_srcdir) && \

     $(AUTOMAKE) --gnu  Makefile

.PRECIOUS: Makefile

Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status

   @case '$?' in \

     *config.status*) \

       echo ' $(SHELL) ./config.status'; \

       $(SHELL) ./config.status;; \

     *) \

       echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \

       cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \

   esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)

   $(SHELL) ./config.status --recheck

$(top_srcdir)/configure:  $(am__configure_deps)

   cd $(srcdir) && $(AUTOCONF)

$(ACLOCAL_M4):  $(am__aclocal_m4_deps)

   cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)

config.h: stamp-h1

   @if test ! -f $@; then \

     rm -f stamp-h1; \

     $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \

   else :; fi

stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status

   @rm -f stamp-h1

   cd $(top_builddir) && $(SHELL) ./config.status config.h

$(srcdir)/config.h.in:  $(am__configure_deps) 

   cd $(top_srcdir) && $(AUTOHEADER)

   rm -f stamp-h1

   touch $@

distclean-hdr:

   -rm -f config.h stamp-h1

mostlyclean-libtool:

   -rm -f *.lo

clean-libtool:

   -rm -rf .libs _libs

distclean-libtool:

   -rm -f libtool config.lt

# This directory's subdirectories are mostly independent; you can cd

# into them and run `make' without going through this Makefile.

# To change the values of `make' variables: instead of editing Makefiles,

# (1) if the variable is set in `config.status', edit `config.status'

#     (which will cause the Makefiles to be regenerated when you run `make');

# (2) otherwise, pass the desired values on the `make' command line.

$(RECURSIVE_TARGETS):

   @failcom='exit 1'; \

   for f in x $$MAKEFLAGS; do \

     case $$f in \

       *=* | --[!k]*);; \

       *k*) failcom='fail=yes';; \

     esac; \

   done; \

   dot_seen=no; \

   target=`echo $@ | sed s/-recursive//`; \

   list='$(SUBDIRS)'; for subdir in $$list; do \

     echo "Making $$target in $$subdir"; \

     if test "$$subdir" = "."; then \

       dot_seen=yes; \

       local_target="$$target-am"; \

     else \

       local_target="$$target"; \

     fi; \

     (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \

     || eval $$failcom; \

   done; \

   if test "$$dot_seen" = "no"; then \

     $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \

   fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):

   @failcom='exit 1'; \

   for f in x $$MAKEFLAGS; do \

     case $$f in \

       *=* | --[!k]*);; \

       *k*) failcom='fail=yes';; \

     esac; \

   done; \

   dot_seen=no; \

   case "$@" in \

     distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \

     *) list='$(SUBDIRS)' ;; \

   esac; \

   rev=''; for subdir in $$list; do \

     if test "$$subdir" = "."; then :; else \

       rev="$$subdir $$rev"; \

     fi; \

   done; \

   rev="$$rev ."; \

   target=`echo $@ | sed s/-recursive//`; \

   for subdir in $$rev; do \

     echo "Making $$target in $$subdir"; \

     if test "$$subdir" = "."; then \

       local_target="$$target-am"; \

     else \

       local_target="$$target"; \

     fi; \

     (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \

     || eval $$failcom; \

   done && test -z "$$fail"

tags-recursive:

   list='$(SUBDIRS)'; for subdir in $$list; do \

     test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \

   done

ctags-recursive:

   list='$(SUBDIRS)'; for subdir in $$list; do \

     test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \

   done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)

   list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \

   unique=`for i in $$list; do \

       if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \

     done | \

     $(AWK) '{ files[$$0] = 1; nonempty = 1; } \

         END { if (nonempty) { for (i in files) print i; }; }'`; \

   mkid -fID $$unique

tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \

      $(TAGS_FILES) $(LISP)

   tags=; \

   here=`pwd`; \

   if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \

     include_option=--etags-include; \

     empty_fix=.; \

   else \

     include_option=--include; \

     empty_fix=; \

   fi; \

   list='$(SUBDIRS)'; for subdir in $$list; do \

     if test "$$subdir" = .; then :; else \

       test ! -f $$subdir/TAGS || \

         tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \

     fi; \

   done; \

   list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \

   unique=`for i in $$list; do \

       if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \

     done | \

     $(AWK) '{ files[$$0] = 1; nonempty = 1; } \

         END { if (nonempty) { for (i in files) print i; }; }'`; \

   if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \

     test -n "$$unique" || unique=$$empty_fix; \

     $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \

       $$tags $$unique; \

   fi

ctags: CTAGS

CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \

      $(TAGS_FILES) $(LISP)

   tags=; \

   list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \

   unique=`for i in $$list; do \

       if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \

     done | \

     $(AWK) '{ files[$$0] = 1; nonempty = 1; } \

         END { if (nonempty) { for (i in files) print i; }; }'`; \

   test -z "$(CTAGS_ARGS)$$tags$$unique" \

     || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \

        $$tags $$unique

GTAGS:

   here=`$(am__cd) $(top_builddir) && pwd` \

     && cd $(top_srcdir) \

     && gtags -i $(GTAGS_ARGS) $$here

distclean-tags:

   -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)

   $(am__remove_distdir)

   test -d $(distdir) || mkdir $(distdir)

   @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \

   topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \

   list='$(DISTFILES)'; \

     dist_files=`for file in $$list; do echo $$file; done | \

     sed -e "s|^$$srcdirstrip/||;t" \

         -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \

   case $$dist_files in \

     */*) $(MKDIR_P) `echo "$$dist_files" | \

            sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \

            sort -u` ;; \

   esac; \

   for file in $$dist_files; do \

     if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \

     if test -d $$d/$$file; then \

       dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \

       if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \

         cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \

       fi; \

       cp -pR $$d/$$file $(distdir)$$dir || exit 1; \

     else \

       test -f $(distdir)/$$file \

       || cp -p $$d/$$file $(distdir)/$$file \

       || exit 1; \

     fi; \

   done

   list='$(DIST_SUBDIRS)'; for subdir in $$list; do \

     if test "$$subdir" = .; then :; else \

       test -d "$(distdir)/$$subdir" \

       || $(MKDIR_P) "$(distdir)/$$subdir" \

       || exit 1; \

       distdir=`$(am__cd) $(distdir) && pwd`; \

       top_distdir=`$(am__cd) $(top_distdir) && pwd`; \

       (cd $$subdir && \

         $(MAKE) $(AM_MAKEFLAGS) \

           top_distdir="$$top_distdir" \

           distdir="$$distdir/$$subdir" \

      am__remove_distdir=: \

      am__skip_length_check=: \

           distdir) \

         || exit 1; \

     fi; \

   done

   -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \

     ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \

     ! -type d ! -perm -400 -exec chmod a+r {} \; -o \

     ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \

   || chmod -R a+r $(distdir)

dist-gzip: distdir

   tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz

   $(am__remove_distdir)

dist-bzip2: distdir

   tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2

   $(am__remove_distdir)

dist-lzma: distdir

   tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma

   $(am__remove_distdir)

dist-tarZ: distdir

   tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z

   $(am__remove_distdir)

dist-shar: distdir

   shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz

   $(am__remove_distdir)

dist-zip: distdir

   -rm -f $(distdir).zip

   zip -rq $(distdir).zip $(distdir)

   $(am__remove_distdir)

dist dist-all: distdir

   tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz

   $(am__remove_distdir)

# This target untars the dist file and tries a VPATH configuration.  Then

# it guarantees that the distribution is self-contained by making another

# tarfile.

distcheck: dist

   case '$(DIST_ARCHIVES)' in \

   *.tar.gz*) \

     GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\

   *.tar.bz2*) \

     bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\

   *.tar.lzma*) \

     unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\

   *.tar.Z*) \

     uncompress -c $(distdir).tar.Z | $(am__untar) ;;\

   *.shar.gz*) \

     GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\

   *.zip*) \

     unzip $(distdir).zip ;;\

   esac

   chmod -R a-w $(distdir); chmod a+w $(distdir)

   mkdir $(distdir)/_build

   mkdir $(distdir)/_inst

   chmod a-w $(distdir)

   dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \

     && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \

     && cd $(distdir)/_build \

     && ../configure --srcdir=.. --prefix="$$dc_install_base" \

       $(DISTCHECK_CONFIGURE_FLAGS) \

     && $(MAKE) $(AM_MAKEFLAGS) \

     && $(MAKE) $(AM_MAKEFLAGS) dvi \

     && $(MAKE) $(AM_MAKEFLAGS) check \

     && $(MAKE) $(AM_MAKEFLAGS) install \

     && $(MAKE) $(AM_MAKEFLAGS) installcheck \

     && $(MAKE) $(AM_MAKEFLAGS) uninstall \

     && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \

           distuninstallcheck \

     && chmod -R a-w "$$dc_install_base" \

     && ({ \

          (cd ../.. && umask 077 && mkdir "$$dc_destdir") \

          && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \

          && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \

          && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \

               distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \

         } || { rm -rf "$$dc_destdir"; exit 1; }) \

     && rm -rf "$$dc_destdir" \

     && $(MAKE) $(AM_MAKEFLAGS) dist \

     && rm -rf $(DIST_ARCHIVES) \

     && $(MAKE) $(AM_MAKEFLAGS) distcleancheck

   $(am__remove_distdir)

   @(echo "$(distdir) archives ready for distribution: "; \

     list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \

     sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'

distuninstallcheck:

   @cd $(distuninstallcheck_dir) \

   && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \

      || { echo "ERROR: files left after uninstall:" ; \

           if test -n "$(DESTDIR)"; then \

             echo "  (check DESTDIR support)"; \

           fi ; \

           $(distuninstallcheck_listfiles) ; \

           exit 1; } >&2

distcleancheck: distclean

   @if test '$(srcdir)' = . ; then \

     echo "ERROR: distcleancheck can only run from a VPATH build" ; \

     exit 1 ; \

   fi

   @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \

     || { echo "ERROR: files left in build directory after distclean:" ; \

          $(distcleancheck_listfiles) ; \

          exit 1; } >&2

check-am: all-am

check: check-recursive

all-am: Makefile config.h

installdirs: installdirs-recursive

installdirs-am:

install: install-recursive

install-exec: install-exec-recursive

install-data: install-data-recursive

uninstall: uninstall-recursive

install-am: all-am

   @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive

install-strip:

   $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \

     install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \

     `test -z '$(STRIP)' || \

       echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install

mostlyclean-generic:

clean-generic:

distclean-generic:

   -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)

maintainer-clean-generic:

   @echo "This command is intended for maintainers to use"

   @echo "it deletes files that may require special tools to rebuild."

clean: clean-recursive

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-recursive

   -rm -f $(am__CONFIG_DISTCLEAN_FILES)

   -rm -f Makefile

distclean-am: clean-am distclean-generic distclean-hdr \

   distclean-libtool distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

info: info-recursive

info-am:

install-data-am:

install-dvi: install-dvi-recursive

install-exec-am:

install-html: install-html-recursive

install-info: install-info-recursive

install-man:

install-pdf: install-pdf-recursive

install-ps: install-ps-recursive

installcheck-am:

maintainer-clean: maintainer-clean-recursive

   -rm -f $(am__CONFIG_DISTCLEAN_FILES)

   -rm -rf $(top_srcdir)/autom4te.cache

   -rm -f Makefile

maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \

   install-strip

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \

   all all-am am--refresh check check-am clean clean-generic \

   clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \

   dist-gzip dist-lzma dist-shar dist-tarZ dist-zip distcheck \

   distclean distclean-generic distclean-hdr distclean-libtool \

   distclean-tags distcleancheck distdir distuninstallcheck dvi \

   dvi-am html html-am info info-am install install-am \

   install-data install-data-am install-dvi install-dvi-am \

   install-exec install-exec-am install-html install-html-am \

   install-info install-info-am install-man install-pdf \

   install-pdf-am install-ps install-ps-am install-strip \

   installcheck installcheck-am installdirs installdirs-am \

   maintainer-clean maintainer-clean-generic mostlyclean \

   mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \

   tags tags-recursive uninstall uninstall-am

# Tell versions [3.59,3.63) of GNU make to not export all variables.

# Otherwise a system limit (for SysV at least) may be exceeded.

.NOEXPORT:

```

Merci !

----------

## netfab

Colle plutôt le Makefile.am ce sera probablement moins indigeste.

Mais à priori ce Makefile ne supporte pas la variable DESTDIR.

Donc soit tu modifies le Makefile.am pour réécrire la phase install et ajouter le DESTDIR, puis ensuite un petit coup d'automake pour régénérer les *.in

Soit tu fais comme tu as dit, tu installes manuellement les fichiers, mais :

 Faire attention à les installer au bon endroit, pour ne pas casser les liens (exécutables) et éventuellement les paths hardcodés.

 Tu es comdamné à chaque mise à jour à vérifier que tout ceci s'installe là où il faut.

Tou dépend du nombre de fichiers à installer, des types de fichiers, etc... à toi de voir.

----------

## Fenril

Le Makefile.am est quasi-vide, je le colle tout de même :

```
SUBDIRS = . src

if DEBUG

AM_CFLAGS = -g -DDEBUG

AM_CXXFLAGS = -g -DDEBUG

endif
```

Ca ne me dérange pas de le faire manuellement, mais je préférai éviter, et encore faut-il que je connaisse là où s'installe tous les fichiers.

----------

## Leander256

D'après le manuel du développeur:

 *Quote:*   

> Sometimes this will end up installing a few things into strange places. If and only if this is the case, the einstall function can be used:
> 
>     einstall || die "einstall failed"

 

Dans l'autre page de la doc ils précisent d'essayer einstall si il y a des erreurs avec la sandbox. Sinon il faudra (faire) patcher le Makefile.

----------

## Fenril

OK je vais tester. Quelle est la différence entre un make install et einstall ?

----------

## Fenril

einstall échoue. Voici l'erreur :

```
libtool: install: error: cannot install `libsaga_gdi.la' to a directory not ending in /usr/local/lib/saga

make[4]: *** [install-pkglibLTLIBRARIES] Erreur 1

make[4]: quittant le répertoire « /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0/src/saga_core/saga_gdi »

make[3]: *** [install-am] Erreur 2

make[3]: quittant le répertoire « /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0/src/saga_core/saga_gdi »

make[2]: *** [install-recursive] Erreur 1

make[2]: quittant le répertoire « /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0/src/saga_core »

make[1]: *** [install-recursive] Erreur 1

make[1]: quittant le répertoire « /var/tmp/portage/sci-geosciences/saga-gis-2.0.4/work/saga-2.0/src »

make: *** [install-recursive] Erreur 1

 * 

 * ERROR: sci-geosciences/saga-gis-2.0.4 failed.

 * Call stack:

 *               ebuild.sh, line   49:  Called src_install

 *             environment, line 2829:  Called einstall

 *               ebuild.sh, line  576:  Called die

 * The specific snippet of code:

 *         ${MAKE:-make} prefix="${D}usr" \

 *            datadir="${D}usr/share" \

 *            infodir="${D}usr/share/info" \

 *            localstatedir="${D}var/lib" \

 *            mandir="${D}usr/share/man" \

 *            sysconfdir="${D}etc" \

 *            ${LOCAL_EXTRA_EINSTALL} \

 *            "$@" install || die "einstall failed"

 *  The die message:

 *   einstall failed

 *
```

Voilà ce que j'ai mis dans la procédure src_install :

```
src_install() {

   cd ${DIRSOURCE}

   einfo "Installing ${P}..."

   einstall || die "make install failed"

}
```

Je cale vraiment  :Sad: 

----------

## netfab

Regarde ici. Et là. L'overlay n'est pas à jour, l'ebuild non plus, mais il utilisait déjà DESTDIR pour l'installation. Quelle version essaies tu d'installer ?

Edit : tu disais que l'ebuild n'etait pas dans l'overlay gentoo-gis, mais il a pourtant l'air d'être sur leur svn.

----------

## Fenril

C'est écrit dans mon titre, la 2.0.4  :Wink:  dont l'ebuild est réellement disponible nul part ; il y a des dépendances supplémentaires et différentes options dont je vais très probablement laisser la possibilité d'activer par des USE dans une future version d'ebuild. Dans les README et wiki pour Saga il n'y a pas mention sur DESTDIR, juste à propos de PREFIX. Mais j'ai un doute : la variable DESTDIR n'est-elle pas utilisé par l'eclass de base ? Je vais testé malgré tout voir si cela marche et m'inspirer de l'ebuild dont tu as fait lien  :Wink: 

----------

## Fenril

Rien à faire le DESTDIR est vide. Je crois que l'installation manuelle est obligatoire...

----------

## netfab

 *Fenril wrote:*   

> C'est écrit dans mon titre, la 2.0.4  

 

Oups oui  :Laughing: 

 *Fenril wrote:*   

> Dans les README et wiki pour Saga il n'y a pas mention sur DESTDIR, juste à propos de PREFIX. 
> 
> Mais j'ai un doute : la variable DESTDIR n'est-elle pas utilisé par l'eclass de base ?

 

Rien à voir avec PREFIX. La variable DESTDIR est définie dans le manuel d'automake et dans les GNU Coding Standards. Elle n'est pas obligatoire, mais dans ton cas serait fort utile  :Laughing: 

Si le makefile ne tient pas compte de cette variable au moment de l'installation/désinstallation (ce qui est le cas ici), on tombe sur des problèmes tels que le tiens.

D'ailleurs, en lisant l'ebuild et le Makefile de la version 2.0.1 je me demande comment elle pouvait être prise en compte.

Essaie de faire une installation dans un répertoire de ton ~ ou intégralement dans /tmp, en définissant les repertoires au moment du configure, et regarde ce qui est installé et de quelle manière.

Ensuite tu pourras soit patcher le Makefile.am pour être tranquille, soit faire une installation manuelle.

----------

## Fenril

OK, merci beaucoup netfab ! J'apprend encore beaucoup de chose ! Je vais voir quelles sont les fichiers à installer en compilant entièrement à la mano.

J'ai suivi strictement les consignes de compilation indiquées dans le wiki, qui singale de faire un autoreconf (et donc un automake), avant de lancer la compilation. Il y aurait une possibilité d'insérer DESTDIR à ce niveau là ce qui simplifierait pas mal et m'éviterait de copier les fichiers.

----------

## Fenril

Raaaaaaah pinaiz, c'est pas la première fois que j'ai la solution sous les yeux et que je continue à tourner en rond ! Ma dernière piste était la bonne, le problème se situait au niveau de l'autoreconf qui ne marchait pas correctement, et il suffit de faire comme indiqué dans le wiki :

```
[user@localhost ~]$ aclocal

[user@localhost ~]$ autoheader

[user@localhost ~]$ libtoolize

[user@localhost ~]$ automake --add-missing

[user@localhost ~]$ autoconf
```

Et miracle, ça s'installe !! Bon sang ! L'avantage c'est que j'ai appris encore un peu plus grâce à toi netfab encore merci ! Quelle satisfaction d'avoir réaliser un ebuild, même si je sais qu'il y a bien plus complexe. Gentoo je t'aime !  :Laughing:  Maintenant plus qu'à le rendre plus pro et plus propre  :Wink:  Tous les conseils sont bienvenus ! Je vais probablement m'attaquer à du plus lourd : GRASS 6.4 !

P.S. : avis aux gentooistes géomaticiens s'il y 'en a qui traînent ici : je viens de le tester un peu, il dépote pas mal à première vue ! Lecture des shp sans problème, rapide, viewer 3D, modules de géostatistiques, gestion des TIN...

----------

## Fenril

J'ai une petite question, peut-être idiote : est-ce que lorsque on désinstalle un logiciel compilé puis installé avec un ebuild personnel cela efface automatiquement tous les fichiers (librairies, exécutables...) ou bien il y a une règle importante à respecter lors de la construction de l'ebuild pour que tout s'efface proprement ?

----------

## netfab

Réponse courte : oui.

Que l'ebuild fasse partie de l'arbre officiel ou non n'a rien à voir avec la désinstallation du soft.

Pour chaque ebuild emergé, portage sait précisément quels fichiers ont été installés.

Regarde dans :

```
/var/db/pkg/${CATEGORY}/${P}/CONTENTS
```

En revanche, il me semble que les fichiers modifiés manuellement (les fichiers dans /etc par exemple) ne sont pas effacés lors de la déinstallation.

----------

## mrpouet

Lis bien le devmanual que t'as passé Leander256, normalement tu as tout ce qu'il te faut dedans (appart le fait qu'il ne soit pas trés trés à jour, mais pour débuter c'est trés bien), en particulier, renseignes toi sur les commandes externes suivante (ebuild-helpers) :

- econf que tu dois utiliser à la place de ./configure (que tu ne dois pas appeler depuis src_prepare() )

- emake à la place de make

Ensuite renseignes toi sur eapi 2  :Smile:    (en rapport avec src_prepare() ..  :Wink:  )

edit: petite spec, en général on utilise $S au lieu de $DIRSOURCE   :Smile: 

----------

## Fenril

Merci bien. J'épluche encore et encore les documents je vais j'espère devenir calé  :Laughing: 

Pour Saga-gis, il me semble qu'on ne doit pas modifier la variable $S, si on a besoin de changer le répertoire (comme ici), il faut créer une autre variable. Mais c'est vrai, le nom de ma variable est ambigüe, j'aurai pu l'appeler $MY_S, comme il est conseillé.

Sinon, j'ai remarqué que lorsqu'on compile des programme en dehors de l'arbre officiel, les librairies s'installent dans /usr/local/lib (pas toujours il est vrai). Est-il possible que la fonction get_libdir retourne cette valeur ou elle retourne celle par défaut du système, çàd /urs/lib/ ?

----------

## mrpouet

 *Fenril wrote:*   

> Merci bien. J'épluche encore et encore les documents je vais j'espère devenir calé 
> 
> Pour Saga-gis, il me semble qu'on ne doit pas modifier la variable $S, si on a besoin de changer le répertoire (comme ici), il faut créer une autre variable. Mais c'est vrai, le nom de ma variable est ambigüe, j'aurai pu l'appeler $MY_S, comme il est conseillé.
> 
> Sinon, j'ai remarqué que lorsqu'on compile des programme en dehors de l'arbre officiel, les librairies s'installent dans /usr/local/lib (pas toujours il est vrai). Est-il possible que la fonction get_libdir retourne cette valeur ou elle retourne celle par défaut du système, çàd /urs/lib/ ?

 

econf fais tout, tout seul... (--prefix=/usr etc...) , pour avoir les libs installés dans /usr/lib, il faut "dire" au configure script d'utiliser le prefix=/usr (/usr/local par defaut) , voilà pourquoi je te parles de econf  :Wink: 

Pour S, si le dossier sources n'est pas de la forme ${WORKDIR}/${PN}-${PV}  (autrement dit ${P}) si tu as besoin de le modifier, regardes ton DIRSOURCE... tu as mis saga-${MY_PV} donc visiblement si  :Smile: 

----------

## Fenril

Je n'aime pas contredire les gens qui m'aident mais là je suis obligé  :Laughing: 

le nom du paquet est saga-2.0.4.tar.gz ou un truc comme ça, mais le nom du répertoire dans lequel il est décompressé est Saga 2.0 (et non pas Saga 2.0.4). Si j'utilise $S Portage s'emmêle les pinceaux et ne trouve pas où il est dépaqueté, et donc l'install s'échoue. C'était même une de mes premières difficultés puisque Portage échoue très tôt. ${PV} me retournerait 2.0.4 tandis que ${MY_PV} me permet de retourner 2.0 (ce que je veux).

Pour ma question, en fait ce n'est pas trop le répertoire d'installation que je veux changer, mais plutôt savoir où cela s'installe pour pouvoir modifier des fichiers après l'install dans mon ebuild.

----------

