CC = gcc
APP_NAME_server = sem_server
APP_NAME_client = sem_client
EXE_EXT = .exe

# Version stardard
CFLAGS = -Wall -ansi -pedantic
# Version avec debogage force
#CFLAGS = -Wall -ansi -pedantic -DDEBUGGING=1
LIBS =

.SUFFIXES:.o .c

SRC_server = $(APP_NAME_server).c $(APP_NAME_server).h j_net.c j_net.h sem_gest.c sem_sock_serv.c sem_gen.c sem_gen.h sem_config.h sem_debug.h
OBJ_server = $(APP_NAME_server).o j_net.o sem_gest.o sem_sock_serv.o sem_gen.o
SRC_client = $(APP_NAME_client).c j_net.c j_net.h sem_interface.c sem_interface.h sem_gen.c sem_gen.h sem_config.h sem_debug.h
OBJ_client = $(APP_NAME_client).o j_net.o sem_interface.o sem_gen.o

all : server client
	@date -I > timestamp
	@echo "Compilation successful."

clean :
	rm -f *.o $(APP_NAME_server)$(EXE_EXT) $(APP_NAME_client)$(EXE_EXT) timestamp core sem_server.pid sem_server.port *.o

force :
	touch $(SRC_server) $(SRC_client) j_net.c
	make all

strip : $(APP_NAME_server)$(EXE_EXT) $(APP_NAME_client)$(EXE_EXT)
	strip -s $(APP_NAME_server)$(EXE_EXT) $(APP_NAME_client)$(EXE_EXT)

superstrip : $(APP_NAME_server)$(EXE_EXT) $(APP_NAME_client)$(EXE_EXT)
	make strip
	upx -9 $(APP_NAME_server)$(EXE_EXT) $(APP_NAME_client)$(EXE_EXT)

.c.o :
	$(CC) $*.c -c -o $*.o $(CFLAGS)

server sem_server : $(APP_NAME_server)$(EXE_EXT)

client sem_client : $(APP_NAME_client)$(EXE_EXT)

$(APP_NAME_server)$(EXE_EXT) : $(OBJ_server)
	$(CC) $(OBJ_server) -o $(APP_NAME_server)$(EXE_EXT) $(LIBS)
	@echo "$(APP_NAME_server) built"

$(APP_NAME_client)$(EXE_EXT) : $(OBJ_client)
	$(CC) $(OBJ_client) -o $(APP_NAME_client)$(EXE_EXT) $(LIBS)
	@echo "$(APP_NAME_client) built"

j_net.o : j_net.c j_net.h
	$(CC) -c j_net.c -o j_net.o $(CFLAGS) $(LIBS)
	@echo "j_net successfully built."
