CC = gcc
C_OPT = -Wall
LINK_OPT = -lm

ALL =  hello \
       sum \
       erone \
       sumpar \
       oddeven \
       oddeven2 \
       leapyear \
       fib \
       collatz1 \
       collatz2 \
       calc \
       break_continue \
       primes \
       goto \
       ascii \
       fib_rev \
       strings \
       hypotenuse \
       swap \
       chist \
       printarg \
       dice \
       drand \
       fibonacci \
       fibonacci_nr \
       strtol_man_gcc \
       day \
       scalar_prod \
       datecmp \
       typedef_define \
       falign \
       split_file \
       pgm_fgets \
       parse_sscanf \
       pgm_fgets_parser \
       pgm_fscanf \
       buf_scanf \
       buf_fgets \
       void_ptr \
       vect_ptr \
       matr_print \
       day2 \
       pgm_fgets_malloc \
       matrix_alloc \
       fgets_buffer \
       pgm_fgets_realloc \
       func_ptr \
       string_change \
       notes \
       and \
       or \
       scope \
       static \
       bubble_sort \
       search_seq \
       search_sent \
       search_bin_ric \
       search_bin_nr \
       strange_people

OTHER = matr_seq \
        string_list \
        queue_array \
        stack_array

ALL2 = string_change extern1

.PHONY = all clean distclean pack help

help:
	@echo "Usage:"
	@echo "   make [all,clean,distclean,pack,help,{progname}]"

% : %.c
	$(CC) $(C_OPT) $(LINK_OPT) -o $@ $<

extern1: extern2.o extern1.c extern1.h
	$(CC) $(C_OPT) $(LINK_OPT) -o extern1 extern1.c extern2.o

extern2.o: extern2.c extern1.h
	$(CC) $(C_OPT) $(LINK_OPT) -c -o extern2.o extern2.c

string_change: pers.o strchg.o string_change.c debug.h
	$(CC) $(C_OPT) $(LINK_OPT) -o string_change string_change.c pers.o strchg.o

search_bin_ric: search_bin_ric.c ricerca_util.o ricerca_util.h
	$(CC) $(C_OPT) $(LINK_OPT) -o search_bin_ric search_bin_ric.c ricerca_util.o

search_bin_nr: search_bin_nr.c ricerca_util.o ricerca_util.h
	$(CC) $(C_OPT) $(LINK_OPT) -o search_bin_nr search_bin_nr.c ricerca_util.o

search_seq: search_seq.c ricerca_util.o ricerca_util.h
	$(CC) $(C_OPT) $(LINK_OPT) -o search_seq search_seq.c ricerca_util.o

search_sent: search_sent.c ricerca_util.o ricerca_util.h
	$(CC) $(C_OPT) $(LINK_OPT) -o search_sent search_sent.c ricerca_util.o

ricerca_util.o: ricerca_util.c ricerca_util.h
	$(CC) $(C_OPT) $(LINK_OPT) -c -o ricerca_util.o ricerca_util.c

FILES = $(shell ls *.c *.h *.dat *.txt Makefile)

pack: $(FILES)
	mkdir codice
	cp $(FILES) codice
	tar cvzf codice.tar.gz codice
	rm -fr codice

all: $(ALL) $(ALL2)

clean:
	rm -rf *.o *.bak *~

distclean: clean
	rm -fr a.out $(ALL) $(ALL2)
