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

include $(TOPDIR)/rules.mk

PKG_NAME:=mini-httpd
PKG_VERSION:=1.19
PKG_RELEASE:=1

PKG_BUILD_DIR:=$(BUILD_DIR)/mini_httpd-$(PKG_VERSION)
PKG_SOURCE:=mini_httpd-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.acme.com/software/mini_httpd/
PKG_MD5SUM:=792a529dfe974355aad8ba6c80e54e7a
PKG_CAT:=zcat

include $(INCLUDE_DIR)/package.mk

define Package/mini-httpd
  SECTION:=net
  CATEGORY:=Network
  TITLE:=A small web server
  DESCRIPTION:=mini_httpd is a small HTTP server. Its performance is not great, but for \\\
    low or medium traffic sites it's quite adequate. It implements all the \\\
    basic features of an HTTP server, including: \\\
    \\\
      * GET, HEAD, and POST methods.\\\
      * CGI.\\\
      * Basic authentication.\\\
      * Security against ".." filename snooping.\\\
      * The common MIME types.\\\
      * Trailing-slash redirection.\\\
      * index.html, index.htm, index.cgi\\\
      * Directory listings.\\\
      * Multihoming / virtual hosting.\\\
      * Standard logging.\\\
      * Custom error pages.\\\
    \\\
    It can also be configured to do IPv6.
  URL:=http://www.acme.com/software/mini_httpd/
endef

define Package/mini-httpd/conffiles
/etc/mini_httpd.conf
/etc/default/mini_httpd
endef

define Package/mini-httpd-htpasswd
  $(call Package/mini-httpd)
  TITLE:=Utility to generate HTTP access files
  DESCRIPTION+=This package generates .htaccess/.htpasswd files to use HTTP access authentication
endef

define Package/mini-httpd-matrixssl
  $(call Package/mini-httpd)
  DEPENDS:=+libmatrixssl
  TITLE:=A small web server, built with SSL support using MatrixSSL
  DESCRIPTION+=This package adds SSL/HTTPS. (MatrixSSL)
endef

define Package/mini-httpd-matrixssl/conffiles
/etc/mini_httpd.conf
/etc/mini_httpd.pem
/etc/default/mini_httpd
endef

define Package/mini-httpd-openssl
  $(call Package/mini-httpd)
  DEPENDS:=+libopenssl
  TITLE:=A small web server, built with SSL support using OpenSSL
  DESCRIPTION+=This package adds SSL/HTTPS. (OpenSSL)
endef

define Package/mini-httpd-openssl/conffiles
/etc/mini_httpd.conf
/etc/mini_httpd.pem
/etc/default/mini_httpd
endef

ifneq ($(SDK),)
  CONFIG_PACKAGE_mini-httpd:=m
  CONFIG_PACKAGE_mini-httpd-matrixssl:=m
  CONFIG_PACKAGE_mini-httpd-openssl:=m
endif

define Build/Configure
	$(CP) ./files/matrixssl_helper.{c,h} $(PKG_BUILD_DIR)/
endef

define Build/Compile	
	# with MatrixSSL
  ifneq ($(CONFIG_PACKAGE_mini-httpd-matrixssl),)
	$(MAKE) -C $(PKG_BUILD_DIR) \
		$(TARGET_CONFIGURE_OPTS) \
		OFLAGS="$(TARGET_CFLAGS)" \
		SSL_DEFS="-DUSE_SSL -DHAVE_MATRIXSSL" \
		SSL_INC="-I$(STAGING_DIR)/usr/include" \
		SSL_LIBS="-L$(STAGING_DIR)/usr/lib -lmatrixssl" \
		SSL_OBJS="matrixssl_helper.o" \
		all
	(cd $(PKG_BUILD_DIR); mv mini_httpd mini_httpd-matrixssl; )
	$(MAKE) -C $(PKG_BUILD_DIR) clean
  endif
	# with OpenSSL
  ifneq ($(CONFIG_PACKAGE_mini-httpd-openssl),)
	$(MAKE) -C $(PKG_BUILD_DIR) \
		$(TARGET_CONFIGURE_OPTS) \
		OFLAGS="$(TARGET_CFLAGS)" \
		SSL_DEFS="-DUSE_SSL -DHAVE_OPENSSL" \
		SSL_INC="-I$(STAGING_DIR)/usr/include" \
		SSL_LIBS="-L$(STAGING_DIR)/usr/lib -lssl -lcrypto" \
		all
	(cd $(PKG_BUILD_DIR); mv mini_httpd mini_httpd-openssl; )
	$(MAKE) -C $(PKG_BUILD_DIR) clean
  endif
	# without SSL
  ifneq ($(CONFIG_PACKAGE_mini-httpd),)
	$(MAKE) -C $(PKG_BUILD_DIR) \
		$(TARGET_CONFIGURE_OPTS) \
		OFLAGS="$(TARGET_CFLAGS)" \
		all
  endif
endef

define Package/mini-httpd/install
	$(INSTALL_DIR) $(1)/etc
	$(INSTALL_DATA) ./files/mini_httpd.conf $(1)/etc/mini_httpd.conf
	$(INSTALL_DIR) $(1)/etc/default
	$(INSTALL_DATA) ./files/mini_httpd.default $(1)/etc/default/mini_httpd
	$(INSTALL_DIR) $(1)/etc/init.d
	$(INSTALL_BIN) ./files/mini_httpd.init $(1)/etc/init.d/mini_httpd
	$(INSTALL_DIR) $(1)/usr/sbin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/mini_httpd $(1)/usr/sbin/mini_httpd
endef

define Package/mini-httpd-htpasswd/install
	$(INSTALL_DIR) $(1)/usr/sbin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/htpasswd $(1)/usr/sbin/
endef

define Package/mini-httpd-matrixssl/install
	$(INSTALL_DIR) $(1)/etc
	$(INSTALL_DATA) ./files/mini_httpd-ssl.conf $(1)/etc/mini_httpd.conf
	$(INSTALL_CONF) ./files/mini_httpd.pem $(1)/etc/mini_httpd.pem
	$(INSTALL_DIR) $(1)/etc/default
	$(INSTALL_DATA) ./files/mini_httpd.default $(1)/etc/default/mini_httpd
	$(INSTALL_DIR) $(1)/etc/init.d
	$(INSTALL_BIN) ./files/mini_httpd.init $(1)/etc/init.d/mini_httpd
	$(INSTALL_DIR) $(1)/usr/sbin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/mini_httpd-matrixssl $(1)/usr/sbin/mini_httpd
endef

define Package/mini-httpd-openssl/install
	$(INSTALL_DIR) $(1)/etc
	$(INSTALL_DATA) ./files/mini_httpd-ssl.conf $(1)/etc/mini_httpd.conf
	$(INSTALL_CONF) ./files/mini_httpd.pem $(1)/etc/mini_httpd.pem
	$(INSTALL_DIR) $(1)/etc/default
	$(INSTALL_DATA) ./files/mini_httpd.default $(1)/etc/default/mini_httpd
	$(INSTALL_DIR) $(1)/etc/init.d
	$(INSTALL_BIN) ./files/mini_httpd.init $(1)/etc/init.d/mini_httpd
	$(INSTALL_DIR) $(1)/usr/sbin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/mini_httpd-openssl $(1)/usr/sbin/mini_httpd
endef

$(eval $(call BuildPackage,mini-httpd))
$(eval $(call BuildPackage,mini-httpd-htpasswd))
$(eval $(call BuildPackage,mini-httpd-matrixssl))
$(eval $(call BuildPackage,mini-httpd-openssl))