# This makefile requires GNU make.

PACKAGE = x86_64-mingw-runtime
VERSION = 3.9
CYGRELEASE = 1

VPATH = .:./math:./complex:./stdio:./misc
srcdir = .
objdir = .

host_alias = x86_64-pc-mingw32
build_alias = x86_64-pc-mingw32
target_alias = x86_64-pc-mingw32
# prefix = /vol/m
prefix = /usr/local
conf_prefix = $(prefix)
EXEEXT=.exe

program_transform_name = s,x,x,
exec_prefix = $(prefix)
bindir = $(exec_prefix)/bin
libdir = $(exec_prefix)/lib
tooldir:=$(exec_prefix)/$(target_alias)
datadir = $(prefix)/share
infodir = $(prefix)/info
includedir = $(prefix)/$(target_alias)/include
inst_bindir:=$(tooldir)/bin
inst_includedir:=$(tooldir)/include/mingw
inst_libdir:=$(tooldir)/lib/mingw
inst_docdir:=$(tooldir)/share/doc/mingw-runtime

# The Mingw headers are installed under a subdirectory of 
# $(tooldir)/include when configuring in Cygwin.
HEADER_SUBDIR = 

SHELL = /bin/sh

INSTALL = /usr/bin/install -c
INSTALL_DATA = $(INSTALL) -m 644
INSTALL_PROGRAM = $(INSTALL)
mkinstalldirs = $(SHELL) mkinstalldirs

CC := $(prefix)/bin/x86_64-pc-mingw32-gcc$(EXEEXT)
override CC := $(filter-out -L% -B%,$(shell echo $(CC) | sed -e 's%\(-isystem\|-iwithprefixbefore\)  *[^ ]*\( \|$$\)% %g'))
# FIXME: Which is it, CC or CC_FOR_TARGET?
CC_FOR_TARGET = $(CC)
AS_FOR_TARGET = $(AS)
CFLAGS = -g -O2 -I. -D_CRTBLD -D_SYSCRT=1 -DCRTDLL=1 -DWINHEAP=1
CXXFLAGS = $(CFLAGS)

# compiling with Cygwin?
MNO_CYGWIN = 
ifdef MNO_CYGWIN
   subdirforlib=/mingw
else
   libdir=
endif

# Needed for threading dll.

# Various libraries.
LIBM_A=libm.a

W32API_INCLUDE = 
INCLUDES+= -I.
ALL_CFLAGS = $(CFLAGS) $(W32API_INCLUDE) $(INCLUDES) $(MNO_CYGWIN)
ALL_CXXFLAGS = $(CXXFLAGS) $(W32API_INCLUDE) $(INCLUDES) -nostdinc++ $(MNO_CYGWIN)

AS = $(prefix)/bin/x86_64-pc-mingw32-as$(EXEEXT)
AR = $(prefix)/bin/x86_64-pc-mingw32-ar$(EXEEXT)
LD = $(prefix)/bin/x86_64-pc-mingw32-ld$(EXEEXT)
AR_FLAGS = rcv
RANLIB = $(prefix)/bin/x86_64-pc-mingw32-ranlib$(EXEEXT)
DLLTOOL = $(prefix)/bin/x86_64-pc-mingw32-dlltool$(EXEEXT)
DLLTOOLFLAGS = 
DLLTOOL_FOR_TARGET = $(DLLTOOL)
DLLTOOL_FLAGS = --as $(AS_FOR_TARGET)

TAR = tar
TARFLAGS = z
TARFILEEXT = .tar.gz

SUBDIRS := mklibs

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 crt2.o dllcrt1.o dllcrt2.o \
	CRT_fp8.o CRT_fp10.o txtmode.o binmode.o crtbegin.o crtend.o
MINGW_OBJS = crt0_c.o crt0_w.o dll_argv.o  gccmain.o \
	     CRT_fp10.o \
	     pseudo-reloc.o pseudo-reloc-list.o pesect.o cinitexe.o \
	     natstart.o gs_support.o atonexit.o dllmain.o dllentry.o \
	     wildcard.o merr.o \
	     dllargv.o \
	     charmax.o xtxtmode.o \
	     tlssup.o xncommod.o _newmode.o \
	     xthdloc.o mingw_helpers.o

MATH_OBJS = \
	acosf.o acosl.o asinf.o asinl.o atan2f.o atan2l.o \
	atanf.o atanl.o cbrt.o cbrtf.o cbrtl.o ceilf.o ceill.o \
	cephes_emath.o \
	copysign.o copysignf.o copysignl.o cosf.o coshf.o coshl.o cosl.o \
	erfl.o exp2.o exp2f.o exp2l.o expf.o expl.o expm1.o expm1l.o expm1f.o \
	fabs.o fabsf.o fabsl.o \
	fdim.o fdimf.o fdiml.o floorf.o floorl.o fma.o fmaf.o fmal.o \
	fmax.o fmaxf.o fmaxl.o fmin.o fminf.o fminl.o fmodf.o \
	fmodl.o fp_consts.o fp_constsf.o fp_constsl.o \
	fpclassify.o fpclassifyf.o fpclassifyl.o \
	frexpf.o frexpl.o fucom.o hypotf.o hypotl.o ilogb.o ilogbf.o \
	ilogbl.o isnan.o isnanf.o isnanl.o ldexpf.o ldexpl.o \
	lgamma.o lgammaf.o lgammal.o llrint.o \
	llrintf.o llrintl.o llround.o llroundf.o llroundl.o \
	log10f.o log10l.o log1p.o log1pf.o log1pl.o log2.o log2f.o \
	log2l.o logb.o logbf.o logbl.o logf.o logl.o lrint.o lrintf.o \
	lrintl.o lround.o lroundf.o lroundl.o modff.o modfl.o \
	nearbyint.o nearbyintf.o nearbyintl.o \
	nextafterf.o nextafterl.o nexttowardf.o nexttoward.o \
	powf.o powi.o powif.o powil.o powl.o \
	remainder.o remainderf.o remainderl.o remquo.o \
	remquof.o remquol.o rint.o rintf.o rintl.o round.o roundf.o \
	roundl.o scalbn.o scalbnf.o scalbnl.o s_erf.o sf_erf.o \
	signbit.o signbitf.o signbitl.o sinf.o sinhf.o sinhl.o sinl.o \
	sqrtf.o sqrtl.o tanf.o tanhf.o tanhl.o tanl.o tgamma.o \
	tgammaf.o tgammal.o trunc.o truncf.o truncl.o \
	acosh.o acoshf.o acoshl.o asinh.o asinhf.o asinhl.o \
	atanh.o atanhf.o atanhl.o
FENV_OBJS = fesetround.o  fegetround.o \
	fegetenv.o fesetenv.o feupdateenv.o \
	feclearexcept.o feholdexcept.o fegetexceptflag.o \
	feraiseexcept.o fetestexcept.o fesetexceptflag.o

COMPLEX_OBJS = \
	cabs.o cabsf.o cabsl.o cacos.o cacosf.o cacosl.o cacosh.o \
	cacoshf.o cacoshl.o carg.o cargf.o cargl.o casin.o casinf.o \
	casinl.o casinh.o casinhf.o casinhl.o catan.o catanf.o catanl.o \
	catanh.o catanhf.o catanhl.o ccos.o ccosf.o ccosl.o ccosh.o \
	ccoshf.o ccoshl.o cexp.o cexpf.o cexpl.o cimag.o cimagf.o \
	cimagl.o clog.o clogf.o clogl.o cpow.o cpowf.o cpowl.o cproj.o \
	cprojf.o cprojl.o creal.o crealf.o creall.o csin.o csinf.o \
	csinl.o csinh.o csinhf.o csinhl.o csqrt.o csqrtf.o csqrtl.o \
	ctan.o ctanf.o ctanl.o ctanh.o ctanhf.o ctanhl.o

STDIO_OBJS = \
	fopen64.o fseeko64.o ftello64.o lseek64.o \
	snprintf.o  vsnprintf.o snwprintf.o vsnwprintf.o \
	vfscanf.o vfwscanf.o vscanf.o vsscanf.o vswscanf.o vwscanf.o

STDLIB_STUB_OBJS = \
	lltoa.o ulltoa.o \
	lltow.o ulltow.o \
	atoll.o wtoll.o \
	strtof.o wcstof.o \
	_Exit.o

FENV_OBJS = fesetround.o  fegetround.o \
	fegetenv.o fesetenv.o feupdateenv.o \
	feclearexcept.o feholdexcept.o fegetexceptflag.o \
	feraiseexcept.o fetestexcept.o fesetexceptflag.o

REPLACE_OBJS = \
	mingw-aligned-malloc.o mingw-fseek.o

Q8_OBJS = \
	fwide.o imaxabs.o imaxdiv.o mbsinit.o \
	strtoimax.o strtoumax.o wcstoimax.o wcstoumax.o \
	wmemchr.o wmemcmp.o wmemcpy.o wmemmove.o wmemset.o \
	wctrans.o wctype.o wcrtomb.o wctob.o mbrtowc.o btowc.o seterrno.o \
	sleep.o alarm.o getlogin.o gettimeofday.o wassert.o isblank.o iswblank.o \
	wininterlocked.o mktime.o difftime.o ctime.o gmtime.o localtime.o _mkgmtime.o \
	time.o

STDLIB_OBJS = \
	strtold.o wcstold.o

MINGWEX_OBJS = dirent.o wdirent.o getopt.o ftruncate.o

MOLD_OBJS = isascii.o iscsym.o iscsymf.o toascii.o \
	strcasecmp.o strncasecmp.o wcscmpi.o

LIBS = libcrtdll.a \
       libmsvcrt.a \
       libmsvcr80.a \
       libmingw32.a \
       libmoldname.a \
       libmingwex.a \
       $(LIBM_A)

DLLS = 

SRCDIST_FILES = dll_argv.c ChangeLog \
README TODO config.guess config.sub configure configure.in \
crt1.c crtdll.def \
gccmain.c init.c install-sh jamfile mkinstalldirs \
natstart.c gs_support.c atonexit.c \
mthr.c mthr_init.c mthr_stub.c readme.txt \
isascii.c iscsym.c iscsymf.c toascii.c isblank.c iswblank.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 atonexit.c dllmain.c dllentry.c \
wildcard.c merr.c \
dllargv.c charmax.c \
tlssup.c xtxtmode.c xncommod.c _newmode.c \
xthdloc.c crt0_c.c crt0_w.c mingw_helpers.c \
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) $@

DLL_OFILES        = mthr.o mthr_init.o
DLL_CC_STUFF      = -B./ -mdll $(MNO_CYGWIN) -Wl,--image-base,0x6FBC0000 \
		    -Wl,--entry,_DllMainCRTStartup \
                    $(DLL_OFILES) \
		    -Lmingwex

libmingw32.a: $(MINGW_OBJS)
	$(AR) rc $@ $(MINGW_OBJS)
	$(RANLIB) $@

msvcrt.def \
	$(CC) -DRUNTIME=$(basename $(notdir $@)) \
		-D__$(basename $(notdir $@))__=1 \
		-D__MSVCRT__ -C -E -P \
		-xc-header $? > $@

msvcr80.def \
	$(CC) -DRUNTIME=$(basename $(notdir $@)) \
		-D__$(basename $(notdir $@))__=1 \
		-D__MSVCRT__ -C -E -P \
		-xc-header $? > $@

libmoldname.a: moldname-msvcrt.def $(MOLD_OBJS)
	$(DLLTOOL) --as $(AS) -k -U	\
		--dllname msvcrt.dll	\
		--def moldname-msvcrt.def	\
		--output-lib $@
	$(AR) rc $@ $(MOLD_OBJS)
	$(RANLIB) $@

libmingwex.a: $(MINGWEX_OBJS) $(MATH_OBJS) $(COMPLEX_OBJS) $(STDIO_OBJS) $(STDLIB_STUB_OBJS) $(STDLIB_OBJS) $(FENV_OBJS) $(REPLACE_OBJS) $(Q8_OBJS)
	$(AR) rc $@ $(MINGWEX_OBJS) $(MATH_OBJS) $(COMPLEX_OBJS) $(STDIO_OBJS) $(STDLIB_STUB_OBJS) $(STDLIB_OBJS) $(FENV_OBJS) $(REPLACE_OBJS) $(Q8_OBJS)
	$(RANLIB) $@

# The special rules are necessary.
crt1.o:
	$(CC) -c -D__CRTDLL__ -U__MSVCRT__ $(ALL_CFLAGS) $< -o $@

crt2.o:
	$(CC) -c -D__MSVCRT__ -U__CRTDLL__ $(ALL_CFLAGS) $< -o $@

dllcrt1.o:
	$(CC) -c -D__CRTDLL__ -U__MSVCRT__ $(ALL_CFLAGS) $< -o $@

dllcrt2.o:
	$(CC) -c -D__MSVCRT__ -U__CRTDLL__ $(ALL_CFLAGS) $< -o $@

crtbegin.o:
	$(CC) -c $(ALL_CFLAGS) $< -o $@

crtend.o:
	$(CC) -c $(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
	@$(MAKE) subdirs DO=$@ $(FLAGS_TO_PASS)

distclean: clean
	@$(MAKE) subdirs DO=$@ $(FLAGS_TO_PASS)
	-rm -f config.cache config.status config.log 
distdir=$(PACKAGE)-$(VERSION)

  TARFLAGS = j
  TARFILEEXT = .tar.bz2

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.
	mkdir $(distdir)/include
	mkdir $(distdir)/include/sys
	cp $(srcdir)/include/*.h $(distdir)/include/
	cp $(srcdir)/include/sys/*.h $(distdir)/include/sys/
#end FIXME
	rm -f $(distdir)-src.tar.gz
	$(TAR) $(TARFLAGS)cf $(distdir)-src$(TARFILEEXT) $(distdir)


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

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)

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 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
	@$(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:

#
# Dependancies
#
libcrtdll.a: crtdll.def
libmsvcrt.a: msvcrt.def
libmsvcr80.a: msvcr80.def
dll_argv.o: dll_argv.c
crtbegin.o: crtbegin.c
crtend.o: crtend.c
crt1.o: crtexe.c
crt2.o: crtexe.c
dllcrt1.o: crtdll.c
dllcrt2.o: crtdll.c
ctype_old.o: ctype_old.c
string_old.o: string_old.c
CRT_fp8.o: CRT_fp8.c
CRT_fp10.o: CRT_fp10.c


config.status: configure
	$(SHELL) config.status --recheck

.SUFFIXES: .y $(SUFFIXES) .cc .o .def .a

.c.o:
	$(CC) -c $(ALL_CFLAGS) $< -o $@


lib%.a: %.def
	$(DLLTOOL) --as=$(AS) -k --dllname $*.dll --output-lib lib$*.a --def $<

