PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kopieren von Dateien zur Laufzeit von make install



silic
22-06-2002, 20:46
Hi !

Ich möchte bei einer autoconf-Installation meines tarballs einige Dateien nach /usr/local/bin schreiben. Da dazu root-rechte nötig sind, geht das erst in make install zur Laufzeit. Nur wie krieg ich da die nötigen Kommandos rein? Muessen die in configure eingebaut werden ? Hat das schon mal jemand gemacht? Ich möchte eben alles möglichst automatisch haben, für den normalen user gedacht. Hat jemand einen Vorschlag ?

silic
(bin zwar blutiger anfänger aber es blutet schon nicht mehr sooo stark :D )

anda_skoa
23-06-2002, 14:29
Das muß ins Makefile.am

Wenn du ein autoconf/automake framework verwendets, befindet sich vielleicht schon etwas vergleichbares in einem der anderen Makefile.ams

Hier ein Auszug aus einem Makefile.am, dass Daten eines Splashscreen installiert:


EXTRA_DIST = \
kmud.jpg \
nix_bg.jpg \
splash.html \
theme_nix.css

install-data-local:
$(mkinstalldirs) $(kde_datadir)/kmud/splash/
$(INSTALL_DATA) splash.html $(kde_datadir)/kmud/splash/splash.html
$(mkinstalldirs) $(kde_datadir)/kmud/splash/
$(INSTALL_DATA) kmud.jpg $(kde_datadir)/kmud/splash/kmud.jpg
$(mkinstalldirs) $(kde_datadir)/kmud/splash/
$(INSTALL_DATA) theme_nix.css $(kde_datadir)/kmud/splash/theme_nix.css
$(mkinstalldirs) $(kde_datadir)/kmud/splash/
$(INSTALL_DATA) nix_bg.jpg $(kde_datadir)/kmud/splash/nix_bg.jpg

uninstall-local:
-rm -f $(kde_datadir)/kmud/splash/splash.html
-rm -f $(kde_datadir)/kmud/splash/kmud.jpg
-rm -f $(kde_datadir)/kmud/splash/theme_nix.css
-rm -f $(kde_datadir)/kmud/splash/nix_bg.jpg


Das kde_datadir wird vom KDE automake/autoconf framework vordefiniert, bei dir ist es das executable directory.
Wei das heißt steht sicher in dem Makefile.am, in dem dein executable lompiliert und installiert wird.

Ciao,
_

silic
23-06-2002, 15:02
@anda_skoa: ich steig da noch nicht durch, weil mir die Syntax in Makefile.am fremd ist. Hier mal eine genauere Beschreibung des tasks: mein Makefile.am sieht so aus:

####### kdevelop will overwrite this part!!! (begin)##########

SUBDIRS = oracle

EXTRA_DIST = oracle.kdevprj admin AUTHORS COPYING ChangeLog INSTALL README TODO oracle.lsm

####### kdevelop will overwrite this part!!! (end)############
# not a GNU package. You can remove this line, if
# have all needed files, that a GNU package needs
AUTOMAKE_OPTIONS = foreign

$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ;

$(top_srcdir)/subdirs:
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs

$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in
@cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4

code:


install-data-local:
$(mkinstalldirs) $(kde_datadir)/oracle-dat
$(INSTALL_DATA) dat $(kde_datadir)/oracle-dat/dat

MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files

package-messages:
$(MAKE) -f admin/Makefile.common package-messages

dist-hook:
cd $(top_distdir) && perl admin/am_edit -padmin
cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs


ich möchte jetzt die datei beispiel die im gleichen verz steht wie das makefile in den ordner /usr/local/etc schreiben. was muss in makefile.am rein ?

silic

silic
23-06-2002, 16:51
@all:

ich habe endlich eine Info gefunden die meine probs behandelt:
http://www.tm.informatik.uni-frankfurt.de/sonstiges/dokumentation/AutomakeTut/

wollte ich noch für alle posten.

gruss silic

anda_skoa
23-06-2002, 16:53
Hmm, das könnte so gehen:




install-data-local:
$(mkinstalldirs) $(kde_datadir)/oracle-dat
$(INSTALL_DATA) dat $(kde_datadir)/oracle-dat/dat
$(mkinstalldirs) ($prefix)/etc
$(INSTALL_DATA) beispiel $(prefix)/etc/beispiel


Ciao,
_

silic
23-06-2002, 17:50
@anda_skoa: was bewirken Deine Zeilen genau ? ich habe es in makefile.am eingefügt, aber es funzt noch nicht. reichlich verwirrend das ganze. dabei will ich doch nur ein paar datafiles von meinem binary zur Laufzeit benutzen lassen :confused:

silic

silic
23-06-2002, 21:33
Hi folks,

ich versuche nochmal genau zu beschreiben, was mein prob ist, damit ihr ne chance habt mir zu helfen...

ich schreibe ein proggi welches aus einer datei mit sätzen (einen satz pro zeile) per zufall einen satz auswählt. der zufallsgenerator basiert auf einer fibonaccifolge modulo einer konstanten. die startwerte liegen auch in einer datei (random seed). Deshalb muss das proggi zur laufzeit auf die startwerte lesend und schreibend zugreifen können und auf die datei mit den saetzen lesen können.wie bringe ich dem proggi (c++) bei auf einen zur zeit der installation festgelegten pfad die dateien zu bearbeiten und wie kann ich bei der autoconf installation die dateien an einen festgelegten platz kopieren so das das binary auch darauf zugreifen kann ? das ist mein problem (etwas von der hartnäckigen sorte :( :confused: )

silic

anda_skoa
24-06-2002, 09:28
Original geschrieben von silic
@anda_skoa: was bewirken Deine Zeilen genau ? ich habe es in makefile.am eingefügt, aber es funzt noch nicht. reichlich verwirrend das ganze. dabei will ich doch nur ein paar datafiles von meinem binary zur Laufzeit benutzen lassen :confused:


Ganz sicher bin ich mir leider auch nicht.


$(mkinstalldirs) ($prefix)/etc


Das sollte das Verzeichnis etc in $prefix anlegen.
$prefix ist das Verzeichnis, das man bei ./configure --prefix angibt.
Der Defaultwert ist /usr/local



$(INSTALL_DATA) beispiel $(prefix)/etc/beispiel


Das sollte die Datei bespiel ins neue Verzeichnis kopieren.

Ich hab das so ähnlich in einem Makefie.am eines KDE Programmes gefunden (siehe eines meiner früheren Postings).

In deinem Makefile.am steht, dass es von KDevelop generoert wurde.
Wenn du händisch daran etwas änderst, mußt du in KDevelop das automatiche Generiern abschalten, sonst wird deine Änderung überschrieben.

Soweit ich weiß kann KDevelop aber auch die Regeln für Datenfiles erstellen.
Projekt->Dateieigenschaften oder so ähnlich.

Wenn du schreibend auf die Datenfiles zugreifen willst, solltest du sie vielleicht beim ersten Schreibzugriff im HOME des Users abspeichern, zB in .programmname/

Außerdem glaube ich, das Datenfiles nicht in $PREFIX/etc sondern in $PREFIX/share/programm gehören.

Ciao,
_

silic
24-06-2002, 17:42
Original geschrieben von anda_skoa

...
Soweit ich weiß kann KDevelop aber auch die Regeln für Datenfiles erstellen.
Projekt->Dateieigenschaften oder so ähnlich.


_
ja, das hat mir geholfen. man kann alle dateien im project registrieren und angeben wo es hin installiert werden soll. meine güte war das eine aktion :D :rolleyes: wer genau wissen will wie es geht, wende sich an mich per email.

dank an anda_skoa, du hast mir schon so oft geholfen ! :)

silic