newlib/winsup/mingw/Makefile.in
2009-07-27 20:27:09 +00:00

608 lines
17 KiB
Makefile

# Makefile.in for the winsup/mingw directory.
# Copyright (c) 1995-2008, 1996, 1997, 1998 Cygnus Solutions
# This program 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 of the License, or
# (at your option) any later version.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# This makefile requires GNU make.
PACKAGE = @PACKAGE_TARNAME@
VERSION = @PACKAGE_VERSION@
CYGRELEASE = 1
VPATH = @srcdir@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = @top_builddir@
# FIXME: I see no reason to define `objdir';
# it appears to be unused, and could be removed.
objdir = .
host_alias = @host_alias@
build_alias = @build_alias@
target_alias = @target_alias@
with_cross_host = @with_cross_host@
prefix = @prefix@
conf_prefix = @prefix@
host_os = @host_os@
datarootdir = @datarootdir@
program_transform_name = @program_transform_name@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
ifneq (,$(findstring cygwin,$(target_alias)))
#
# FIXME: What is the purpose of such logic, testing `target_alias'?
#
# Firstly, there is no code generator being built here. The concept
# of `target' is meaningless, and there is no valid reason to expect
# that `target_alias' would be anything other than an empty string.
# Thus, the validity of such tests is extremely suspect.
#
# Secondly, the decisions being taken, on the basis of these tests,
# rightfully belong in the configure script; all this logic should be
# removed, and properly implemented in `configure.in'.
#
mandir = $(prefix)/share/man
mansection = mingw
else
mandir = @mandir@
mansection = 3
endif
manpage_transform = @mingw_manpage_transform@
ifeq ($(target_alias),$(host_alias))
ifeq ($(build_alias),$(host_alias))
tooldir:=$(exec_prefix)
else
tooldir:=$(exec_prefix)/$(target_alias)
endif
else
tooldir:=$(exec_prefix)/$(target_alias)
endif
datadir = @datadir@
infodir = @infodir@
includedir = @includedir@
ifneq (,$(findstring cygwin,$(target_alias)))
#
# FIXME: Doubtful use of `target_alias', again.
#
# Here we not only have a dubious test, based on `target_alias',
# but we also assign local alternatives for the standard autoconf
# installation path macros. This should not be necessary; the
# configure script should simply assign appropriate values to
# the standard macros, which should be used herein.
#
inst_bindir:=$(tooldir)/bin
inst_includedir:=$(tooldir)/include/mingw
inst_libdir:=$(tooldir)/lib/mingw
inst_docdir:=$(tooldir)/share/doc/mingw-runtime
else
ifneq (,$(with_cross_host))
#
# FIXME: What is the intended purpose of `with_cross_host'?
#
# Notwithstanding that this conforms to no known standard, and
# is completely undocumented, it does not belong here; every one
# of these settings is the prerogative of the configure script,
# and they should use standard names, as noted above.
#
inst_bindir:=$(tooldir)/bin
inst_includedir:=$(tooldir)/include
inst_libdir:=$(tooldir)/lib
inst_docdir:=$(tooldir)/share/doc/mingw-runtime
else
inst_bindir:=$(bindir)
inst_includedir:=$(includedir)
inst_libdir:=$(libdir)
inst_docdir:=$(prefix)/doc/runtime
endif
endif
# The Mingw headers are installed under a subdirectory of
# $(tooldir)/include when configuring in Cygwin.
HEADER_SUBDIR = @HEADER_SUBDIR@
SHELL = /bin/sh
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
mkinstalldirs = $(SHELL) @MKINSTALLDIRS@
CC := @CC@
ifneq (,$(findstring cygwin,$(target_alias)))
#
# FIXME: What is the purpose of this hideous kludge?
#
# Again, we have a dubious use of `target_alias'. Worse, `CC'
# should have been appropriately set by the configure script; to
# mess with it, in this fashion, should neither be necessary,
# nor accepted.
#
override CC := ${filter-out -L% -B%,${shell echo $(CC) | sed -e 's%\(-isystem\|-iwithprefixbefore\) *[^ ]*\( \|$$\)% %g'}}
endif
# FIXME: Which is it, CC or CC_FOR_TARGET?
CC_FOR_TARGET = $(CC)
AS_FOR_TARGET = $(AS)
CFLAGS = @CFLAGS@
CXXFLAGS = @CXXFLAGS@
# compiling with Cygwin?
NO_CYGWIN := @NO_CYGWIN@
ifdef NO_CYGWIN
#
# FIXME: Again, this should have been resolved by `configure',
# and this kludge should be unnecessary.
#
override CC := ${NO_CYGWIN} $(firstword ${CC})
endif
# Either crtdll (CRT_ID 1) or msvcrt (CRT_ID 2).
RUNTIME = @RUNTIME@
CRT_ID = @CRT_ID@
# Needed for threading dll.
THREAD_DLL = @THREAD_DLL@
THREAD_DLL_VERSION = 10
THREAD_DLL_NAME = $(THREAD_DLL)$(THREAD_DLL_VERSION).dll
# Various libraries.
LIBM_A=@LIBM_A@
W32API_INCLUDE = @W32API_INCLUDE@
INCLUDES = -I$(srcdir)/include \
-I$(srcdir)/../include \
-nostdinc \
-iwithprefixbefore include
ALL_CFLAGS = $(CFLAGS) $(INCLUDES) $(W32API_INCLUDE)
ALL_CXXFLAGS = $(CXXFLAGS) $(INCLUDES) -nostdinc++ $(W32API_INCLUDE)
AS = @AS@
AR = @AR@
LD = @LD@
AR_FLAGS = rcv
RANLIB = @RANLIB@
DLLTOOL = @DLLTOOL@
DLLTOOLFLAGS =
DLLTOOL_FOR_TARGET = $(DLLTOOL)
DLLTOOL_FLAGS = --as $(AS_FOR_TARGET)
DLLWRAP = @DLLWRAP@
DLLWRAP_FOR_TARGET = $(DLLWRAP)
DLLWRAP_FLAGS = --dlltool $(DLLTOOL) --as $(AS) --driver-name $(CC)
OBJCOPY = @OBJCOPY@
NM = @NM@
TAR = tar
TARFLAGS = z
TARFILEEXT = .tar.gz
SUBDIRS = mingwex profile
# FIXME: Most of these are either redundant, or should be set
# directly in the subdirectories' Makefiles, by `configure'.
FLAGS_TO_PASS:=\
AS="$(AS)" \
CC="$(CC)" \
CFLAGS="$(CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_CONFIG)" \
CXXFLAGS="$(CXXFLAGS) $(CFLAGS_COMMON) $(CFLAGS_CONFIG)" \
EXE_LDFLAGS="$(EXE_LDFLAGS)" \
AR="$(AR)" \
RANLIB="$(RANLIB)" \
LD="$(LD)" \
DLLTOOL="$(DLLTOOL)" \
exec_prefix="$(exec_prefix)" \
bindir="$(bindir)" \
libdir="$(libdir)" \
tooldir="$(tooldir)" \
datadir="$(datadir)" \
infodir="$(infodir)" \
includedir="$(includedir)" \
inst_bindir="$(inst_bindir)" \
inst_includedir="$(inst_includedir)" \
inst_libdir="$(inst_libdir)" \
inst_docdir="$(inst_docdir)" \
prefix="$(prefix)" \
target_alias="$(target_alias)" \
TAR="$(TAR)" \
TARFLAGS="$(TARFLAGS)" \
TARFILEEXT="$(TARFILEEXT)"
CRT0S = crt1.o dllcrt1.o crt2.o dllcrt2.o CRT_noglob.o crtmt.o crtst.o \
CRT_fp8.o CRT_fp10.o txtmode.o binmode.o
MINGW_OBJS = CRTglob.o CRTfmode.o CRTinit.o dllmain.o gccmain.o \
main.o crtst.o mthr_stub.o CRT_fp10.o txtmode.o \
pseudo-reloc.o pseudo-reloc-list.o cpu_features.o
MOLD_OBJS = isascii.o iscsym.o iscsymf.o toascii.o \
strcasecmp.o strncasecmp.o wcscmpi.o
LIBS = libcrtdll.a \
libmsvcrt.a libmsvcrtd.a \
libmsvcr70.a libmsvcr70d.a \
libmsvcr71.a libmsvcr71d.a \
libmsvcr80.a libmsvcr80d.a \
libmsvcr90.a libmsvcr90d.a \
libmingw32.a \
libcoldname.a \
libmoldname.a libmoldnamed.a \
libmoldname70.a libmoldname70d.a \
libmoldname71.a libmoldname71d.a \
libmoldname80.a libmoldname80d.a \
libmoldname90.a libmoldname90d.a \
$(LIBM_A) \
libmingwthrd.a
DLLS = $(THREAD_DLL_NAME)
INSTDOCS = CONTRIBUTORS \
DISCLAIMER \
README
SRCDIST_FILES = CRT_noglob.c CRTfmode.c CRTglob.c CRTinit.c ChangeLog \
Makefile.in README TODO config.guess config.sub configure configure.in \
aclocal.m4 crt1.c crtdll.def crtmt.c crtst.c dllcrt1.c dllmain.c \
gccmain.c init.c install-sh jamfile main.c mkinstalldirs \
moldname.def.in msvcrt.def.in ofmt_stub.s \
mthr.c mthr_init.c mthr_stub.c readme.txt \
isascii.c iscsym.c iscsymf.c toascii.c \
strcasecmp.c strncasecmp.c wcscmpi.c \
CRT_fp8.c CRT_fp10.c test_headers.c txtmode.c binmode.c pseudo-reloc.c \
pseudo-reloc-list.c cpu_features.c cpu_features.h \
DISCLAIMER CONTRIBUTORS
all_dlls_host = @all_dlls_host@
install_dlls_host = @install_dlls_host@
all: $(CRT0S) $(LIBS) $(all_dlls_host)
all_dlls_host: $(DLLS)
install_dlls_host:
for i in $(DLLS); do \
$(INSTALL_PROGRAM) $$i $(inst_bindir)/$$i ; \
done
_libm_dummy.o:
rm -f _libm_dummy.c
echo "static int __mingw_libm_dummy;" > _libm_dummy.c
$(CC) -c $(ALL_CFLAGS) _libm_dummy.c
rm -f _libm_dummy.c
libm.a: _libm_dummy.o
$(AR) rc $@ _libm_dummy.o
$(RANLIB) $@
libmingwthrd.a: crtmt.o mingwthrd.def
$(DLLTOOL) $(DLLTOOL_FLAGS) --dllname $(THREAD_DLL_NAME) \
--def mingwthrd.def --output-lib $@
$(AR) $(ARFLAGS) $@ crtmt.o
$(RANLIB) $@
DLL_OFILES = mthr.o mthr_init.o
DLL_CC_STUFF = -B./ -shared $(MNO_CYGWIN) -Wl,--image-base,0x6FBC0000 \
-Wl,--entry,_DllMainCRTStartup@12 \
$(DLL_OFILES) mingwthrd.def \
-Lmingwex
$(THREAD_DLL_NAME) mingwthrd.def: $(DLL_OFILES) Makefile $(SUBDIRS)
$(DLLTOOL) --as $(AS) --output-def mingwthrd.def $(DLL_OFILES)
$(CC) $(DLL_CC_STUFF) -o $(THREAD_DLL_NAME)
libmingw32.a: $(MINGW_OBJS)
$(AR) rc $@ $(MINGW_OBJS)
$(RANLIB) $@
msvcrt.def msvcrtd.def \
msvcr70.def msvcr70d.def \
msvcr71.def msvcr71d.def \
msvcr80.def msvcr80d.def \
msvcr90.def msvcr90d.def: msvcrt.def.in
$(CC) -DRUNTIME=$(basename $(notdir $@)) \
-D__$(basename $(notdir $@))__=1 \
-D__MSVCRT__ -C -E -P \
-xc-header $? > $@
moldname-crtdll.def: moldname.def.in
$(CC) -DRUNTIME=crtdll \
-D__FILENAME__=moldname-crtdll.def \
-D__CRTDLL__ -C -E -P \
-xc-header $? > $@
moldname-msvcrt.def: moldname.def.in
$(CC) -DRUNTIME=msvcrt \
-D__FILENAME__=moldname-msvcrt.def \
-D__MSVCRT__ -C -E -P \
-xc-header $? > $@
libcoldname.a: moldname-crtdll.def $(MOLD_OBJS)
$(DLLTOOL) --as $(AS) -k -U \
--dllname crtdll.dll \
--def moldname-crtdll.def \
--output-lib $@
$(AR) rc $@ $(MOLD_OBJS)
$(RANLIB) $@
libmoldname.a libmoldnamed.a: moldname-msvcrt.def $(MOLD_OBJS)
$(DLLTOOL) --as $(AS) -k -U \
--dllname msvcrt$(@:libmoldname%a=%)dll \
--def moldname-msvcrt.def \
--output-lib $@
$(AR) rc $@ $(MOLD_OBJS)
$(RANLIB) $@
libmoldname70.a libmoldname70d.a \
libmoldname71.a libmoldname71d.a \
libmoldname80.a libmoldname80d.a \
libmoldname90.a libmoldname90d.a: moldname-msvcrt.def $(MOLD_OBJS)
$(DLLTOOL) --as $(AS) -k -U \
--dllname msvcr$(@:libmoldname%a=%)dll \
--def moldname-msvcrt.def \
--output-lib $@
$(AR) rc $@ $(MOLD_OBJS)
$(RANLIB) $@
# These special rules are necessary...
#
crt1.o dllcrt1.o:
$(CC) -c -D__CRTDLL__ -U__MSVCRT__ $(ALL_CFLAGS) $< -o $@
crt2.o dllcrt2.o:
$(CC) -c -D__MSVCRT__ -U__CRTDLL__ $(ALL_CFLAGS) $< -o $@
check: check-headers
TEST_H_OPTIONS = $(ALL_CFLAGS) -Wall -W -Wsystem-headers -c \
$(srcdir)/test_headers.c -o test_headers.o
.PHONY: check-headers
check-headers: force
@echo "Testing runtime headers..."
@for lang in c c++ objective-c ; do \
echo "$$lang ..."; \
$(CC) -x$$lang $(TEST_H_OPTIONS) ; \
echo "$$lang -ansi"; \
$(CC) -x$$lang -ansi $(TEST_H_OPTIONS) ; \
done
# specify -std=xx only for C
@for std in gnu89 gnu99 c89 c99 ; do \
echo "std = $$std"; \
$(CC) -std=$$std $(TEST_H_OPTIONS) ; \
done
@rm -f test_headers.o
clean:
-rm -f *.o *.a *~ core a.out mingwthrd.def mingwthrd.base mingwthrd.exp
-rm -f $(THREAD_DLL_NAME) mingwthrd_dummy.exe
-rm -f msvcr*.def moldname-*.def
@$(MAKE) subdirs DO=$@ $(FLAGS_TO_PASS)
distclean: clean
@$(MAKE) subdirs DO=$@ $(FLAGS_TO_PASS)
-rm -f config.cache config.status config.log
-rm -f Makefile
ifdef SNAPDATE
distdir=$(PACKAGE)-$(VERSION)-$(SNAPDATE)
else
ifneq (,$(findstring cygwin, $(target_alias)))
distdir=$(PACKAGE)-$(VERSION)-$(CYGRELEASE)
else
distdir=$(PACKAGE)-$(VERSION)-$(host_os)
endif
endif
ifneq (,$(findstring cygwin, $(target_alias)))
#
# FIXME: Dubious use of `target_alias', yet again.
#
# Once more, the default settings for these macros could be
# more productively determined by `configure'.
#
TARFLAGS = j
TARFILEEXT = .tar.bz2
dist_prefix = $(conf_prefix)
endif
dist: srcdist bindist
srcdist:
rm -rf $(distdir)
mkdir $(distdir)
chmod 755 $(distdir)
for i in $(SRCDIST_FILES); do \
cp -p $(srcdir)/$$i $(distdir)/$$i ; \
done
for i in $(SUBDIRS); do \
(cd $$i; $(MAKE) distdir=../$(distdir) dist); \
done
#FIXME this needs to be done with SUBDIRS and Makefiles.
#
# Maybe, but this is simpler, and adequate for now!
# However, as more manpages are added, spanning multiple sections,
# we'll probably need a separate Makefile to organise them.
#
mkdir $(distdir)/include
mkdir $(distdir)/include/sys
cp $(srcdir)/include/*.h $(distdir)/include/
cp $(srcdir)/include/sys/*.h $(distdir)/include/sys/
mkdir $(distdir)/man
cp $(srcdir)/man/*.man $(distdir)/man/
#
#end FIXME
rm -f $(distdir)-src.tar.gz
$(TAR) $(TARFLAGS)cf $(distdir)-src$(TARFILEEXT) $(distdir)
# Binary package structure is determined according to the
# preferred package name assigned at configure time...
#
bindist: bindist-$(PACKAGE)
# The directory structure is common to both package styles...
#
bindist-common:
rm -rf $(distdir)
mkdir $(distdir)
chmod 755 $(distdir)
$(MAKE) install prefix=$(shell pwd)/$(distdir)$(dist_prefix)
rm -f $(distdir).tar.gz
# Current MinGW distributions prefer separate `dev' and `dll' bundles,
# and use the abbreviated `mingwrt' form for the package name...
#
DEVDIST_FILES = * --exclude=bin
DLLDIST_FILES = bin/*.dll doc/*
#
bindist-mingwrt: bindist-common
cd $(distdir); \
$(TAR) $(TARFLAGS)cf ../$(distdir)-dev$(TARFILEEXT) $(DEVDIST_FILES); \
$(TAR) $(TARFLAGS)cf ../$(distdir)-dll$(TARFILEEXT) $(DLLDIST_FILES)
rm -rf $(distdir)
# However, Cygwin maintainers continue to prefer a composite package,
# retaining the older `mingw-runtime' naming convention...
#
BINDIST_FILES = *
#
bindist-mingw-runtime: bindist-common
cd $(distdir); \
$(TAR) $(TARFLAGS)cf ../$(distdir)$(TARFILEEXT) $(BINDIST_FILES)
rm -rf $(distdir)
snapshot:
make dist SNAPDATE=$(shell date '+%Y%m%d')
info:
info-html:
install-info: info
install-dirs:
$(mkinstalldirs) $(inst_bindir)
$(mkinstalldirs) $(inst_includedir)
$(mkinstalldirs) $(inst_libdir)
$(mkinstalldirs) $(inst_docdir)
$(mkinstalldirs) $(mandir)/man$(mansection)
install: all install-dirs $(install_dlls_host)
for i in $(LIBS); do \
$(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
done
for i in $(CRT0S); do \
$(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
done
for i in $(INSTDOCS); do \
$(INSTALL_DATA) $(srcdir)/$$i $(inst_docdir)/$$i ; \
done
for sub in . sys ; do \
dstdir=$(inst_includedir)/$$sub ; \
$(mkinstalldirs) $$dstdir ; \
for i in $(srcdir)/include/$$sub/*.h ; do \
$(INSTALL_DATA) $$i $$dstdir/`basename $$i` ; \
done ; \
done
#
# This provisional hack installs the only manpage we have at present...
# It simply CANNOT suffice, when we have more manpages to ship.
#
$(mkinstalldirs) $(mandir)/man$(mansection)
$(INSTALL_DATA) $(srcdir)/man/dirname.man $(mandir)/man$(mansection)/`\
echo dirname.man|sed '$(manpage_transform);s,man$$,$(mansection),'`
$(INSTALL_DATA) $(srcdir)/man/dirname.man $(mandir)/man$(mansection)/`\
echo basename.man|sed '$(manpage_transform);s,man$$,$(mansection),'`
#
# End provisional hack.
#
@$(MAKE) subdirs DO=$@ $(FLAGS_TO_PASS)
subdirs: $(SUBDIRS)
$(SUBDIRS): force
@test -n "$(DO)" && g="$(DO)" || g=all; echo "Making \`$$g' in \`$@'"
@cd $@; $(MAKE) $(FLAGS_TO_PASS) $(DO)
force:
#
# Dependencies
#
libcrtdll.a: crtdll.def
libmsvcrt.a: msvcrt.def
libmsvcrtd.a: msvcrtd.def
CRT_noglob.o: CRT_noglob.c
CRTfmode.o: CRTfmode.c
CRTglob.o: CRTglob.c
CRTinit.o: CRTinit.c
crt1.o: crt1.c init.c
crt2.o: crt1.c init.c
crtmt.o: crtmt.c
crtst.o: crtst.c
ctype_old.o: ctype_old.c
dllcrt1.o: dllcrt1.c
dllcrt2.o: dllcrt1.c
dllmain.o: dllmain.c
main.o: main.c
oldnames.o: oldnames.c
string_old.o: string_old.c
CRT_fp8.o: CRT_fp8.c
CRT_fp10.o: CRT_fp10.c
Makefile: Makefile.in config.status configure
$(SHELL) config.status
config.status: configure
$(SHELL) config.status --recheck
.SUFFIXES: .y $(SUFFIXES) .cc .def .a
sym_prefix = __msvcrt
NM_LOOKUP = $(NM) $@ | sed -n \
-e '/:$$/h;/^[0-7][0-7]* *T */{s///;H;g;s/\n//p' \
-e '}' | sed -n 's/:_'"$$key"'$$//p'
MINGW_REPL_FUNCS = printf fprintf sprintf vprintf vfprintf vsprintf
lib%.a: %.def
$(DLLTOOL) --as=$(AS) -k --dllname $*.dll --output-lib $@ --def $<
for key in $(MINGW_REPL_FUNCS); do \
src=`$(NM_LOOKUP)`; \
if test -n "$$src"; then \
dst=`echo "$$src" | sed 's/0/4/'`; repl="$$repl $$dst"; \
tmpfiles="$$tmpfiles $$src $$dst"; \
$(AR) x $@ $$src; \
$(OBJCOPY) --redefine-sym _$$key=_$(sym_prefix)_$$key \
--redefine-sym __imp__$$key=__imp__$(sym_prefix)_$$key \
$$src $$dst; \
fi; done; \
test `key=_get_output_format; $(NM_LOOKUP)` || \
repl="$$repl ofmt_stub.o"; \
test -n "$$repl" && $(AR) rcs $@ $$repl; \
$(RM) $$tmpfiles
libmsvcrt.a libmsvcrtd.a: ofmt_stub.o
libmsvcr70.a libmsvcr70d.a: ofmt_stub.o
libmsvcr71.a libmsvcr71d.a: ofmt_stub.o
libcrtdll.a libcrtdlld.a: ofmt_stub.o
.c.o:
$(CC) -c $(ALL_CFLAGS) $< -o $@
# $RCSfile$: end of file