SHELL = /bin/sh

PREFIX=/usr/local
INSTDIR=$(DESTDIR)/$(PREFIX)/bin
MANDIR=$(DESTDIR)/$(PREFIX)/man

# In Linux the default C compiler is GCC while in FreeBSD (since release 10 ?)
# the default C compiler is clang. Swap the comment marks (lines starting
# with '#') on the next 4 (non-blank) lines.
CC = gcc
# CC = clang

LD = gcc
# LD = clang


EXECS = sg_simple1 sg_simple2 sg_simple3 sg_simple4 sg_simple16 \
	scsi_inquiry sg_excl sg_simple5 sg__sat_identify \
	sg__sat_phy_event sg__sat_set_features sg_sat_chk_power \
	sg_sat_smart_rd_data

EXTRAS = sgq_dd

BSG_EXTRAS =


MAN_PGS =
MAN_PREF = man8

LARGE_FILE_FLAGS = -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64

CPPFLAGS = -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS)
# CPPFLAGS = -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS) -DDEBUG

CFLAGS = -g -O2 -W -Wall
# CFLAGS = -g -O2 -Wall -DSG_KERNEL_INCLUDES
# CFLAGS = -g -O2 -Wall -pedantic

LDFLAGS =

LIBFILESOLD = ../lib/sg_lib.o ../lib/sg_lib_data.o ../lib/sg_io_linux.o
LIBFILESNEW = ../lib/sg_lib.o ../lib/sg_lib_data.o ../lib/sg_pt_common.o ../lib/sg_pt_linux.o ../lib/sg_pt_linux_nvme.o

all: $(EXECS)

extras: $(EXTRAS)

bsg: $(BSG_EXTRAS)


depend dep:
	for i in *.c; do $(CC) $(INCLUDES) $(CFLAGS) -M $$i; \
	done > .depend

clean:
	/bin/rm -f *.o $(EXECS) $(EXTRAS) $(BSG_EXTRAS) core .depend

sg_simple1: sg_simple1.o $(LIBFILESOLD)
	$(LD) -o $@ $(LDFLAGS) $^

sg_simple2: sg_simple2.o
	$(LD) -o $@ $(LDFLAGS) $^

sg_simple3: sg_simple3.o $(LIBFILESOLD)
	$(LD) -o $@ $(LDFLAGS) $^

sg_simple4: sg_simple4.o $(LIBFILESOLD)
	$(LD) -o $@ $(LDFLAGS) $^

sg_simple16: sg_simple16.o $(LIBFILESOLD)
	$(LD) -o $@ $(LDFLAGS) $^

scsi_inquiry: scsi_inquiry.o
	$(LD) -o $@ $(LDFLAGS) $^

sg_excl: sg_excl.o $(LIBFILESOLD)
	$(LD) -o $@ $(LDFLAGS) $^

sg_simple5: sg_simple5.o $(LIBFILESNEW)
	$(LD) -o $@ $(LDFLAGS) $^

sg__sat_identify: sg__sat_identify.o $(LIBFILESOLD)
	$(LD) -o $@ $(LDFLAGS) $^

sg__sat_phy_event: sg__sat_phy_event.o $(LIBFILESOLD)
	$(LD) -o $@ $(LDFLAGS) $^

sg__sat_set_features: sg__sat_set_features.o $(LIBFILESOLD)
	$(LD) -o $@ $(LDFLAGS) $^

sg_sat_chk_power: sg_sat_chk_power.o $(LIBFILESOLD)
	$(LD) -o $@ $(LDFLAGS) $^

sg_sat_smart_rd_data: sg_sat_smart_rd_data.o $(LIBFILESOLD)
	$(LD) -o $@ $(LDFLAGS) $^

sgq_dd: sgq_dd.o $(LIBFILESOLD)
	$(LD) -o $@ $(LDFLAGS) $^

install: $(EXECS)
	install -d $(INSTDIR)
	for name in $^; \
	 do install -s -o root -g root -m 755 $$name $(INSTDIR); \
	done
	install -d $(MANDIR)/$(MAN_PREF)
	for mp in $(MAN_PGS); \
	 do install -o root -g root -m 644 $$mp $(MANDIR)/$(MAN_PREF); \
	 gzip -9f $(MANDIR)/$(MAN_PREF)/$$mp; \
	done

uninstall:
	dists="$(EXECS)"; \
	for name in $$dists; do \
	 rm -f $(INSTDIR)/$$name; \
	done
	for mp in $(MAN_PGS); do \
	 rm -f $(MANDIR)/$(MAN_PREF)/$$mp.gz; \
	done

# Linux uses GNU make and FreeBSD uses Berkely make. The following lines
# only work in Linux. Possible solutions in FreeBSD:
#    a) use 'gmake'; b) comment out the next 3 lines, starting with 'ifeq'
#        c) build with 'make -f Makefile.freebsd'
# In Linux one can install bmake (but that won't help here).
ifeq (.depend,$(wildcard .depend))
include .depend
endif
