# -*- 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 = \
  error.obj \
  progname.obj progreloc.obj \
  xmalloc.obj xstrdup.obj \
  \
  relocatable.obj \
  setenv.obj unsetenv.obj

all : icrt.lib

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 :
