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

# Copyright (C) 2005, 2006, 2007, 2008, 2009 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 3, 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 COPYING3.  If not see
#<http://www.gnu.org/licenses/>.

@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)

aclocal_deps = \
	$(srcdir)/../config/stdint.m4 \
	$(srcdir)/../config/warnings.m4 \
	$(srcdir)/../config/override.m4 \
	$(srcdir)/configure.ac

$(srcdir)/aclocal.m4: @MAINT@ $(aclocal_deps)
	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 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:
