# NOTE: If you have no `make' program at all to process this makefile, run
# `build_w32.bat' instead.
#
# Copyright (C) 1988,89,91,92,93,94,95,96,97 Free Software Foundation, Inc.
# This file is part of GNU Make.
#
# GNU Make 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, or (at your option)
# any later version.
#
# GNU Make 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 GNU Make; see the file COPYING.  If not, write to
# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.

#
#       NMakefile for GNU Make
#

LINK = link
CC = cl

OUTDIR=.
MAKEFILE=NMakefile
SUBPROC_MAKEFILE=NMakefile

CFLAGS_any = /nologo /MT /W3 /GX /Zi /YX /I . /I glob /I w32/include /D WIN32 /D WINDOWS32 /D _CONSOLE /D HAVE_CONFIG_H
CFLAGS_debug = $(CFLAGS_any) /Od /D DEBUG /D _DEBUG /FR.\WinDebug/ /Fp.\WinDebug/make.pch /Fo.\WinDebug/ /Fd.\WinDebug/make.pdb
CFLAGS_release = $(CFLAGS_any) /O2 /D NDEBUG /FR.\WinRel/ /Fp.\WinRel/make.pch /Fo.\WinRel/

LDFLAGS_debug = w32\subproc\WinDebug\subproc.lib /NOLOGO /SUBSYSTEM:console\
	/INCREMENTAL:no /PDB:WinDebug/make.pdb /MACHINE:I386 \
	/OUT:WinDebug/make.exe /DEBUG
LDFLAGS_release = w32\subproc\WinRel\subproc.lib /NOLOGO /SUBSYSTEM:console\
	/INCREMENTAL:no /MACHINE:I386 /OUT:WinRel/make.exe

all: config.h subproc Release Debug

#
# Make sure we build the subproc library first. It has it's own
# makefile. To be portable to Windows 95, we put the instructions
# on how to build the library into a batch file. On NT, we could
# simply have done foo && bar && dog, but this doesn't port.
#
subproc: w32/subproc/WinDebug/subproc.lib w32/subproc/WinRel/subproc.lib

w32/subproc/WinDebug/subproc.lib w32/subproc/WinRel/subproc.lib: w32/subproc/misc.c w32/subproc/sub_proc.c w32/subproc/w32err.c
	subproc.bat $(SUBPROC_MAKEFILE) $(MAKE)
	if exist WinDebug\make.exe erase WinDebug\make.exe
	if exist WinRel\make.exe erase WinRel\make.exe

config.h: config.h.W32
	copy $? $@

Release:
	$(MAKE) /f $(MAKEFILE) LDFLAGS="$(LDFLAGS_release)" CFLAGS="$(CFLAGS_release)" OUTDIR=WinRel WinRel/make.exe
Debug:
	$(MAKE) /f $(MAKEFILE) LDFLAGS="$(LDFLAGS_debug)" CFLAGS="$(CFLAGS_debug)" OUTDIR=WinDebug WinDebug/make.exe

clean:
	if exist WinDebug\nul rmdir /s /q WinDebug
	if exist WinRel\nul rmdir /s /q WinRel
	if exist w32\subproc\WinDebug\nul rmdir /s /q w32\subproc\WinDebug
	if exist w32\subproc\WinRel\nul rmdir /s /q w32\subproc\WinRel
	if exist config.h erase config.h
	erase *.pdb

$(OUTDIR):
	if not exist .\$@\nul mkdir .\$@

LIBS = kernel32.lib user32.lib advapi32.lib

OBJS = \
	$(OUTDIR)/ar.obj \
	$(OUTDIR)/arscan.obj \
	$(OUTDIR)/commands.obj \
	$(OUTDIR)/default.obj \
	$(OUTDIR)/dir.obj \
	$(OUTDIR)/expand.obj \
	$(OUTDIR)/file.obj \
	$(OUTDIR)/function.obj \
	$(OUTDIR)/getloadavg.obj \
	$(OUTDIR)/getopt.obj \
	$(OUTDIR)/getopt1.obj \
	$(OUTDIR)/implicit.obj \
	$(OUTDIR)/job.obj \
	$(OUTDIR)/main.obj \
	$(OUTDIR)/misc.obj \
	$(OUTDIR)/read.obj \
	$(OUTDIR)/remake.obj \
	$(OUTDIR)/remote-stub.obj \
	$(OUTDIR)/rule.obj \
	$(OUTDIR)/signame.obj \
	$(OUTDIR)/variable.obj \
	$(OUTDIR)/version.obj \
	$(OUTDIR)/vpath.obj \
	$(OUTDIR)/glob.obj \
	$(OUTDIR)/fnmatch.obj \
	$(OUTDIR)/dirent.obj \
	$(OUTDIR)/pathstuff.obj

$(OUTDIR)/make.exe: $(OUTDIR) $(OBJS)
	$(LINK) @<<
		$(LDFLAGS) $(LIBS) $(OBJS)
<<

.c{$(OUTDIR)}.obj:
	$(CC) $(CFLAGS) /c $<

$(OUTDIR)/glob.obj : glob/glob.c
	$(CC) $(CFLAGS) /c $?
$(OUTDIR)/fnmatch.obj : glob/fnmatch.c
	$(CC) $(CFLAGS) /c $?
$(OUTDIR)/dirent.obj : w32/compat/dirent.c
	$(CC) $(CFLAGS) /c $?
$(OUTDIR)/pathstuff.obj : w32/pathstuff.c
	$(CC) $(CFLAGS) /c $?
