# -*- Makefile -*- for libiconv/lib on VMS using the MMS utility

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

# Directories used by "make install":
prefix = SYS$DATA:[
exec_prefix = $(prefix)
bindir = $(exec_prefix).bin
libdir = $(exec_prefix).lib

# Programs used by "make":

CC = cc

# These flags affect binary compatibility. GNU gettext does not need them,
# but other packages do, and we need to be binary compatible with them.
ABIFLAGS = /name=(as_is,short) /float=ieee

WARN_CFLAGS = /warning

OPTIMFLAGS = /optimize

CFLAGS = $(ABIFLAGS) $(WARN_CFLAGS) $(OPTIMFLAGS)
DEFS = "VMS=1","HAVE_CONFIG_H=1","ENABLE_RELOCATABLE=1","IN_LIBRARY=1","INSTALLDIR=""$(bindir)""","NO_XMALLOC=1","set_relocation_prefix=libiconv_set_relocation_prefix","relocate=libiconv_relocate"

INCLUDES = /include=([],[-.include])

AR = library
AR_FLAGS = /create

LN = copy
RM = delete

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

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

OBJECTS = iconv.obj,localcharset.obj,relocatable.obj

all : iconv.olb
	write sys$output "Nothing else to be done for 'all'."

config.h : config.h_vms
	$(LN) config.h_vms config.h

iconv.obj : iconv.c,encodings.def,encodings_local.def,aliases.h,config.h
	$(CC) $(INCLUDES) $(CFLAGS) /define=($(DEFS)) iconv.c

localcharset.obj : [-.libcharset.lib]localcharset.c,relocatable.h,config.h
	$(CC) $(INCLUDES) $(CFLAGS) /define=($(DEFS)) [-.libcharset.lib]localcharset.c

relocatable.obj : relocatable.c,relocatable.h,config.h
	$(CC) $(INCLUDES) $(CFLAGS) /define=($(DEFS)) relocatable.c

iconv.olb : $(OBJECTS)
	$(AR) $(AR_FLAGS) iconv.olb $(OBJECTS)

install : all
	create /directory $(prefix)]
	create /directory $(exec_prefix)]
	create /directory $(libdir)]
	$(INSTALL_DATA) iconv.olb $(libdir)]iconv.olb

installdirs :
	create /directory $(prefix)]
	create /directory $(exec_prefix)]
	create /directory $(libdir)]

uninstall :
	$(RM) $(libdir)]iconv.olb

check : all
	write sys$output "Nothing else to be done for 'check'."

mostlyclean : clean
	write sys$output "Nothing else to be done for 'mostlyclean'."

clean :
	$(RM) config.h;*
	$(RM) *.obj;*
	$(RM) *.olb;*

distclean : clean
	write sys$output "Nothing else to be done for 'distclean'."

maintainer-clean : distclean
	write sys$output "Nothing else to be done for 'maintainer-clean'."

