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