# [SOLVED] [Ebuild] Access violation

## Finswimmer

Hi,

ich schreibe für Publictransport das Ebuild. http://kde-look.org/content/show.php?content=106175

Nun bekomme ich diesen Fehler:

```

F: symlink

S: deny

P: /usr/share/apps/plasma_engine_publictransport/accessorInfos/at_default.xml

A: /usr/share/apps/plasma_engine_publictransport/accessorInfos/at_default.xml

R: /usr/share/apps/plasma_engine_publictransport/accessorInfos/at_default.xml

C: /usr/bin/cmake -E create_symlink /usr/share/apps/plasma_engine_publictransport/accessorInfos/at_oebb.xml /usr/share/apps/plasma_engine_publictransport/accessorInfos/at_default.xml 

F: symlink

S: deny

P: /usr/share/apps/plasma_engine_publictransport/accessorInfos/be_default.xml

A: /usr/share/apps/plasma_engine_publictransport/accessorInfos/be_default.xml

R: /usr/share/apps/plasma_engine_publictransport/accessorInfos/be_default.xml

C: /usr/bin/cmake -E create_symlink /usr/share/apps/plasma_engine_publictransport/accessorInfos/be_brail.xml /usr/share/apps/plasma_engine_publictransport/accessorInfos/be_default.xml 

```

Das Ebuild sieht so aus:

```
# Copyright 1999-2009 Gentoo Foundation

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

# $Header: $

EAPI="2"

#inherit kde4-base

DESCRIPTION="KDE plasmoid. This applet shows a departure board for a given stop."

HOMEPAGE="http://www.kde-look.org/content/show.php?content=106175"

MY_P=${P}

MY_P=${P/_beta/beta}

#MY_P2=${P/beta/}

MY_P2="publictransport-0.10beta2_timetablemate-0.2.2"

SRC_URI="http://www.kde-look.org/CONTENT/content-files/106175-${MY_P}.tar.gz"

LICENSE="GPL-2"

KEYWORDS="~amd64 ~x86"

SLOT="0"

RDEPEND="

"

### Variables

MY_WORKDIR="${WORKDIR}"/"${MY_P2}"

LIB="libpublictransporthelper-0.10"

APPLET="plasma-applet-publictransport-0.10"

DE_OPEN="plasma-dataengine-openstreetmap-0.1.1"

DE_PUBLIC="plasma-dataengine-publictransport-0.10"

RUNNER="plasma-runner-publictransport-0.1.1"

ICONS="publictransport-icons-0.10"

TIME="timetablemate-0.2.2"

src_unpack() {

        unpack ${A}

}

src_compile() {

        echo "Library"

        cd "${MY_WORKDIR}/${LIB}"

        mkdir build

        cd build

        cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ..

        make

        echo "Applet"

        cd "${MY_WORKDIR}/${APPLET}"

        mkdir build

        cd build

        cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ..

        make

        echo "Dataeengine-OpenStreetMap"

        cd "${MY_WORKDIR}"/"${DE_OPEN}"

        mkdir build

        cd build

        cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ..

        make

        echo "Dataeengine-Publictransport"

        cd "${MY_WORKDIR}"/"${DE_PUBLIC}"

        mkdir build

        cd build

        cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ..

        make

    echo "Plasma-Runner"

    cd "${MY_WORKDIR}"/"${RUNNER}"

    mkdir build

    cd build

    cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ..

    make

        echo "Icons"

        cd "${MY_WORKDIR}/${ICONS}"

        mkdir build

        #cp "${FILESDIR}/CMakeLists.txt" ./

        cd build

        cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ..

        make

        #echo "TimetableMate"

        #cd "${MY_WORKDIR}/${TIME}"

        #mkdir build

        #cd build

        #cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ..

        #make

}

src_install() {

        echo "Library"

    cd "${MY_WORKDIR}/${LIB}/build"

        pwd

        make DESTDIR="${D}" install || die "make install failed"

        echo "Applet"

        cd "${MY_WORKDIR}/${APPLET}/build"

        pwd

        make DESTDIR="${D}" install || die "make install failed"

        echo "Dataeengine-OpenStreetMap"

        cd "${MY_WORKDIR}"/"${DE_OPEN}/build"

        make DESTDIR="${D}" install || die "make install failed"

        echo "Dataeengine-Publictransport"

        cd "${MY_WORKDIR}"/"${DE_PUBLIC}/build"

        make DESTDIR="${D}" install || die "make install failed"

        echo "Icons"

        cd "${MY_WORKDIR}/${ICONS}/build"

        make DESTDIR="${D}" install || die "make install failed"

    echo "Plasma-Runner"

    cd "${MY_WORKDIR}/${RUNNER}/build"

    make DESTDIR="${D}" install || die "make install failed"

        #echo "TimetableMate"

    #cd "${MY_WORKDIR}/${TIME}/build"

    #make DESTDIR="${D}" install || die "make install failed"

}

```

Es ist mein erstes Ebuild und es gibt sicher einiges zu verbessern.

Aber was genau ist denn das Problem? Warum darf er in seinem Ordner keinen Symlink erstellen?

Danke

Tobi

----------

## Mr. Anderson

Es wird versucht, einen Symlink zu erzeugen, der nicht unterhalb von ${WORKDIR} liegt, sondern direkt irgendwo in /usr/share. Das gestattet die sandbox grundsätzlich nicht. Nur Portage darf das System verändern. Möglicherweise löst sich das Problem bereits, indem Du die Aufrufe von make durch emake ersetzt (make sollte in ebuilds grundsätzlich nicht direkt aufgerufen werden).

----------

## firefly

und eventuell hilft es auch die cmake-utils eclass zu verwenden statt direkt cmake.

schau dir mal die ebuilds von z.b. qtcurve-qt4

----------

## firefly

ich habe es hin bekommen.

Da der Author nur für die einzel Projekte mit cmake verwendet, wird es sehr schwer dafür ein einzelnes ebuild zu erstellen.

Um diese tool per ebuild zu installieren gibt es zwei möglichkeiten:

1. für jedes einzel projekt ein eigenes ebuild erstellen und für publictransport ein meta ebuild, welches die anderen ebuild als dep referenziert.

2. Das Buildsystem so patchen, dass nur ein cmake aufruf benötigt wird.

ich habe mich für die 2. Möglichkeit entschieden, weil die einfacher ist.

Das ebuild von dir habe ich angepasst und sieht nun so aus:

```
# Copyright 1999-2009 Gentoo Foundation

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

# $Header: $

EAPI="2"

inherit kde4-base

DESCRIPTION="KDE plasmoid. This applet shows a departure board for a given stop."

HOMEPAGE="http://www.kde-look.org/content/show.php?content=106175"

MY_P=${P}

#MY_P=${P/_beta/-beta}

#MY_P2=${P/_beta/}

MY_P2="publictransport-0.9_timetablemate-0.2.1"

SRC_URI="http://www.kde-look.org/CONTENT/content-files/106175-${MY_P}_ttmate-0.2.1.tar.gz"

LICENSE="GPL-2"

KEYWORDS="~amd64 ~x86"

SLOT="0"

RDEPEND="

"

### Variables

MY_WORKDIR="${WORKDIR}"/"${MY_P2}"

S="${MY_WORKDIR}"

src_unpack() {

   unpack ${A}

   cp "${FILESDIR}/CMakeLists.txt" ${S}

}

```

Die kopierte CMakeLists.txt sieht wie folgt aus:

```
##################################################

## CMake

##################################################

cmake_minimum_required(VERSION 2.6)

##################################################

## Project

##################################################

project(publictransport)

##################################################

## Projects

##################################################

add_subdirectory(plasma-dataengine-publictransport-0.9)

add_subdirectory(plasma-applet-publictransport-0.9)

add_subdirectory(plasma-runner-publictransport-0.1)

add_subdirectory(publictransport-icons-0.8.3)

add_subdirectory(plasma-dataengine-openstreetmap-0.1.1)

#add_subdirectory(timetablemate-0.2.1)
```

Besser wäre natürlich die 1. Möglichkeit, denn dann könnten andere ebuilds z.b. das ebuild von der openstreetmap dataengine referenzieren, wenn diese die openstreetdataengine auch verwenden.

----------

## Finswimmer

Hi,

wow. Vielen Dank für die Hilfe! 

Ich wollte es nun für 0.10beta2 anpassen. 

Das klappt soweit, aber libpublictransporthelper muss vor allen anderen gebaut werden, sonst gibt es eine Header Datei nicht und er stürzt ab.

Ebuilds schreiben ist echt Aufwand...

```
$cat publictransport-0.10_beta2.ebuild 

# Copyright 1999-2009 Gentoo Foundation

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

# $Header: $

EAPI="2"

inherit kde4-base

DESCRIPTION="KDE plasmoid. This applet shows a departure board for a given stop."

HOMEPAGE="http://www.kde-look.org/content/show.php?content=106175"

#MY_P=${P}

MY_P=${P/_beta/beta}

#MY_P2=${P/_beta/}

MY_P2="publictransport-0.10_timetablemate-0.2.2"

MY_P3="publictransport-0.10beta2_timetablemate-0.2.2"

SRC_URI="http://www.kde-look.org/CONTENT/content-files/106175-${MY_P}.tar.gz"

LICENSE="GPL-2"

KEYWORDS="~amd64 ~x86"

SLOT="0"

RDEPEND="

"

### Variables

MY_WORKDIR="${WORKDIR}"/"${MY_P3}"

S="${MY_WORKDIR}"

src_unpack() {

   unpack ${A}

   cp "${FILESDIR}/CMakeLists.txt" ${S}/

} 

```

```
$cat files/CMakeLists.txt 

##################################################

## CMake

##################################################

cmake_minimum_required(VERSION 2.6)

##################################################

## Project

##################################################

project(publictransport)

##################################################

## Projects

##################################################

add_subdirectory(libpublictransporthelper-0.10)

add_subdirectory(plasma-runner-publictransport-0.1.1)

add_subdirectory(plasma-dataengine-publictransport-0.10)

add_subdirectory(plasma-applet-publictransport-0.10)

add_subdirectory(publictransport-icons-0.10)

add_subdirectory(plasma-dataengine-openstreetmap-0.1.1)

#add_subdirectory(timetablemate-0.2.1)

```

----------

## franzf

Das sollte am besten vom Entwickler gefixed werden.

* Ein Toplevel-CMakeLists.txt

* in dem zentral KDE eingebunden wird (FIND_PACKAGE, etc.)

* in dem via OPTION die einzelnen Komponenten ausgewählt werden können

* Die einzelnen Komponenten haben in ihrem CMakeLists.txt ein ADD_DEPENDENCIES() stehen, das eben die libpublictransporthelper-lib als Abhängigkeit listet.

// edit:

Bin grad dabei, das hinzubiegen.

Versionierte subdirs, unversionierte includes...

Am besten im EBuild einen Symlink von libpublictransporthelper-0.10 auf publictransporthelper setzen.

Oder ging das Bauen bei euch mit den Ebuilds gut?

----------

## franzf

Finswimmer, Kannst du das mal probieren?

```
diff -urN publictransport-0.10beta2_timetablemate-0.2.2_org/CMakeLists.txt publictransport-0.10beta2_timetablemate-0.2.2/CMakeLists.txt

--- publictransport-0.10beta2_timetablemate-0.2.2_org/CMakeLists.txt   1970-01-01 01:00:00.000000000 +0100

+++ publictransport-0.10beta2_timetablemate-0.2.2/CMakeLists.txt   2011-02-07 08:56:16.000000000 +0100

@@ -0,0 +1,31 @@

+project( publictransport )

+

+# Find the required Libaries

+find_package( KDE4 REQUIRED )

+include( KDE4Defaults )

+

+add_definitions( ${QT_DEFINITIONS} ${KDE4_DEFINITIONS} )

+include_directories(${KDE4_INCLUDES} ${CMAKE_CURRENT_SOURCE_DIR})

+

+option(ENABLE_RUNNER "Enable PublicTransport Krunner-Plugin" ON)

+option(ENABLE_APPLET "Enable PublicTransport Plasma-Applet" ON)

+option(ENABLE_OPENSTREETMAP "Enable OpenStreetmap-Dataengine" ON)

+

+add_subdirectory(plasma-dataengine-publictransport-0.10)

+

+if(ENABLE_RUNNER OR ENABLE_APPLET)

+    add_subdirectory(libpublictransporthelper-0.10)

+endif(ENABLE_RUNNER OR ENABLE_APPLET)

+    

+

+if(ENABLE_RUNNER)

+    add_subdirectory(plasma-runner-publictransport-0.1.1)

+endif(ENABLE_RUNNER)

+

+if(ENABLE_APPLET)

+    add_subdirectory(plasma-applet-publictransport-0.10)

+endif(ENABLE_APPLET)

+

+if(ENABLE_OPENSTREETMAP)

+    add_subdirectory(plasma-dataengine-openstreetmap-0.1.1)

+endif(ENABLE_OPENSTREETMAP)

\ Kein Zeilenumbruch am Dateiende.

diff -urN publictransport-0.10beta2_timetablemate-0.2.2_org/libpublictransporthelper-0.10/CMakeLists.txt publictransport-0.10beta2_timetablemate-0.2.2/libpublictransporthelper-0.10/CMakeLists.txt

--- publictransport-0.10beta2_timetablemate-0.2.2_org/libpublictransporthelper-0.10/CMakeLists.txt   2011-02-07 08:24:22.000000000 +0100

+++ publictransport-0.10beta2_timetablemate-0.2.2/libpublictransporthelper-0.10/CMakeLists.txt   2011-02-07 08:27:38.000000000 +0100

@@ -1,14 +1,7 @@

-project( publictransporthelper )

 

-# Find the required Libaries

-find_package( KDE4 REQUIRED )

-include( KDE4Defaults )

-

-add_definitions( ${QT_DEFINITIONS} ${KDE4_DEFINITIONS} )

 include_directories(

    ${CMAKE_SOURCE_DIR}

-   ${CMAKE_BINARY_DIR}

-   ${KDE4_INCLUDES} )   

+   ${CMAKE_BINARY_DIR})   

 

 set( publictransporthelper_LIB_SRCS

    locationmodel.cpp

diff -urN publictransport-0.10beta2_timetablemate-0.2.2_org/plasma-applet-publictransport-0.10/CMakeLists.txt publictransport-0.10beta2_timetablemate-0.2.2/plasma-applet-publictransport-0.10/CMakeLists.txt

--- publictransport-0.10beta2_timetablemate-0.2.2_org/plasma-applet-publictransport-0.10/CMakeLists.txt   2011-02-07 08:24:22.000000000 +0100

+++ publictransport-0.10beta2_timetablemate-0.2.2/plasma-applet-publictransport-0.10/CMakeLists.txt   2011-02-07 08:51:46.000000000 +0100

@@ -1,14 +1,6 @@

-project( plasma-publictransport )

-

-# Find the required Libaries

-find_package( KDE4 REQUIRED )

-include( KDE4Defaults )

-

-add_definitions( ${QT_DEFINITIONS} ${KDE4_DEFINITIONS} )

 include_directories(

-   ${CMAKE_SOURCE_DIR}

-   ${CMAKE_BINARY_DIR}

-   ${KDE4_INCLUDES} )

+   ${CMAKE_CURRENT_SOURCE_DIR}

+   ${CMAKE_CURRENT_BINARY_DIR})

 

 # We add our source code here

 set( publictransport_SRCS

@@ -39,6 +31,8 @@

 # Now make sure all files get to the right place

 kde4_add_plugin( plasma_applet_publictransport ${publictransport_SRCS} )

 

+add_dependencies(plasma_applet_publictransport publictransporthelper)

+

 if ( ${KDE_VERSION} VERSION_LESS "4.3.80" )

     target_link_libraries( plasma_applet_publictransport

       ${KDE4_PLASMA_LIBS}

diff -urN publictransport-0.10beta2_timetablemate-0.2.2_org/plasma-dataengine-publictransport-0.10/CMakeLists.txt publictransport-0.10beta2_timetablemate-0.2.2/plasma-dataengine-publictransport-0.10/CMakeLists.txt

--- publictransport-0.10beta2_timetablemate-0.2.2_org/plasma-dataengine-publictransport-0.10/CMakeLists.txt   2011-02-07 08:24:22.000000000 +0100

+++ publictransport-0.10beta2_timetablemate-0.2.2/plasma-dataengine-publictransport-0.10/CMakeLists.txt   2011-02-07 08:52:00.000000000 +0100

@@ -1,14 +1,7 @@

-project(plasma-engine-publictransport)

 

-# Find the required Libaries

-find_package(KDE4 REQUIRED)

-include(KDE4Defaults)

-

-add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS})

 include_directories(

-   ${CMAKE_SOURCE_DIR}

-   ${CMAKE_BINARY_DIR}

-   ${KDE4_INCLUDES} )

+   ${CMAKE_CURRENT_SOURCE_DIR}

+   ${CMAKE_CURRENT_BINARY_DIR})

 

 add_subdirectory(accessorInfos)

 

diff -urN publictransport-0.10beta2_timetablemate-0.2.2_org/plasma-runner-publictransport-0.1.1/CMakeLists.txt publictransport-0.10beta2_timetablemate-0.2.2/plasma-runner-publictransport-0.1.1/CMakeLists.txt

--- publictransport-0.10beta2_timetablemate-0.2.2_org/plasma-runner-publictransport-0.1.1/CMakeLists.txt   2011-02-07 08:24:22.000000000 +0100

+++ publictransport-0.10beta2_timetablemate-0.2.2/plasma-runner-publictransport-0.1.1/CMakeLists.txt   2011-02-07 08:52:14.000000000 +0100

@@ -1,14 +1,6 @@

-project(PublictransportRunner)

-

-# Find the required Libaries

-find_package(KDE4 REQUIRED)

-include(KDE4Defaults)

-

-add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS})

 include_directories(

-   ${CMAKE_SOURCE_DIR}

-   ${CMAKE_BINARY_DIR}

-   ${KDE4_INCLUDES}

+   ${CMAKE_CURRENT_SOURCE_DIR}

+   ${CMAKE_CURRENT_BINARY_DIR}

    )

 

 ##########################

@@ -18,6 +10,9 @@

     publictransportrunner.cpp

     global.cpp )

 kde4_add_plugin(krunner_publictransport ${krunner_publictransport_SRCS})

+

+add_dependencies(krunner_publictransport publictransporthelper)

+

 target_link_libraries(krunner_publictransport

                       ${KDE4_PLASMA_LIBS} ${KDE4_KDEUI_LIBS})

 

@@ -30,6 +25,9 @@

 kde4_add_ui_files( kcm_krunner_publictransport_SRCS

     config/publicTransportRunnerConfig.ui )

 kde4_add_plugin(kcm_krunner_publictransport ${kcm_krunner_publictransport_SRCS})

+

+add_dependencies(kcm_krunner_publictransport publictransporthelper)

+

 target_link_libraries(kcm_krunner_publictransport

     ${KDE4_KDECORE_LIBS}

     ${KDE4_KDEUI_LIBS}
```

----------

## franzf

Hier das passende ebuild:

```
# Copyright 1999-2009 Gentoo Foundation

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

# $Header: $

EAPI="2"

inherit kde4-base

DESCRIPTION="KDE plasmoid. This applet shows a departure board for a given

stop."

HOMEPAGE="http://www.kde-look.org/content/show.php?content=106175"

#MY_P=${P}

MY_P=${P/_beta/beta}

#MY_P2=${P/_beta/}

MY_P2="publictransport-0.10_timetablemate-0.2.2"

MY_P3="publictransport-0.10beta2_timetablemate-0.2.2"

SRC_URI="http://www.kde-look.org/CONTENT/content-files/106175-${MY_P}.tar.gz"

LICENSE="GPL-2"

KEYWORDS="~amd64 ~x86"

SLOT="0"

IUSE="runner openstreetmap"

RDEPEND="

"

### Variables

MY_WORKDIR="${WORKDIR}"/"${MY_P3}"

S="${MY_WORKDIR}"

src_prepare() {

        epatch "${FILESDIR}/CMakeLists.txt.patch"

        ln -s "${S}/libpublictransporthelper-0.10" "${S}/publictransporthelper"

}

src_configure() {

        mycmakeargs=(

                $(cmake-utils_use_enable runner RUNNER)

                $(cmake-utils_use_enable openstreetmap OPENSTREETMAP)

                -DENABLE_APPLET=ON

        )

        kde4-base_src_configure

}
```

Das CMakeLists.txt.patch ist das von oben.

Bin da aber auch kein Experte, speziell wg. dem "ln -s" bin ich mir nicht sicher, obs da was ebuildeigenes gibt.

Allerdings gibts wieder ACCESS_VIOLATIONS. Ursache ist das SYMLiNK in plasma-dataengine-publictransport-0.10/accessorInfos/CMakeLists.txt.

Dazu hab ich aber jetzt leider keine Zeit mehr  :Sad: 

----------

## Finswimmer

Ohne etwas zu testen, erstmal vielen Dank, dass Du mir hilfst.

Wenn ich über "ebuild .... compile" das von mir angepasste Ebuild 3-4 mal den Compilevorgang "fortsetze", dann geht es ohne Probleme.

Strange...

----------

## Finswimmer

MAKEOPTS=-j1 hilft.

Die Symlinks in plasma-dataengine-publictransport-0.10/accessorInfos/CMakeLists.txt müssen relativ werden und dann klappts auch.

Ich habe den Entwickler schon angeschrieben.

Vielen Dank!

//Edit: In der nächsten Version sind die Symlinks gefixt. Damit ist das hier auch gelöst.

----------

