OSDN Git Service

20fd2c5aefabdf6289439ddcc6822ca1c1f73245
[mingw/mingw-org-wsl.git] / mingwrt / Makefile.in
1 # @configure_input@
2 # $Id$
3 #
4 # Makefile template for MinGW.org Runtime Library Package
5
6 PACKAGE_TARNAME := @PACKAGE_TARNAME@
7 PACKAGE_VERSION := @PACKAGE_VERSION@
8
9 # Written by Keith Marshall <keithmarshall@users.sourceforge.net>
10 # Copyright (C) 2014-2016, MinGW.org Project
11 #
12 #
13 # Permission is hereby granted, free of charge, to any person obtaining a
14 # copy of this software and associated documentation files (the "Software"),
15 # to deal in the Software without restriction, including without limitation
16 # the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 # and/or sell copies of the Software, and to permit persons to whom the
18 # Software is furnished to do so, subject to the following conditions:
19 #
20 # The above copyright notice and this permission notice (including the next
21 # paragraph) shall be included in all copies or substantial portions of the
22 # Software.
23 #
24 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27 # AUTHORS OR THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
30 # DEALINGS IN THE SOFTWARE.
31
32
33 # The default target is "all"; declare it early, to avoid any possible
34 # inadvertent override from any included file.
35 #
36 all:
37 PACKAGE_RELEASE :=
38 PACKAGE_RELEASE_TAG := $(PACKAGE_VERSION)$(PACKAGE_RELEASE:%=-%)-mingw32
39
40 # Establish the minimum version of Windows which this build is required
41 # to support; note that we fix the default as WinNT4, but we define it in
42 # a manner which will allow a command line override, and may be adapted,
43 # ultimately, to support a configure time assignment.
44 #
45 NTDDI_VERSION := NTDDI_WINNT4
46 NTDDI_VERSION_SPEC := $(NTDDI_VERSION:%=-D NTDDI_VERSION=%)
47
48 # Build paths and macros.
49 #
50 srcdir = @srcdir@
51 top_srcdir = @top_srcdir@
52 mingwrt_srcdir = @srcdir@
53 w32api_srcdir = @w32api_srcdir@
54 abs_builddir = @abs_builddir@
55
56 CC = @CC@
57 CFLAGS = @CFLAGS@
58 CPPFLAGS = @CPPFLAGS@
59
60 OBJEXT = @OBJEXT@
61
62 AR = @AR@
63 ARFLAGS = @ARFLAGS@
64 RANLIB = @RANLIB@
65
66 AS = @AS@
67 COMPILE.sx = @COMPILE_SX@
68 DLLTOOL = @DLLTOOL@
69 STRIP = @STRIP@
70 NM = @NM@
71
72 all: @DEFAULT_MAKECMDGOALS@
73 all-mingwrt-stage-1-only: _mingw.h w32api.h
74 all-mingwrt-stage-1-only: all-mingwrt-objects all-mingwrt-libs
75 all-mingwrt-stage-1-and-2: all-mingwrt-stage-1-only all-mingwrt-dll
76 all-mingwrt: all-mingwrt-stage-1-and-2
77 all-gcc: all-mingwrt-stage-1-only
78
79 active_goals = $1-$2 $(if @include_deprecated@,$1-deprecated-$2)
80 all-deprecated-mingwrt-stage-1-only: all-deprecated-mingwrt
81
82 all-stage-1-only: $(call active_goals,all,mingwrt-stage-1-only)
83 all-stage-1-and-2: $(call active_goals,all,mingwrt)
84
85 # Installation paths and macros.
86 #
87 prefix = @prefix@
88 exec_prefix = @exec_prefix@
89 bindir = ${DESTDIR}@bindir@
90
91 datarootdir = @datarootdir@
92 docdir = ${DESTDIR}${datarootdir}/doc
93 includedir = ${DESTDIR}@includedir@
94 libdir = ${DESTDIR}@libdir@
95
96 htmldir = @htmldir@
97 pdfdir = @pdfdir@
98
99 mandir = ${DESTDIR}@mandir@
100 man3dir = ${mandir}/man$(man3ext)
101
102 man3ext = 3
103
104 INSTALL = @INSTALL@
105 INSTALL_DATA = @INSTALL_DATA@ $1 $2
106
107 mkinstalldirs = @MKDIR_P@ $(addprefix $1,$2)
108 LN_S = @LN_S@
109
110 # Keep the configuration in a consistent state.  Note that we assume
111 # that configure has been run initially, (otherwise we wouldn't have
112 # a Makefile to begin with); since this also creates config.status,
113 # we may normally assume that it is already available ...
114 #
115 vpath configure ${top_srcdir}
116 config.status: configure
117         $(SHELL) config.status --recheck
118
119 # ... in which case, updating Makefile should be a simple matter of
120 # running config.status ...
121 #
122 vpath Makefile.in ${top_srcdir}
123 requires_existing = $(if $(wildcard $1),$1,$1.missing)
124 Makefile: Makefile.in configure $(call requires_existing,config.status)
125         $(SHELL) config.status
126         $(RM) Makefile.stub
127
128 .PHONY: config.status.missing
129 # ... but, in the event that this may be missing, (e.g. because it
130 # has been manually removed, or removed by "make distclean"), suggest
131 # running configure, and bail out.
132 #
133 config.status.missing:
134         $(warning *** cannot execute config.status)
135         $(error please run ${top_srcdir}/configure to regenerate it.)
136
137 # If configure itself needs to be updated, we must run autoconf in the
138 # top level source directory.
139 #
140 vpath %.m4 ${top_srcdir}
141 vpath configure.ac ${top_srcdir}
142 configure: configure.ac aclocal.m4 VERSION.m4
143         cd ${top_srcdir}; autoconf
144
145 ${top_srcdir}/%: ${top_srcdir}/../%
146         cd $(dir $@) && $(LN_S) -f ../$* .
147
148 # Propagate package version, as configured, consistently throughout
149 # the package build.
150 #
151 vpath _mingw.h.in ${top_srcdir}/include
152 vpath w32api.h.in ${w32api_srcdir}/include
153
154 _mingw.h w32api.h: configure.ac
155
156 PACKAGE_VERSION_SCRIPT = sed \
157   -e s"`$(call PACKAGE_VERSION_FORMAT,LONG,%d,$$3+1000*($$2+1000*$$1))`" \
158   -e s"`$(call PACKAGE_VERSION_FORMAT,MAJOR,%7d,$$1)`" \
159   -e s"`$(call PACKAGE_VERSION_FORMAT,MINOR,%7d,$$2)`" \
160   -e s"`$(call PACKAGE_VERSION_FORMAT,PATCH,%7d,$$3)`"
161
162 PACKAGE_VERSION_FORMAT = echo $(PACKAGE_VERSION).0.0 | awk -F. '{ \
163   printf ",%%PACKAGE_VERSION_$1%%,$2,", $3; \
164 }'
165
166 _mingw.h w32api.h: %.h: %.h.in
167         $(PACKAGE_VERSION_SCRIPT) $< > $@
168
169 # Capture dependencies conveyed within source files, ensuring that
170 # header files are taken from our working source tree, and not from
171 # the build-time compiler's installation path.  (Note: we use -MD,
172 # and not -MMD in DEPFLAGS; since this package furnishes system
173 # headers, we need changes therein to trigger a rebuild).
174 #
175 sinclude *.d
176 DEPFLAGS = -MD -MP
177 INCLUDES = -nostdinc -I . -I ${top_srcdir}/include -I ${w32api_srcdir}/include \
178   -I ${top_srcdir} -I ${top_srcdir}/profile -iwithprefixbefore include
179
180 ALL_CFLAGS = $(CFLAGS) $(DEPFLAGS) $(INCLUDES) $(NTDDI_VERSION_SPEC)
181 ALL_CPPFLAGS = $(CPPFLAGS) $(DEPFLAGS) $(INCLUDES) $(NTDDI_VERSION_SPEC)
182
183 # The general case, for compiling object files from C source,
184 # requires a small adjustment to the default implicit rule.
185 #
186 %.$(OBJEXT): %.c
187         $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) -o $@ $<
188
189 # In some cases, both ANSI and UTF-16LE enabled variants of object
190 # modules are compiled from a common source; the UTF-16LE variant is
191 # to be identified by prefixing a "w" to the object file name.
192 #
193 w%.$(OBJEXT): %.c
194         $(CC) -c -D UNICODE $(CPPFLAGS) $(ALL_CFLAGS) -o $@ $<
195
196 # Compiling object files from *.sx sources: since GCC-4.3, these
197 # have been supported as a case agnostic alternative to *.S sources,
198 # for assembly language sources requiring initial interpretation by
199 # the C preprocessor; owing to the case-insensitive nature of file
200 # naming on MS-Windows, we should prefer these, but we must tell
201 # make how to compile them.
202 #
203 %.$(OBJEXT): %.sx
204         $(COMPILE.sx) $($*_cflags) -o $@ $<
205
206 # Several components of the distributable object code base are to
207 # be provided as free-standing object modules, (rather than being
208 # encapsulated within object libraries); we classify these within
209 # two distinct groups, for support of the current MSVCRT.DLL build
210 # case and the older CRTDLL build case, (noting that, ultimately,
211 # we may wish to deprecate this latter case).
212 #
213 all-mingwrt-objects: $(call active_goals,all,crt-objects)
214 all-deprecated-mingwrt-objects: all-deprecated-crt-objects
215
216 # Further note that, in addition to specifying the build time
217 # inventories for each of these object module categories, each
218 # module should be allocated to an associated installation group,
219 # whence it may be included in the eventual distribution, via a
220 # staged installation.
221 #
222 all-crt-objects install-crt-objects: $(addsuffix .$(OBJEXT), crt2 crtmt \
223   crtst dllcrt2 gcrt2 CRT_fp8 CRT_fp10 CRT_noglob binmode txtmode)
224
225 all-deprecated-crt-objects install-deprecated-crt-objects: \
226   $(addsuffix .$(OBJEXT), crt1 dllcrt1 gcrt1)
227
228 # The crt1.$(OBJEXT) and crt2.$(OBJEXT) modules, for the (deprecated)
229 # CRTDLL and the (current) MSVCRT build cases respectively, are built
230 # from a common crt1.c source.  Similarly, the dllcrt1.$(OBJEXT) and
231 # dllcrt2.$(OBJEXT) modules share the common dllcrt1.c source.
232 #
233 # Noting that the source files are named for the deprecated build
234 # case, but that we need to specify this while compiling, we need
235 # this explicit pattern rule...
236 #
237 vpath %.c ${mingwrt_srcdir}
238 $(addsuffix .$(OBJEXT), crt1 dllcrt1): %.$(OBJEXT): %.c
239         $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) -D__CRTDLL__ -o $@ $<
240
241 # ...while, for the current build case, we need an explicit mapping
242 # to identify the disparately named source file.
243 #
244 $(addsuffix .$(OBJEXT), crt2 dllcrt2): %2.$(OBJEXT): %1.c
245         $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) -o $@ $<
246
247 # The initialization hook for profiling code is inherited from Cygwin,
248 # where it is built as gcrt0.$(OBJEXT); we build it, unmodified, as each
249 # of gcrt1.$(OBJEXT) and gcrt2.$(OBJEXT), to satisfy the differing GCC
250 # specs file dependencies for each of the (deprecated) CRTDLL build
251 # and (current) MSVCRT build cases, respectively.
252 #
253 vpath %.c ${mingwrt_srcdir}/profile
254 $(addsuffix .$(OBJEXT), gcrt0 gcrt1 gcrt2): %.$(OBJEXT): gcrt0.c
255         $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) -o $@ $<
256
257 # The primary runtime library is furnished by Microsoft, in the form
258 # of MSVCRT.DLL, as shipped with MS-Windows itself, or in any one of
259 # its versioned variants, as shipped with the MSVC compiler suite.
260 #
261 # We furnish the API for this runtime library, in the form of import
262 # libraries, for both release and debug DLL variants; furthermore,
263 # although we favour the freely available MSVCRT.DLL distributions,
264 # we also provide import libraries tailored to the non-free, and
265 # non-redistributable, MSVCRnn.DLL variants, corresponding to each
266 # of the following enumerated versions from the MSVC suite.
267 #
268 msvcrt_versions := 70 71 80 90 100
269 msvcrt_version_script = echo $1 | awk '\
270   { printf "0x%03d00000", gensub( "^[^1-9]*([0-9]*).*", "\\\\1", 1 ) \
271   }'
272
273 extra_objects_filter = $(filter %.$(OBJEXT),$1)
274 extra_objects_script = test -z "$(call extra_objects_filter,$2)" \
275   || { echo $(AR) $(ARFLAGS) $1 $(call extra_objects_filter,$2); \
276        $(AR) $(ARFLAGS) $1 $(call extra_objects_filter,$2); \
277      }
278
279 msvcrt_dllname_script = echo $1 | awk '\
280   /^c/{ print "crtdll.dll" } \
281   /^m/{ ext = gsub( "^.*d$$", "&" ) ? "d.dll" : ".dll"; \
282         printf "msvcr%s%s", gsub( "^[^1-9]*[0-9]+.*", "&" ) \
283           ? gensub( "^[^1-9]*([0-9]+).*", "\\\\1", 1 ) \
284           : "t", ext; \
285       }'
286
287 # We categorize our import libraries into "standard" (a.k.a. "release")
288 # versions, augmented by corresponding "debug" variants.
289 #
290 std_msvcrt := $(addprefix msvcr,t $(msvcrt_versions))
291 all_msvcrt := $(std_msvcrt) $(addsuffix d,$(std_msvcrt))
292
293 all-mingwrt-libs: $(call active_goals,all,libmsvcrt)
294 all-libmsvcrt install-mingwrt-libs: $(foreach name,$(all_msvcrt),lib$(name).a)
295 all-libcrtdll install-deprecated-mingwrt-libs: libcrtdll.a libcoldname.a
296 all-deprecated-mingwrt all-deprecated-libmsvcrt: all-libcrtdll
297
298 # For each import library to be built, we derive a tailored exports
299 # definition file, from a common source.
300 #
301 .SUFFIXES: .def.in .def
302 vpath %.def.in ${mingwrt_srcdir}/msvcrt-xref
303 $(addsuffix .def,$(all_msvcrt)): %.def: msvcrt.def.in
304         $(CC) -E -P -D__FILENAME__=$@ -D__DLLNAME__=$* \
305           -D__MSVCRT_VERSION__=`$(call msvcrt_version_script,$*)` \
306           -xc-header $< > $@
307
308 # To accommodate the __USE_MINGW_ANSI_STDIO feature, as specified
309 # in _mingw.h and stdio.h, while retaining a mechanism for accessing
310 # the MSVCRT.DLL functions which it replaces, we augment our import
311 # libraries with extra, alternatively named entry points, each of
312 # which implements a vectored jump to the regular entry point for
313 # the DLL implementation of its corresponding replaced function.
314 #
315 msvcrt_repl_prefix = __msvcrt
316 msvcrt_repl_funcs = printf fprintf sprintf vprintf vfprintf vsprintf
317
318 # This is kludgey, but dlltool lacks the selectivity to do the job
319 # well; (its --ext-prefix-alias option, which is what we would like
320 # to use, is rather like a chainsaw in the hands of a neurosurgeon,
321 # when he should have a scalpel).  We cannot selectively apply the
322 # prefix, to just the symbols of interest, so we end up by creating
323 # an initial copy of the import library, WITH the prefix applied to
324 # to EVERYTHING, (noting that, when we create this initial copy, we
325 # MUST specify the "--no-delete" option TWICE, to preserve temporary
326 # object files within the build tree); we then set this initial copy
327 # aside, and create a further copy WITHOUT the extra symbols, while
328 # duplicating the temporary object file name prefix retrieved from
329 # the initial copy, using this $(NM) lookup filter...
330 #
331 dlltool_temp_prefix = $(NM) $(1) | sed -n -e '/t.o:$$/{s///p;q' -e '}'
332
333 # ...after which, we apply the following $(NM) lookup filter to the
334 # initial copy of the import library file, to identify the specific
335 # temporary object files, defining the entry points to remap...
336 #
337 msvcrt_repl = $(call nmlookup,$1,$(msvcrt_repl_prefix)_,$(msvcrt_repl_funcs))
338 nmlookup = $(NM) $(1) | sed -n \
339   -e '/:$$/h;/^[0-7][0-7]*  *T  */{s///;H;g;s/\n//' \
340   $(foreach repl,$(3),-e 's/:_$(2)$(repl)$$//p') \
341   -e '}'
342
343 # ...and we add just that selection to the final copy of the import
344 # library, before explicitly deleting ALL temporary object files, and
345 # the (extended) initial copy of the import library.
346 #
347 vpath %.def ${mingwrt_srcdir}
348 $(foreach name,$(all_msvcrt) crtdll,lib$(name).a): lib%.a: %.def
349         $(DLLTOOL) --as $(AS) -k --input-def $< --no-delete --no-delete \
350           --dllname `$(call msvcrt_dllname_script,$*)` --output-lib $@  \
351           --ext-prefix-alias $(msvcrt_repl_prefix) && mv $@ lib$*-repl.a
352         $(DLLTOOL) --as $(AS) -k --input-def $< --output-lib $@ \
353           --temp-prefix `$(call dlltool_temp_prefix,lib$*-repl.a)` \
354           --dllname `$(DLLTOOL) --identify lib$*-repl.a`
355         $(AR) $(ARFLAGS) $@ `$(call msvcrt_repl,lib$*-repl.a)` \
356           $(filter %.$(OBJEXT),$^)
357         $(RM) lib$*-repl.a `$(call dlltool_temp_prefix,$@)`*
358
359 # Older versions of Microsoft's runtime libraries used a naming
360 # convention which is more consistent with POSIX, (and with other
361 # free software usage), than they currently employ; we support
362 # this earlier convention by mapping the old names to equivalent
363 # entry points in the current libraries, using libcoldname.a to
364 # map CRTDLL.DLL entries, and variants of libmoldname.a for each
365 # variant of MSVCRT.DLL
366 #
367 std_moldname := moldname $(addprefix moldname,$(msvcrt_versions))
368 all_moldname := $(std_moldname) $(addsuffix d,$(std_moldname))
369
370 all-mingwrt-libs: all-libmoldname
371 all-libmoldname install-mingwrt-libs: $(foreach name,$(all_moldname),lib$(name).a)
372 $(foreach name,coldname $(all_moldname),lib$(name).a): lib%.a: %.def
373         $(DLLTOOL) --as $(AS) -k -U --input-def $< --output-lib $@ \
374           --dllname `$(call msvcrt_dllname_script,$*)`
375         $(AR) $(ARFLAGS) $@ $(call extra_objects_filter,$^)
376
377 # The oldname libraries are also a convenient place to provide a
378 # few additional functions, with no direct implementation in the
379 # Microsoft DLLs, but which nevertheless are easily emulated.
380 #
381 $(foreach name,coldname $(all_moldname),lib$(name).a): $(addsuffix .$(OBJEXT), \
382   isascii iscsym iscsymf toascii)
383
384 # Selected versions of the oldname libraries also provide a
385 # convenient vehicle for delivery of stubs, emulating functions
386 # which appear in later MSVCRT versions, and which we also wish
387 # to support in conjunction with earlier versions.
388 #
389 $(foreach name,moldname $(addprefix moldname,70 71),lib$(name).a) \
390 $(foreach name,moldname $(addprefix moldname,70 71),lib$(name)d.a): \
391   strnlen.jmpstub.$(OBJEXT) wcsnlen.jmpstub.$(OBJEXT)
392
393 coldname.def: %.def: ${mingwrt_srcdir}/moldname.def.in
394         $(CC) -C -E -P -D__FILENAME__=$@ -D__CRTDLL__ -xc-header $< > $@
395
396 $(addsuffix .def,$(all_moldname)): %.def: ${mingwrt_srcdir}/moldname.def.in
397         $(CC) -C -E -P -D__FILENAME__=$@ -xc-header $< > $@
398
399 all-mingwrt-libs install-mingwrt-libs: libmingw32.a libmingwex.a
400 libmingw32.a: $(addsuffix .$(OBJEXT), CRTinit CRTglob setargv \
401   CRTfmode cpu_features CRT_fp10 txtmode main dllmain gccmain crtst \
402   tlsmcrt tlsmthread tlssup tlsthrd pseudo-reloc pseudo-reloc-list)
403
404 libmingw32.a libmingwex.a libm.a libmingwthrd.a libgmon.a:
405         $(AR) $(ARFLAGS) $@ $?
406
407 # Complex math objects, to be included in libmingwex.a
408 # (FIXME: consider whether these might be more suitably
409 # delivered in libm.a; ISO-C99 says they belong in the
410 # math library, which by POSIX convention, is libm.a)
411 #
412 vpath %.c ${mingwrt_srcdir}/mingwex
413 vpath %.c ${mingwrt_srcdir}/mingwex/complex
414 libmingwex.a: $(addsuffix .$(OBJEXT), cabs cabsf cabsl cacos cacosf \
415   cacosh cacoshf cacoshl cacosl casin casinf casinh casinhf casinhl casinl \
416   catan catanf catanh catanhf catanhl catanl ccos ccosf ccosh ccoshf ccoshl \
417   ccosl cexp cexpf cexpl clog clogf clogl cpow cpowf cpowl cproj cprojf \
418   cprojl csin csinf csinh csinhf csinhl csinl csqrt csqrtf csqrtl \
419   ctan ctanf ctanh ctanhf ctanhl ctanl)
420
421 libmingwex.a: $(addsuffix .$(OBJEXT), isblank iswblank)
422
423 # Floating point environment control, in libmingwex.a
424 # (FIXME: once again, maybe better delivered in libm.a)
425 #
426 libmingwex.a: $(addsuffix .$(OBJEXT), fegetenv fesetenv feupdateenv \
427   feclearexcept feraiseexcept fetestexcept feholdexcept fegetexceptflag \
428   fesetexceptflag fegetround fesetround)
429
430 # David Gay's "gdtoa" API, provided in libmingwex.a, and used
431 # by MinGW's ISO-C conforming printf() routines for formatting
432 # floating point output.
433 #
434 vpath %.c ${mingwrt_srcdir}/mingwex/gdtoa
435 libmingwex.a: $(addsuffix .$(OBJEXT), g__fmt gethex strtopx g_dfmt gdtoa \
436   gmisc smisc sum g_ffmt hd_init strtodg ulp dmisc g_xfmt hexnan strtodnrp \
437   dtoa misc strtof)
438
439 # "inttypes" conversion routines, provided in libmingwex.a
440 #
441 libmingwex.a: $(addsuffix .$(OBJEXT), \
442   imaxdiv strtoimax strtoumax wcstoimax wcstoumax)
443
444 # Additional math functions, augmenting Microsoft's paltry
445 # selection, also delivered in libmingwex.a, (FIXME: and yet
446 # again, perhaps libm.a would be a better fit)
447 #
448 vpath %.c ${mingwrt_srcdir}/mingwex/math
449 vpath %.s ${mingwrt_srcdir}/mingwex/math
450 libmingwex.a: $(addsuffix .$(OBJEXT), cosf cosl acosf acosl sinf sinl asinf \
451   asinl tanf tanl atanf atanl atan2f atan2l coshf coshl acosh acoshf acoshl \
452   sinhf sinhl asinh asinhf asinhl tanhf tanhl atanh atanhf atanhl cbrt cbrtf \
453   cbrtl ceilf ceill copysign copysignf copysignl erfl s_erf sf_erf expf expl \
454   exp2 exp2f exp2l expm1 expm1f expm1l fabs fabsf fabsl fdim fdimf fdiml \
455   floorf floorl fma fmaf fmal fmax fmaxf fmaxl fmin fminf fminl fmodf fmodl \
456   fp_consts fp_constsf fp_constsl fpclassify fpclassifyf fpclassifyl frexpf \
457   frexpl fucom hypotf hypotl ilogb ilogbf ilogbl isnan isnanf isnanl ldexpf \
458   ldexpl lgamma lgammaf lgammal llrint llrintf llrintl log10f log10l log1p \
459   log1pf log1pl log2 log2f log2l logb logbf logbl logf logl lrint lrintf \
460   lrintl llround llroundf llroundl lround lroundf lroundl modff modfl \
461   nearbyint nearbyintf nearbyintl nextafterf nextafterl nexttoward nexttowardf \
462   powf powl powi powif powil remainder remainderf remainderl remquo remquof \
463   remquol rint rintf rintl round roundf roundl scalbn scalbnf scalbnl signbit \
464   signbitf signbitl sqrtf sqrtl tgamma tgammaf tgammal trunc truncf truncl \
465   x87cvt x87cvtf x87log x87log1p x87pow)
466
467 # Replacement I/O functions in libmingwex.a, providing better POSIX
468 # compatibility than their Microsoft equivalents.
469 #
470 vpath %.c ${mingwrt_srcdir}/mingwex/stdio
471 libmingwex.a: $(addsuffix .$(OBJEXT), btowc fprintf fseeko64 ofmtctl pformat \
472   printf snprintf sprintf vfprintf vfscanf vfwscanf vprintf vscanf vsnprintf \
473   vsprintf vsscanf vswscanf vwscanf)
474
475 # pformat.$(OBJEXT) needs an explicit build rule, since we need to
476 # specify an additional header file path.
477 #
478 PFORMAT_CFLAGS = -I ${mingwrt_srcdir}/mingwex/gdtoa
479 pformat.$(OBJEXT): %.$(OBJEXT): %.c
480         $(CC) -c $(ALL_CFLAGS) $(PFORMAT_CFLAGS) $< -o $@
481
482 # To support Microsoft's DLL version specific exponent digits control,
483 # and "%n" format availability control APIs, in a DLL version agnostic
484 # manner, we also provide the following set of wrapper functions:
485 #
486 libmingwex.a: $(addsuffix fmt.$(OBJEXT),varo crto geto seto crtn getn setn)
487 $(addsuffix fmt.$(OBJEXT),varo crto geto seto crtn getn setn): %.$(OBJEXT): ofmt.c
488         $(CC) -c $(ALL_CFLAGS) -D__$*__ -fno-align-functions -o $@ $<
489
490 # Some additional miscellaneous functions, in libmingwex.a
491 #
492 libmingwex.a: $(addsuffix .$(OBJEXT), mingw-aligned-malloc mingw-fseek)
493 libmingwex.a: $(addsuffix .$(OBJEXT), glob getopt basename dirname nsleep)
494 libmingwex.a: $(addsuffix .$(OBJEXT), mkstemp mkdtemp cryptnam setenv)
495
496 libmingwex.a: $(addsuffix .$(OBJEXT), tdelete tfind tsearch twalk)
497
498 libmingwex.a: $(addsuffix .$(OBJEXT), getdelim gettimeofday)
499 libmingwex.a: $(addsuffix .$(OBJEXT), dirent wdirent dlfcn)
500
501 vpath %.s ${mingwrt_srcdir}/mingwex
502 vpath %.sx ${mingwrt_srcdir}/mingwex
503 libmingwex.a: $(addsuffix .$(OBJEXT), fwide mbrtowc mbsinit strnlen wcrtomb \
504   wcsnlen wcstof wcstold wctob wctrans wctype wmemchr wmemcmp wmemcpy wmemmove \
505   wmemset)
506
507 # The wcsnlen() function, enumerated above, is an adaptation of strnlen();
508 # we need a specific rule to compile it, from shared source.
509 #
510 wcsnlen.$(OBJEXT): strnlen.sx
511         $(COMPILE.sx) -D_UNICODE $^ -o $@
512
513 # For the math sources, we support the convention that a single
514 # quux_generic.c source file will produce three objects: quux.o,
515 # quuxf.o, and quuxl.o; since a change in the common source file
516 # will require all three objects to be recompiled, we may handle
517 # this with a single, multiple target, pattern rule.
518 #
519 $(addsuffix .$(OBJEXT), % %f %l): %_generic.c
520         $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) -o $*.$(OBJEXT) $<
521         $(CC) -c -D FUNCTION=$*f $(CPPFLAGS) $(ALL_CFLAGS) -o $*f.$(OBJEXT) $<
522         $(CC) -c -D FUNCTION=$*l $(CPPFLAGS) $(ALL_CFLAGS) -o $*l.$(OBJEXT) $<
523
524 # The llround.o, llroundf.o, and llroundl.o variants are a special
525 # case of the preceding rule; (the source is lround_generic.c rather
526 # than llround_generic.c).  We can handle this using the following
527 # static pattern rule, (compiling each object individually).
528 #
529 $(addsuffix .$(OBJEXT), llround llroundf llroundl): %.$(OBJEXT): lround_generic.c
530         $(CC) -c -D FUNCTION=$* $(CPPFLAGS) $(ALL_CFLAGS) -o $@ $<
531
532 # Similarly, we may need to compile quux.o, quuxf.o, and quuxl.o
533 # variants from a common quux_generic.sx assembly language file.
534 #
535 vpath %.sx ${mingwrt_srcdir}/mingwex/math
536 $(addsuffix .$(OBJEXT), % %f %l): %_generic.sx
537         $(CC) -c -D_$*_source $(ALL_CPPFLAGS) $(ASFLAGS) -o $*.$(OBJEXT) $<
538         $(CC) -c -D_$*f_source $(ALL_CPPFLAGS) $(ASFLAGS) -o $*f.$(OBJEXT) $<
539         $(CC) -c -D_$*l_source $(ALL_CPPFLAGS) $(ASFLAGS) -o $*l.$(OBJEXT) $<
540
541 # Several generically implemented functions also require separate
542 # assembly of their generic back-end support routines.
543 #
544 x87%.$(OBJEXT): %_generic.sx
545         $(CC) -c $(ALL_CPPFLAGS) $(ASFLAGS) -o $@ $<
546
547 # Historically, MinGW.org's libm.a has been a dummy, delivering
548 # nothing of value; FIXME: IMO, this sucks; it should deliver the
549 # non-MSVCRT.DLL math functions, as noted above.
550 #
551 all-mingwrt-libs install-mingwrt-libs: libm.a
552 libm.a: libm_dummy.$(OBJEXT)
553 libm_dummy.c: Makefile
554         echo "static int __mingw_libm_dummy;" > $@
555
556 # The mingwrt headers define a number of functions which are normally
557 # expected to be compiled as inline code.  Each such function must also
558 # be provided with an externally visible entry point; we provide such
559 # entry points as stubs in libmingwex.a, via the following rules:
560 #
561 sinclude Makefile.stub
562 libstub_refnames = grep -lr '__$1.*FUNCTION *=' ${mingwrt_srcdir}
563 jmpstub_prerequisites := $(shell $(call libstub_refnames,JMPSTUB)/include)
564 libimpl_prerequisites := $(shell $(call libstub_refnames,LIBIMPL)/include)
565 Makefile.stub: Makefile $(jmpstub_prerequisites) $(libimpl_prerequisites)
566         echo "# $@: automatically generated file -- do not edit!" > $@
567         $(call jmpstub_awk_script,$(jmpstub_prerequisites)) >> $@
568         $(call libimpl_awk_script,$(libimpl_prerequisites)) >> $@
569         echo "# $@: end of file" >> $@
570
571 # Stubs are categorized into either of JMPSTUB or LIBIMPL classes;
572 # the rules for building the JMPSTUP inplementations are written to
573 # Makefile.stub, by processing each of their defining header files
574 # through the following awk script...
575 #
576 jmpstub_awk_script = test -z "$1" || awk '\
577   BEGIN { \
578     symbol = "([A-Z_a-z][A-Z_a-z0-9]*)"; \
579     fmt = "\nlib%s.a: %s\n%s: jmpstub.sx\n\t$$(COMPILE.sx) %s -o $$@ $$^\n"; \
580   } \
581   /__JMPSTUB(__)? *[(].*FUNCTION/ { \
582     FUNCTION = gensub( ".*[ ,(:]FUNCTION *= *"symbol".*", "\\1", 1 ); \
583     LIB = match( $$0, ".*[ ,(:]LIB *= *"symbol, altlib ) ? altlib[1] : "mingwex"; \
584     OBJNAME = gensub( "_*(.*)_*", "\\1", 1, FUNCTION )".jmpstub.$$(OBJEXT)"; \
585     OBJNAME_CFLAGS = "-D FUNCTION="FUNCTION; \
586     if( match( $$0, ".*[ ,(:]DLLENTRY *= *"symbol, alias ) ) \
587       OBJNAME_CFLAGS = OBJNAME_CFLAGS" -D DLLENTRY="alias[1]; \
588     else if( match( $$0, ".*[ ,(:]REMAPPED *= *"symbol, alias ) ) \
589       OBJNAME_CFLAGS = OBJNAME_CFLAGS" -D REMAPPED="alias[1]; \
590     printf fmt, LIB, OBJNAME, OBJNAME, OBJNAME_CFLAGS; \
591   } \
592   END { \
593     printf "\n"; \
594   }' $1
595
596 # ...while this establishes the dependencies which apply for each
597 # of those in the LIBIMPL class.
598 #
599 libimpl_awk_script = test -z "$1" || awk '\
600   BEGIN { \
601     symbol = "([A-Z_a-z][A-Z_a-z0-9]*)"; \
602     fmt = "\nlib%s.a: %s\n%s.libimpl: %s\n"; \
603   } \
604   /__LIBIMPL(__)? *[(].*FUNCTION/ { \
605     FUNCTION = gensub( ".*[ ,(:]FUNCTION *= *"symbol".*", "\\1", 1 ); \
606     LIB = match( $$0, ".*[ ,(:]LIB *= *"symbol, altlib ) ? altlib[1] : "mingwex"; \
607     OBJNAME = gensub( "_*(.*)_*", "\\1", 1, FUNCTION )".libimpl.$$(OBJEXT)"; \
608     printf fmt, LIB, OBJNAME, FUNCTION, FILENAME; \
609   } \
610   END { \
611     printf "\n"; \
612   }' $1
613
614 # In contrast to JMPSTUB implementations, which are best handled
615 # by individual compilation rules in Makefile.stub, generic rules
616 # are sufficient for all LIBIMPL implementations; in each case, we
617 # filter the static attribute from each defined implementation, in
618 # its defining header file, to create an intermediate C source for
619 # each individual function; (note that we also remove any pragma
620 # which identifies the originating file as a system header).
621 #
622 libimpl_sed_script = sed \
623   -e '/pragma .* system_header/d' \
624   -e '/__CRT_INLINE  *__LIBIMPL.*FUNCTION *= *$1[ ,)].*)/d' \
625   -e 's/__LIBIMPL.*ALIAS *= *$1[ ,)].*)/__attribute__((__alias__("$1")))/' \
626   -e '/__CRT_ALIAS  *__LIBIMPL.*FUNCTION *= *$1[ ,)].*)/d'
627
628 LIBIMPL_CFLAGS = $(CFLAGS) $(INCLUDES) $(LIBIMPL_EXTRA_CFLAGS)
629 LIBIMPL_EXTRA_CFLAGS = -fno-align-functions -Wno-deprecated-declarations
630
631 # LIBIMPL dependencies are tracked using zero sized name.libimpl
632 # files; the intermediate C files are generated as a side effect
633 # of resolving these dependencies...
634 #
635 %.libimpl:
636         $(call libimpl_sed_script,$*) $< > $@.c
637         > $@
638
639 # ...and ultimately discarded, after the requisite object file
640 # has been compiled; (note that this creates a vulnerability due
641 # to possible loss of the object file, while the tracking file is
642 # still in place; to circumvent this, we must be able to force a
643 # remake of the tracking file, so also regenerating the .c file,
644 # before it is compiled).
645 #
646 libimpl_remake = { $(RM) $1; $(MAKE) --no-print-directory $1; }
647 %.libimpl.$(OBJEXT): %.libimpl
648         test -f $<.c || $(call libimpl_remake,$<)
649         $(CC) -c $(CPPFLAGS) $(LIBIMPL_CFLAGS) -o $@ $<.c
650         $(RM) $<.c
651
652 # Thread support libraries.
653 #
654 all-mingwrt-libs install-mingwrt-libs: libmingwthrd.a libmingwthrd_old.a
655 libmingwthrd.a libmingwthrd_old.a: crtmt.$(OBJEXT)
656 mingwthrd_old.def mingwm10.dll: $(addsuffix .$(OBJEXT), mthr mthr_init)
657 mingwthrd_old.def:
658         $(DLLTOOL) --as $(AS) --output-def $@ $^
659
660 libmingwthrd_old.a: lib%.a: %.def
661         $(DLLTOOL) --as $(AS) --input-def $< --dllname mingwm10.dll --output-lib $@
662         $(AR) $(ARFLAGS) $@ $(call extra_objects_filter,$^)
663
664 all-mingwrt-dll install-mingwrt-dll-files: mingwm10.dll
665 mingwm10.dll: mingwthrd_old.def
666         $(CC) -shared -o $@ -Wl,--image-base,0x6FBC0000 \
667           -Wl,--entry,_DllMainCRTStartup@12 $^
668
669 # Code profiling support, using the GNU profiling library; (note
670 # that applications using this library MUST be licensed to comply
671 # with the GNU General Public License).
672 #
673 all-mingwrt-libs install-mingwrt-libs: libgmon.a
674 libgmon.a: $(addsuffix .$(OBJEXT), gmon mcount profil)
675
676
677 # Installation Rules
678 # ------------------
679 #
680 # Users may expect to be able to specify DESTDIR, to stage the
681 # following stock installation directories outside of the regular
682 # "as configured" installation tree; unfortunately, this expectation
683 # MUST fail, when the stock path is in MS-Windows absolute format, so
684 # we provide an exception mechanism to forbid such usage, and we
685 # proceed to create the directories only when the exception is
686 # NOT triggered.
687 #
688 .PHONY: DESTDIR-UNSUPPORTED
689 bindir docdir includedir libdir mandir htmldir pdfdir:
690         @test -z "$(strip ${DESTDIR})" || case $($@) in ${DESTDIR}?:*) \
691           $(MAKE) --no-print-directory reject=$@ DESTDIR-UNSUPPORTED;; \
692           esac
693         $(call mkinstalldirs,,$($@))
694
695 # Note: we MUST use a recursive make invocation here, as the
696 # "error" function within the accompanying diagnostics would be
697 # triggered, irrespective of its placement in an unexecuted
698 # branch of the above exception trapping shell code.
699 #
700 DESTDIR-UNSUPPORTED:
701         $(call MSG_DESTDIR_FORBIDDEN,$(reject),$($(reject):${DESTDIR}%=%))
702
703 # The following macros, which rely heavily on GNU make's "call"
704 # function, define the diagnostics to be emitted, when the DESTDIR
705 # exception is triggered.
706 #
707 QUOTE = `$1'#'`
708 MSG_DESTDIR_FORBIDDEN = \
709   $(warning *** $(call MSG_DESTDIR_PATH_CONFLICT,$1,Win32,$2);) \
710   $(error try $(call QUOTE,$(call MSG_DESTDIR_ALTERNATIVE,$1,$2)) instead)
711 MSG_DESTDIR_BAD_PATH = DESTDIR is not supported when $1 contains $2 path $3
712 MSG_DESTDIR_PATH_CONFLICT = $(call MSG_DESTDIR_BAD_PATH,$1,$2,$(call QUOTE,$3))
713 MSG_DESTDIR_ALTERNATIVE = make install $1="$(call MSG_DESTDIR_TRANSFORM,$2)"
714 MSG_DESTDIR_TRANSFORM = ${DESTDIR}$(shell echo $1 | sed 's/^.://')
715
716 # Install everything.
717 #
718 install: inst@DEFAULT_MAKECMDGOALS@
719 install-stage-1-only: install-headers install-libdir-objects install-libs
720 install-stage-1-and-2: install-stage-1-only install-bin
721 install-gcc: install-stage-1-only
722
723 install-strip: install-strip-mingwrt
724 install-strip-%:
725         $(MAKE) --no-print-directory \
726           STRIP_DATA='cd ${libdir}; $(STRIP) --strip-unneeded $$1' \
727           STRIP_DLL='cd ${bindir}; $(STRIP) $$1' install-$*
728
729 # Install licence files.
730 #
731 install-license: install-mingwrt-license
732 install-licence install-mingwrt-licence: %-licence: %-license
733
734 vpath DISCLAIMER ${mingwrt_srcdir}
735 vpath COPYING ${mingwrt_srcdir}/profile
736 vpath CYGWIN_LICENSE ${mingwrt_srcdir}/profile
737 mingwrt-license-files: COPYING CYGWIN_LICENSE DISCLAIMER
738
739 # FIXME: The following rule is generalized, such that it may accommodate
740 # both mingwrt and w32api, (and other packages); thus, it should ideally
741 # be relocated into a common (shared) Makefile fragment.
742 #
743 install-mingwrt-license install-w32api-license: install-%: docdir %-files
744 %-license-files:
745         $(call mkinstalldirs,,${docdir}/$*/$(PACKAGE_VERSION))
746         $(call INSTALL_DATA,$^,${docdir}/$*/$(PACKAGE_VERSION))
747
748 # Install headers associated with the MinGW runtime libraries.
749 #
750 includedirs: mingwrt-includedirs
751 install-headers install-mingwrt: install-mingwrt-headers
752
753 mingwrt-includedirs: includedir $(eval mingwrt_include_subdirs=sys parts)
754         $(call mkinstalldirs,${includedir}/,$(mingwrt_include_subdirs))
755
756 SUB_HEADERS_PRESENT = echo $1/include/$2/*.h | grep -v '[*]' > /dev/null
757 INSTALL_SUB_HEADERS = $(call INSTALL_DATA,$1/include/$2/*.h,${includedir}/$2)
758
759 install-mingwrt-headers: _mingw.h mingwrt-includedirs
760         $(call INSTALL_DATA,_mingw.h,${includedir})
761         $(call INSTALL_DATA,${mingwrt_srcdir}/include/*.h,${includedir})
762         for dir in $(mingwrt_include_subdirs); do \
763           if $(call SUB_HEADERS_PRESENT,${mingwrt_srcdir},$$dir); then \
764             $(call INSTALL_SUB_HEADERS,${mingwrt_srcdir},$$dir); \
765             fi; \
766           done
767         $(call INSTALL_DATA,${mingwrt_srcdir}/profile/*.h,${includedir})
768
769 # Install libraries, and supporting free standing object files.
770 #
771 install-libs install-mingwrt: install-mingwrt-libdir-libs
772 install-libdir-objects install-mingwrt: install-mingwrt-libdir-objects
773
774 install-mingwrt-libdir-libs: libdir $(call active_goals,install,mingwrt-libs)
775 install-mingwrt-libdir-objects: libdir $(call active_goals,install,crt-objects)
776
777 install-crt-objects install-deprecated-crt-objects \
778 install-mingwrt-libs install-deprecated-mingwrt-libs:
779         $(call INSTALL_DATA,$^,${libdir})
780         $(if $(STRIP_DATA),$(call STRIP_DATA,$^))
781
782
783 # Install DLLs.
784 #
785 install-mingwrt: install-mingwrt-dll
786 install-bin install-dll: install-mingwrt-dll
787 install-mingwrt-bin install-w32api-bin: install-%-bin: install-%-dll
788 install-mingwrt-dll install-w32api-dll: install-%-dll: bindir install-%-dll-files
789 install-%-dll-files:
790         $(call INSTALL_DATA,$^,${bindir})
791         $(if $(STRIP_DLL),$(call STRIP_DLL,$^))
792
793
794 # Install manpages.
795 #
796 vpath %.man ${mingwrt_srcdir}/man
797 install-man install-manpages: install-mingwrt-manpages
798 mingwrt-man$(man3ext): $(addsuffix .$(man3ext),basename dirname getline getdelim)
799 install-mingwrt-manpages: mandir mingwrt-man3
800
801 mingwrt-man%:
802         $(call mkinstalldirs,,${man$*dir})
803         $(call INSTALL_DATA,$^,${man$*dir})
804         $(RM) $^
805
806 %: %.man
807         $(call format_manpage,$(basename $*),$(suffix $*),$<) $< > $@
808
809 format_manpage = sed \
810   -e "s/%PAGEREF%/`echo $1 | tr a-z A-Z` $(2:.%=%) `date -r $3 +%d-%b-%Y`/"
811
812 basename.$(man3ext): export reference_manpage = dirname.$(man3ext).man
813 basename.$(man3ext): %: %.mancopy-recursive
814
815 getdelim.$(man3ext): export reference_manpage = getline.$(man3ext).man
816 getdelim.$(man3ext): %: %.mancopy-recursive
817
818 %.mancopy-recursive:
819         $(MAKE) --no-print-directory $*.mancopy
820
821 %.mancopy: $(reference_manpage)
822         $(call format_manpage,$(basename $*),$(suffix $*),$<) $< > $*
823
824
825 # Undo Installation
826 # -----------------
827 #
828 uninstall: uninstall-mingwrt
829 uninstall-bin uninstall-dll uninstall-mingwrt: uninstall-mingwrt-dll
830 uninstall-mingwrt: uninstall-mingwrt-headers uninstall-mingwrt-libdir-libs
831 uninstall-mingwrt: uninstall-mingwrt-libdir-objects
832
833 REMOVE_HEADERS = cd $1 && $(RM) $(notdir $(wildcard $2))
834
835 uninstall-mingwrt-headers:
836         $(call REMOVE_HEADERS,${includedir},${mingwrt_srcdir}/include/*.h)
837         for dir in $(mingwrt_include_subdirs); do \
838           files=`cd ${mingwrt_srcdir}/include/$$dir && echo *.h`; \
839           (cd ${includedir}/$$dir && $(RM) $$files); \
840           done
841         $(call REMOVE_HEADERS,${includedir},${mingwrt_srcdir}/profile/*.h)
842
843 uninstall-mingwrt-dll \
844 uninstall-mingwrt-libdir-objects uninstall-mingwrt-libdir-libs: un%:
845         $(MAKE) --no-print-directory mkinstalldirs= \
846           INSTALL_DATA='cd $$2 && $(RM) $$1' $*
847
848
849 # Distribution
850 # ------------
851 #
852 .PHONY: dist
853 dist: devdist dlldist licdist mandist srcdist
854         $(RM) -r dist/mingwrt dist/w32api
855
856 mingwrt-dist-staged w32api-dist-staged: %-dist-staged:
857         $(RM) -r dist/$*
858         $(MAKE) --no-print-directory prefix=`pwd`/dist/$* install-strip-$*
859
860 devdist: mingwrt-devdist
861 mingwrt_devdist_objects = dist/mingwrt/lib/*.$(OBJEXT)
862 mingwrt-devdist w32api-devdist: %-devdist: %-dist-staged
863         cd dist/$* && tar chf - --hard-dereference include lib | \
864           xz -c > ../$*-$(PACKAGE_RELEASE_TAG)-dev.tar.xz
865
866 dlldist: mingwrt-dlldist
867 mingwrt-dlldist: %-dlldist: %-dist-staged
868         cd dist/$* && tar chf - --hard-dereference bin | \
869           xz -c > ../$*-$(PACKAGE_RELEASE_TAG)-dll.tar.xz
870
871 licdist: mingwrt-licdist
872 mingwrt-licdist w32api-licdist: %-licdist:
873         $(RM) -r tmp
874         $(MAKE) --no-print-directory prefix=`pwd`/tmp install-$*-licence
875         cd tmp && tar chf - --hard-dereference * | \
876           xz -c > ../dist/$*-$(PACKAGE_RELEASE_TAG)-lic.tar.xz
877         $(RM) -r tmp
878
879 mandist: mingwrt-mandist
880 mingwrt-mandist: %-mandist:
881         $(RM) -r tmp
882         $(MAKE) --no-print-directory prefix=`pwd`/tmp install-$*-manpages
883         cd tmp && tar chf - --hard-dereference share | \
884           xz -c > ../dist/$*-$(PACKAGE_RELEASE_TAG)-man.tar.xz
885         $(RM) -r tmp
886
887 srcdist: mingwrt-srcdist
888 mingwrt-srcdist: mingwrt-srcdist-dir mingwrt-srcdist-files
889         cd dist && tar chf - $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) | \
890           xz -c > $(PACKAGE_TARNAME)-$(PACKAGE_RELEASE_TAG)-src.tar.xz
891         $(RM) -r dist/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
892
893 mingwrt-srcdist-dir:
894         $(RM) -r dist/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
895         $(call mkinstalldirs,,dist/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION))
896
897 mingwrt-srcdist-files: mingwrt-srcdist-package-files
898 mingwrt-srcdist-files: mingwrt-srcdist-testsuite-files
899
900 mingwrt-srcdist-package-files:
901         (cd ${mingwrt_srcdir} && tar chf - --hard-dereference $(notdir $^)) | \
902           (cd dist/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION) && tar xf -)
903
904 mingwrt-srcdist-package-files: $(wildcard ${mingwrt_srcdir}/*.[chs]) \
905   $(addprefix ${mingwrt_srcdir}/,ChangeLog CONTRIBUTORS DISCLAIMER README) \
906   $(wildcard ${mingwrt_srcdir}/*.def.in) $(wildcard ${mingwrt_srcdir}/config*) \
907   $(addprefix ${mingwrt_srcdir}/,aclocal.m4 VERSION.m4 install-sh Makefile.in) \
908   $(addprefix ${mingwrt_srcdir}/,TODO include man mingwex profile) \
909   $(addprefix ${mingwrt_srcdir}/,msvcrt-xref crtdll.def) \
910   $(wildcard ${mingwrt_srcdir}/*.txt)
911
912 mingwrt-srcdist-testsuite-files: $(wildcard ${mingwrt_srcdir}/tests/*.at)
913 mingwrt-srcdist-testsuite-files: $(wildcard ${mingwrt_srcdir}/tests/*.in)
914         (cd ${mingwrt_srcdir} && tar chf - $(addprefix tests/,$(notdir $^))) | \
915           (cd dist/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION) && tar xf -)
916
917 install-html install-pdf: install-%: %dir mingwrt-man$(man3ext)
918         $(MAKE) --no-print-directory install-$*-files
919
920 install-html-files install-pdf-files: install-%-files: \
921   $(addsuffix .%,$(wildcard ${man3dir}/*.$(man3ext)))
922
923 %.$(man3ext).html: %.$(man3ext)
924         man2html $< | sed -e '1,/^<!DOCTYPE/{/^<!/p;d' -e '}' > ${htmldir}/$(notdir $@)
925         chmod 644 ${htmldir}/$(notdir $@)
926
927 %.$(man3ext).pdf: %.$(man3ext)
928         man -t $< | ps2pdf - > ${pdfdir}/$(notdir $@)
929         chmod 644 ${pdfdir}/$(notdir $@)
930
931 html-docdist pdf-docdist: %-docdist:
932         $(RM) -r tmp
933         $(MAKE) --no-print-directory prefix=`pwd`/tmp install-$*
934         $(RM) -r tmp/share/man
935         cd tmp && tar chf - --hard-dereference share | \
936           xz -c > ../dist/mingwrt-doc-$(PACKAGE_RELEASE_TAG)-$*.tar.xz
937         $(RM) -r tmp
938
939
940 # Clean-up Rules
941 # --------------
942 #
943 clean-local: mostlyclean-local
944         $(RM) msvcr*.def moldname*.def mingw*.def lib*.a *.dll
945
946 mostlyclean-local:
947         $(RM) *.d *.$(OBJEXT) Makefile.stub *.libimpl
948
949 distclean-local: clean-local
950         $(RM) config.log config.status libm_dummy.c
951
952 maintainer-clean-warning:
953         $(warning $(MAKE) $(@:%-warning=%))
954         $(warning This command should be used by package maintainers only;)
955         $(warning it deletes files which may require special tools to rebuild.)
956
957 maintainer-clean-local: maintainer-clean-warning distclean-local
958         $(RM) -r ${mingwrt_srcdir}/autom4te.cache
959
960 clean mostlyclean distclean maintainer-clean: %clean: %clean-local
961
962 # Testsuite
963 # ---------
964 #
965 .PHONY: check-recursive
966 check tests: check-recursive
967 check-recursive:
968         $(MAKE) -C tests $@
969
970 # $RCSfile$: end of file