# -*- makefile -*-
#
# This is the Makefile.config file to use for a "clean" distribution.
#
# This file specifies where Munin will look for things after you've
# run 'make' in the source directory.  Modify it to suit your needs.

# DESTDIR is meant only for use when making Munin packages.  Unless
# you're doing packaging do NOT set it.
# DESTDIR is empty during building, and optionally set to point to
# a shadow tree during make install.

# Note: There is a need for a VARDIR, with DBDIR, PLUGSTATE, HTMLDIR
# and LOGDIR as subdirectories.  Today, DBDIR contains configured
# domains, as well as PLUGSTATE, and we risk collisions.

#
# the base of the Munin installation.
#
PREFIX     = $(DESTDIR)/opt/munin

# Where Munin keeps its configurations (server.conf, client.conf, ++)
CONFDIR    = $(DESTDIR)/etc/opt/munin

# Server only - where to put munin-cron
BINDIR     = $(PREFIX)/bin

# Client only - where to put munin-node, munin-node-configure, and munin-run
SBINDIR    = $(PREFIX)/sbin

# Where to put text and html documentation
DOCDIR     = $(PREFIX)/doc

# Where to put man pages
MANDIR     = $(PREFIX)/man

# Where to put internal binaries and plugin repository
LIBDIR     = $(PREFIX)/lib

# Server only - Output directory
HTMLDIR    = $(PREFIX)/www/docs
CGIDIR     = $(PREFIX)/www/cgi

# Where to put internal data for master (RRD, internal files, ...)
DBDIR      = $(DESTDIR)/var/opt/munin

# Where to put internal data for node (plugin state, ...)
DBDIRNODE  = $(DESTDIR)/var/opt/munin-node

# Client only - Where the spool files are written. Must be writable by
# group "munin", and should be preserved between reboots
SPOOLDIR   = $(DBDIR)/spool

# Client only - Where plugins should put their states. Must be writable by
# group "munin", and should be preserved between reboots
PLUGSTATE  = $(DBDIRNODE)/plugin-state

# Where Munin should place its logs.
LOGDIR     = $(PREFIX)/log/munin

# Location of PID files and other statefiles. On the server, must be
# writable by the user "munin".
STATEDIR   = $(DESTDIR)/var/run/munin

# The perl interpreter to use
PERL       := $(shell which perl)

# The python interpreter to use (used by some plugins)
PYTHON     := /usr/bin/env python3

# The ruby interpreter to use (used by some plugins)
RUBY       := /usr/bin/env ruby

# The java runtime to use (used by some plugins)
JAVARUN    := /usr/bin/java

# The java library dir to use (used by some plugins)
# this is needed in order to be able to install
# java libraries in a custom location. Many distributions
# enforce a spesific location for java libraries.
JAVALIBDIR = $(LIBDIR)


# A modern (posix) shell.  We're not looking for arrays, but $() and
# other modern stuff is expected.  On a posix-system the expression
# below will find the right shell.  Most Unixes released the last 10
# years are POSIX compliant enough for this to work (he said bravely).
#
# On Linux /bin/sh, SunOS/Solaris /usr/xpg4/bin/sh or /bin/ksh
# In general: bash or ksh will work
#
GOODSH     := $(shell PATH=`getconf PATH 2>/dev/null || echo $(PATH)` LANG=C sh -c 'type sh | sed "s/.* //"')

# Path of bash for bash specific plugins
BASH       := /bin/bash

# Server only - Where to install the perl libraries
PERLLIB    = $(DESTDIR)$(shell $(PERL) -V:sitelib | cut -d"'" -f2)

# Client only - Install plugins for this architecture
# the LANG=C makes tr work as expected, not regarding any locale it
# isn't done globally to enable users to have as much localized
# errors as possible
OSTYPE     := $(shell uname | LANG=C tr '[A-Z]' '[a-z]' | cut -f 1 -d _)

# How to figure out the hostname. (Only used in default configuration
# files)
HOSTNAME   := $(shell hostname)

# What is the safest way to create a tempfile.
# Default is to figure it out by testing various methods.
# Replace this with a known platform-specific method
MKTEMP     := $(shell ./test-mktemp)

# Munin version number.
VERSION    := $(shell ./getversion)

# User to run munin as
USER       := munin
GROUP      := munin

# Default user to run the plugins as
PLUGINUSER := nobody

# Default user to run the cgi as
CGIUSER := nobody

# Which command to use to check if the USER and GROUP to run Munin as, exists.
ifneq ($(shell which getent),)
    # "getent" works on most modern OS
    CHECKUSER_COMMAND := getent passwd $(USER)
    CHECKGROUP_COMMAND := getent group $(GROUP)
else
    ifeq ($(OSTYPE),darwin)
        # This should work for OSX 10.5 (Leopard) or later
        CHECKUSER_COMMAND := dscl . -read /Users/$(USER)
        CHECKGROUP_COMMAND := dscl . -read /Groups/$(GROUP)
    else
        ifeq ($(OSTYPE),cygwin)
            CHECKUSER_COMMAND := id $(USER)
            CHECKGROUP_COMMAND := grep ^$(GROUP): /etc/group
        else
            ifeq ($(OSTYPE),hp-ux)
                CHECKUSER_COMMAND := pwget -n $(USER)
                CHECKGROUP_COMMAND := grget -n $(GROUP)
            else
                $(warning Missing test for user existence on this platform. Skipping this check and hoping for the best ...)
                CHECKUSER_COMMAND := true
                CHECKGROUP_COMMAND := true
            endif
        endif
    endif
endif
CHECKUSER  := $(shell $(CHECKUSER_COMMAND) >/dev/null 2>/dev/null || (echo "echo User $(USER) nonexistent. Create the user and retry; exit 2"))
CHECKGROUP := $(shell $(CHECKGROUP_COMMAND) >/dev/null 2>/dev/null || (echo "echo Group $(GROUP) nonexistent. Create the group and retry; exit 2"))

CHOWN      := chown
CHMOD      := chmod
CHGRP      := chgrp

# Java compiler stuff - only needed on the buildhost
JC         := javac
JFLAGS     := -g -source 1.7 -target 1.7 -Xlint
JAR        := jar

# Check if the java compiler works
#    Note that we defer JCVALID evaluation to runtime, 
#    since $(JC) can be redefined later in a specific Makefile.config
#    The core Makefile.config is then used as a Makefile.default
JCVALID    = $(shell $(JC) -version >/dev/null 2>/dev/null && echo "yes")

# Check whether setruid functionality can be used
HASSETR    := $(shell perl -e 'use Config; my @vars=("d_setruid", "d_setreuid", "d_setresuid"); foreach my $$var (@vars) { if ($$Config{$$var} eq "define") { print "1\n"; exit 0; } } print "0\n"; exit 0;' )
