#!/usr/bin/make -f
#-*- makefile -*-
# Rules file for Snort, developed by Javier Fernandez-Sanguino
# Made with the aid of dh_make, by Craig Small
# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
# Some lines taken from debmake, by Christoph Lameter.
#

export DH_VERBOSE=1

TMP=`pwd`/debian

CFLAGS:=-g -O2 -D_GNU_SOURCE

ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -g
endif
ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
	INSTALL_PROGRAM += -s
endif

export CFLAGS

CONFFLAGS= --prefix=/usr \
	--bindir=\$$\{exec_prefix\}/sbin \
	--mandir=\$$\{exec_prefix\}/share/man \
	--enable-zlib \
	--enable-ipv6 \
	--enable-gre \
	--enable-mpls \
	--enable-targetbased \
	--enable-ppm \
	--enable-perfprofiling \
	--enable-active-response \
	--enable-normalizer \
	--enable-reload \
	--enable-react \
	--enable-flexresp3

aclocal.m4:
	aclocal-1.9 -I m4/
	automake-1.9 -i
	autoconf

clean-sources:
	# Clean the sources
	[ ! -f Makefile ] ||  $(MAKE) distclean
	cd src &&  [ ! -f Makefile ] || $(MAKE) distclean
# Remove the flag that indicated that the sources were configured
	-rm -f configure-stamp

clean: clean-sources
	dh_testdir
	dh_testroot
# Clean all the stamps
	rm -f build*stamp install-stamp configure-stamp
# Clean all the different binaries we have created when building the packages'
# flavors
	rm -f src/snort-basic
	rm -f src/snort
# Clean documents
	cd doc && [ ! -f Makefile ] || $(MAKE) distclean
	rm -f doc/snort_manual.pdf doc/snort_manual.ps doc/snort_manual.aux \
	    doc/snort_manual.log doc/snort_manual.toc
	dh_clean

configure: configure-stamp
configure-stamp:
	dh_testdir
# Standard package configuration:
	./configure $(CONFFLAGS) 
	touch $@

# Basic 'flavor' package 
#
# Other 'flavors' (with different compilation flags) can be generated using
# this as a reference
build-basic: build-basic-stamp
build-basic-stamp: configure-stamp
# NOTE: We don't clean the sources on the first compilation
	dh_testdir
	$(MAKE) 
	cp src/snort src/snort-basic
	touch $@

# This is an example of a 'flavor'. A flavor
# adds support for some specific configuration flags
# that are not used in the basic flavor
#
#build-flavor: build-flavor-stamp
#build-flavor-stamp:
#       dh_testdir
#       sh debian/clean_sources.sh
#       # Support for blah, blah, blah
#       ./configure $(CONFFLAGS) \
#               --enable-some-esoteric-option 
#       $(MAKE)
#       cp src/snort src/snort-flavor
#       touch $@
# Note: the binary generated needs to be moved to the proper 'flavor' package too


build-arch: build-arch-stamp 
build-arch-stamp: build-basic-stamp
	dh_testdir
	touch $@

build-indep: build-indep-stamp
build-indep-stamp: configure-stamp
	dh_testdir
	# Build the documentation
# Only do this if we have the required binaries and files
# Note: I hate hardcoding paths here, but the buildds are stupid
	@if [ -x /usr/bin/ps2pdf -a -x /usr/bin/pslatex -a \
	     -x /usr/bin/dvips -a \
	     -e /usr/share/texlive/texmf-dist/tex/latex/pslatex/pslatex.sty -a \
	     -e /usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty ] ; \
	then \
	    $(MAKE) -C doc snort_manual.pdf ; \
	else \
	    echo >&2 'WARNING: Not building documentation, environment not available!'; \
	fi
	touch $@

build: build-arch build-indep
	
install: install-indep install-arch

install-arch: 
	dh_testdir
	dh_testroot
	dh_clean -k -s
	dh_installdirs -s
# Install the common binaries
	$(MAKE) install prefix=$(TMP)/snort-common/usr/
	rm -f  $(TMP)/snort-common/usr/sbin/snort
	# clean dependency_libs
	find $(TMP)/snort-common/usr/lib  -name "*.la" -exec \
		sed -i -e "s,^dependency_libs=.*,dependency_libs=''," {} +
# Snort binaries
	install -m 755 -o root -g root src/snort-basic $(TMP)/snort/usr/sbin/snort
# Default config
#	install -m 644 -o root -g root `pwd`/debian/snort.common.parameters $(TMP)/snort/etc/snort/snort.common.parameters
	install -m 644 -o root -g root `pwd`/debian/snort.default $(TMP)/snort/etc/default/snort
#  Install init.d initscripts
	install -m 755 -o root -g root `pwd`/debian/snort.init.d $(TMP)/snort/etc/init.d/snort
#  Install PPP initscripts
	install -m 755 -o root -g root `pwd`/debian/my/snort.ip-up.d $(TMP)/snort/etc/ppp/ip-up.d/snort
	install -m 755 -o root -g root `pwd`/debian/my/snort.ip-down.d $(TMP)/snort/etc/ppp/ip-down.d/snort
# Logrotate files
	install -m 644 -o root -g root `pwd`/debian/snort.logrotate $(TMP)/snort/etc/logrotate.d/snort
# Move libraries to the snort-common-libraries package
	mv $(TMP)/snort-common/usr/lib/* $(TMP)/snort-common-libraries/usr/lib/
	rmdir $(TMP)/snort-common/usr/lib/
# Remove headers, as this is not a -dev package
#	mv $(TMP)/snort-common/usr/src/ $(TMP)/snort-common-libraries/usr/
	rm -rf $(TMP)/sort-common/usr/src/
	dh_install -s

install-indep: 
	dh_testdir
	dh_testroot
	dh_clean -k -i
	dh_installdirs -i
# Install Debian specific, scripts and files of the snort-common
# package
	install -m 755 -o root -g root `pwd`/debian/snort.cron.daily $(TMP)/snort-common/etc/cron.daily/5snort
	install -m 755 -o root -g root `pwd`/debian/my/snort-stat $(TMP)/snort-common/usr/sbin/
	install -m 644 -o root -g root `pwd`/etc/snort.conf $(TMP)/snort-common/etc/snort/
	install -m 644 -o root -g root `pwd`/etc/unicode.map $(TMP)/snort-common/etc/snort/
	install -m 644 -o root -g root `pwd`/etc/threshold.conf $(TMP)/snort-common/etc/snort/
#  Install files of the arch-independent packages
	cp rules/*.rules $(TMP)/snort-rules-default/etc/snort/rules/
#	mkdir -p $(TMP)/snort-rules-default/usr/share/snort/
#	install -m 644 -o root -g root `pwd`/debian/oldrules.md5 $(TMP)/snort-rules-default/usr/share/snort/oldrules.md5
#	install -m 644 etc/sid-msg.map $(TMP)/snort-rules-default/etc/snort/
	install -m 644 etc/gen-msg.map $(TMP)/snort-rules-default/etc/snort/
	install -m 644 etc/community-sid-msg.map $(TMP)/snort-rules-default/etc/snort/
	install -m 644 etc/classification.config $(TMP)/snort-rules-default/etc/snort/
	install -m 644 etc/reference.config $(TMP)/snort-rules-default/etc/snort/
# Remove useless directories
	rm -rf $(TMP)/snort-common/etc/ppp
	rm -rf $(TMP)/snort-doc/usr/share/doc
	dh_install -i

# Build architecture-independent files here.
binary-indep: build-indep install-indep
	dh_testdir -i
	dh_testroot -i
	dh_installdocs -i -XREADME.WIN32
	dh_installexamples -i
	dh_installdebconf -i
	dh_installman -i 
# Other adjustments
	rm -rf $(TMP)/snort-doc/usr/share/doc/snort-doc/CVS
	rm -rf $(TMP)/snort-doc/usr/share/doc/snort-doc/contrib/CVS
	chmod +x $(TMP)/snort-common/usr/share/doc/snort-common/examples/snort*
	cp -a doc/signatures/ $(TMP)/snort-doc/usr/share/doc/snort-doc/
	rm -rf $(TMP)/snort-doc/usr/share/man
	rm -rf $(TMP)/snort-rules-default/usr/share/man
	rm -rf $(TMP)/snort-common/usr/share/man/man8/snort.*
	dh_installchangelogs -i ChangeLog
	dh_link -i
	dh_strip -i
	dh_compress -i
	dh_fixperms -i
	dh_makeshlibs -i
	dh_installdeb -i
	dh_perl -i
	dh_shlibdeps -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

# Build architecture-dependent files here.
binary-arch: build-arch install-arch
	dh_testdir -a
	dh_testroot -a
	dh_installdocs -a
	dh_installexamples -a
	dh_installdebconf -a
	dh_installman -a
	rm -rf $(TMP)/snort-rules-default/usr/share/man
	rm -f $(TMP)/snort/usr/share/man/man8/snort-stat.*
	rm -f $(TMP)/snort-common/usr/share/man/man8/snort.*
	dh_installchangelogs -a ChangeLog
	dh_link -a
	dh_strip -a
	dh_compress -a
	dh_fixperms -a
	dh_makeshlibs -a -Xsnort-common-libraries
	dh_installdeb -a
	dh_perl -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

source diff:                                                                  
	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false

update-rules:
	mv rules rules.old
	wget -q -O ../snortrules-snapshot-2_2.tar.gz http://www.snort.org/dl/rules/snortrules-snapshot-2_2.tar.gz
	tar -zxf ../snortrules-snapshot-2_2.tar.gz
	if [ -d rules ] ; then mv rules.old/Makefile* rules/; rm -rf rules.old; fi

# Update the Debconf templates for all packages using the common templates
update-templates: debian/snort.TEMPLATE.templates 
	cd debian && sh generate-templates.sh
	cd debian && debconf-updatepo

binary: binary-arch binary-indep
.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch
