#
# Copyright (C) 2006-2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=privoxy
PKG_VERSION:=3.0.22
PKG_RELEASE:=2

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-stable-src.tar.gz
PKG_SOURCE_URL:=@SF/ijbswa
PKG_MD5SUM:=aa121751d332a51d37d3c6e4b7594daa

PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=LICENSE

PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)-stable
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1

PKG_MAINTAINER:=christian.schoenebeck@gmail.com

include $(INCLUDE_DIR)/package.mk

define Package/privoxy
  SECTION:=net
  CATEGORY:=Network
  SUBMENU:=Web Servers/Proxies
  DEPENDS:=+libpcre +libpthread +zlib
  TITLE:=web proxy with advanced filtering capabilities
  URL:=http://www.privoxy.org/
  USERID:=privoxy=8118:privoxy=8118
endef

define Package/privoxy/description
Privoxy is a web proxy with advanced filtering capabilities for
 protecting privacy, modifying web page content, managing cookies,
 controlling access, and removing ads, banners, pop-ups and other
 obnoxious Internet junk. Privoxy has a very flexible configuration
 and can be customized to suit individual needs and tastes. Privoxy
 has application for both stand-alone systems and multi-user networks.
Version: $(PKG_VERSION)-$(PKG_RELEASE)
endef

CONFIGURE_ARGS += \
	--sysconfdir=/etc/privoxy

# needed otherwise errors during compile
MAKE_FLAGS:=

define Build/Install
	$(call Build/Install/Default,)
	# rename original sample config from pkg_source to save existing one during install
	mv $(PKG_INSTALL_DIR)/etc/privoxy/config $(PKG_INSTALL_DIR)/etc/privoxy/config.privoxy
endef

define Package/privoxy/conffiles
/etc/config/privoxy
/etc/privoxy/config	# temporary needed if updating from old version
endef

define Package/privoxy/preinst
	#!/bin/sh
	# if run within buildroot exit
	[ -n "$${IPKG_INSTROOT}" ] && exit 0
	# stop service if PKG_UPGRADE
	[ "$${PKG_UPGRADE}" = "1" ] && /etc/init.d/privoxy stop >/dev/null 2>&1
	exit 0	# supress errors from stop command
endef

define Package/privoxy/install
	$(INSTALL_DIR) $(1)/usr/sbin
	$(CP) $(PKG_INSTALL_DIR)/usr/sbin/privoxy $(1)/usr/sbin/
	$(INSTALL_DIR) $(1)/etc/init.d
	$(INSTALL_BIN) ./files/privoxy.init $(1)/etc/init.d/privoxy
	$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
	$(INSTALL_BIN) ./files/privoxy.hotplug $(1)/etc/hotplug.d/iface/80-privoxy

	$(INSTALL_DIR) $(1)/etc/privoxy
	$(CP) $(PKG_INSTALL_DIR)/etc/privoxy/* $(1)/etc/privoxy/
	# temporary needed if updating from old version
	# otherwise old config file will be delete by opkg
	$(INSTALL_CONF) ./files/privoxy.oldconfig $(1)/etc/privoxy/config
	# create .old file to be removed with next pacakge builds during update
	$(INSTALL_CONF) ./files/privoxy.oldconfig $(1)/etc/privoxy/config.old
	# copy NEW config
	$(INSTALL_DIR) $(1)/etc/config
	$(INSTALL_CONF) ./files/privoxy.config $(1)/etc/config/privoxy
endef

define Package/privoxy/postinst
	#!/bin/sh

	# if fresh install we don't need old config file in privoxy directory
	[ "$${PKG_UPGRADE}" = "0" ] && rm -f /etc/privoxy/config

	# if run within buildroot exit here
	[ -n "$${IPKG_INSTROOT}" ] && exit 0

	# if PKG_UPGRADE then build uci configuration
	# from existing(?) old /etc/privoxy/config file
	if [ "$${PKG_UPGRADE}" = "1" -a -f /etc/privoxy/config ]; then

		echo "converting OLD config to NEW uci configuration"

		SECTION="privoxy.privoxy"
		CFGFILE=/etc/privoxy/config

		echo -n > /etc/config/privoxy		# clear/create uci configuration file
		cp -f $${CFGFILE} $${CFGFILE}.old	# save old configuration

		# cleanup
		sed -i 's/^[ \t]*//;s/[ \t]*$$//' $${CFGFILE}	# remove invisible chars at beginning and end of lines
		sed -i '/^#/d' $${CFGFILE}			# remove lines with "#"
		sed -i '/^$$/d' $${CFGFILE}			# remove empty lines

		uci -q set $${SECTION}="privoxy"		# create section

		cat $${CFGFILE} | while read LINE; do
			# option is first parameter; uci did not like "-" in option names
			OPT=$$(echo $${LINE} | awk '{print $$1}' | sed 's/-/_/g')
			VAL=$$(echo $${LINE} | awk '{print $$2}')
			case $${OPT} in
				# debug 1024 => debug_1024 '1'
				debug)
					uci -q set $${SECTION}.debug_$${VAL}="1"
					;;
				# handle list values; splitted case for better reading
				actionsfile|filterfile|listen_address)
					uci -q add_list $${SECTION}.$${OPT}="$${VAL}"
					;;
				permit_access|deny_access)
					uci -q add_list $${SECTION}.$${OPT}="$${VAL}"
					;;
				trust_info_url|forward)
					uci -q add_list $${SECTION}.$${OPT}="$${VAL}"
					;;
				forward_socks4|forward_socks4a)
					uci -q add_list $${SECTION}.$${OPT}="$${VAL}"
					;;
				forward_socks5|forward_socks5t)
					uci -q add_list $${SECTION}.$${OPT}="$${VAL}"
					;;
				# all others are normal options
				*)
					uci -q set $${SECTION}.$${OPT}="$${VAL}"
					;;
			esac
		done
		uci -q commit privoxy	# commit changes
		rm -f $${CFGFILE}	# remove old configuration file
	fi

	# set permissions to privoxy group
	echo "setting permissions"
	chgrp -R privoxy /etc/privoxy/*
	chmod 664 /etc/privoxy/*
	chmod 755 /etc/privoxy/templates
	chmod 644 /etc/privoxy/templates/*
endef

$(eval $(call BuildPackage,privoxy))