# @configure_input@
# Makefile for libdecnumber.  Run 'configure' to generate Makefile from Makefile.in

# Copyright (C) 2005, 2007 Free Software Foundation, Inc.

#This file is part of GCC.

#GCC is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2, or (at your option)
#any later version.

#GCC is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with GCC; see the file COPYING.  If not, write to
#the Free Software Foundation, 51 Franklin Street, Fifth Floor,
#Boston MA 02110-1301, USA.

@SET_MAKE@

srcdir = @srcdir@
top_builddir = .
VPATH = @srcdir@
INSTALL = @INSTALL@
AR = ar
ARFLAGS = cru
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
CC = @CC@
CFLAGS = @CFLAGS@
WARN_CFLAGS = @WARN_CFLAGS@ @WARN_PEDANTIC@ @WERROR@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
SHELL = @SHELL@

datarootdir = @datarootdir@
datadir = @datadir@
exec_prefix = @prefix@
libdir = @libdir@
localedir = $(datadir)/locale
prefix = @prefix@

ADDITIONAL_OBJS = @ADDITIONAL_OBJS@

enable_decimal_float= @enable_decimal_float@

INCLUDES = -I$(srcdir) -I.

ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS)

bid_OBJS = bid2dpd_dpd2bid.o host-ieee32.o host-ieee64.o host-ieee128.o

libdecnumber_a_OBJS = decNumber.o decContext.o \
	decimal32.o decimal64.o decimal128.o $(ADDITIONAL_OBJS)

libdecnumber_a_SOURCES = decContext.c decContext.h decDPD.h \
	decNumber.c decNumber.h decNumberLocal.h \
	decContextSymbols.h decDPDSymbols.h decNumberSymbols.h \
	dpd/decimal128.c dpd/decimal128.h dpd/decimal128Symbols.h \
	dpd/decimal32.c dpd/decimal32.h dpd/decimal32Symbols.h \
	dpd/decimal64.c dpd/decimal64.h dpd/decimal64Symbols.h \
	bid/decimal128.c bid/decimal128.h \
	bid/decimal32.c bid/decimal32.h \
	bid/decimal64.c bid/decimal64.h

all: libdecnumber.a

.SUFFIXES:
.SUFFIXES: .c .o .obj

libdecnumber.a: $(libdecnumber_a_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(libdecnumber_a_OBJS)
	$(RANLIB) $@

# Rules to rebuild the configuration

Makefile: $(srcdir)/Makefile.in config.status
	$(SHELL) ./config.status Makefile

config.status: $(srcdir)/configure
	$(SHELL) ./config.status --recheck

$(srcdir)/configure: @MAINT@ $(srcdir)/aclocal.m4
	cd $(srcdir) && $(AUTOCONF)

$(srcdir)/aclocal.m4: @MAINT@ $(srcdir)/../config/stdint.m4 \
	$(srcdir)/../config/warnings.m4 $(srcdir)/../config/override.m4 \
	$(srcdir)/configure.ac
	cd $(srcdir) && $(ACLOCAL) -I ../config

config.h: stamp-h1
	test -f config.h || (rm -f stamp-h1 && $(MAKE) stamp-h1)

stamp-h1: $(srcdir)/config.in config.status
	-rm -f stamp-h1
	$(SHELL) ./config.status config.h

$(srcdir)/config.in: @MAINT@ $(srcdir)/configure
	cd $(srcdir) && $(AUTOHEADER)
	-rm -f stamp-h1

# Dependencies.

decContext.o: decContext.c decContext.h decNumberLocal.h \
	decContextSymbols.h
decNumber.o:  decNumber.c decNumber.h decContext.h decNumberLocal.h \
	decNumberSymbols.h
decimal32.o:  $(srcdir)/$(enable_decimal_float)/decimal32.c \
   $(srcdir)/$(enable_decimal_float)/decimal32.h \
   $(srcdir)/$(enable_decimal_float)/decimal32Symbols.h \
   decNumber.h decContext.h decNumberLocal.h
	$(COMPILE) $(srcdir)/$(enable_decimal_float)/decimal32.c
decimal64.o:  $(srcdir)/$(enable_decimal_float)/decimal64.c \
   $(srcdir)/$(enable_decimal_float)/decimal64.h \
   $(srcdir)/$(enable_decimal_float)/decimal64Symbols.h \
   decNumber.h decContext.h decNumberLocal.h
	$(COMPILE) $(srcdir)/$(enable_decimal_float)/decimal64.c
decimal128.o:  $(srcdir)/$(enable_decimal_float)/decimal128.c \
   $(srcdir)/$(enable_decimal_float)/decimal128.h \
   $(srcdir)/$(enable_decimal_float)/decimal128Symbols.h\
   $(srcdir)/$(enable_decimal_float)/decimal128Local.h\
   decNumber.h decContext.h decNumberLocal.h 
	$(COMPILE) $(srcdir)/$(enable_decimal_float)/decimal128.c
bid2dpd_dpd2bid.o : $(srcdir)/bid/bid2dpd_dpd2bid.c $(srcdir)/bid/bid2dpd_dpd2bid.h
	$(COMPILE) $(srcdir)/bid/bid2dpd_dpd2bid.c
host-ieee32.o : $(srcdir)/bid/host-ieee32.c $(srcdir)/bid/decimal32.h
	$(COMPILE) $(srcdir)/bid/host-ieee32.c
host-ieee64.o : $(srcdir)/bid/host-ieee64.c $(srcdir)/bid/decimal64.h
	$(COMPILE) $(srcdir)/bid/host-ieee64.c
host-ieee128.o : $(srcdir)/bid/host-ieee128.c $(srcdir)/bid/decimal128.h
	$(COMPILE) $(srcdir)/bid/host-ieee128.c
# Other miscellaneous targets.

mostlyclean:
	-rm -f *.o

clean: mostlyclean
	-rm -rf makedepend$(EXEEXT) libdecnumber.a $(srcdir)/autom4te.cache

distclean: clean
	-rm -f config.h stamp-h1 config.status config.cache config.log \
	  configure.lineno configure.status.lineno Makefile localedir.h \
	  localedir.hs gstdint.h

maintainer-clean: distclean
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
	-rm -f $(srcdir)/configure $(srcdir)/aclocal.m4

check:
installcheck:
dvi:
pdf:
html:
info:
install-info:
install-pdf:
install-man:
install-html:
install:

.PHONY: installdirs install install-strip mostlyclean clean distclean \
  maintainer-clean check installcheck dvi pdf html info install-info \
  install-pdf install-man update-po install-html

COMPILE = source='$<' object='$@' libtool=no $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(ALL_CFLAGS) -c

# Implicit rules

.c.o:
	$(COMPILE) $<

# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
