# 
# Copyright (C) 2011 David Kuehling <dvdkhlng TA gmx TOD de>
#
# License GPLv2 or later.  NO WARRANTY.
#
# OpenWRT package for the Plplot

include $(TOPDIR)/rules.mk

PKG_NAME:=plplot
PKG_VERSION:=5.9.7
PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/$(PKG_NAME)/$(PKG_VERSION)%20Source
PKG_MD5SUM:=c53c484ed93ce8446513c31707551b5b
PKG_INSTALL:=1

PKG_BUILD_PARALLEL:=1

PKG_FIXUP:=libtool
PKG_REMOVE_FILES:=

PKG_BUILD_DEPENDS:= plplot/host libltdl swig/host
#@INSTALL_GFORTRAN 

include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/package.mk

CMAKE_HOST_FLAGS=-DCMAKE_INSTALL_PREFIX=/usr \
	     	-DDEFAULT_NO_DEVICES=ON \
		-DPKG_CONFIG_EXECUTABLE=Not-Found -DDEFAULT_NO_BINDINGS=ON 

## Need host-compiled plplot build dir for cmake to work for the target
define Host/Configure
	mkdir -p $(HOST_BUILD_DIR)/build_dir
	cd $(HOST_BUILD_DIR)/build_dir && \
	  cmake $(CMAKE_HOST_FLAGS) \
	        $(HOST_BUILD_DIR)
endef

define Host/Compile/Octave
	$(MAKE) -C $(HOST_BUILD_DIR)/bindings/octave massage
endef

define Host/Compile
	$(if $(CONFIG_PACKAGE_plplot-octave),$(Host/Compile/Octave),)
	$(MAKE) -C $(HOST_BUILD_DIR)/build_dir VERBOSE=1 -j4 
endef

define Host/Install/Octave
	$(INSTALL_DIR) $(STAGING_DIR_HOST)/bin
	$(CP) $(HOST_BUILD_DIR)/bindings/octave/massage \
		$(STAGING_DIR_HOST)/bin/plplot-massage
endef

define Host/Install
	$(INSTALL_DIR) $(STAGING_DIR_HOST)/lib/$(PKG_NAME)-$(PKG_VERSION)
	$(CP) $(HOST_BUILD_DIR)/build_dir \
		$(STAGING_DIR_HOST)/lib/$(PKG_NAME)-$(PKG_VERSION)
	$(if $(CONFIG_PACKAGE_plplot-octave),$(Host/Install/Octave),)
endef

define Package/plplot/Default
  SECTION:=libs
  CATEGORY:=Libraries

  TITLE:=PLplot plotting library
  URL:=http://plplot.sourceforge.net/
  SUBMENU:=PLplot
endef

define Package/plplot/Default/description
PLplot is a cross-platform software package for creating scientific plots.  It
comes with language bindings for many interpreter languages like Lua, Tcl,
Python.  Also it can be used as plooting backend for GNU Octave.
endef

define Package/plplot
$(call Package/plplot/Default)
  DEPENDS:=+libltdl +zlib +libfreetype @BROKEN
  TITLE+=
endef

define Package/plplot/description
$(call Package/plplot/Default/description)
 This package contains the Plplot library with a few file output devices.
endef

define Package/plplot-demo
$(call Package/plplot/Default)
  DEPENDS:= +plplot 
  TITLE+= (Example Programs)
endef

define Package/plplot-demo/description
$(call Package/plplot/Default/description)
 This package contains the Plplot example programs.
endef

define Package/plplot-cxx
$(call Package/plplot/Default)
  DEPENDS:= +plplot +libstdcpp
  TITLE+= (C++ bindings)
endef

define Package/plplot-cxx/description
$(call Package/plplot/Default/description)
 This package contains the Plplot C++ bindings.
endef

define Package/plplot-qt
$(call Package/plplot/Default)
  DEPENDS:= +plplot +qt4 +qt4-gui
  TITLE+= (Qt bindings&device)
endef

define Package/plplot-qt/description
$(call Package/plplot/Default/description)
 This package contains the Plplot Qt visualization driver and Qt bindings.
endef

define Package/plplot-linuxvga
$(call Package/plplot/Default)
  DEPENDS:= +plplot +svgalib
  TITLE+= (svgalib driver)
endef

define Package/plplot-linuxvga/description
$(call Package/plplot/Default/description)
 This package contains the SVGAlib based visualization driver for PLplot.
endef

define Package/plplot-tcl
$(call Package/plplot/Default)
  DEPENDS:= +plplot +tcl
  TITLE+= (Tcl bindings)
$(eval $(call RequireCommand,tclsh,Please install tcl.))
endef

define Package/plplot-tcl/description
$(call Package/plplot/Default/description)
 This package contains the Plplot bindings for Tcl
endef

define Package/plplot-lua
$(call Package/plplot/Default)
  DEPENDS:= +plplot +liblua
  TITLE+= (Lua bindings)
endef

define Package/plplot-lua/description
$(call Package/plplot/Default/description)
 This package contains the Plplot bindings for Lua
endef

# note: plplot-python needs some numeric support library for python ('numpy'?)
# not currently present on openwrt.
define Package/plplot-python
$(call Package/plplot/Default)
  DEPENDS:= +plplot +python @BROKEN
  TITLE+= (Python bindings)
endef

define Package/plplot-python/description
$(call Package/plplot/Default/description)
 This package contains the Plplot bindings for Python.  
 Note that this needs either the Pythnon-Numpy or Python-Numeric library 
 to work.  Both haven\'t been ported yet, so plplot-python is 
 disfunctional!
endef

define Package/plplot-octave
$(call Package/plplot/Default)
  DEPENDS:= +plplot +octave
  TITLE+= (Octave bindings)
endef

define Package/plplot-octave/description
$(call Package/plplot/Default/description)
 This package contains the Plplot bindings for GNU Octave
endef

TARGET_CFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib

CMAKE_FLAGS := \
	-Wdev \
	-DCMAKE_INSTALL_PREFIX=/usr \
	-DCMAKE_TOOLCHAIN_FILE=$(PKG_BUILD_DIR)/toolchain.cmake \
	-DPKG_CONFIG_EXECUTABLE=$(STAGING_DIR_HOST)/bin/pkg-config \
	-DSWIG_EXECUTABLE=$(STAGING_DIR_HOST)/bin/swig \
	-DDEFAULT_NO_DEVICES=ON \
	-DUSE_RPATH=OFF \
	-DPLD_ps=ON \
	-DPLD_svg=ON \
	-DPLD_mem=ON \
	-DPLD_null=ON \
	-DDEFAULT_NO_BINDINGS=ON \
	-DNaNAwareCCompiler=ON \
	-DCMAKE_USE_NAMESPACE=ON \
	-DCMAKE_NATIVE_BINARY_DIR=$(STAGING_DIR_HOST)/lib/$(PKG_NAME)-$(PKG_VERSION)/build_dir

# everything done under unstall target!
ifdef CONFIG_PACKAGE_plplot-demo
endif

ifdef CONFIG_PACKAGE_plplot-cxx
	CMAKE_FLAGS += -DENABLE_cxx=ON
endif

ifdef CONFIG_PACKAGE_plplot-qt
	CMAKE_FLAGS += \
		-DPLD_qtwidget=ON \
		-DPLD_extqt=ON \
		-DENABLE_qt=ON \
		-DQT_QMAKE_EXECUTABLE=$(STAGING_DIR_HOST)/bin/qmake \
		-DQT_MOC_EXECUTABLE=$(STAGING_DIR_HOST)/bin/moc \
		-DQT_UIC_EXECUTABLE=$(STAGING_DIR_HOST)/bin/uic \
		-DQT_RCC_EXECUTABLE=$(STAGING_DIR_HOST)/bin/rcc
endif

ifdef CONFIG_PACKAGE_plplot-linuxvga
	CMAKE_FLAGS += \
		-DPLD_linuxvga=ON
endif

ifdef CONFIG_PACKAGE_plplot-lua
	CMAKE_FLAGS += -DENABLE_lua=ON
endif

ifdef CONFIG_PACKAGE_plplot-python
	CMAKE_FLAGS += -DENABLE_python=ON
endif

ifdef CONFIG_PACKAGE_plplot-tcl
	CMAKE_FLAGS +=	-DENABLE_tcl=ON 
endif

ifdef CONFIG_PACKAGE_plplot-octave
	CMAKE_FLAGS +=	\
		-DENABLE_octave=ON \
		-DMKOCTFILE=$(STAGING_DIR)/usr/bin/mkoctfile \
		-DOCTAVE_OCT_DIR=/usr/lib/octave/site/oct/$(OPTIMIZE_FOR_CPU)-openwrt-linux-gnu \
		-Dmassage_LOCATION=$(STAGING_DIR_HOST)/lib/$(PKG_NAME)-$(PKG_VERSION)/build_dir/bindings/octave/massage
endif

#	$(if $(CONFIG_PACKAGE_libX11),FEATURE_XLOCK=y,FEATURE_XLOCK=n) \

define Build/Configure
	echo "SET(CMAKE_SYSTEM_NAME Linux)" > $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_SYSTEM_VERSION 1)" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_BUILD_TYPE None)" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_C_COMPILER   $(TARGET_CC:ccache=))" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_CXX_COMPILER $(TARGET_CC:ccache=))" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_C_FLAGS   \"$(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS) $(TARGET_CFLAGS) $(EXTRA_CFLAGS)\" CACHE STRING \"\" FORCE)" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_CXX_FLAGS \"$(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS) $(TARGET_CFLAGS) $(EXTRA_CFLAGS)\" CACHE STRING \"\" FORCE)" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_VERBOSE_MAKEFILE ON)" >> $(PKG_BUILD_DIR)/toolchain.cmake

        # where is the target environment 
	echo "SET(CMAKE_FIND_ROOT_PATH  $(STAGING_DIR))" >> $(PKG_BUILD_DIR)/toolchain.cmake
#	echo "SET(CMAKE_PREFIX_PATH /usr)" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_LIBRARY_PATH  $(STAGING_DIR)/usr/lib $(STAGING_DIR)/lib $(STAGING_DIR_ROOT)/lib)" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_SKIP_BUILD_RPATH ON)" >> $(PKG_BUILD_DIR)/toolchain.cmake
#	echo "SET(CMAKE_INSTALL_RPATH /usr/lib;/lib)"  >> $(PKG_BUILD_DIR)/toolchain.cmake

	echo "SET(CMAKE_INCLUDE_PATH /usr/include)" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_SYSTEM_INCLUDE_PATH /include)" >> $(PKG_BUILD_DIR)/toolchain.cmake
        # search for programs in the build host directories
	echo "SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_PROGRAM_PATH $(STAGING_DIR_HOST)/bin $(STAGING_DIR)/usr/bin)" >> $(PKG_BUILD_DIR)/toolchain.cmake

        # for libraries and headers in the target directories
	echo "SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)" >> $(PKG_BUILD_DIR)/toolchain.cmake
	echo "SET(PL_USE_NAMESPACE 1)" >> $(PKG_BUILD_DIR)/toolchain.cmake

	cd $(PKG_BUILD_DIR) && cmake $(CMAKE_FLAGS)
endef

define Build/Compile
	$(call Build/Compile/Default, VERBOSE=1 -j4)	
endef


define Build/Install
	$(call Build/Install/Default)
#	$(INSTALL_DATA) ./files/... $(PKG_INSTALL_DIR)/usr/share/plplot/
endef

define Build/InstallDev
	$(INSTALL_DIR) $(1)/usr/include/plplot
	$(CP) $(PKG_INSTALL_DIR)/usr/include/plplot/*.h \
		$(1)/usr/include/plplot/

	$(INSTALL_DIR) $(1)/usr/lib
	$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.so* \
		$(1)/usr/lib/
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/* \
		$(1)/usr/lib/pkgconfig/
#	$(SED) 's,-I$$$${includedir},,g' $(1)/usr/lib/pkgconfig/plplotd.pc
#	$(SED) 's,-L$$$${libdir},,g' $(1)/usr/lib/pkgconfig/plplotd.pc
endef

define Package/plplot/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{plplotd,csirocsa,qsastime}.so* \
		$(1)/usr/lib/
	$(INSTALL_DIR) $(1)/usr/lib/plplot$(PKG_VERSION)/driversd
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/plplot$(PKG_VERSION)/driversd/{mem,null,ps,svg}.{so,rc} \
		 $(1)/usr/lib/plplot$(PKG_VERSION)/driversd/
	$(INSTALL_DIR) $(1)/usr/share/plplot$(PKG_VERSION)
	$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/plplot$(PKG_VERSION)/*.{map,pal,fnt} \
		$(1)/usr/share/plplot$(PKG_VERSION)/
endef

# ugly, but necessary: compiling demo-programs on install, using the just
# installed libs.
define Package/plplot-demo/install
	$(SED) 's;/usr/lib/pkgconfig;$(STAGING_DIR)/usr/lib/pkgconfig;g' \
		$(PKG_INSTALL_DIR)/usr/share/plplot$(PKG_VERSION)/examples/c/Makefile
	$(MAKE) -C $(PKG_INSTALL_DIR)/usr/share/plplot$(PKG_VERSION)/examples/c/ \
		 C_INCLUDE_PATH=$(STAGING_DIR)/usr/include/plplot \
		 CC="$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CFLAGS) $(TARGET_LDFLAGS)"\
		RPATHCMD=

	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/plplot$(PKG_VERSION)/examples/c/x??c \
		$(1)/usr/bin/
endef

define Package/plplot-cxx/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libplplotcxxd.so* \
		$(1)/usr/lib/
endef

define Package/plplot-qt/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libplplotqtd.so* \
		$(1)/usr/lib/
	$(INSTALL_DIR) $(1)/usr/lib/plplot$(PKG_VERSION)/driversd
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/plplot$(PKG_VERSION)/driversd/qt.{so,rc} \
		 $(1)/usr/lib/plplot$(PKG_VERSION)/driversd/
endef

define Package/plplot-linuxvga/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(INSTALL_DIR) $(1)/usr/lib/plplot$(PKG_VERSION)/driversd
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/plplot$(PKG_VERSION)/driversd/linuxvga.{so,rc} \
		 $(1)/usr/lib/plplot$(PKG_VERSION)/driversd/
endef

define Package/plplot-tcl/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libplplottcltkd.so* \
		$(1)/usr/lib/
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libtclmatrixd.so* \
		$(1)/usr/lib/
	$(INSTALL_DIR) $(1)/usr/share/plplot$(PKG_VERSION)/tcl
	$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/plplot$(PKG_VERSION)/pkgIndex.tcl \
		$(1)/usr/share/plplot$(PKG_VERSION)/
	$(CP) $(PKG_INSTALL_DIR)/usr/share/plplot$(PKG_VERSION)/tcl/*\
		$(1)/usr/share/plplot$(PKG_VERSION)/tcl/
endef

define Package/plplot-lua/install
	$(INSTALL_DIR) $(1)/usr/lib/lua
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/lua/*/plplot/plplotluac.so $(1)/usr/lib/lua/
endef

define Package/plplot-python/install
	$(INSTALL_DIR) $(1)/usr/lib/python
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/python/*/plplot/*.so* $(1)/usr/lib/python/
endef

define Package/plplot-octave/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/octave \
		$(1)/usr/lib/
	$(INSTALL_DIR) $(1)/usr/share
	$(CP) $(PKG_INSTALL_DIR)/usr/share/{octave,plplot_octave} \
		$(1)/usr/share/
endef

# define Package/plplot-data/install
# 	$(INSTALL_DIR) $(1)/
# 	(cd $(PKG_INSTALL_DIR)/ && tar -cf - usr/share) \
# 	    | (cd $(1)/ && tar -xvf -)
# endef

$(eval $(call HostBuild))
$(eval $(call BuildPackage,plplot))
$(eval $(call BuildPackage,plplot-demo))
$(eval $(call BuildPackage,plplot-cxx))
$(eval $(call BuildPackage,plplot-qt))
$(eval $(call BuildPackage,plplot-linuxvga))
$(eval $(call BuildPackage,plplot-tcl))
$(eval $(call BuildPackage,plplot-lua))
$(eval $(call BuildPackage,plplot-python))
$(eval $(call BuildPackage,plplot-octave))


# The following comments configure the Emacs editor.  Just ignore them.
# Local Variables:
# compile-command: "make -C ~/h/src/qi/openwrt-xburst package/plplot/compile -j2 V=99"
# End: