CF=-Wall
CC=gcc

# COMMUNICATOR

all: communicator mloop producer editors

communicator: csca cscadmin cscaf

csca: clientA mserverA

cscadmin: clientAdmin mserverAdmin

clientA: CSCA/clientA.c CSCA/szyfr/szyfrA.c CSCA/szyfr/szyfrA.h
	$(CC) $(CF) -static -o INSTALL-SKZ/CLIENT-A/clientA CSCA/clientA.c CSCA/szyfr/szyfrA.c

mserverA: CSCA/mserverA.c CSCA/szyfr/szyfrA.c CSCA/executor.c CSCA/runserverA CSCA/m-srvAd CSCA/default-config/DEFCONFIG.ex
	$(CC) $(CF) -o INSTALL-SKZ/SERVER-A/mserverA -lpthread CSCA/mserverA.c CSCA/szyfr/szyfrA.c CSCA/executor.c
	cp CSCA/runserverA INSTALL-SKZ/SERVER-A/runserverA
	cp CSCA/m-srvAd INSTALL-SKZ/SERVER-A/m-srvAd
	cp CSCA/default-config/DEFCONFIG.ex INSTALL-SKZ/SERVER-A/DEFCONFIG.ex

clientAdmin: CSCADMIN/clientAdmin.c CSCADMIN/szyfr/szyfrA.c CSCADMIN/szyfr/szyfrA.h
	$(CC) $(CF) -static -o INSTALL-SKZ/ADMIN/clientAdmin CSCADMIN/clientAdmin.c CSCADMIN/szyfr/szyfrA.c

mserverAdmin: CSCADMIN/mserverAdmin.c CSCADMIN/szyfr/szyfrA.c CSCADMIN/executor.c CSCADMIN/runserver_admin CSCADMIN/m-srvAmd CSCADMIN/default-config/DEFCONFIG.ex
	$(CC) $(CF) -o INSTALL-SKZ/ADMIN/mserverAdmin -lpthread CSCADMIN/mserverAdmin.c CSCADMIN/szyfr/szyfrA.c CSCADMIN/executor.c
	cp CSCADMIN/runserver_admin INSTALL-SKZ/ADMIN/runserver_admin
	cp CSCADMIN/m-srvAmd INSTALL-SKZ/ADMIN/m-srvAmd
	cp CSCADMIN/default-config/DEFCONFIG.ex INSTALL-SKZ/ADMIN/DEFCONFIG.ex

# CSCAF - APPLICATIONS

cscaf: basic check-key config-read groups priority read write

basic: passwdARCHI softblock unblock

passwdARCHI: CSCAF/BASIC/passwdARCHI.c CSCAF/archi_name.inl
	$(CC) $(CF) -o INSTALL-SKZ/APPLICATIONS/BASIC/passwdARCHI CSCAF/BASIC/passwdARCHI.c

softblock: CSCAF/BASIC/softblock.c CSCAF/archi_name.inl
	$(CC) $(CF) -o INSTALL-SKZ/APPLICATIONS/BASIC/softblock CSCAF/BASIC/softblock.c

unblock: CSCAF/BASIC/unblock.c CSCAF/archi_name.inl
	$(CC) $(CF) -o INSTALL-SKZ/APPLICATIONS/BASIC/unblock CSCAF/BASIC/unblock.c

check-key: check-key-gen check-key-file

check-key-gen: CSCAF/CHECK-KEY/check-key.c CSCAF/archi_name.inl
	$(CC) $(CF) -o INSTALL-SKZ/APPLICATIONS/CHECK-KEY/check-key CSCAF/CHECK-KEY/check-key.c
	
check-key-file: CSCAF/CHECK-KEY/check-key-file.c CSCAF/archi_name.inl
	$(CC) $(CF) -o INSTALL-SKZ/APPLICATIONS/CHECK-KEY/check-key-file CSCAF/CHECK-KEY/check-key-file.c

config-read: CSCAF/CONFIG-READ/config-read.c CSCAF/CONFIG-READ/config_read.conf CSCAF/archi_name.inl
	$(CC) $(CF) -o INSTALL-SKZ/APPLICATIONS/CONFIG-READ/config-read CSCAF/CONFIG-READ/config-read.c
	cp CSCAF/CONFIG-READ/config_read.conf INSTALL-SKZ/APPLICATIONS/CONFIG-READ/config_read.conf
 
groups: agrp-client agrp-admin

agrp-client: CSCAF/GROUPS/agrp-client.c CSCAF/GROUPS/groups_operations.inl CSCAF/archi_name.inl
	$(CC) $(CF) -o INSTALL-SKZ/APPLICATIONS/GROUPS/agrp-client CSCAF/GROUPS/agrp-client.c

agrp-admin: CSCAF/GROUPS/agrp-admin.c CSCAF/GROUPS/agrp_main.inl CSCAF/archi_name.inl
	$(CC) $(CF) -o INSTALL-SKZ/APPLICATIONS/GROUPS/agrp-admin CSCAF/GROUPS/agrp-admin.c

priority: adm-priority

adm-priority: CSCAF/PRIORITY/adm-priority.c CSCAF/archi_name.inl
	$(CC) $(CF) -o INSTALL-SKZ/APPLICATIONS/PRIORITY/adm-priority CSCAF/PRIORITY/adm-priority.c

read: CSCAF/READ/read.c CSCAF/READ/lib/chkdate.c CSCAF/READ/lib/chkpass.c CSCAF/READ/lib/parser_read.c CSCAF/READ/lib/alarm_stos.c CSCAF/READ/read.c CSCAF/READ/lib/lib_basic_test.h CSCAF/READ/file-test.inl CSCAF/READ/queue-READ.inl CSCAF/archi_name.inl
	$(CC) $(CF) -o INSTALL-SKZ/APPLICATIONS/READ/READ -lrt CSCAF/READ/lib/chkdate.c CSCAF/READ/lib/chkpass.c CSCAF/READ/lib/parser_read.c CSCAF/READ/lib/alarm_stos.c CSCAF/READ/read.c 

write: CSCAF/WRITE/lib/chkdate.c CSCAF/WRITE/lib/chkpass.c CSCAF/WRITE/lib/parser_write.c CSCAF/WRITE/lib/alarm_stos.c CSCAF/WRITE/write.c CSCAF/WRITE/lib/lib_basic_test.h CSCAF/WRITE/queue-WRITE.inl CSCAF/archi_name.inl
	$(CC) $(CF) -o INSTALL-SKZ/APPLICATIONS/WRITE/WRITE -lrt CSCAF/WRITE/lib/chkdate.c CSCAF/WRITE/lib/chkpass.c CSCAF/WRITE/lib/parser_write.c CSCAF/WRITE/lib/alarm_stos.c CSCAF/WRITE/write.c 

# MAIN-LOOP

mloop: cscloop default

cscloop: CSCLOOP/mloopQS.c CSCLOOP/mountRAM CSCLOOP/mloopQSd
	$(CC) $(CF) -o INSTALL-SKZ/MAIN-LOOP/mloopQS CSCLOOP/mloopQS.c
	cp CSCLOOP/mountRAM INSTALL-SKZ/MAIN-LOOP/mountRAM
	cp CSCLOOP/mloopQSd INSTALL-SKZ/AT_BOOT/mloopQSd

default: CSCMLA/DEFAULT/clock_alarm.c CSCMLA/DEFAULT/unblock_servers.c CSCMLA/DEFAULT/run_clock_alarm CSCMLA/DEFAULT/default_stat
	$(CC) $(CF) -o INSTALL-SKZ/DEFAULT/clock_alarm CSCMLA/DEFAULT/clock_alarm.c
	$(CC) $(CF) -o INSTALL-SKZ/DEFAULT/unblock_servers CSCMLA/DEFAULT/unblock_servers.c
	cp CSCMLA/DEFAULT/run_clock_alarm INSTALL-SKZ/DEFAULT/run_clock_alarm
	cp CSCMLA/DEFAULT/default_stat INSTALL-SKZ/DEFAULT/default_stat

# PRODUCER

producer: mloop-producer queue-todo pre-stos clientT clientC table-update serv-ctrl engines operators doit

mloop-producer: CSCMLA/MAIN_LOOP/mloop_producer.c CSCMLA/MAIN_LOOP/restore_default
	$(CC) $(CF) -o INSTALL-SKZ/MLA/mloop_producer CSCMLA/MAIN_LOOP/mloop_producer.c
	cp CSCMLA/MAIN_LOOP/restore_default INSTALL-SKZ/MLA/restore_default

queue-todo: CSCMLA/TODO/queue_TODO.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/queue_TODO CSCMLA/TODO/queue_TODO.c

pre-stos: add-trig clear-todo end-todo-W mapstos organize

add-trig: CSCMLA/TODO/PRE_STOS/add_trig_H.c CSCMLA/TODO/PRE_STOS/add_trig_N.c CSCMLA/TODO/PRE_STOS/add_trig_W.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/PRE_STOS/add_trigH CSCMLA/TODO/PRE_STOS/add_trig_H.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/PRE_STOS/add_trigN CSCMLA/TODO/PRE_STOS/add_trig_N.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/PRE_STOS/add_trigW CSCMLA/TODO/PRE_STOS/add_trig_W.c

clear-todo: CSCMLA/TODO/PRE_STOS/clear_todo.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/PRE_STOS/clear_todo CSCMLA/TODO/PRE_STOS/clear_todo.c

end-todo-W: CSCMLA/TODO/PRE_STOS/end_todo_W.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/PRE_STOS/end_todoW CSCMLA/TODO/PRE_STOS/end_todo_W.c

mapstos: CSCMLA/TODO/PRE_STOS/mapstosH.c CSCMLA/TODO/PRE_STOS/mapstosN.c CSCMLA/TODO/PRE_STOS/mapstosW.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/PRE_STOS/mapstosH CSCMLA/TODO/PRE_STOS/mapstosH.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/PRE_STOS/mapstosN CSCMLA/TODO/PRE_STOS/mapstosN.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/PRE_STOS/mapstosW CSCMLA/TODO/PRE_STOS/mapstosW.c

organize: CSCMLA/TODO/PRE_STOS/organize_H.c CSCMLA/TODO/PRE_STOS/organize_N.c CSCMLA/TODO/PRE_STOS/organize_W.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/PRE_STOS/organizeH CSCMLA/TODO/PRE_STOS/organize_H.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/PRE_STOS/organizeN CSCMLA/TODO/PRE_STOS/organize_N.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/PRE_STOS/organizeW CSCMLA/TODO/PRE_STOS/organize_W.c

clientT: CSCMLA/DOIT/CLIENT-T/clientT.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/ENGINE/clientT CSCMLA/DOIT/CLIENT-T/clientT.c

clientC: CSCMLA/DOIT/CLIENT-C/clientC.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/ENGINE/clientC CSCMLA/DOIT/CLIENT-C/clientC.c

table-update: CSCMLA/DOIT/table_update.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/ENGINE/table_update CSCMLA/DOIT/table_update.c

serv-ctrl: CSCMLA/DOIT/serv_ctrl.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/ENGINE/serv_ctrl CSCMLA/DOIT/serv_ctrl.c

engines: engineN engineB engineT supervisor

engineN: CSCMLA/DOIT/engineN.c CSCMLA/DOIT/engine_n
	$(CC) $(CF) -o INSTALL-SKZ/MLA/ENGINE/engineN CSCMLA/DOIT/engineN.c -lpthread
	cp CSCMLA/DOIT/engine_n INSTALL-SKZ/MLA/ENGINE/engine_n

engineB: CSCMLA/DOIT/engineB.c CSCMLA/DOIT/engine_b
	$(CC) $(CF) -o INSTALL-SKZ/MLA/ENGINE/engineB CSCMLA/DOIT/engineB.c -lpthread
	cp CSCMLA/DOIT/engine_b INSTALL-SKZ/MLA/ENGINE/engine_b

engineT: CSCMLA/DOIT/engineT.c CSCMLA/DOIT/engine_t
	$(CC) $(CF) -o INSTALL-SKZ/MLA/ENGINE/engineT CSCMLA/DOIT/engineT.c -lpthread
	cp CSCMLA/DOIT/engine_t INSTALL-SKZ/MLA/ENGINE/engine_t

supervisor: CSCMLA/DOIT/supervisor.c CSCMLA/DOIT/supervisor_wait_actions.inl CSCMLA/DOIT/supervisor_daemon
	$(CC) $(CF) -o INSTALL-SKZ/MLA/ENGINE/supervisor CSCMLA/DOIT/supervisor.c
	cp CSCMLA/DOIT/supervisor_daemon INSTALL-SKZ/MLA/ENGINE/supervisor_daemon

operators: CSCMLA/DOIT/operators.c
	$(CC) $(CF) -o INSTALL-SKZ/MLA/ENGINE/operators CSCMLA/DOIT/operators.c

doit: CSCMLA/DOIT/doit.c 
	$(CC) $(CF) -o INSTALL-SKZ/MLA/ENGINE/doit CSCMLA/DOIT/doit.c 

# EDITORS

editors: edit-archi join-trigger edit-mac edit-trig

edit-archi: CSCEDIT/EDIT_ARCHI/edit_archi_register.c
	$(CC) $(CF) -o INSTALL-SKZ/EDITORS/edit_reg CSCEDIT/EDIT_ARCHI/edit_archi_register.c

join-trigger: CSCEDIT/EDIT_ARCHI/join_trigger.c
	$(CC) $(CF) -o INSTALL-SKZ/EDITORS/join_trigger CSCEDIT/EDIT_ARCHI/join_trigger.c

edit-mac: CSCEDIT/EDIT_MAC/edit_mac.c
	$(CC) $(CF) -o INSTALL-SKZ/EDITORS/edit_mac CSCEDIT/EDIT_MAC/edit_mac.c

edit-trig: CSCEDIT/EDIT_TRIG/edit_trig.c CSCEDIT/EDIT_TRIG/TRIGGxxxx
	$(CC) $(CF) -o INSTALL-SKZ/EDITORS/edit_trig CSCEDIT/EDIT_TRIG/edit_trig.c
	cp CSCEDIT/EDIT_TRIG/TRIGGxxxx INSTALL-SKZ/EDITORS/TRIGGxxxx