# $Id: Makefile,v 1.8 2004/01/24 05:19:06 adicvs Exp $
#
# Makefile for repeater
# Written by Adi Linden
#

##
## Configure the next few variables for your environment
##

# The absolute path to the installation directory
PREFIX      = /home/controller

# User we run as
EXECUSER    = controller

##
## Nothing below should need configuring
##

SHELL       = /bin/sh
BINDIR      = $(PREFIX)/bin
SCRIPTDIR   = $(PREFIX)/script

CC          = gcc
MKDIR       = /bin/mkdir -p
INSTALL     = /usr/bin/install
RM          = /bin/rm -f
LN          = /bin/ln

LIBS        =
INCLUDES    =
CFLAGS      = -O2 -Wall
LDFLAGS     =

COMPILE     = $(CC) $(INCLUDES) $(CFLAGS)
LINK        = $(CC) $(LDFLAGS) -o $@
REPLACE     = sed -e 's;@@USER@@;$(EXECUSER);g' \
                  -e 's;@@BIN@@;$(BINDIR);g' \
                  -e 's;@@SCRIPT@@;$(SCRIPTDIR);g'

PROGRAMS    = key unkey mute unmute ctcsson ctcssoff \
  aux4on aux4off aux5on aux5off \
  fmcw fmbeep repeater

SCRIPTS     = repeater_cronjob repeater_crontab repeater_init courtesy_tone

# Objects portctl
portctl_obj = portctl_main.o portctl.o
key_obj     = $(portctl_obj) portctl_key.o
unkey_obj   = $(portctl_obj) portctl_unkey.o 
mute_obj    = $(portctl_obj) portctl_mute.o
unmute_obj  = $(portctl_obj) portctl_unmute.o
ctcsson_obj = $(portctl_obj) portctl_ctcsson.o
ctcssoff_obj= $(portctl_obj) portctl_ctcssoff.o
aux4on_obj  = $(portctl_obj) portctl_aux4on.o
aux4off_obj = $(portctl_obj) portctl_aux4off.o
aux5on_obj  = $(portctl_obj) portctl_aux5on.o
aux5off_obj = $(portctl_obj) portctl_aux5off.o

# Objects fm sound generation
fmcw_obj    = fm_cw.o fm_adlib.o
fmbeep_obj  = fm_beep.o fm_adlib.o

# Objects for repeater
repeater_obj    = ht-ct.o

all:        $(PROGRAMS)

# Build rules for portctl
key:        $(key_obj)
	$(LINK) $(key_obj)

unkey:      $(unkey_obj)
	$(LINK) $(unkey_obj)

mute:       $(mute_obj)
	$(LINK) $(mute_obj)

unmute:     $(unmute_obj)
	$(LINK) $(unmute_obj)

ctcsson:    $(ctcsson_obj)
	$(LINK) $(ctcsson_obj)

ctcssoff:   $(ctcssoff_obj)
	$(LINK) $(ctcssoff_obj)

aux4on:     $(aux4on_obj)
	$(LINK) $(aux4on_obj)

aux4off:    $(aux4off_obj)
	$(LINK) $(aux4off_obj)

aux5on:     $(aux5on_obj)
	$(LINK) $(aux5on_obj)

aux5off:    $(aux5off_obj)
	$(LINK) $(aux5off_obj)

# Build rules for fm sound generation
fmcw:       $(fmcw_obj)
	$(LINK) $(fmcw_obj) -lm

fmbeep:     $(fmbeep_obj)
	$(LINK) $(fmbeep_obj) -lm

# Build rules for repeater
repeater:   $(repeater_obj)
	$(LINK) $(repeater_obj)

# Installation rules
install:    install-bin install-scripts

install-bin:
	@echo "Installing binaries in $(BINDIR) ..."
	@[ -d $(BINDIR) ] || $(MKDIR) $(BINDIR) ;\
    for file in $(PROGRAMS); do \
        echo "$(INSTALL) -m 755 $${file} $(BINDIR)/$${file}"; \
        $(INSTALL) -m 755 $${file} $(BINDIR)/$${file}; \
    done; \
    if [ `id -u` != 0 ]; then \
        echo "\`make install' should be run as root!"; \
    else \
        echo "Setting ownership and permissions ..."; \
        for file in $(PROGRAMS); do \
            echo "chown $(USER).$(USER) $(BINDIR)/$${file}"; \
            chown $(USER).$(USER) $(BINDIR)/$${file}; \
        done; \
        echo "chown root.root $(BINDIR)/fmbeep"; \
        chown root.root $(BINDIR)/fmbeep; \
        echo "chown root.root $(BINDIR)/fmcw"; \
        chown root.root $(BINDIR)/fmcw; \
        echo "chmod 4755 $(BINDIR)/fmbeep"; \
        chmod 4755 $(BINDIR)/fmbeep; \
        echo "chmod 4755 $(BINDIR)/fmcw"; \
        chmod 4755 $(BINDIR)/fmcw; \
    fi

install-scripts:
	@echo "Installing scripts in $(SCRIPTDIR) ..."
	[ -d $(SCRIPTDIR) ] || $(MKDIR) $(SCRIPTDIR) ;\
    for file in $(SCRIPTS); do \
        $(REPLACE) < $${file}.in > $(SCRIPTDIR)/$${file}; \
        echo "chown $(USER).$(USER) $(SCRIPTDIR)/$${file}"; \
        chown $(USER).$(USER) $(SCRIPTDIR)/$${file}; \
        echo "chmod 755 $(SCRIPTDIR)/$${file}"; \
        chmod 755 $(SCRIPTDIR)/$${file}; \
    done

# Uninstallation rules
uninstall:  uninstall-bin uninstall-scripts

uninstall-bin:
	@echo "Uninstalling binaries in $(BINDIR) ..."
	@for file in $(PROGRAMS); do \
        echo "$(RM) $(BINDIR)/$$file"; \
        $(RM) $(BINDIR)/$$file; \
    done

uninstall-scripts:
	@echo "Uninstalling scripts in $(SCRIPTDIR) ..."
	@for file in $(SCRIPTS); do \
        echo "$(RM) $(SCRIPTDIR)/$$file"; \
        $(RM) $(SCRIPTDIR)/$$file; \
    done

# Manipulate the sources
clean:
	$(RM) *.o *.core core $(PROGRAMS)
