# -*- Makefile -*- for srclib

#### Start of system configuration section. ####

# Flags that can be set on the nmake command line:
#   DLL=1     for compiling a .dll with a stub .lib (default is a static .lib)
#             Note that this works only with MFLAGS=-MD.
#   MFLAGS={-ML|-MT|-MD} for defining the compilation model
#     MFLAGS=-ML (the default)  Single-threaded, statically linked - libc.lib
#     MFLAGS=-MT                Multi-threaded, statically linked  - libcmt.lib
#     MFLAGS=-MD                Multi-threaded, dynamically linked - msvcrt.lib
#   DEBUG=1   for compiling with debugging information
#   NO_NLS=1  do not use Native Language Support
#   PREFIX=Some\Directory   Base directory for installation
!if !defined(DLL)
DLL=0
!endif
!if !defined(DEBUG)
DEBUG=0
!endif
!if !defined(MFLAGS)
!if !$(DLL)
MFLAGS=
!else
MFLAGS=-MD
!endif
!endif
!if !defined(NO_NLS)
NO_NLS=0
!endif
!if !defined(PREFIX)
PREFIX = c:\usr
!endif

# Directories used by "make install":
prefix = $(PREFIX)
exec_prefix = $(prefix)
bindir = $(exec_prefix)\bin
libdir = $(exec_prefix)\lib
includedir = $(prefix)\include

# Programs used by "make":

CC = cl

# Set to -W3 if you want to see maximum amount of warnings, including stupid
# ones. Set to -W1 to avoid warnings about signed/unsigned combinations.
WARN_CFLAGS = -W1

!if $(DEBUG)
OPTIMFLAGS = -Od -Z7
!else
# Some people prefer -O2 -G6 instead of -O1, but -O2 is not reliable in MSVC5.
OPTIMFLAGS = -D_NDEBUG -O1
!endif

!if $(NO_NLS)
NLSFLAGS =
INCINTL =
LIBINTL =
!else
NLSFLAGS = -DENABLE_NLS=1
INCINTL = -I$(includedir)
LIBINTL = $(libdir)\intl.lib
!endif

CFLAGS = $(MFLAGS) $(WARN_CFLAGS) $(OPTIMFLAGS) -DHAVE_CONFIG_H $(NLSFLAGS) -DDEPENDS_ON_LIBICONV=1 -DDEPENDS_ON_LIBINTL=1

INCLUDES = -I. -I.. -I..\windows $(INCINTL)

AR = lib
AR_FLAGS = /out:

LN = copy
RM = -del

# Programs used by "make install":
INSTALL = copy
INSTALL_PROGRAM = copy
INSTALL_DATA = copy

#### End of system configuration section. ####

SHELL = /bin/sh

OBJECTS = \
  allocsa.obj \
  error.obj \
  progname.obj progreloc.obj \
  xmalloc.obj xstrdup.obj \
  \
  relocatable.obj \
  setenv.obj unsetenv.obj

all : icrt.lib

allocsa.obj : allocsa.c
	$(CC) $(INCLUDES) $(CFLAGS) -c allocsa.c

error.obj : error.c
	$(CC) $(INCLUDES) $(CFLAGS) -c error.c

progname.obj : progname.c
	$(CC) $(INCLUDES) $(CFLAGS) -c progname.c

progreloc.obj : progreloc.c
	$(CC) $(INCLUDES) $(CFLAGS) -c progreloc.c

xmalloc.obj : xmalloc.c
	$(CC) $(INCLUDES) $(CFLAGS) -c xmalloc.c

xstrdup.obj : xstrdup.c
	$(CC) $(INCLUDES) $(CFLAGS) -c xstrdup.c

relocatable.obj : relocatable.c
	$(CC) $(INCLUDES) $(CFLAGS) -c relocatable.c

setenv.obj : setenv.c
	$(CC) $(INCLUDES) $(CFLAGS) -c setenv.c

unsetenv.obj : unsetenv.c
	$(CC) $(INCLUDES) $(CFLAGS) -c unsetenv.c

icrt.lib : $(OBJECTS)
	-$(RM) icrt.lib
	$(AR) $(AR_FLAGS)icrt.lib $(OBJECTS)

install : all force

installdirs : force

uninstall : force

check : all

mostlyclean : clean

clean : force
	$(RM) *.obj
	$(RM) *.lib

distclean : clean

maintainer-clean : distclean

force :
