#
# Copyright (C) 2006 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:=mini-httpd
PKG_VERSION:=1.19
PKG_RELEASE:=1

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

PKG_BUILD_DIR:=$(BUILD_DIR)/mini_httpd-$(PKG_VERSION)

include $(INCLUDE_DIR)/package.mk

define Package/mini-httpd/Default
  SUBMENU:=Web Servers/Proxies
  SECTION:=net
  CATEGORY:=Network
  TITLE:=A small web server
  URL:=http://www.acme.com/software/mini_httpd/
endef

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

define Package/mini-httpd/Default/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.
endef

define Package/mini-httpd
$(call Package/mini-httpd/Default)
endef

define Package/mini-httpd/conffiles
$(call Package/mini-httpd/Default/conffiles)
endef

define Package/mini-httpd/description
$(call Package/mini-httpd/Default/description)
endef

define Package/mini-httpd-matrixssl
$(call Package/mini-httpd/Default)
  DEPENDS:= +libmatrixssl
  TITLE+= (built with MatrixSSL)
endef

define Package/mini-httpd-matrixssl/conffiles
$(call Package/mini-httpd/Default/conffiles)
/etc/mini_httpd.pem
endef

define Package/mini-httpd-matrixssl/description
$(call Package/mini-httpd/Default/description)
 This package is built with SSL/HTTPS using MatrixSSL.
endef

define Package/mini-httpd-openssl
$(call Package/mini-httpd/Default)
  DEPENDS:= +libopenssl
  TITLE+= (built with OpenSSL)
endef

define Package/mini-httpd-openssl/conffiles
$(call Package/mini-httpd/Default/conffiles)
/etc/mini_httpd.pem
endef

define Package/mini-httpd-openssl/description
$(call Package/mini-httpd/Default/description)
 This package is built with SSL/HTTPS using OpenSSL.
endef

define Package/mini-httpd-htpasswd
  $(call Package/mini-httpd/Default)
  TITLE:=Utility to generate HTTP access files
endef

define Package/mini-httpd-htpasswd/description
$(call Package/mini-httpd/Default/description)
 This package generates .htaccess/.htpasswd files to use HTTP access authentication.
endef


define Build/Template

$(STAMP_BUILT)-$(2): $(STAMP_PREPARED)
	-$(MAKE) -C $(PKG_BUILD_DIR) clean
	$(MAKE) -C $(PKG_BUILD_DIR) \
		$(TARGET_CONFIGURE_OPTS) \
		OFLAGS="$(TARGET_CFLAGS)" \
		$(3) \
		all
	( cd $(PKG_BUILD_DIR); mv -f mini_httpd mini_httpd-$(2) )
	touch $$@

$(STAMP_BUILT): $(STAMP_BUILT)-$(2)

define Package/$(1)/install
	$(INSTALL_DIR) $$(1)/etc
ifeq ($(2),without-ssl)
	$(INSTALL_DATA) ./files/mini_httpd.conf $$(1)/etc/mini_httpd.conf
else
	$(INSTALL_DATA) ./files/mini_httpd-ssl.conf $$(1)/etc/mini_httpd.conf
	$(INSTALL_CONF) ./files/mini_httpd.pem $$(1)/etc/mini_httpd.pem
endif
	$(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-$(2) $$(1)/usr/sbin/mini_httpd
endef

endef


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

define Build/Configure
endef

define Build/Compile
endef

# always build without SSL because we might need htpassd
define Build/without-ssl
  $(call Build/Template,mini-httpd,without-ssl,)
endef
$(eval $(Build/without-ssl))

ifneq ($(SDK)$(CONFIG_PACKAGE_mini-httpd-matrixssl),)
  define Build/with-matrixssl
    $(call Build/Template,mini-httpd-matrixssl,with-matrixssl, \
		SSL_DEFS="-DUSE_SSL -DHAVE_MATRIXSSL" \
		SSL_INC="$(TARGET_CPPFLAGS)" \
		SSL_LIBS="$(TARGET_LDFLAGS) -lmatrixssl" \
		SSL_OBJS="matrixssl_helper.o" \
    )
  endef
endif
$(eval $(Build/with-matrixssl))

ifneq ($(SDK)$(CONFIG_PACKAGE_mini-httpd-openssl),)
  define Build/with-openssl
    $(call Build/Template,mini-httpd-openssl,with-openssl, \
		SSL_DEFS="-DUSE_SSL -DHAVE_OPENSSL" \
		SSL_INC="$(TARGET_CPPFLAGS)" \
		SSL_LIBS="$(TARGET_LDFLAGS) -lcrypto -lssl" \
    )
  endef
endif
$(eval $(Build/with-openssl))

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

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