# This file is part of mbar.
# Copyright (C) 2016, 2019, 2025 Sergey Poznyakoff
#
# Mbar is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# Mbar is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with mbar.  If not, see <http://www.gnu.org/licenses/>. */

# Required version of Mailutils: major and minor numbers.  If patchlevel is
# needed, set the VPAT variable.
VMAJ = 3
VMIN = 20
VPAT = 92

# Installation prefix
PREFIX = /usr/local
BINDIR = $(PREFIX)/bin
MANDIR = $(PREFIX)/share/man

MAN1DIR = $(MANDIR)/man1

# Install program.  Use cp(1) if not available.
INSTALL = install
# Program to make directory hierarchy.
MKHIER  = install -d

# Compiler options
O = -ggdb -Wall

## ################################################################## ## 
## There is nothing to modify below this line                         ##

PACKAGE_NAME := mbar
PACKAGE_VERSION := 2.0
PACKAGE_BASE_VERSION := $(shell echo "$(PACKAGE_VERSION)" | sed -r -e 's/-[[:digit:]]+-[[:alnum:]]{8}$$//')

all: mbar

ifneq (,$(wildcard config.mk))
  include config.mk
endif

ifeq ($(DEVMAILUTILS),)
  CFLAGS  = $(O) $(shell mailutils cflags)
  LDFLAGS = $(shell mailutils ldflags all sieve)
  MU_INFO = mailutils info
else
  MU_INFO = ${DEVMAILUTILS}/mu/libexec/mailutils-info
  MU_LIB_MBOX = ${DEVMAILUTILS}/libproto/mbox/.libs/libmu_mbox.a
  MU_LIB_DOTMAIL = ${DEVMAILUTILS}/libproto/dotmail/.libs/libmu_dotmail.a
  MU_LIB_MH = ${DEVMAILUTILS}/libproto/mh/.libs/libmu_mh.a
  MU_LIB_MAILDIR = ${DEVMAILUTILS}/libproto/maildir/.libs/libmu_maildir.a
  MU_LIB_IMAP = ${DEVMAILUTILS}/libproto/imap/.libs/libmu_imap.a
  MU_LIB_POP = ${DEVMAILUTILS}/libproto/pop/.libs/libmu_pop.a
  MU_LIB_SIEVE = ${DEVMAILUTILS}/libmu_sieve/.libs/libmu_sieve.a
  MU_LIB_MAILUTILS = ${DEVMAILUTILS}/libmailutils/.libs/libmailutils.a
  MU_LDFLAGS := $(shell sed -n -e 's/^LDFLAGS = //p' $(DEVMAILUTILS)/Makefile)
  LTDL_LIB := $(shell sed -n -e 's/^LTDL_LIB = //p' $(DEVMAILUTILS)/Makefile)
  LIBS := $(shell sed -n -e 's/^LIBS = //p' $(DEVMAILUTILS)/Makefile)
  LDFLAGS = \
    $(MU_LIB_MBOX)\
    $(MU_LIB_DOTMAIL)\
    $(MU_LIB_MH)\
    $(MU_LIB_MAILDIR)\
    $(MU_LIB_IMAP)\
    $(MU_LIB_POP)\
    $(MU_LIB_SIEVE)\
    $(MU_LIB_MAILUTILS)\
    $(LTDL_LIB) $(LIBS) $(MU_LDFLAGS)
  CFLAGS  = $(O) -I$(DEVMAILUTILS)/include
endif

SOURCES = mbar.c
OBJECTS = $(SOURCES:.c=.o)

mbar: $(OBJECTS) GNUmakefile
	cc -ombar $(CFLAGS) $(OBJECTS) $(LDFLAGS) $(LIBADD)

$(OBJECTS): config.h

clean:
	@rm -f mbar $(OBJECTS) config.h

config.h: GNUmakefile
	@$(MU_INFO) --help >/dev/null || exit 1
	@set -- `$(MU_INFO) version | sed 's/.*=//;s/\./ /g'`;\
	if test $$# -lt 2; then \
	    echo >&2 "Version of mailutils unknown"; \
	    exit 1; \
	elif test $$1 -lt $(VMAJ) || test $$2 -lt $(VMIN); then \
	    echo >&2 "Mailutils version too old: $$1.$$2, but required $(VMAJ).$(VMIN)"; \
	    exit 1;\
	elif test -n "$(VPAT)" && test $${3:-0} -lt $(VPAT); then \
	    echo >&2 "Mailutils version too old: $$1.$$2$${3+.}$$3, but required $(VMAJ).$(VMIN).$(VPAT)"; \
	    exit 1;\
	else \
	    echo "#define MAILUTILS_VERSION_MAJOR $$1"; \
	    echo "#define MAILUTILS_VERSION_MINOR $$2"; \
	    if test "$$#" -gt 2; then \
	        echo "#define MAILUTILS_VERSION_PATCH $$3"; \
	    else \
	        echo "#define MAILUTILS_VERSION_PATCH 0"; \
            fi; \
	fi > config.h.tmp;
	@{ echo "#define PACKAGE_NAME \"$(PACKAGE_NAME)\""; \
           echo "#define PACKAGE_VERSION \"$(PACKAGE_VERSION)\""; } >> config.h.tmp;
	@if cmp config.h.tmp config.h 2>/dev/null >&2; then \
           rm config.h.tmp; \
        else \
           mv config.h.tmp config.h; \
        fi

# ###################
# Installation rules
# ###################
install: install-bin install-man

install-bin: mbar 
	$(MKHIER) $(DESTDIR)$(BINDIR)
	$(INSTALL) mbar $(DESTDIR)$(BINDIR)

install-man:
	$(MKHIER) $(DESTDIR)$(MAN1DIR)
	$(INSTALL) mbar.1 $(DESTDIR)$(MAN1DIR)

# ###################
# Distribution rules
# ###################
DISTDIR   = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
DISTFILES = mbar.c mbar.1 GNUmakefile NEWS README COPYING

distdir: remdistdir
	mkdir $(DISTDIR)
	echo $(DISTFILES) | tr -s ' ' '\n' | tar cfT - - | tar xCf $(DISTDIR) -
	sed -e 's/^PACKAGE_VERSION :=.*/PACKAGE_VERSION := $(PACKAGE_VERSION)/' \
	   GNUmakefile > $(DISTDIR)/GNUmakefile

remdistdir:
	rm -rf $(DISTDIR)

dist: distdir
	tar cfz $(DISTDIR).tar.gz $(DISTDIR)
	rm -rf $(DISTDIR)

distcheck: dist newscheck
	@tar xfz $(DISTDIR).tar.gz
	@if $(MAKE) -C $(DISTDIR) $(DISTCHECKFLAGS); then \
	  echo "$(DISTDIR).tar.gz ready for distribution"; \
	  rm -rf $(DISTDIR); \
        else \
          exit 2; \
        fi

newscheck:
	@V=$$(sed -r -n -e '/^Version[[:space:]]+/{' \
                       -e 's///' \
                       -e 's/[[:space:],].*//' \
                       -e p \
                       -e q \
                       -e '}' NEWS); \
	if test "$$V" == "$(PACKAGE_VERSION)"; then \
		exit 0; \
	elif test "$(PACKAGE_BASE_VERSION)" != "$(PACKAGE_VERSION)" && \
	     test "$$V" == "$(PACKAGE_BASE_VERSION)-*"; then \
		exit 0; \
	else \
		echo >&2 "Version in NEWS does not match $(PACKAGE_BASE_VERSION)"; \
		exit 1; \
	fi
