##############
#Common Flags#
##############
LIB_OBJ = $(TOPDIR)/lib/obj

LIB_COMMON_INC = $(TOPDIR)/lib/inc/common
LIB_VMSDUNIX_INC = $(TOPDIR)/lib/inc/vms_dunix
LIB_VMSDULINUX_INC = $(TOPDIR)/lib/inc/vms_dunix_linux
LIB_NT_INC = $(TOPDIR)/lib/inc/nt

LIB_COMMON_SRC = $(TOPDIR)/lib/src/common
LIB_LINUX_SRC = $(TOPDIR)/lib/src/linux
LIB_NT_SRC = $(TOPDIR)/lib/src/nt
LIB_DUNIX_SRC = $(TOPDIR)/lib/src/dunix
LIB_DULINUX_SRC = $(TOPDIR)/lib/src/dunix_linux
LIB_VMSDUNIX_SRC = $(TOPDIR)/lib/src/vms_dunix

LIB_VPATH = $(LIB_COMMON_SRC):$(LIB_LINUX_SRC):$(LIB_NT_SRC):$(LIB_DUNIX_SRC):$(LIB_DULINUX_SRC):$(LIB_VMSDUNIX_SRC)


#############
#DUNIX Flags#
#############

ifeq ($(OSTYPE),OSF1)

LIB_CFLAGS = -migrate -g -Dunix -Dosf -D__OSF1__ -DOSF $(INC) -I$(LIB_VMSDUNIX_INC) -I$(LIB_VMSDULINUX_INC) -I$(LIB_COMMON_INC)
LIBIPR_LDFLAGS = -shared -init init_ipr_lib
LIBIPR_LIBS = /usr/shlib/libc.so -lots

$(LIB_OBJ)/%.o: %.c
	$(CC) $(LIB_CFLAGS) -c -o $@ $<

endif

#############
# NT Flags#
#############
ifeq ($(OS),Windows_NT)

LIB_INCLUDE = $(INC) -I$(LIB_NT_INC) -I$(LIB_COMMON_INC)

LIB_CFLAGS = -Dnt -DALPHA=1 -D_ALPHA_=1 -DNO_EXT_KEYS -DCONDITION_HANDLING=1 -DCONDITION_HANDLING=1 -DNT_UP=1  -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0400    -DWIN32_LEAN_AND_MEAN=1 -DDBG=1 -DDEVL=1 -DNDEBUG -D_DLL=1 -D_MT=1 -D_ALPHA_=1 -D__ALPHA=1 -DUNICODE -DWIN32 -D_MT -D_DLL -D__NT=1 -DNT=1 /c /Zel /Zp8 /Gy /GX- /GR- /GF /W3 /Od $(subst /,\\,$(LIB_INCLUDE)) -ID:/ddk/inc


LIBIPR_LDFLAGS = 
LIBIPR_LIBS = 

$(LIB_OBJ)/%.o: %.c
	$(CC) $(LIB_CFLAGS) -c /Fo$(subst /,\\,$@) $(subst /,\\,$<) /FAs /Fa$(subst /,\\,$(subst .o,.lis,$@))


endif


#############
#LINUX Flags#
#############

ifeq ($(OSTYPE),Linux)

LIB_CFLAGS = -D__LINUX__ -I/usr/src/linux/include $(INC) -I$(LIB_VMSDULINUX_INC) -I$(LIB_COMMON_INC) -g -fPIC 
LD = ld
DLD_FLAGS = -shared 

$(LIB_OBJ)/%.o: %.c
	$(CC) $(LIB_CFLAGS) -c -o $@ $<


endif




ALL_COMMON_LIBRARY_OBJS = 	$(LIB_OBJ)/bit_library.o\
				$(LIB_OBJ)/ctr_routines.o\
				$(LIB_OBJ)/ev4_routines.o \
				$(LIB_OBJ)/ev5_routines.o\
				$(LIB_OBJ)/hb_library.o\
				$(LIB_OBJ)/ipr_routines.o\
				$(LIB_OBJ)/ipr_user_routines.o\
				$(LIB_OBJ)/ipr_messages.o\
				$(LIB_OBJ)/ipr_events.o 

ALL_VMS_DUNIX_LINUX_LIB_OBJS = 	$(LIB_OBJ)/ev4_routines_vms_osf.o\
				$(LIB_OBJ)/ev5_routines_vms_osf.o

ALL_LINUX_LIBRARY_OBJS = 	$(ALL_COMMON_LIBRARY_OBJS)\
				$(LIB_OBJ)/ctr_routines_osf.o \
				$(LIB_OBJ)/ipr_routines_linux.o \
				$(ALL_VMS_DUNIX_LINUX_LIB_OBJS)

ALL_DUNIX_LIBRARY_OBJS = 	$(ALL_COMMON_LIBRARY_OBJS) \
				$(ALL_VMS_DUNIX_LINUX_LIB_OBJS) \
				$(LIB_OBJ)/ctr_routines_osf.o \
				$(LIB_OBJ)/ipr_routines_osf.o

ALL_NT_LIBRARY_OBJS = 		$(ALL_COMMON_LIBRARY_OBJS) \
				$(LIB_OBJ)/ctr_routines_nt.o \
				$(LIB_OBJ)/ipr_routines_nt.o \
				$(LIB_OBJ)/ev4_routines_nt.o \
				$(LIB_OBJ)/ev5_routines_nt.o \
				$(LIB_OBJ)/shell_nt.o \
				$(LIB_OBJ)/shell_win_nt.o\
				$(LIB_OBJ)/ipr_user_routines_nt.o \
				$(LIB_OBJ)/nta21064.o



#
# Common LIBRARY sources
# 
#
# User library sources
#

$(LIB_OBJ)/bit_library.o:	$(SUITE_COMMON_SRC)/bit_library.c \
				$(bit_library_combo)

$(LIB_OBJ)/hb_library.o:	$(SUITE_COMMON_SRC)/hb_library.c \
				$(hb_library_combo)

$(LIB_OBJ)/ctr_routines.o:	$(LIB_COMMON_SRC)/ctr_routines.c \
				$(ctr_int_defs_combo)

$(LIB_OBJ)/ev4_routines.o:	$(LIB_COMMON_SRC)/ev4_routines.c \
				$(ev4_routines_combo)

$(LIB_OBJ)/ev5_routines.o:	$(LIB_COMMON_SRC)/ev5_routines.c \
				$(ev5_routines_combo)

$(LIB_OBJ)/ipr_routines.o:	$(LIB_COMMON_SRC)/ipr_routines.c \
				$(ipr_api_int_defs_combo)

$(LIB_OBJ)/ipr_user_routines.o:	$(LIB_COMMON_SRC)/ipr_user_routines.c \
				$(ipr_api_ext_defs_combo)

$(LIB_OBJ)/ipr_messages.o:	$(LIB_COMMON_SRC)/ipr_messages.c \
				$(ipr_base_defs_combo) \
				$(SUITE_COMMON_INC)/ipr_messages_t.h

$(LIB_OBJ)/ipr_events.o:	$(LIB_COMMON_SRC)/ipr_events.c \
				$(ipr_base_defs_combo) \
				$(SUITE_COMMON_INC)/ipr_events.def \
				$(SUITE_COMMON_INC)/ipr_events.h

$(LIB_OBJ)/ctr_routines_osf.o:	$(LIB_DULINUX_SRC)/ctr_routines_osf.c \
				$(ctr_int_defs_combo)

$(LIB_OBJ)/ev4_routines_vms_osf.o:$(LIB_VMSDUNIX_SRC)/ev4_routines_vms_osf.c \
				$(ev4_routines_combo) \
				$(LIB_COMMON_INC)/ev4_masks.h

$(LIB_OBJ)/ev5_routines_vms_osf.o:$(LIB_VMSDUNIX_SRC)/ev5_routines_vms_osf.c \
				$(ev5_routines_combo) \
				$(LIB_COMMON_INC)/ev5_masks_vms_osf.h

$(LIB_OBJ)/ipr_routines_osf.o:	$(LIB_DUNIX_SRC)/ipr_routines_osf.c \
				$(ipr_api_int_defs_combo) \
				$(SUITE_DULINUX_INC)/ipr_driver_osf.h

$(LIB_OBJ)/ipr_routines_linux.o:$(LIB_LINUX_SRC)/ipr_routines_linux.c \
				$(ipr_api_int_defs_combo) \
				$(SUITE_DULINUX_INC)/ipr_driver_osf.h




########################################################################
#OS SPECIFIC: NT
########################################################################

$(LIB_OBJ)/iprshr.lib:		$(ALL_NT_LIBRARY_OBJS)
	LIB /out:$(subst /,\\,$@) -debugtype:cv -nodefaultlib -machine:alpha $(subst /,\\,$(ALL_NT_LIBRARY_OBJS))


########################################################################
#OS SPECIFIC: Linux
########################################################################

$(LIB_OBJ)/liblipr.so:		$(ALL_LINUX_LIBRARY_OBJS)
	$(DLD) $(DLD_FLAGS) -o $@ $(ALL_LINUX_LIBRARY_OBJS)


########################################################################
#OS SPECIFIC: Dunix/OSF
########################################################################

$(LIB_OBJ)/libipr.so:		$(ALL_DUNIX_LIBRARY_OBJS)
	$(DLD) $(LIBIPR_LDFLAGS) -o $@ $(ALL_DUNIX_LIBRARY_OBJS) $(LIBIPR_LIBS)

########################################################################

clean-library:
	-rm $(LIB_OBJ)/*


#This links all of the objects into a single kernel module. 


linux_library:			$(LIB_OBJ)/liblipr.so
linux_library_install:
	cp $(LIB_OBJ)/liblipr.so $(INSTALL_DIR)/lib/liblipr.so

dunix_library:			$(LIB_OBJ)/libipr.so

nt_library:			$(LIB_OBJ)/iprshr.lib
