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

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:=usbip
PKG_VERSION:=0.1.7
PKG_RELEASE:=1

PKG_FIXUP:=libtool
PKG_INSTALL:=1

include $(INCLUDE_DIR)/package.mk

define Package/usbip/Common
  TITLE:=USB-over-IP
  URL:=http://usbip.sourceforge.net/
  DEPENDS:=@!LINUX_2_4 @USB_SUPPORT +glib2 +sysfsutils
  MAINTAINER:=Nuno Goncalves <nunojpg@gmail.com>
endef

define Package/usbip/Default
  $(call Package/usbip/Common)
  SECTION:=net
  CATEGORY:=Network
endef

define Package/usbip
  $(call Package/usbip/Default)
  MENU:=1
  TITLE+= (common)
  DEPENDS+= +glib2 +sysfsutils +libwrap +kmod-usbip
endef

define Package/usbip-client
  $(call Package/usbip/Default)
  TITLE+= (client)
  DEPENDS+= usbip +kmod-usbip-client
endef

define Package/usbip-server
  $(call Package/usbip/Default)
  TITLE+= (server)
  DEPENDS+= usbip +kmod-usbip-server
endef

define KernelPackage/usbip/Default
  $(call Package/usbip/Common)
  SUBMENU:=USB Support
endef

define KernelPackage/usbip
  $(call KernelPackage/usbip/Default)
  MENU:=1
  SUBMENU:=USB Support
  TITLE+= (kernel support)
  KCONFIG:= CONFIG_USB_IP_COMMON=y
  FILES:=$(LINUX_DIR)/drivers/staging/usbip/{usbip_common_mod,usbip}.$(LINUX_KMOD_SUFFIX)
  AUTOLOAD:=$(call AutoLoad,98,usbip_common_mod usbip)
endef

define KernelPackage/usbip-client
  $(call KernelPackage/usbip/Default)
  SUBMENU:=USB Support
  TITLE+= (kernel client driver)
  DEPENDS+= kmod-usbip
  KCONFIG:= CONFIG_USB_IP_VHCI_HCD=y
  FILES:=$(LINUX_DIR)/drivers/staging/usbip/vhci-hcd.$(LINUX_KMOD_SUFFIX)
  AUTOLOAD:=$(call AutoLoad,99,vhci-hcd)
endef

define KernelPackage/usbip-server
  $(call KernelPackage/usbip/Default)
  SUBMENU:=USB Support
  TITLE+= (kernel host driver)
  DEPENDS+= kmod-usbip
  KCONFIG:= CONFIG_USB_IP_HOST=y
  FILES:=$(LINUX_DIR)/drivers/staging/usbip/usbip.$(LINUX_KMOD_SUFFIX)
  AUTOLOAD:=$(call AutoLoad,99,usbip)
endef

include $(INCLUDE_DIR)/kernel-defaults.mk

CONFIGURE_PATH:=./src
MAKE_PATH:=./src
LIBTOOL_PATHS:=./src

CFLAGS+="$(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include"

TARGET_CFLAGS+=-I$(STAGING_DIR)/usr/lib/libintl/include/
TARGET_LDFLAGS+=-L$(STAGING_DIR)/usr/lib/libintl/lib/
TARGET_CFLAGS+=-I$(STAGING_DIR)/usr/lib/libiconv/include/
TARGET_LDFLAGS+=-L$(STAGING_DIR)/usr/lib/libiconv/lib/

define Build/Prepare
	$(CP) ${CURDIR}/src/src $(PKG_BUILD_DIR)
	$(CP) ${CURDIR}/src/drivers $(PKG_BUILD_DIR)
	(cd $(PKG_BUILD_DIR)/src; autoreconf -v --install || exit 1 )
	$(INSTALL_DIR) $(LINUX_DIR)/drivers/staging/usbip
	(cd $(PKG_BUILD_DIR)/drivers/2.6.23; cp * "$(LINUX_DIR)/drivers/staging/usbip" || exit 1 )
endef

define Build/Compile/kmod
	$(MAKE) $(KERNEL_MAKEOPTS) \
	    KSOURCE="$(LINUX_DIR)" \
		SUBDIRS="$(LINUX_DIR)/drivers/staging/usbip" \
		CONFIG_USB_IP_COMMON=y \
		CONFIG_USB_IP_VHCI_HCD=y \
		CONFIG_USB_IP_HOST=y \
		modules
endef

define Build/Compile
$(call Build/Compile/Default)
$(call Build/Compile/kmod)
endef

define Package/usbip/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) \
		$(PKG_INSTALL_DIR)/usr/lib/libusbip.so.* \
		$(1)/usr/lib/
	$(INSTALL_DIR) $(1)/usr/share/hwdata
	$(CP) \
		$(PKG_INSTALL_DIR)/usr/share/usbip/usb.ids \
		$(1)/usr/share/hwdata/

	$(INSTALL_DIR) $(1)/usr/bin
	$(CP) \
		$(PKG_INSTALL_DIR)/usr/sbin/usbip \
		$(1)/usr/bin/
	$(INSTALL_DIR) $(1)/usr/bin

	$(CP) \
		$(PKG_INSTALL_DIR)/usr/sbin/usbipd \
		$(1)/usr/bin/
	$(CP) \
		$(PKG_INSTALL_DIR)/usr/sbin/usbip_bind_driver \
		$(1)/usr/bin/usbip_bind_driver
endef

define Package/usbip-client/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(CP) \
		$(PKG_INSTALL_DIR)/usr/bin/usbip \
		$(1)/usr/bin/
endef

define Package/usbip-server/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(CP) \
		$(PKG_INSTALL_DIR)/usr/bin/usbipd \
		$(1)/usr/bin/
	$(CP) \
		$(PKG_INSTALL_DIR)/usr/bin/bind_driver \
		$(1)/usr/bin/usbip_bind_driver
endef


$(eval $(call BuildPackage,usbip))
$(eval $(call BuildPackage,usbip-client))
$(eval $(call BuildPackage,usbip-server))
$(eval $(call KernelPackage,usbip))
$(eval $(call KernelPackage,usbip-client))
$(eval $(call KernelPackage,usbip-server))
