include ../common.mk

VPATH = $(SHARED_PATH)

PACKAGE ?= gkrellm

MENUDIR ?= $(PREFIX)/share/applications
ICONDIR ?= $(PREFIX)/share/icons
METAINFODIR ?= $(PREFIX)/share/metainfo

X11_LIBS ?= -L/usr/X11R6/lib -lX11 -lSM -lICE
MATH_LIB ?= -lm

ifeq ($(without-gnutls),1)
	CONFIGURE_ARGS += --without-gnutls
endif
ifeq ($(without-gnutls),yes)
	CONFIGURE_ARGS += --without-gnutls
endif
ifeq ($(without-ssl),1)
	CONFIGURE_ARGS += --without-ssl
endif
ifeq ($(without-ssl),yes)
	CONFIGURE_ARGS += --without-ssl
endif
ifeq ($(without-libsensors),yes)
	CONFIGURE_ARGS += --without-libsensors
endif
ifeq ($(without-libsensors),1)
	CONFIGURE_ARGS += --without-libsensors
endif
ifeq ($(without-ntlm),yes)
	CONFIGURE_ARGS += --without-ntlm
endif
ifeq ($(without-ntlm),1)
	CONFIGURE_ARGS += --without-ntlm
endif
# run configure shell script
DUMMY_VAR := $(shell ./configure $(CONFIGURE_ARGS))
# pull in variables set by configure script
include configure.mk

GKRELLM_INCLUDES = gkrellm.h gkrellm-public-proto.h gkrellm-version.h $(SHARED_PATH)/log.h $(SHARED_PATH)/gkrellm-visibility.h

PKG_MODULES := "gtk+-2.0 >= 2.24" "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 += -DHAVE_CONFIGURE_H -DGKRELLM_CLIENT -DGSEAL_ENABLED -DGTK_DISABLE_DEPRECATED
FLAGS += $(PKG_INCLUDE) $(PTHREAD_INC) ${SSL_INCLUDE} ${NTLM_INCLUDE}

LIBS = $(PKG_LIB) $(X11_LIBS) $(SYS_LIBS) $(SSL_LIBS) $(SENSORS_LIBS)\
 $(NTLM_LIBS) $(MATH_LIB)

ifneq ($(PACKAGE),gkrellm)
    FLAGS += -DPACKAGE=\"$(PACKAGE)\"
endif

OBJS =	main.o alerts.o battery.o base64.o clock.o cpu.o disk.o fs.o \
	hostname.o inet.o mail.o mem.o net.o proc.o sensors.o uptime.o \
	chart.o panel.o config.o gui.o krell.o plugins.o pixops.o \
	client.o utils.o sysdeps-unix.o deprecated.o log.o

UNIXOBJS = winops-x11.o

all: gkrellm$(BINEXT) gkrellm.pc

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

gkrellm.pc: Makefile
	echo 'prefix=$(PREFIX)' > $@
	echo 'Name: GKrellM' >> $@
	echo 'Description: Extensible system monitoring application' >> $@
	echo 'Version: $(GKRELLM_VERSION)' >> $@
	echo 'Requires: gtk+-2.0 >= 2.24' >> $@
	echo 'Cflags: -I$(INCLUDEDIR)' >> $@
	echo '$(GKRELLM_PC_EXTRA)' >> $@

# macOS target with X11-based Gtk+
darwin: gkrellm.pc
	$(MAKE) \
		EXTRAOBJS= \
		SYS_LIBS="-framework CoreFoundation -framework IOKit" \
		LINK_FLAGS="-Wl,-bind_at_load" \
		gkrellm

# macOS target with Quartz-based Gtk+ (experimental)
macos macosx: gkrellm.pc
	$(MAKE) \
		EXTRAOBJS="winops-gtk-mac.o" \
		SYS_LIBS="-framework CoreFoundation -framework IOKit" \
		LINK_FLAGS="-Wl,-bind_at_load" \
		X11_LIBS="" \
		UNIXOBJS="" \
		gkrellm

freebsd: gkrellm.pc
	$(MAKE) EXTRAOBJS= SYS_LIBS="-ldevstat" gkrellm

netbsd1: gkrellm.pc
	$(MAKE) EXTRAOBJS= SYS_LIBS="-lkvm" \
		X11_LIBS="-L/usr/X11R6/lib -lX11 -lSM -lICE -Wl,-R/usr/X11R6/lib" \
		gkrellm

netbsd2: gkrellm.pc
	$(MAKE) EXTRAOBJS= SYS_LIBS="-lkvm -pthread" \
		X11_LIBS="-L/usr/X11R6/lib -lX11 -lSM -lICE -R/usr/X11R6/lib" \
		gkrellm

openbsd: gkrellm.pc
	$(MAKE) SYS_LIBS="-lkvm -pthread" gkrellm

solaris: gkrellm.pc
	$(MAKE) CFLAGS="-Wno-implicit-int" \
		SYS_LIBS="-lkstat -lkvm -ldevinfo" gkrellm

windows: GKRELLM_PC_EXTRA:=Libs: -L$${prefix}/lib -lgkrellm
windows: gkrellm.pc
	$(MAKE) \
		BINEXT=.exe \
		CFLAGS="${CFLAGS} -D_WIN32_WINNT=0x0601 -DWINVER=0x0601 -DWIN32_LEAN_AND_MEAN -DPSAPI_VERSION=2" \
		LINK_FLAGS="-mwindows -Wl,--dynamicbase -Wl,--nxcompat -Wl,--out-implib=libgkrellm.dll.a" \
		EXTRAOBJS="${EXTRAOBJS} winops-win32.o win32-resource.o" \
		SYS_LIBS="-lws2_32 -lwtsapi32 -lpdh -lnetapi32 -liphlpapi -lintl" \
		X11_LIBS= \
		UNIXOBJS= \
		gkrellm.exe

install: install_bin install_inc install_man install-data install_pkgconfig

install-strip:
	$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install

install_bin:
	$(INSTALL_DIRECTORY) $(DESTDIR)$(INSTALLDIR)
	$(INSTALL_PROGRAM) $(PACKAGE)$(BINEXT) $(DESTDIR)$(INSTALLDIR)/$(PACKAGE)$(BINEXT)

uninstall_bin:
	$(RM) $(DESTDIR)$(INSTALLDIR)/$(PACKAGE)$(BINEXT)

install_inc:
	$(INSTALL_DIRECTORY) $(DESTDIR)$(INCLUDEDIR)/gkrellm2
	$(INSTALL_DATA) $(GKRELLM_INCLUDES) $(DESTDIR)$(INCLUDEDIR)/gkrellm2/

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

install_man:
	$(INSTALL_DIRECTORY) $(DESTDIR)$(MANDIR)
	$(INSTALL_DATA) ../docs/gkrellm.1 $(DESTDIR)$(MANDIR)/$(PACKAGE).$(MANSECTION)

uninstall_man:
	$(RM) $(DESTDIR)$(MANDIR)/$(PACKAGE).$(MANSECTION)

install-data:
	$(INSTALL_DIRECTORY) $(DESTDIR)$(MENUDIR)
	$(INSTALL_DATA) ../data/gkrellm.desktop $(DESTDIR)$(MENUDIR)/
	$(INSTALL_DIRECTORY) $(DESTDIR)$(ICONDIR)/hicolor/16x16/apps
	$(INSTALL_DATA) ../data/icons/16/gkrellm.png $(DESTDIR)$(ICONDIR)/hicolor/16x16/apps/
	$(INSTALL_DIRECTORY) $(DESTDIR)$(ICONDIR)/hicolor/24x24/apps
	$(INSTALL_DATA) ../data/icons/24/gkrellm.png $(DESTDIR)$(ICONDIR)/hicolor/24x24/apps/
	$(INSTALL_DIRECTORY) $(DESTDIR)$(ICONDIR)/hicolor/32x32/apps
	$(INSTALL_DATA) ../data/icons/32/gkrellm.png $(DESTDIR)$(ICONDIR)/hicolor/32x32/apps/
	$(INSTALL_DIRECTORY) $(DESTDIR)$(ICONDIR)/hicolor/48x48/apps
	$(INSTALL_DATA) ../data/icons/48/gkrellm.png $(DESTDIR)$(ICONDIR)/hicolor/48x48/apps/
	$(INSTALL_DIRECTORY) $(DESTDIR)$(ICONDIR)/hicolor/64x64/apps
	$(INSTALL_DATA) ../data/icons/64/gkrellm.png $(DESTDIR)$(ICONDIR)/hicolor/64x64/apps/
	$(INSTALL_DIRECTORY) $(DESTDIR)$(METAINFODIR)
	$(INSTALL_DATA) ../data/net.srcbox.gkrellm.GKrellM.metainfo.xml $(DESTDIR)$(METAINFODIR)/

uninstall-data:
	$(RM) $(DESTDIR)$(MENUDIR)/gkrellm.desktop
	$(RM) $(DESTDIR)$(ICONDIR)/hicolor/16x16/apps/gkrellm.png
	$(RM) $(DESTDIR)$(ICONDIR)/hicolor/24x24/apps/gkrellm.png
	$(RM) $(DESTDIR)$(ICONDIR)/hicolor/32x32/apps/gkrellm.png
	$(RM) $(DESTDIR)$(ICONDIR)/hicolor/48x48/apps/gkrellm.png
	$(RM) $(DESTDIR)$(ICONDIR)/hicolor/64x64/apps/gkrellm.png
	$(RM) $(DESTDIR)$(METAINFODIR)/net.srcbox.gkrellm.GKrellM.metainfo.xml

install_pkgconfig:
	$(INSTALL_DIRECTORY) $(DESTDIR)$(PKGCONFIGDIR)
	$(INSTALL_DATA) gkrellm.pc $(DESTDIR)$(PKGCONFIGDIR)/

uninstall_pkgconfig:
	$(RM) $(DESTDIR)$(PKGCONFIGDIR)/gkrellm.pc

uninstall: uninstall_bin uninstall_inc uninstall_man uninstall-data uninstall_pkgconfig

install_darwin install_macos install_macosx:
	$(MAKE) install

install_freebsd:
	$(MAKE) install
	chgrp kmem $(DESTDIR)$(INSTALLDIR)/$(PACKAGE)
	chmod g+s $(DESTDIR)$(INSTALLDIR)/$(PACKAGE)

install_netbsd:
	$(MAKE) MANDIR="$(PREFIX)/man/man1" install

install_openbsd:
	$(MAKE) install
	chgrp kmem $(DESTDIR)$(INSTALLDIR)/$(PACKAGE)
	chmod g+sx $(DESTDIR)$(INSTALLDIR)/$(PACKAGE)

install_solaris:
	$(MAKE) install INSTALL=/usr/ucb/install
	chgrp sys $(DESTDIR)$(INSTALLDIR)/$(PACKAGE)
	chmod g+s $(DESTDIR)$(INSTALLDIR)/$(PACKAGE)

install_windows:
	$(MAKE) BINEXT=.exe install_bin install_inc install_pkgconfig
	$(INSTALL_DIRECTORY) $(DESTDIR)$(LIBDIR)
	$(INSTALL_DATA) libgkrellm.dll.a $(DESTDIR)$(LIBDIR)/

uninstall_windows:
	$(MAKE) BINEXT=.exe uninstall_bin uninstall_inc uninstall_pkgconfig
	$(RM) $(DESTDIR)$(LIBDIR)/libgkrellm.dll.a

clean:
	$(RM) \
		*.o \
		configure.h \
		configure.log \
		configure.mk \
		gkrellm \
		gkrellm-version.h \
		gkrellm.exe \
		gkrellm.pc \
		libgkrellm.dll.a \
		win32-resource.rc

IMAGES = \
	../pixmaps/frame_top.xpm \
	../pixmaps/frame_bottom.xpm \
	../pixmaps/frame_left.xpm \
	../pixmaps/frame_right.xpm \
	\
	../pixmaps/button_panel_out.xpm \
	../pixmaps/button_panel_in.xpm \
	../pixmaps/button_meter_out.xpm \
	../pixmaps/button_meter_in.xpm \
	\
	../pixmaps/bg_chart.xpm \
	../pixmaps/bg_grid.xpm  \
	../pixmaps/bg_panel.xpm \
	../pixmaps/bg_meter.xpm \
	\
	../pixmaps/data_in.xpm \
	../pixmaps/data_in_grid.xpm \
	../pixmaps/data_out.xpm \
	../pixmaps/data_out_grid.xpm \
	\
	../pixmaps/net/decal_net_leds.xpm \
	../pixmaps/decal_misc.xpm \
	../pixmaps/decal_alarm.xpm \
	../pixmaps/decal_warn.xpm \
	\
	../pixmaps/krell_panel.xpm \
	../pixmaps/krell_meter.xpm \
	../pixmaps/krell_slider.xpm \
	../pixmaps/krell_mini.xpm \
	../pixmaps/fs/bg_panel.xpm \
	../pixmaps/host/bg_panel.xpm \
	../pixmaps/mail/decal_mail.xpm \
	../pixmaps/mail/krell_mail.xpm \
	../pixmaps/mail/krell_mail_daemon.xpm \
	../pixmaps/timer/bg_panel.xpm \
	../pixmaps/timer/bg_timer.xpm \
	../pixmaps/timer/decal_timer_button.xpm \
	../pixmaps/uptime/bg_panel.xpm \
	\
	../pixmaps/gkrellmms/bg_panel.xpm \
	../pixmaps/gkrellmms/spacer_top.xpm \
	../pixmaps/gkrellmms/spacer_bottom.xpm \
	../pixmaps/gkrellmms/bg_scroll.xpm \
	../pixmaps/pmu/bg_panel.xpm \
	../pixmaps/pmu/spacer_top.xpm \
	../pixmaps/pmu/spacer_bottom.xpm \
	../pixmaps/volume/bg_panel.xpm \
	../pixmaps/volume/spacer_top.xpm \
	../pixmaps/volume/spacer_bottom.xpm \
	../pixmaps/bg_separator.xpm

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

GKRELLM_H = \
	$(SHARED_PATH)/gkrellm-visibility.h \
	$(SHARED_PATH)/log.h \
	base64.h \
	gkrellm-private.h \
	gkrellm-public-proto.h \
	gkrellm-sysdeps.h \
	gkrellm-version.h \
	gkrellm.h \
	inet.h

main.o:      main.c $(GKRELLM_H)
alerts.o:    alerts.c $(GKRELLM_H)
battery.o:   battery.c $(GKRELLM_H)
base64.o:    base64.c
clock.o:     clock.c  $(GKRELLM_H)
cpu.o:	     cpu.c  $(GKRELLM_H)
disk.o:      disk.c $(GKRELLM_H)
fs.o:        fs.c $(GKRELLM_H)
hostname.o:  hostname.c $(GKRELLM_H)
inet.o:      inet.c $(GKRELLM_H)
mail.o:      mail.c $(GKRELLM_H)
mem.o:       mem.c  $(GKRELLM_H)
net.o:	     net.c  $(GKRELLM_H)
proc.o:      proc.c  $(GKRELLM_H)
sensors.o:   sensors.c $(GKRELLM_H) ../pixmaps/sensors/bg_volt.xpm
uptime.o:    uptime.c $(GKRELLM_H)
chart.o:     chart.c  $(GKRELLM_H)
panel.o:     panel.c  $(GKRELLM_H)
config.o:    config.c  $(GKRELLM_H) $(IMAGES)
krell.o:     krell.c  $(GKRELLM_H)
gui.o:       gui.c  $(GKRELLM_H)
plugins.o:   plugins.c $(GKRELLM_H)
pixops.o:    pixops.c $(GKRELLM_H)
client.o:    client.c $(GKRELLM_H)
utils.o:     utils.c $(GKRELLM_H)
sysdeps-unix.o: sysdeps-unix.c $(SYSDEPS_SRC) $(GKRELLM_H)
log.o: $(SHARED_PATH)/log.c $(GKRELLM_H)
deprecated.o: deprecated.c $(GKRELLM_H)

winops-x11.o: winops-x11.c $(GKRELLM_H)
winops-gtk-mac.o: winops-gtk-mac.c $(GKRELLM_H)
winops-win32.o: winops-win32.c $(GKRELLM_H)
win32-resource.o: win32-resource.rc
	$(WINDRES) $< -o $@
