# 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. VERSION = @PACKAGE_VERSION@ CYGRELEASE = 1 VPATH = @srcdir@ srcdir = @srcdir@ objdir = . host_alias = @host_alias@ build_alias = @build_alias@ target_alias = @target_alias@ with_cross_host = @with_cross_host@ prefix = @prefix@ conf_prefix = @prefix@ # FIXME: this needs an appropriate AC_SUBST host_os = mingw32 ifneq (,$(findstring cygwin, $(target_alias))) PACKAGE = mingw-runtime else PACKAGE = mingwrt endif program_transform_name = @program_transform_name@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ ifneq (,$(findstring cygwin,$(target_alias))) 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))) 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)) 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))) 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? MNO_CYGWIN = @MNO_CYGWIN@ ifdef MNO_CYGWIN subdirforlib=/mingw else libdir= 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) $(MNO_CYGWIN) ALL_CXXFLAGS = $(CXXFLAGS) $(INCLUDES) -nostdinc++ $(W32API_INCLUDE) $(MNO_CYGWIN) 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 := @subdirs@ 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) @$(MAKE) subdirs DO=$@ $(FLAGS_TO_PASS) 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) $@ # The 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 $@ TEST_H_OPTIONS = $(ALL_CFLAGS) -Wall -W -Wsystem-headers -c \ $(srcdir)/test_headers.c -o test_headers.o .PHONY: test_headers test_headers: @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))) TARFLAGS = j TARFILEEXT = .tar.bz2 endif ifneq (,$(findstring mingw, $(target_alias))) dist_prefix = else 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) ifneq (,$(findstring cygwin, $(target_alias))) bindist: rm -rf $(distdir) mkdir $(distdir) chmod 755 $(distdir) $(MAKE) install prefix=$(shell pwd)/$(distdir)$(dist_prefix) rm -f $(distdir).tar.gz cd $(distdir); \ $(TAR) $(TARFLAGS)cf ../$(distdir)$(TARFILEEXT) * else bindist: rm -rf $(distdir) mkdir $(distdir) chmod 755 $(distdir) $(MAKE) install prefix=$(shell pwd)/$(distdir)$(dist_prefix) rm -f $(distdir).tar.gz cd $(distdir); \ $(TAR) $(TARFLAGS)cf ../$(distdir)-dev$(TARFILEEXT) * --exclude=bin; \ $(TAR) $(TARFLAGS)cf ../$(distdir)-dll$(TARFILEEXT) bin/*.dll endif 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) @true # The . is here because SUBDIRS may be empty . $(SUBDIRS): force @if [ -d ./$@ ]; then \ echo "Making $(DO) in $@..." ; \ if (rootme=`pwd`/ ; export rootme ; \ rootsrc=`cd $(srcdir); pwd`/ ; export rootsrc ; \ cd ./$@; \ $(MAKE) $(FLAGS_TO_PASS) $(DO)) ; then true ; \ else exit 1 ; \ fi ; \ else true ; \ fi 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 $@