# $USAGI: Makefile.in,v 1.6 2003-01-15 06:41:23 mk Exp $
#
# Copyright (C)2002 USAGI/WIDE Project.
# Copyright (C)2000-2001 Hideaki YOSHIFUJI and USAGI Project.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. Neither the name of the project nor the names of its contributors
#    may be used to endorse or promote products derived from this software
#    without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#

# $Id: Makefile.in,v 1.2 2000/06/10 05:45:14 yoshfuji Exp yoshfuji $

SHELL = @SHELL@

srcdir = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@

bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datarootdir = @datarootdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@

INSTALL = @INSTALL@

CC = @CC@
CFLAGS=@CFLAGS@ -D_GNU_SOURCE
DEFS=@DEFS@
LIBS=@LIBS@
LDFLAGS=@LDFLAGS@
INSTALL = @INSTALL@

# ----------------
all: ninfod
clean:
	-rm -f *.o ninfod
distclean: clean
	-rm -f *~ *.bak #*
	-rm -fr autom4te.cache
	-rm -f Makefile config.h config.cache config.status config.log
	-rm -f ninfod.sh
install: all
	@INSTALL_DIR@ @sbindir@
	@INSTALL@ ninfod -o root @sbindir@
	@INSTALL@ ninfod.sh -o root -m 755 @sysconfdir@/init.d/ninfod

# ----------------
ninfod: ninfod_addrs.o ni_ifaddrs.o ninfod_name.o ninfod_core.o ninfod.o
	$(CC) $(LDFLAGS) $^ $(LIBS) -o $@
%.o: %.c
	$(CC) $(CFLAGS) -c $(DEFS) -o $@ $<

# ----------------
ni_ifaddrs.o: config.h ni_ifaddrs.h
ninfod.o: config.h ninfod.h
ninfod_addrs.c: config.h ninfod.h ni_ifaddrs.h
ninfod_core.c: config.h ninfod.h
ninfod_name.c: config.h ninfod.h

