localedir = $(datadir)/locale
INCLUDES = -I. -I..
OS_CF = @OS_CFLAGS@ @CROSS_CFLAGS@
OS_LF = @OS_LFLAGS@ @CROSS_LFLAGS@
AM_CPPFLAGS = $(OS_CF) -DLOCALEDIR=\"$(localedir)\" 
AM_CPPFLAGS += @IA64_CFLAGS@ @GPL_CFLAGS@
LDADD = $(OS_LF)
LDSAM = $(OS_LF) @LD_SAMX@
CFLAGS_SAMX = -O2 -g -I. -I.. $(OS_CF) @LANPLUS_CFLAGS@ 
CFLAGS_SAM  = -O2 -g -I. -I.. $(OS_CF) 
# May be /usr/bin/install or /bin/install
INSTALLBIN = install -c 
extradir = $(datadir)/ipmiutil
inc_dir = $(includedir)
tmpobj = obj
tmpwin = tmp
LIBDIR = @LIB_DIR@

CMDSRC = ipmicmd.c mem_if.c ipmidir.c imbapi.c ipmimv.c ipmild.c ipmibmc.c ipmilipmi.c subs.c
CMDSRC += md5.c md2.c ipmilan.c
CMDSRC += ipmilanplus.c
# CMDSRC = ipmicmd.c mem_if.c @OS_DRIVERS@
# am: configure substitutions are not allowed in _SOURCES variables
CMDOBJ = $(tmpobj)/ipmicmd.o $(tmpobj)/mem_if.o $(tmpobj)/ipmidir.o $(tmpobj)/imbapi.o $(tmpobj)/ipmimv.o $(tmpobj)/ipmild.o $(tmpobj)/ipmibmc.o $(tmpobj)/ipmilipmi.o $(tmpobj)/subs.o $(tmpobj)/md5.o $(tmpobj)/md2.o $(tmpobj)/ipmilan.o $(tmpobj)/ipmilanplus.o 
LIBOBJ = $(CMDOBJ)
OEMMOD = oem_kontron.c oem_fujitsu.c oem_intel.c oem_sun.c iekanalyzer.c oem_supermicro.c oem_dell.c oem_quanta.c oem_hp.c oem_newisys.c


AM_CPPFLAGS += -I. -I.. -DMETACOMMAND 
METASOURCE = ipmiutil.c ialarms.c ihealth.c ievents.c ifru.c ifru_picmg.c igetevent.c ireset.c icmd.c ilan.c isensor.c isel.c iserial.c iwdt.c isol.c idiscover.c iconfig.c ipicmg.c ifirewall.c ifwum.c ihpm.c itsol.c idcmi.c $(OEMMOD) 
LDADD += -lpthread 

# The LanDesk library is proprietary, so it is incompatible with ALLOW_GPL.
# To build with LanDesk support:
# First copy the library to ../lib/libipmiapi.a
# Then ./configure --enable-landesk
# Result:
#  AM_CPPFLAGS += -DLINK_LANDESK
#  LDADD += -lipmiapi -L../lib
AM_CPPFLAGS += @LANDESK_CFLAGS@
LDADD += @LANDESK_LDADD@

# For lanplus plugin support (IPMI LAN 2.0 RMCP+) required by SOL:
# If ./configure --disable-lanplus
#  AM_CPPFLAGS += 
#  LDADD +=  
#  LANPLUS_SRC = 
# Otherwise default result is lanplus enabled:
#  AM_CPPFLAGS += -DHAVE_LANPLUS
#  LDADD +=  -L../lib -lipmi_lanplus -L/usr/local/lib -lcrypto 
#  LDADD +=  -L../lib -lintf_lanplus -L/usr/local/lib -lcrypto (older)
#  LANPLUS_SRC = $(LANPLUS_DIR)/lanplus.c ...
AM_CPPFLAGS += @LANPLUS_CFLAGS@ -I../lib/lanplus -I../lib/lanplus/inc
LDADD += @LANPLUS_LIB@ @LANPLUS_CRYPTO@ 
LANPLUS_OBJ = $(shell ar t @LANPLUS_LIB@ 2>/dev/null) 
LANPLUS_DIR = ../lib/lanplus
LANPLUS_SRC = $(LANPLUS_DIR)/lanplus.c $(LANPLUS_DIR)/lanplus_dump.c \
	$(LANPLUS_DIR)/lanplus_strings.c $(LANPLUS_DIR)/lanplus_crypt.c \
	$(LANPLUS_DIR)/lanplus_crypt_impl.c $(LANPLUS_DIR)/helper.c \
	$(LANPLUS_DIR)/ipmi_strings.c

# sbin_PROGRAMS are built by default and copied to /usr/sbin at install time
# EXTRA_PROGRAMS are built by default but not included in the install package
# TESTPROGS are not built by default.  To build, do 'make ifruset', for example.
bin_PROGRAMS = ipmiutil ievents idiscover
sbin_PROGRAMS = ipmi_port
DEV_LIB = libipmiutil.a
EXTRA_PROGRAMS = ipmi_sample ipmi_sample_evt
TESTPROGS = libimbapi.a iconfig ipmimv ifruset ipmi_sample2 ialarms_enc iseltime
# OLDPROGS are old/previous binaries that may exist and need to be deleted.
OLDPROGS = alarms bmchealth fruconfig getevent hwreset icmd isolconsole pefconfig sensor showsel tmconfig wdt

lib_LTLIBRARIES = libipmiutil.la
libipmiutil_la_SOURCES  = $(CMDSRC) $(LANPLUS_SRC)
libipmiutil_la_LDFLAGS  = -export-dynamic

# To build an imb api library (libimbapi.a):
libimbapi.a:	imbapi.c
	mkdir -p $(tmpobj)
	$(CC) -I. -I.. $(OS_CF) -fPIC $(CFLAGS) -o $(tmpobj)/imbapi.o -c imbapi.c
	$(AR) cru libimbapi.a $(tmpobj)/imbapi.o
	$(RANLIB) libimbapi.a
	rm -f $(tmpobj)/imbapi.o
 
# Build a lib to support all of the IPMI drivers (libipmiutil.a)
# If LANPLUS_SAM = yes, include LANPLUS_OBJ, else do not.
# See configure --enable-liblanplus to change this
$(DEV_LIB):	$(CMDOBJ) @LANPLUS_LIB@
	mkdir -p $(tmpobj)
	if [ "x@LANPLUS_SAM@" = "xyes" ]; then \
	   $(CC) $(CFLAGS_SAMX) -o $(tmpobj)/ipmilanplus.o -c ipmilanplus.c; \
	   $(CC) $(CFLAGS_SAMX) -o $(tmpobj)/ipmilan.o -c ipmilan.c; \
	   ar x @LANPLUS_LIB@ ; \
	   $(AR) cru $(DEV_LIB) $(LIBOBJ) $(LANPLUS_OBJ); \
	   $(RANLIB) $(DEV_LIB); \
	else   \
	   $(CC) $(CFLAGS_SAM) -o $(tmpobj)/ipmilanplus.o -c ipmilanplus.c; \
	   $(CC) $(CFLAGS_SAM) -o $(tmpobj)/ipmilan.o -c ipmilan.c; \
	   $(AR) cru $(DEV_LIB) $(LIBOBJ) ; \
	   $(RANLIB) $(DEV_LIB) ; \
	fi 
	rm -f $(tmpobj)/ipmilan.o $(tmpobj)/ipmilanplus.o

# To build ipmiutil, need to use METACFLAGS for each .c/.o

idiscover:	idiscover.c
	$(CC) $(OS_CF) $(CFLAGS) $(LDFLAGS) $(OS_LF) -o idiscover idiscover.c

ipmimv: 	ipmimv.c
	$(CC) $(OS_CF) $(CFLAGS) $(LDFLAGS) -DTEST_BIN -o ipmimv ipmimv.c

ievents:         ievents.c
	$(CC) $(OS_CF)$(CFLAGS) $(LDFLAGS) -DALONE -o ievents ievents.c 

ipmi_sample:	$(DEV_LIB) ipmi_sample.c isensor.c ievents.c
	$(CC) $(CFLAGS_SAM) -c ipmi_sample.c
	$(CC) -g -O2 -o ipmi_sample ipmi_sample.o $(DEV_LIB) $(LDFLAGS) $(LDSAM)

ialarms_enc:	$(DEV_LIB) ialarms.c oem_intel.c
	$(CC) $(CFLAGS_SAM) -DTEST_ENC -o ialarms2.o -c ialarms.c
	$(CC) $(CFLAGS_SAM) -DNO_EVENTS -o oem_intel2.o -c oem_intel.c
	$(CC) -g -O2 -o ialarms_enc ialarms2.o oem_intel2.o $(DEV_LIB) $(LDFLAGS) $(LDSAM)

ifru_picmg2.o:	ifru_picmg.c
	$(CC) $(CFLAGS_SAM) -o ifru_picmg2.o -c ifru_picmg.c

# To build ipmi_sample with GET_SENSORS enabled, need isensors.o, ievents.o 
# Note that this does not include oem_intel, etc. for OEM SEL decoding.
ipmi_sample2:	$(DEV_LIB) ipmi_sample.c isensor.c ievents.c ifru.c isel.c ifru_picmg2.o
	$(CC) $(CFLAGS_SAM) -D GET_SENSORS -D GET_FRU -o ipmi_sample2.o -c ipmi_sample.c
	$(CC) $(CFLAGS_SAM) -o isensor2.o -c isensor.c 
	$(CC) $(CFLAGS_SAM) -o ievents2.o -c ievents.c 
	$(CC) $(CFLAGS_SAM) -o ifru2.o    -c ifru.c
	$(CC) $(CFLAGS_SAM) -o isel2.o    -c isel.c
	$(CC) -g -O2 -o ipmi_sample2 ipmi_sample2.o isensor2.o ievents2.o ifru2.o ifru_picmg2.o isel2.o $(DEV_LIB) $(LDFLAGS) $(LDSAM)

ipmi_sample_evt:	$(DEV_LIB) ipmi_sample_evt.c isensor.c ievents.c 
	$(CC) $(CFLAGS_SAM) -o ipmi_sample_evt.o -c ipmi_sample_evt.c
	$(CC) $(CFLAGS_SAM) -o isensor2.o -c isensor.c 
	$(CC) $(CFLAGS_SAM) -DSENSORS_OK -o ievents2.o -c ievents.c 
	$(CC) -g -O2 -o ipmi_sample_evt ipmi_sample_evt.o isensor2.o ievents2.o   $(DEV_LIB) $(LDFLAGS) $(LDSAM)

ifruset:	$(DEV_LIB) ifruset.c ifru_picmg2.o
	$(CC) $(CFLAGS_SAM) -c ifruset.c
	$(CC)  -g -O2 -o ifruset ifruset.o ifru_picmg2.o $(DEV_LIB) $(LDFLAGS) $(LDADD)

iseltime:	$(DEV_LIB) iseltime.c 
	$(CC) $(CFLAGS_SAM) -c iseltime.c
	$(CC)  -g -O2 -o iseltime iseltime.o $(DEV_LIB) $(LDFLAGS) $(LDADD)

ipmi_port:      ipmi_port.c
	$(CC) $(CFLAGS) $(LDFLAGS) -o ipmi_port ipmi_port.c 

#xmlconfig:      xmlconfig.c $(DEV_LIB)
#	$(CC) $(CFLAGS) $(LDFLAGS) -o xmlconfig xmlconfig.c libipmiutil.a @LANPLUS_CRYPTO@

iconfig:      iconfig.c $(DEV_LIB)
	$(CC) $(CFLAGS) $(LDFLAGS) -o iconfig iconfig.c $(DEV_LIB) @LANPLUS_CRYPTO@

# @LANPLUS_LIB@ is ../lib/libipmi_lanplus.a
../lib/libipmi_lanplus.a:
	cd ../lib;  make

ipmiutil_SOURCES  = $(METASOURCE) 

ipmiutil:	$(METASOURCE:.c=.o) $(CMDOBJ) @LANPLUS_LIB@ 
	$(CC) $(CFLAGS) $(LDFLAGS) -o ipmiutil $(METASOURCE:.c=.o) $(CMDOBJ) $(LDADD) 

$(tmpobj)/ipmicmd.o: 	ipmicmd.c
	mkdir -p $(tmpobj)
	@$(CC) $(CFLAGS_SAMX) -o $(tmpobj)/ipmicmd.o -c ipmicmd.c 

$(tmpobj)/subs.o: 	subs.c
	@$(CC) $(CFLAGS_SAMX) -o $(tmpobj)/subs.o -c subs.c 

$(tmpobj)/mem_if.o:	mem_if.c
	@$(CC) $(CFLAGS_SAMX) -o $(tmpobj)/mem_if.o -c mem_if.c 

$(tmpobj)/ipmidir.o:	ipmidir.c
	@$(CC) $(CFLAGS_SAMX) -o $@  -c ipmidir.c

$(tmpobj)/imbapi.o:	imbapi.c
	@$(CC) $(CFLAGS_SAMX) -o $@  -c imbapi.c

$(tmpobj)/ipmimv.o:	ipmimv.c
	@$(CC) $(CFLAGS_SAMX) -o $@  -c ipmimv.c

$(tmpobj)/ipmild.o:	ipmild.c
	@$(CC) $(CFLAGS_SAMX) -o $@  -c ipmild.c

$(tmpobj)/ipmibmc.o:	ipmibmc.c
	@$(CC) $(CFLAGS_SAMX) -o $@  -c ipmibmc.c

$(tmpobj)/ipmilipmi.o:	ipmilipmi.c
	@$(CC) $(CFLAGS_SAMX) -o $@  -c ipmilipmi.c

$(tmpobj)/ipmilan.o:	ipmilan.c
	@$(CC) $(CFLAGS_SAMX) -o $@  -c ipmilan.c

$(tmpobj)/ipmilanplus.o:  ipmilanplus.c
	@$(CC) $(CFLAGS_SAMX) -o $@  -c ipmilanplus.c

$(tmpobj)/md5.o:	md5.c
	@$(CC) $(CFLAGS_SAMX) -o $@  -c md5.c

$(tmpobj)/md2.o:	md2.c
	@$(CC) $(CFLAGS_SAMX) -o $@  -c md2.c

#%.o:    %.c
#        $(CC) -c $(OS_CF) $(CFLAGS) $(AM_CPPFLAGS) -o $@ $<

ievents_SOURCES    = ievents.c

idiscover_SOURCES = idiscover.c 

ipmi_port_SOURCES = ipmi_port.c 

# xmlconfig_SOURCES = xmlconfig.c $(CMDSRC) 

EXTRA_DIST = imb_api.h ipmicmd.h ipmidir.h ipmilan.h ipmilanplus.h AnsiTerm.h iekanalyzer.h ifirewall.h ifwum.h ihpm.h ipicmg.h ipmiutil.h md2.h oem_dell.h oem_fujitsu.h oem_intel.h oem_kontron.h oem_sun.h idcmi.h isensor.h

all-am: Makefile $(DEV_LIB) $(bin_PROGRAMS) $(sbin_PROGRAMS) $(EXTRA_PROGRAMS) 

install-data-am:  $(EXTRA_PROGRAMS) $(DEV_LIB)
	@INS_LIB@ mkdir -p $(DESTDIR)$(extradir)
	@INS_LIB@ mkdir -p $(DESTDIR)$(LIBDIR)
	@INS_LIB@ mkdir -p $(DESTDIR)$(inc_dir)
	@INS_LIB@ cp -f ipmi_sample.c $(DESTDIR)$(extradir)
	@INS_LIB@ cp -f ipmi_sample_evt.c $(DESTDIR)$(extradir)
	@INS_LIB@ cp -f ipmicmd.h   $(DESTDIR)$(inc_dir)
	@INS_LIB@ cp -f isensor.c ievents.c $(DESTDIR)$(extradir)
	@INS_LIB@ cp -f isensor.h ievents.h $(DESTDIR)$(extradir)
	@INS_LIB@ cp -f Makefile.sample $(DESTDIR)$(extradir)/Makefile
	@INS_LIB@ cp -f $(DEV_LIB)      $(DESTDIR)$(LIBDIR)

clean-generic:   
	rm -f $(DEV_LIB) $(EXTRA_PROGRAMS) $(OLDPROGS) $(TESTPROGS)
	if [ -d $(tmpobj) ]; then rm -rf $(tmpobj) ;  fi
	if [ -d $(tmpwin) ]; then rm -rf $(tmpwin) ;  fi
	rm -f *.log *.tmp debug*.list *.o  *.pdb *.lo *.so *.la