Résumé du test : tloe

Résumé de la description : Jeu vidéo sur la base d'un Diablo-like

URL Spec : Fichier SPEC

URL SRPM : Pas encore

Description : Jeu vidéo sur la base d'un Diablo-like


Bonjour,

Il est programmé sous Eclipse Fedora.
Langage : C avec la lib SDL.

J'arrive au moment où j'aimerais faire un rpm de ceci.

Donc je fais la suite :
rpmbuild -bp fichier.spec
rpmbuild -bc --short-circuit fichier.spec
Et là j'ai mon problème :
/var/tmp/rpm-tmp.35451: line 36: ./configure: No such file or directory
En effet, je n'ai qu'un MakeFile, donc il me faudrait faire un fichier configure.
Hors pour l'instant, je n'ai pas réussi à trouver de tuto ou autre...
Enlève le « %configure » dans la section %build si tu veux pas faire de configure

sinon il y a autotools
Bonsoir, merci de ton aide,

J'avais déjà regardé ce lien mais je n'avais pas trouvé les commandes.
Cependant, en y regardant de plus près, j'obtiens ca :
http://fr.wikipedia.org/wiki/Image:Autoconf.svg

Cependant, il m'a pas l'air d'être bon, ou alors j'ai mal fait mes commandes.
Par exemple "autoscan" ne me donne pas de "configure.ac" mais "configure.scan"
Ou bien la commande "ed" est bien long plus d'une minute facile comparé aux autres commandes...
Salut,

Bon première chose... Merci de respecter le format de post demandé (cf le post http://forums.fedora-fr.org/viewtopic.php?id=11788 qui se nomme tout de même « À lire avant de poster »...).

Secundo, comme te l'a dit mathieu-bo, tu peut enlever le %configure. Néanmoins, si tu développe le logiciel, le mieux serait peut-être que tu te tournes vers autotools. Certains ont essayé de faire sans, et y sont venus quand même, il doit bien y avoir une raison... (ceux là même se reconnaîtront 😉 )

Autre chose, ici, c'est l'empaquetage, il n'est pas souhaitable que cela devienne un forum de compilation et assimilés, ça existe déjà ailleurs, et ce sera probablement un meilleur endroit. Je ne souhaite pas être expéditif, mais si tu arrives en demandant une revue de RPM ou un conseil sur un .spec, tu obtiendra mon (notre) aide. Si tu demandes comment on fait un fichier configure, t'es pas sur le bon forum, on connait pas forcément (en tous cas, moi, je connais pas, et je suis pas sur ce forum pour ça) 🙂

++
trasher wrote:Néanmoins, si tu développe le logiciel, le mieux serait peut-être que tu te tournes vers autotools. Certains ont essayé de faire sans, et y sont venus quand même, il doit bien y avoir une raison... (ceux là même se reconnaîtront 😉 )
/me sifflotte
@trasher : Désolé du mauvais format de mon post, j'ai corrigé.

Après avoir désactiver le "%configure", j'ai pu avancer, voici les retours dont un nouveau problème.
[builder@LightDragon SPECS]$ rpmbuild -bp tloe.spec
Exécution_de(%prep): /bin/sh -e /var/tmp/rpm-tmp.89100
+ umask 022
+ cd /home/builder/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /home/builder/rpmbuild/BUILD
+ rm -rf tloe-0.0.3
+ /usr/bin/gzip -dc /home/builder/rpmbuild/SOURCES/tloe-0.0.3.tar.gz
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd tloe-0.0.3
++ /usr/bin/id -u
+ '[' 501 = 0 ']'
++ /usr/bin/id -u
+ '[' 501 = 0 ']'
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
[builder@LightDragon SPECS]$ rpmbuild -bc --short-circuit tloe.spec
Exécution_de(%build): /bin/sh -e /var/tmp/rpm-tmp.83649
+ umask 022
+ cd /home/builder/rpmbuild/BUILD
+ cd tloe-0.0.3
+ LANG=C
+ export LANG
+ unset DISPLAY
+ make -j3
gcc -g -W -Wall -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL     -c -o surface.o surface.c
gcc -g -W -Wall -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL     -c -o evenement.o evenement.c
gcc -g -W -Wall -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL     -c -o main.o main.c
main.c:3: warning: unused parameter 'argc'
main.c:3: warning: unused parameter 'argv'
gcc -lSDL -lpthread   -lSDL_image -o tloe surface.o evenement.o main.o
+ exit 0
[builder@LightDragon SPECS]$ rpmbuild -bi --short-circuit tloe.spec
Exécution_de(%install): /bin/sh -e /var/tmp/rpm-tmp.31593
+ umask 022
+ cd /home/builder/rpmbuild/BUILD
+ cd tloe-0.0.3
+ LANG=C
+ export LANG
+ unset DISPLAY
+ rm -rf /var/tmp/tloe-0.0.3-.fc9-root-builder
+ make DESTDIR=/var/tmp/tloe-0.0.3-.fc9-root-builder
make: Nothing to be done for `all'.
+ /usr/lib/rpm/find-debuginfo.sh /home/builder/rpmbuild/BUILD/tloe-0.0.3
find: /var/tmp/tloe-0.0.3-.fc9-root-builder: No such file or directory
erreur: Mauvais status de sortie pour /var/tmp/rpm-tmp.31593 (%install)


Erreur de construction de RPM:
    Mauvais status de sortie pour /var/tmp/rpm-tmp.31593 (%install)
Salut,
Il semble que ton makefile ne créé pas les répertoires nécessaires à son installation.
Peut tu donner un lien vers ton makefile ?

epo
re,
on sort un peu du contexte "packaging", étant donné que tu es et upstream et packageur (si j'ai bien compris). Mais si on se place juste dans le cas ou tu es packageur, tu va devoir patcher ce makefile :p. Plusieurs petites remarques :
SRC=$(shell find . -name "*.c")
HDR=$(shell find . -name "*.h")
Tu peux remplacer le "shell find" par la directive "wildcard".

- Le make file n'a pas de cible install. Il faut en général une cible qui construit l'exécutable, et une autre qui se charge de l'installation.
- Le parametre 'DESTDIR' est passé à l'installation mais n'est pas géré ensuite dans le makefile, donc pas pris en compte.
- N'ayant pas de cible pour l'install, effectivement ton makefile ne créé pas les répertoires nécessaires pour l'installation, ce qui explique l'échec lors de la création du RPM
- Enfin il faut faire attention pour CFLAGS. Il faut aussi que tu puisse prendre en compte les CFLAGS exportés avant la compilation, notamment lors de la creation du RPM, pour que les option de compilation "fedora" soient prises en compte.

A titre (et seulement) d'exemple, voici un Makefile que j'utilise. Il est tres loin d'etre parfait, mais dispose d'une cible pour l'installation, et créé les répertoires nécessaires :
#############################################################################
# Makefile for trustyRC project
# by Nicoleau Fabien (eponyme)
# Last update : 2008-06-22
#############################################################################

####### Build variables
DEBUG=no
CXX=g++
EXEC=trustyrc
TARGET_DIR=.
SRC_DIR=src
SRC_PLUGINS_DIR=$(SRC_DIR)/plugins
PLUGINS_DIR=plugins
EXEC_OBJ=$(patsubst %.cpp,%.o,$(wildcard $(SRC_DIR)/*.cpp)) # sub .cpp to .o for all .cpp files in src dir
PLUGINS_SOBJ=$(patsubst %.cpp,%.so,$(addprefix $(PLUGINS_DIR)/,$(notdir $(wildcard $(SRC_DIR)/plugins/*.cpp)))) # remove path, add plugins_dir as prefix, and replace .cpp by .so for all .cpp file in src plugins dir
TINYXML=$(patsubst %.cpp,%.o,$(wildcard $(SRC_DIR)/tinyxml/*.cpp))

####### system commands
INSTALL_PROGRAM=install -m 755 -p
INSTALL_DATA=install -m 644 -p
DEL_FILE=rm -f
DEL_DIR=rmdir -p --ignore-fail-on-non-empty
MKDIR=mkdir -p
CHK_DIR_EXISTS=test -d
SED=sed -i -e
CHMOD=chmod

####### Installation parameters
LIB=lib
PREFIX=/usr/local
DESTDIR=
BINDIR=$(DESTDIR)$(PREFIX)/bin
LIBDIR=$(DESTDIR)$(PREFIX)/$(LIB)/trustyrc
SYSCONFDIR=$(DESTDIR)/etc

####### FLAGS ans Debug mode and tinyxml integration
HAVE_TINYXML=no
CXXFLAGS=-Wall -W -ansi -Werror -pedantic -fPIC
PLUGFLAGS=$(CXXFLAGS) -shared -Wno-unused-parameter
LDFLAGS=-ldl -rdynamic
ifeq ($(DEBUG),yes)
    CXXFLAGS+=-g
   PLUGFLAGS+=-g
   LDFLAGS+=-g
   all: mrproper $(EXEC) shared_libs
else
   all: $(EXEC) shared_libs
endif

ifeq ($(HAVE_TINYXML),yes)
   LDFLAGS+=-ltinyxml
   TINYXML=
   TINYXML_SED=$(SED) "s@^//\#define HAVE_TINYXML@\#define HAVE_TINYXML@" $(SRC_DIR)/plugin.h
else 
   TINYXML_SED=$(SED) "s@^\#define HAVE_TINYXML@//\#define HAVE_TINYXML@" $(SRC_DIR)/plugin.h
endif

####### Targets rules
$(EXEC): $(EXEC_OBJ) $(TINYXML)
    $(CXX) -o $(TARGET_DIR)/$@ $^ $(LDFLAGS)
%.o: %.c
    $(CXX) -o $@ -c $< $(CXXFLAGS)

tinyxml: $(TINYXML)
%.o: %.c
    $(CXX) -o $@ -c $< $(CXXFLAGS)

set_tinyxml:
    @$(TINYXML_SED)

shared_libs: set_tinyxml $(PLUGINS_SOBJ) 

$(PLUGINS_DIR)/%.so: $(SRC_PLUGINS_DIR)/%.cpp
    $(CXX) -o $@ $^ $(PLUGFLAGS)

## specific rules
$(PLUGINS_DIR)/ignore.so: $(SRC_PLUGINS_DIR)/ignore.cpp $(SRC_PLUGINS_DIR)/admin.cpp
    $(CXX) -o $@ $^ $(PLUGFLAGS)

$(PLUGINS_DIR)/lamoule.so: $(SRC_PLUGINS_DIR)/lamoule.cpp $(SRC_PLUGINS_DIR)/admin.cpp $(SRC_PLUGINS_DIR)/usersinfos.cpp
    $(CXX) -o $@ $^ $(PLUGFLAGS) 

$(PLUGINS_DIR)/moderation.so: $(SRC_PLUGINS_DIR)/moderation.cpp $(SRC_PLUGINS_DIR)/admin.cpp $(SRC_PLUGINS_DIR)/usersinfos.cpp
    $(CXX) -o $@ $^ $(PLUGFLAGS)

$(PLUGINS_DIR)/module.so: $(SRC_PLUGINS_DIR)/module.cpp $(SRC_PLUGINS_DIR)/admin.cpp
    $(CXX) -o $@ $^ $(PLUGFLAGS)

$(PLUGINS_DIR)/quotes.so: $(SRC_PLUGINS_DIR)/quotes.cpp $(SRC_PLUGINS_DIR)/admin.cpp
    $(CXX) -o $@ $^ $(PLUGFLAGS)

$(PLUGINS_DIR)/advertising.so: $(SRC_PLUGINS_DIR)/advertising.cpp $(SRC_PLUGINS_DIR)/admin.cpp
    $(CXX) -o $@ $^ $(PLUGFLAGS)

$(PLUGINS_DIR)/survey.so: $(SRC_PLUGINS_DIR)/survey.cpp $(SRC_PLUGINS_DIR)/admin.cpp
    $(CXX) -o $@ $^ $(PLUGFLAGS)

$(PLUGINS_DIR)/bzrh.so: $(SRC_PLUGINS_DIR)/bzrh.cpp
    $(CXX) -o $@ $^ $(PLUGFLAGS) -lcurl

$(PLUGINS_DIR)/fedoraproject.so: $(SRC_PLUGINS_DIR)/fedoraproject.cpp
    $(CXX) -o $@ $^ $(PLUGFLAGS) -lcurl

####### (un)installation / cleaning
install: all 
    @$(CHK_DIR_EXISTS) $(BINDIR) || $(MKDIR) $(BINDIR)
    @$(CHK_DIR_EXISTS) $(LIBDIR) || $(MKDIR) $(LIBDIR)
    @$(CHK_DIR_EXISTS) $(SYSCONFDIR) || $(MKDIR) $(SYSCONFDIR)
    $(INSTALL_PROGRAM) $(TARGET_DIR)/$(EXEC) $(BINDIR)/$(EXEC)
    $(INSTALL_DATA) $(PLUGINS_DIR)/* $(LIBDIR)/
    $(INSTALL_DATA) trustyrc.conf $(SYSCONFDIR)/
    @$(CHMOD) +x $(LIBDIR)/*.so
    @$(SED) "s@kernel.plugdir=.*@kernel.plugdir=$(LIBDIR)@" $(SYSCONFDIR)/trustyrc.conf
    @echo "PREFIX=$(PREFIX) DESTDIR=$(DESTDIR) BINDIR=$(BINDIR) LIBDIR=$(LIBDIR) SYSCONFDIR=$(SYSCONFDIR) LIB=$(LIB)" > make_install_params
    @$(CHMOD) 666 make_install_params

uninstall: 
    $(DEL_FILE) $(BINDIR)/$(EXEC)
    $(DEL_FILE) $(LIBDIR)/*
    $(DEL_FILE) $(SYSCONFDIR)/trustyrc.conf
    $(DEL_DIR) $(BINDIR)
    $(DEL_DIR) $(LIBDIR)
    $(DEL_DIR) $(SYSCONFDIR)

.PHONY: clean mrproper

clean:
    rm -f $(SRC_DIR)/*.o $(SRC_DIR)/*~ $(SRC_DIR)/tinyxml/*.o $(SRC_DIR)/tinyxml/*~ $(SRC_PLUGINS_DIR)/*.o $(SRC_PLUGINS_DIR)/*.so $(SRC_PLUGINS_DIR)/*~

mrproper: clean
    rm -f $(PLUGINS_DIR)/* $(EXEC) make_install_params
en espérant que ca t'aide.

epo
- Enfin il faut faire attention pour CFLAGS. Il faut aussi que tu puisse prendre en compte les CFLAGS exportés avant la compilation, notemment lors du RPM, pour que les option de compilation "fedora" soient prises en compte.
Pas de souci pour ça : la compilation des fichiers sources .c en fichiers objets .o fait parti des règles implicites de Make, ce pourquoi une clause " %.o: %.c" est superflue et n'apparaît pas dans le makefile d'eldege. De plus, cette "compilation implicite" fait bien appel à CFLAGS, ce qu'on pourra vérifier en lançant le Makefile en mode "simulation" pour afficher les commandes effectivement exécutées :
$ make -n

P.S. : le wilcard est pas mal, mais ne fait pas de recherche "en profondeur" dans une arborescence, si je ne m'abuse ^^.
Effectiveemnt pikachu.
En fait je parlais des CFLAGS plus par rapport au spec.
N'ayant pas de configure, il faudra exporter le %{optflags}.
Et il me semble que si les options sont fixées dans le makefile, l'export ne sera pas pris en compte.

epo
Dans ce cas, on pourrait utiliser l'opérateur de concaténation "+=" sur CFLAGS :
CFLAGS+=-g -W -Wall $(shell pkg-config --cflags sdl)

Ainsi pourront être passés à make des flags "personnels" qui s'ajouteront à ceux fixés dans le Makefile ; en particulier les "%{optflags}" :
make CFLAGS=$RPM_OPT_FLAGS
Je viens de relire ton spec. Juste quelques trucs vus rapidement
- La section %files n'est pas renseignée, mais je suppose que tu n'es pas encore rendu la.
- Pour le changelog, je pense qu'il vaut mieux écrire en anglais
- Tu as mis gcc en BR, en général on ne le mets pas je pense
- Par contre pourquoi mettre gcc en Requires ?
- Il manque la release (avant le distag et dans le changelog)

epo
Pikachu_2014 wrote:Dans ce cas, on pourrait utiliser l'opérateur de concaténation "+=" sur CFLAGS :
CFLAGS+=-g -W -Wall $(shell pkg-config --cflags sdl)

Ainsi pourront être passés à make des flags "personnels" qui s'ajouteront à ceux fixés dans le Makefile ; en particulier les "%{optflags}" :
make CFLAGS=$RPM_OPT_FLAGS
Je pensais a quelque chose de la sorte Pika. J'ai patché le Makefile que j'ai pasté pour prendre les optflags de cette facon, sans savoir si c'était "propre" ou pas. Ca n'a pas gené le reveiwer.

epo
eponyme wrote:- La section %files n'est pas renseignée, mais je suppose que tu n'es pas encore rendu la.
- Pour le changelog, je pense qu'il vaut mieux écrire en anglais
- Tu as mis gcc en BR, en général on ne le mets pas je pense
- Par contre pourquoi mettre gcc en Requires ?
- Il manque la release (avant le distag et dans le changelog)
- En effet, je ne l'ai pas rempli volontaire, ne sachant pas encore ce qu'il pourrait se passer lors de l'installation, mais je pense que je devrais ajouter le dossier image de mon projet.
Quelque chose comme ~/rpmbuild/BUILD/image ?
- Alors là, je vais devoir prendre mon petit dico
- La seul librairie que j'utilise est SDL, il faudrait que je regarde si j'arrive à la mettre de nouveau dedans, la dernière fois, j'avais pas réussi.
- Pareil je pense qu'on a besoin de la lib SDL pour l'exécuter.
- Là c'est un oubli de ma part !

Pour le Makefile, je vais essayer de le refais ce soir 🙂
Merci de vos conseils !
eldege wrote:
eponyme wrote:- La section %files n'est pas renseignée, mais je suppose que tu n'es pas encore rendu la.
- Pour le changelog, je pense qu'il vaut mieux écrire en anglais
- Tu as mis gcc en BR, en général on ne le mets pas je pense
- Par contre pourquoi mettre gcc en Requires ?
- Il manque la release (avant le distag et dans le changelog)
- En effet, je ne l'ai pas rempli volontaire, ne sachant pas encore ce qu'il pourrait se passer lors de l'installation, mais je pense que je devrais ajouter le dossier image de mon projet.
Quelque chose comme ~/rpmbuild/BUILD/image ?
- Alors là, je vais devoir prendre mon petit dico
- La seul librairie que j'utilise est SDL, il faudrait que je regarde si j'arrive à la mettre de nouveau dedans, la dernière fois, j'avais pas réussi.
- Pareil je pense qu'on a besoin de la lib SDL pour l'exécuter.
- Là c'est un oubli de ma part !

Pour le Makefile, je vais essayer de le refais ce soir 🙂
Merci de vos conseils !
Pour la section files, on utilise les chemins des fichiers installés. Il faudra donc indiquer le chemin des images installées.
Je pense qu'il doit falloir aussi ajouter en BuildRequires quelque chose pour SDL (un SDL-devel peut etre). Je n'ai pas de fedora sous la main donc je ne peux pas vérifier. A voir.

epo
Bonsoir,

Après avoir mis à jour ces deux fichiers :
Fichier SPEC
Makefile
[builder@LightDragon SPECS]$ rpmbuild -bi --short-circuit tloe.spec 
Exécution_de(%install): /bin/sh -e /var/tmp/rpm-tmp.2991
+ umask 022
+ cd /home/builder/rpmbuild/BUILD
+ cd tloe-0.0.3
+ LANG=C
+ export LANG
+ unset DISPLAY
+ rm -rf /var/tmp/tloe-0.0.3-1.fc9-root-builder
+ make install DESTDIR=/var/tmp/tloe-0.0.3-1.fc9-root-builder
install -m 755 -p tloe /var/tmp/tloe-0.0.3-1.fc9-root-builder/tloe
install -m 644 -p image/* /var/tmp/tloe-0.0.3-1.fc9-root-builder/image/
+ /usr/lib/rpm/find-debuginfo.sh /home/builder/rpmbuild/BUILD/tloe-0.0.3
extracting debug info from /var/tmp/tloe-0.0.3-1.fc9-root-builder/tloe
14 blocks
+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/brp-python-bytecompile
+ /usr/lib/rpm/redhat/brp-python-hardlink
+ /usr/lib/rpm/redhat/brp-java-repack-jars
Traitement des fichiers: tloe-0.0.3-1.fc9
Traitement des fichiers: tloe-debuginfo-0.0.3-1.fc9
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Vérification des fichiers non empaquetés: /usr/lib/rpm/check-files /var/tmp/tloe-0.0.3-1.fc9-root-builder
erreur: Fichier(s) installé(s) (mais non empaquetés):
   /image/0000.bmp
   /image/0111.bmp
   /image/1011.bmp
   /image/1101.bmp
   /image/1110.bmp
   /image/perso.bmp
   /tloe


Erreur de construction de RPM:
    Fichier(s) installé(s) (mais non empaquetés):
   /image/0000.bmp
   /image/0111.bmp
   /image/1011.bmp
   /image/1101.bmp
   /image/1110.bmp
   /image/perso.bmp
   /tloe
Là, je pense que je touche au bout, le "install" c'est bien passé.

Je pense qu'il me manque %files dans le spec.
Cependant, je ne sais pas quoi mettre comme dossier source.
Dans la section %files tu dois déclarer les fichiers installés (le chemin est celui d'installation).
Il est normal que tu ai une erreur, car tu n'as pas déclaré de fichiers dans la section %files. Il te dis donc qu'ils sont installés, mais non empaquetés.

Si tu les déclare, ca passera, mais ca ne sera pas pour autant correct. Si tu laisse en l'état, ton exécutable et tes images se retrouverons dans / (la section "install" travaillant dans RPM_BUILD_ROOT, tes fichiers se retrouve à la racine de ce répertoire, qui correspondra à / à l'installation du RPM).
Ton exécutable doit etre installé par défaut par ton makefile dans /usr/local/bin et tes images dans les datas. Il faut donc modifier ton makefile pour qu'il installe les données au bon endroit, en étant capable de prendre en compte des chemins, du type "PREFIX" (voir le makefile que je t'ai donné). De plus, il faudra aussi que ton application soit capable d'aller chercher les images au bon endroit. Le chemin peut etre donné à la compil' (souvent le cas avec un configure), ou alors parametrable.

Le mieu est d'abord de faire un bon makefile. Installe "a la main" ton appli et voit le comportement. Ensuite le SPEC suivra.

epo