include ../common.mk

VPATH = $(SHARED_PATH)

PACKAGE_D ?= gkrellmd

SINSTALLDIR ?= $(INSTALLROOT)/bin

CFGDIR ?= $(INSTALLROOT)/etc
CFGDIRMODE ?= 755
CFGMODE ?= 644

SMANDIR ?= $(INSTALLROOT)/share/man/man1

SERVICE_DIR ?= $(INSTALLROOT)/lib/systemd/system
SERVICE_DIR_MODE ?= 755
SERVICE_FILE = $(PACKAGE_D).service
SERVICE_FILE_MODE ?= 644

EXTRAOBJS =

ifeq ($(without-libsensors),yes)
	CONFIGURE_ARGS += --without-libsensors
endif
ifeq ($(without-libsensors),1)
	CONFIGURE_ARGS += --without-libsensors
endif

DUMMY_VAR := $(shell ./configure $(CONFIGURE_ARGS))

HAVE_LIBSENSORS = $(shell grep -c HAVE_LIBSENSORS configure.h)
ifeq ($(HAVE_LIBSENSORS),1)
    SENSORS_LIBS ?= -lsensors
endif

GKRELLMD_INCLUDES = gkrellmd.h gkrellmd-version.h $(SHARED_PATH)/log.h

PKG_MODULES := "glib-2.0 >= 2.32" gmodule-2.0 gthread-2.0
PKG_INCLUDE := $(shell $(PKG_CONFIG) --cflags $(PKG_MODULES))
ifndef PKG_INCLUDE
    $(error One or more package requirements not met)
endif
PKG_LIB := $(shell $(PKG_CONFIG) --libs $(PKG_MODULES))

FLAGS = -O2 $(PKG_INCLUDE)

FLAGS += $(GTOP_INCLUDE) $(PTHREAD_INC) -I.. -I$(SHARED_PATH) -DGSEAL_ENABLED -DGTK_DISABLE_DEPRECATED -DGKRELLM_SERVER

LIBS = $(PKG_LIB)
LIBS += $(GTOP_LIBS_D) $(SYS_LIBS) $(SENSORS_LIBS)

ifeq ($(debug),1)
    FLAGS += -g
endif
ifeq ($(debug),yes)
    FLAGS += -g
endif

ifeq ($(profile),1)
    FLAGS += -g -pg
endif
ifeq ($(profile),yes)
    FLAGS += -g -pg
endif

ifeq ($(enable_nls),1)
    FLAGS += -DENABLE_NLS -DLOCALEDIR=\"$(LOCALEDIR)\"
endif
ifeq ($(enable_nls),yes)
    FLAGS += -DENABLE_NLS -DLOCALEDIR=\"$(LOCALEDIR)\"
endif

ifneq ($(PACKAGE_D),gkrellmd)
    FLAGS += -DPACKAGE_D=\"$(PACKAGE_D)\"
endif

OS_RELEASE=$(shell uname -r)

OBJS = main.o monitor.o mail.o plugins.o utils.o sysdeps-unix.o log.o

all:	gkrellmd$(BINEXT) $(SERVICE_FILE)

gkrellmd$(BINEXT): $(OBJS) $(EXTRAOBJS)
	$(CC) $(OBJS) $(EXTRAOBJS) -o $@ \
		$(LDFLAGS) $(LIBS) $(LINK_FLAGS)

static: $(OBJS) $(EXTRAOBJS)
	$(CC) $(OBJS) $(EXTRAOBJS) -o gkrellmd.static -static \
		$(LDFLAGS) $(LIBS) $(LINK_FLAGS)

freebsd2:
	$(MAKE) EXTRAOBJS= SYS_LIBS="-lkvm -lmd" gkrellmd

freebsd3 freebsd:
	$(MAKE) EXTRAOBJS= SYS_LIBS="-lkvm -ldevstat -lmd" gkrellmd

# Darwin target for systems that still have libkvm
darwin: 
	$(MAKE) \
		EXTRAOBJS= \
		SYS_LIBS="-framework CoreFoundation -framework IOKit -lkvm" \
		LINK_FLAGS="-Wl,-bind_at_load" \
		gkrellmd

# Darwin 9.x and newer (OS X > 10.4) do not have libkvm, build without it
darwin9: 
	$(MAKE) \
		EXTRAOBJS= \
		SYS_LIBS="-framework CoreFoundation -framework IOKit" \
		LINK_FLAGS="-Wl,-bind_at_load" \
		gkrellmd

# Same as darwin9
macosx: darwin9

netbsd1:
	$(MAKE) EXTRAOBJS= SYS_LIBS="-lkvm" gkrellmd

netbsd2:
	$(MAKE) EXTRAOBJS= SYS_LIBS="-lkvm -pthread" gkrellmd

openbsd:
	$(MAKE) SYS_LIBS="-lkvm -pthread" gkrellmd

solaris:
ifeq ($(OS_RELEASE),5.8)
	$(MAKE) CFLAGS="-Wno-implicit-int" \
		SYS_LIBS="-lkstat -lkvm -ldevinfo -lsocket -lnsl -lintl" \
		LINK_FLAGS="" gkrellmd
else
	$(MAKE) CFLAGS="-Wno-implicit-int" \
		SYS_LIBS="-lkstat -lkvm -ldevinfo -lsocket -lnsl" \
		LINK_FLAGS="" gkrellmd
endif

windows: libgkrellmd.a
	$(MAKE) \
		BINEXT=".exe" \
		CFLAGS="${CFLAGS} -D_WIN32_WINNT=0x0501 -DWINVER=0x0501 -DWIN32_LEAN_AND_MEAN" \
		LINK_FLAGS="-mconsole -Wl,--dynamicbase -Wl,--nxcompat" \
		EXTRAOBJS="${EXTRAOBJS} win32-resource.o win32-plugin.o" \
		SYS_LIBS="-lws2_32 -lwtsapi32 -lpdh -lnetapi32 -liphlpapi -lintl" \
		all

$(SERVICE_FILE): $(SERVICE_FILE).in
	sed -e 's#@SINSTALLDIR@#$(SINSTALLDIR)#g' $(SERVICE_FILE).in > $@

install-service:
	$(INSTALL) -d -m $(SERVICE_DIR_MODE) $(SERVICE_DIR)
	$(INSTALL) -c -m $(SERVICE_FILE_MODE) $(SERVICE_FILE) $(SERVICE_DIR)/$(SERVICE_FILE)

uninstall-service:
	$(RM) -f $(SERVICE_DIR)/$(SERVICE_FILE)

install: install_bin install_inc install_man install_cfg install-service

install-strip:
	$(MAKE) STRIP="-s" install

install_bin:
	$(INSTALL) -d -m $(INSTALLDIRMODE) $(SINSTALLDIR)
	$(INSTALL) -c $(STRIP) -m $(BINMODE) $(PACKAGE_D)$(BINEXT) $(SINSTALLDIR)/$(PACKAGE_D)$(BINEXT)

uninstall_bin:
	$(RM) $(SINSTALLDIR)/$(PACKAGE_D)$(BINEXT)

install_inc:
	$(INSTALL) -d -m $(INCLUDEDIRMODE) $(INCLUDEDIR)/gkrellm2
	$(INSTALL) -c -m $(INCLUDEMODE) $(GKRELLMD_INCLUDES) $(INCLUDEDIR)/gkrellm2

# FIXME: may remove too many files, overlaps with uninstall_inc from client
uninstall_inc:
	$(RM) -r $(INCLUDEDIR)/gkrellm2

install_man:
	$(INSTALL) -d -m $(MANDIRMODE) $(SMANDIR)
	$(INSTALL) -c -m $(MANMODE) ../gkrellmd.1 $(SMANDIR)/$(PACKAGE_D).1

uninstall_man:
	$(RM) $(SMANDIR)/$(PACKAGE_D).1

install_cfg:
	$(INSTALL) -d -m $(CFGDIRMODE) $(CFGDIR)
	$(INSTALL) -c -m $(CFGMODE) gkrellmd.conf $(CFGDIR)/gkrellmd.conf

uninstall_cfg:
	$(RM) $(CFGDIR)/gkrellmd.conf

uninstall: uninstall_bin uninstall_inc uninstall_man uninstall_cfg uninstall-service

install_darwin install_darwin9 install_macosx:
	$(MAKE) install

install_freebsd:
	$(MAKE) install
	chgrp kmem $(SINSTALLDIR)/$(PACKAGE_D)
	chmod g+s $(SINSTALLDIR)/$(PACKAGE_D)

install_netbsd:
	$(MAKE) SMANDIR="$(INSTALLROOT)/man/man1" install

install_openbsd:
	$(MAKE) install
	chgrp kmem $(SINSTALLDIR)/$(PACKAGE_D)
	chmod g+sx $(SINSTALLDIR)/$(PACKAGE_D)

install_solaris:
	$(MAKE) install INSTALL=/usr/ucb/install
	chgrp sys $(SINSTALLDIR)/$(PACKAGE_D)
	chmod g+s $(SINSTALLDIR)/$(PACKAGE_D)  

install_windows: install_inc install_cfg
	$(MAKE) BINEXT=".exe" install_bin
	$(INSTALL) -d -m $(LIBDIRMODE) $(LIBDIR)
	$(INSTALL) -c -m $(BINMODE) libgkrellmd.a $(LIBDIR)

uninstall_windows: uninstall
	$(RM) $(LIBDIR)/libgkrellmd.a

clean:
	$(RM) \
		*.o \
		$(SERVICE_FILE) \
		configure.h \
		configure.log \
		gkrellmd \
		gkrellmd-version.h \
		gkrellmd.exe \
		libgkrellmd.a \
		win32-resource.rc

SYSDEPS = ../src/sysdeps/bsd-common.c ../src/sysdeps/bsd-net-open.c \
	../src/sysdeps/darwin.c \
	../src/sysdeps/freebsd.c ../src/sysdeps/gtop.c \
	../src/sysdeps/linux.c ../src/sysdeps/netbsd.c ../src/sysdeps/dragonfly.c \
	../src/sysdeps/openbsd.c ../src/sysdeps/sensors-common.c \
	../src/sysdeps/solaris.c ../src/sysdeps/win32.c 

GKRELLMD_H = gkrellmd.h gkrellmd-private.h gkrellmd-version.h $(SHARED_PATH)/log.h

main.o:		main.c $(GKRELLMD_H)
monitor.o:	monitor.c $(GKRELLMD_H) 
mail.o:		mail.c $(GKRELLMD_H)
plugins.o:	plugins.c $(GKRELLMD_H) 
utils.o:	utils.c $(GKRELLMD_H)
sysdeps-unix.o: sysdeps-unix.c ../src/gkrellm-sysdeps.h $(SYSDEPS) $(GKRELLMD_H)
log.o: $(SHARED_PATH)/log.c $(GKRELLMD_H)
win32-gui.o:	win32-gui.c
win32-plugin.o:	win32-plugin.c win32-plugin.h $(GKRELLMD_H)
win32-resource.o:	win32-resource.rc
	$(WINDRES) $< -o $@
win32-libgkrellmd.o:	win32-libgkrellmd.c win32-plugin.h $(GKRELLMD_H)
libgkrellmd.a:	win32-libgkrellmd.o
	$(AR) -cr libgkrellmd.a win32-libgkrellmd.o
