* stdlib/Makefile (tests): Don't run tst-fmtmsg when
[kopensolaris-gnu/glibc.git] / stdlib / Makefile
1 # Copyright (C) 1991-1999, 2000, 2001 Free Software Foundation, Inc.
2 # This file is part of the GNU C Library.
3
4 # The GNU C Library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Library General Public License as
6 # published by the Free Software Foundation; either version 2 of the
7 # License, or (at your option) any later version.
8
9 # The GNU C Library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Library General Public License for more details.
13
14 # You should have received a copy of the GNU Library General Public
15 # License along with the GNU C Library; see the file COPYING.LIB.  If not,
16 # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 # Boston, MA 02111-1307, USA.
18
19 #
20 #       Makefile for stdlib routines
21 #
22 subdir  := stdlib
23
24 headers := stdlib.h alloca.h monetary.h fmtmsg.h ucontext.h sys/ucontext.h    \
25            inttypes.h stdint.h bits/wordsize.h bits/wchar.h
26
27 routines        :=                                                            \
28         atof atoi atol atoll                                                  \
29         abort                                                                 \
30         bsearch qsort msort                                                   \
31         getenv putenv setenv secure-getenv                                    \
32         exit on_exit atexit cxa_atexit cxa_finalize                           \
33         abs labs llabs                                                        \
34         div ldiv lldiv                                                        \
35         mblen mbstowcs mbtowc wcstombs wctomb                                 \
36         random random_r rand rand_r                                           \
37         drand48 erand48 lrand48 nrand48 mrand48 jrand48                       \
38         srand48 seed48 lcong48                                                \
39         drand48_r erand48_r lrand48_r nrand48_r mrand48_r jrand48_r           \
40         srand48_r seed48_r lcong48_r                                          \
41         drand48-iter                                                          \
42         strtol strtoul strtoll strtoull                                       \
43         strtol_l strtoul_l strtoll_l strtoull_l                               \
44         strtof strtod strtold                                                 \
45         strtof_l strtod_l strtold_l                                           \
46         system canonicalize                                                   \
47         a64l l64a                                                             \
48         rpmatch strfmon strfmon_l getsubopt xpg_basename fmtmsg               \
49         strtoimax strtoumax wcstoimax wcstoumax                               \
50         getcontext setcontext makecontext swapcontext
51
52 distribute      := exit.h grouping.h abort-instr.h isomac.c tst-fmtmsg.sh
53 test-srcs       := tst-fmtmsg
54 tests           := tst-strtol tst-strtod testmb testrand testsort testdiv \
55                    test-canon test-canon2 tst-strtoll tst-environ         \
56                    tst-xpg-basename tst-random tst-bsearch tst-limits     \
57                    tst-rand48 bug-strtod
58
59
60 # Several mpn functions from GNU MP are used by the strtod function.
61 mpn-routines := inlines add_n addmul_1 cmp divmod_1 divrem udiv_qrnnd \
62                 lshift rshift mod_1 mul mul_1 mul_n sub_n submul_1
63 mpn-headers = longlong.h gmp.h gmp-impl.h gmp-mparam.h asm-syntax.h
64
65 routines := $(strip $(routines) $(mpn-routines))        \
66             dbl2mpn ldbl2mpn                            \
67             mpn2flt mpn2dbl mpn2ldbl
68 aux := mp_clz_tab fpioconst
69 distribute := $(distribute) $(mpn-headers) gen-mpn-copy fpioconst.h
70
71 generated += isomac isomac.out
72
73 CFLAGS-bsearch.c = $(exceptions)
74 CFLAGS-msort.c = $(exceptions)
75 CFLAGS-qsort.c = $(exceptions)
76
77 include ../Makeconfig
78
79 ifneq (,$(filter %REENTRANT, $(defines)))
80 CFLAGS-strfmon.c = -D_IO_MTSAFE_IO
81 CFLAGS-strfmon_l.c = -D_IO_MTSAFE_IO
82 endif
83
84 include ../Rules
85
86
87 ifdef gmp-srcdir
88
89 gmp-srcdir := $(firstword $(filter-out ..//%,$(..)$(gmp-srcdir) $(gmp-srcdir)))
90
91 # Copy the mpn source files we use from the GNU MP source directory.
92 # `gmp-srcdir' is set by doing `configure --with-gmp=DIR'.
93 # (Do not try this at home.  You need an as yet unreleased version of GNU MP.)
94
95 mpn-sysdep := $(addsuffix .c,$(mpn-routines)) \
96               $(addsuffix .S,$(mpn-routines)) \
97               $(addsuffix .s,$(mpn-routines)) gmp-mparam.h asm-syntax.h
98
99 mpn-try := $(addprefix $(gmp-srcdir)/mpn/*/,$(mpn-sysdep)) \
100            $(addprefix $(gmp-srcdir)/mpn/*/*/,$(mpn-sysdep))
101 mpn-found = $(wildcard $(mpn-try))
102
103 include mpn-copy.mk
104 %.mk: gen-%; sh $< > $@
105
106 mpn-copy-1 := $(patsubst $(gmp-srcdir)/mpn/%,$(sysdep_dir)/%,$(mpn-found))
107 mpn-copy-sysdep := $(mpn-copy-sysdep) $(mpn-copy-1)
108 mpn-copy-sysdep := $(filter $(addsuffix %,\
109                      $(wildcard $(sort $(dir $(mpn-copy-sysdep))))), \
110                     $(mpn-copy-sysdep))
111 $(mpn-copy-1): $(sysdep_dir)/%: $(ignore gmp2glibc.sed) $(gmp-srcdir)/mpn/%
112         $(gmp2glibc)
113
114 mpn-stuff = $(mpn-copy-sysdep) $(mpn-copy)
115
116 # chmod so I don't edit them by mistake.
117 define gmp2glibc
118 $(ignore sed -f $^ > $@-tmp)
119 cp $< $@-tmp
120 chmod a-w $@-tmp
121 mv -f $@-tmp $@
122 endef
123
124 mpn-copy = $(filter-out $(mpn-sysdep),$(mpn-headers))# mp_clz_tab.c)
125 $(mpn-copy): %: $(ignore gmp2glibc.sed) $(gmp-srcdir)/%; $(gmp2glibc)
126
127 .PHONY: copy-mpn clean-mpn mpn-stuff
128 mpn-stuff: $(mpn-stuff)
129 copy-mpn: $(mpn-stuff)
130 ifeq ($(with-cvs),yes)
131         test ! -d CVS || cvs $(CVSOPTS) commit -m'Updated from $(gmp-srcdir)' $+
132 endif
133 clean-mpn:
134         rm -f $(mpn-stuff)
135
136 endif
137
138 # Testdir has to be named stdlib and needs to be writable
139 test-canon-ARGS = --test-dir=${common-objpfx}stdlib
140
141 tst-strtod-ENV = LOCPATH=$(common-objpfx)localedata
142
143 # Run a test on the header files we use.
144 tests: $(objpfx)isomac.out 
145
146 ifeq (no,$(cross-compiling))
147 tests: $(objpfx)tst-fmtmsg.out
148 endif
149
150 $(objpfx)isomac.out: $(objpfx)isomac
151         $(dir $<)$(notdir $<) '$(CC)'  \
152         '-I../include -I.. $(+sysdep-includes) $(sysincludes)' > $<.out
153
154 $(objpfx)isomac: isomac.c
155         $(native-compile)
156
157 $(objpfx)tst-fmtmsg.out: tst-fmtmsg.sh $(objpfx)tst-fmtmsg
158         $(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)' $(common-objpfx)stdlib/