• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[geloest] rpmbuild und qmake

Hallo,

moechte ein rpm bauen zu einem qt Programm. Spec File siehe unten. Das Problem ist die Variable INSTALL_ROOT (aber vielleicht gibt es ja eine bessere). Alle files bis auf eines wird nach INSTALL_ROOT installiert, bei einem File wird einfach das INSTALL_ROOT ignoriert. Hat jemand eine Idee woran das liegen koennte?
 
Um das Problem zu lösen, brauche ich nicht die .spec-Datei, sondern das Makefile. Bitte ggf. irgendwo hochladen, falls es zu groß ist.

PS: qmake und "make install" mit Umleitung der installierten Dateien funktionieren oft nicht richtig zusammen, weil qmake die äußerst unangenehme Eigenschaft hat, absolute Pfade zu relativen Pfaden zu konvertieren.
 
OP
K

klaus-dieter

Hacker
Das Makefile hat ca. 730 Zeilen ist das zu lang? Habe nichts so richtig wo ich das hinlegen koennte....

Hier der Part der interessant sein koennte (ganz am Ende):

install_target: first FORCE
@$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)/usr/bin/" || $(MKDIR) "$(INSTALL_ROOT)/usr/bin/"
-$(INSTALL_FILE) "$(QMAKE_TARGET)" "$(INSTALL_ROOT)/usr/bin/$(QMAKE_TARGET)"
-strip "$(INSTALL_ROOT)/usr/bin/$(QMAKE_TARGET)"

uninstall_target: FORCE
-$(DEL_FILE) "$(INSTALL_ROOT)/usr/bin/$(QMAKE_TARGET)"
-$(DEL_DIR) "$(INSTALL_ROOT)/usr/bin/"


install_launcherScript: first FORCE
@$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)/usr/bin/" || $(MKDIR) "$(INSTALL_ROOT)/usr/bin/"
cp -f reveal /usr/bin/reveal;
 
Das hier, also das aller-allerletzte, ist schuld:
Code:
cp -f reveal /usr/bin/reveal;
Richtig wäre die Zeile so:
Code:
cp -f reveal $(INSTALL_ROOT)/usr/bin/reveal;
Leider ist das eine generierte Datei, deswegen kann man die nicht direkt ändern.

=> Schau in der zugehörigen *.pro-Datei nach, wo die Regel herkommt und bring sie wie o.a. in Ordnung.
 
OP
K

klaus-dieter

Hacker
Also im .pro File sieht das so aus:

#Launcher Script (Linux/FreeBSD)
!mac:unix:launcherScript.path = $${BIN_DIR}
!mac:unix:launcherScript.commands = cp -f reveal $${BIN_DIR}/reveal;
!mac:unix:INSTALLS += launcherScript

Soll ich - da wenn das rpm fertig ist es eh keinen mehr interessiert - den Pfad hard codiert reinschreiben? Oder kann ich irgendwie auch INSTALL_DIR dort reinbauen?

Ein cp -f reveal $${INSTALL_ROOT}$${BIN_DIR}/reveal fuehrt zum gleichen Makefile wie oben.
 

oc2pus

Ultimate Guru
1.) schau dir doch das launcher script mal an.
Evtl kannst du es auch selber kopieren an den richtigen Platz im Spec-File.
install -dm 755 %{buildroot}%{_bindir}
install -m 755 reveal %{buildroot}%{_bindir}

und im *.pro "klammerst du es aus.

2.) du musst das *.pro patchen, damit es an die richtige Stelle schreibt und diesen patch dann VOR dem qmake Aufruf im spec-File einfügen
%prep
%setup -q
%patch
 
Jochen_r schrieb:
Ein cp -f reveal $${INSTALL_ROOT}$${BIN_DIR}/reveal fuehrt zum gleichen Makefile wie oben.
Dann probier es doch mal so:
Code:
cp -f reveal $(INSTALL_ROOT)$${BIN_DIR}/reveal
Der Unterschied ist nur die Formulierung der Variable. Also nicht so:
Code:
$${INSTALL_ROOT}
Sondern so:
Code:
$(INSTALL_ROOT)
Hintergrundinfo: http://doc.trolltech.com/3.3/qmake-manual-6.html (Abschnitt "Variables")

Nachtrag - Eine bessere Dokumentation ist diese hier:

http://doc.trolltech.com/4.1/qmake-advanced-usage.html#variables

Das Verhalten hat sich zwischen Qt 3.3 und Qt 4.1 nicht geändert, d.h. Du kannst die Dokumentation für alle gängigen Qt-Versionen benutzen.

Wichtig ist: INSTALL_ROOT in runden Klammern und mit nur einem "$"-Zeichen davor. Die anderen Variablen bleiben so, wie sie original waren.
 
Oben