# C and C++ compilers
CC = gcc
CXX = g++

# Użyj poniższych ustawień, jeśli masz mysql_config. W przypadku posiadania
# wielu instalacji MySQL, możesz skompilować bibliotekę klienta
# z dowolnej instalacji przez zmianę wartości MYSQL_CONFIG na
# pełną ścieżkę dostępu do tej wersji mysql_config, której
# zamierzasz użyć.
MYSQL_CONFIG = mysql_config
INCLUDES = ${shell $(MYSQL_CONFIG) --include}
LIBS = ${shell $(MYSQL_CONFIG) --libs}
EMBLIBS = ${shell $(MYSQL_CONFIG) --libmysqld-libs}

# Użyj poniższych ustawień, jeśli nie masz mysql_config; wprowadź odpowiednie modyfikacje.
#INCLUDES = -I/usr/local/mysql/include/mysql
#LIBS = -L/usr/local/mysql/lib/mysql -lmysqlclient #-lm -lsocket -lnsl
#EMBLIBS = -L/usr/local/mysql/lib/mysql -lmysqld #-lm -lsocket -lnsl

ALL_PROGRAMS = connect1 show_argv show_opt connect2 exec_stmt \
	exec_stmt_ssl exec_stmt_multi embapp prepared stats binary metadata \
	protocol prepared_call

default::
	@echo "Co chcesz skompilować, na przykład:"
	@echo "make all - kompilacja wszystkich programów"
	@echo "make progname - kompilacja programu o nazwie 'progname'"
	@echo "Dozwolone wartości progname:"
	@echo "$(ALL_PROGRAMS)"

all:: $(ALL_PROGRAMS)

.c.o:
	$(CC) -c $(INCLUDES) $<

# Proste nawiązanie połączenia, a następnie jego zamknięcie.

connect1:: connect1.o
	$(CC) -o $@ connect1.o $(LIBS)

# Pokazanie efektu użycia funkcji load_defaults() względem tablicy argumentów.

show_argv:: show_argv.o
	$(CC) -o $@ show_argv.o $(LIBS)

# Pookazanie, jak przetwarzać opcje wiersza poleceń.

show_opt:: show_opt.o
	$(CC) -o $@ show_opt.o $(LIBS)

# Nawiązanie i zamknięcie połączenia oraz przetwarzenie opcji wiersza poleceń.

connect2:: connect2.o
	$(CC) -o $@ connect2.o $(LIBS)

# Prosty klient do wykonywania zapytań.

exec_stmt.o: exec_stmt.c \
	process_statement.c \
	process_result_set.c
exec_stmt:: exec_stmt.o
	$(CC) -o $@ exec_stmt.o $(LIBS)

# Wersja klienta obsługująca połączenia SSL.

exec_stmt_ssl.o: exec_stmt_ssl.c \
	process_statement.c \
	process_result_set.c
exec_stmt_ssl:: exec_stmt_ssl.o
	$(CC) -o $@ exec_stmt_ssl.o $(LIBS)

# Umożliwiająca wykonywanie wielu zapytań wersja klienta exec_stmt_ssl.

exec_stmt_multi.o: exec_stmt_multi.c \
	process_multi_statement.c \
	process_result_set.c
exec_stmt_multi:: exec_stmt_multi.o
	$(CC) -o $@ exec_stmt_multi.o $(LIBS)

# Aplikacja wbudowanego serwera. Jest linkowana w EMBLIBS

embapp.o: embapp.c \
	process_statement.c \
	process_result_set.c
embapp:: embapp.o
	$(CXX) -o $@ embapp.o $(EMBLIBS)

# Prezentacja zapytań składowanych.

prepared.o: prepared.c \
	process_prepared_statement.c \
	process_result_set.c
prepared:: prepared.o
	$(CXX) -o $@ prepared.o $(LIBS)

stats.o: stats.c summary_stats.c
stats:: stats.o
	$(CC) -o $@ stats.o $(LIBS)

binary.o: binary.c load_image.c
binary:: binary.o
	$(CC) -o $@ binary.o $(LIBS)

metadata.o: metadata.c \
	process_statement.c \
	process_result_meta.c
metadata:: metadata.o
	$(CC) -o $@ metadata.o $(LIBS)

# Wersja klienta exec_stmt obsługująca opcję --protcol.

protocol.o: protocol.c \
	process_statement.c \
	process_result_set.c
protocol:: protocol.o
	$(CC) -o $@ protocol.o $(LIBS)

prepared_call.o: prepared_call.c
prepared_call:: prepared_call.o
	$(CC) -o $@ prepared_call.o $(LIBS)

clean::
	rm -f $(ALL_PROGRAMS) *.o
