# 
# Copyright (C) David Kuehling <dvdkhlng TA gmx TOD de>
#
# License GPLv2 or later.  NO WARRANTY.
#
# OpenWRT package for the Allegro game and multimedia library

# todo: 
#
# * both shooter and skater try to load a demo.dat from /usr/bin.  hack them to
# use usr/share subdirs?
#
# * similar problem with setup?
#
# * setup and shoot seem to need 8bpp video modes.  can we hack them for
#   32bpp?  Would it help to use a differnt video driver than just 'fbcon'?
#
include $(TOPDIR)/rules.mk

PKG_NAME:=liballegro
PKG_VERSION:=4.4.2
PKG_RELEASE:=3
PKG_SOURCE:=allegro-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/alleg/allegro/$(PKG_VERSION)
PKG_BUILD_DIR = $(BUILD_DIR)/allegro-$(PKG_VERSION)
HOST_BUILD_DIR = $(BUILD_DIR_HOST)/allegro-$(PKG_VERSION)

PKG_MD5SUM:=4db71b0460fc99926ae91d223199c2e6
PKG_INSTALL:=1

PKG_FIXUP:=libtool
PKG_REMOVE_FILES:=

# PKG_BUILD_DEPENDS:=liballegro/host 

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

define Package/liballegro/Default
  SUBMENU:=Liballegro
  SECTION:=libs
  CATEGORY:=Libraries
  TITLE:=The Allegro Game Programming Library
  URL:=alleg.sf.net
#  SUBMENU:=Editors
endef

define Package/liballegro/Default/description
Allegro is a cross-platform library for computer games and multimedia 
programming.
endef

define Package/liballegro
$(call Package/liballegro/Default)
  DEPENDS:=+alsa-lib
  TITLE+= (library)
endef

define Package/liballegro/description
$(call Package/liballegro/Default/description)
 This package contains the Allegro library
endef

define Package/liballegro-data
$(call Package/liballegro/Default)
  TITLE+= (data)
endef

define Package/liballegro-data/description
$(call Package/liballegro/Default/description)
 This package contains various data files that are used by the Allegro library.
endef

define Package/liballegro-png
$(call Package/liballegro/Default)
  TITLE+= (PNG image support)
  DEPENDS:=+liballegro +zlib +libpng
endef

define Package/liballegro-png/description
$(call Package/liballegro/Default/description)
 This package contains the libloadpng addon that allows interfacing allegro 
 Bitmaps with PNG files.  Although the name of the library suggests otherwise
 saving to PNG is supported as well as loading PNG files.
endef

# note: jpgalleg contains its own jpeg implementation; libjpeg not needed!
define Package/liballegro-jpeg
$(call Package/liballegro/Default)
  TITLE+= (JPEG image support)
  DEPENDS:=+liballegro
endef

define Package/liballegro-jpeg/description
$(call Package/liballegro/Default/description)
 This package contains the libjpgalleg addon that allows interfacing allegro 
 Bitmaps with JPEG files.  Saving to JPEG files is supported as well as loading.
endef

define Package/liballegro-ogg
$(call Package/liballegro/Default)
  TITLE+= (Ogg/Vorbis audio support)
  DEPENDS:=+liballegro +libvorbisidec +libogg
endef

define Package/liballegro-ogg/description
$(call Package/liballegro/Default/description)
 This package contains the liblogg addon that allows play-back and mixing of
 background music from Ogg Vorbis audio files.
endef

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

define Package/liballegro-demo/description
$(call Package/liballegro/Default/description)
 This package contains the Allegro demo game.
endef

define Package/liballegro-setup
$(call Package/liballegro/Default)
  TITLE+= (setup)
  DEPENDS:=+liballegro
endef

define Package/liballegro-setup/description
$(call Package/liballegro/Default/description)
 This package contains the Allegro setup program
endef

define Package/liballegro-examples
$(call Package/liballegro/Default)
  TITLE+= (examples)
  DEPENDS:=+liballegro
endef

define Package/liballegro-examples/description
$(call Package/liballegro/Default/description)
 This package contains the Allegro example programs named "ex*"
endef

define Package/liballegro-utils
$(call Package/liballegro/Default)
  TITLE+= (utils)
endef

define Package/liballegro-utils/description
$(call Package/liballegro/Default/description)
 This package contains the setup and test tool that ship with Allegro.
endef

HOST_CONFIGURE_ARGS += 
CONFIGURE_ARGS +=

TARGET_CPPFLAGS += 

define Build/Prepare
	$(call Build/Prepare/Default)
endef

HOST_CMAKE_FLAGS=					\
	-DCMAKE_INSTALL_PREFIX=$(STAGING_DIR_HOST)	\
	-DRT_LIBRARY=					\
	-DDL_LIBRARY=					\
	-DWANT_TOOLS=on					\
	-DWANT_TESTS=off				\
	-DWANT_MODULES=off				\
	-DWANT_EXAMPLES=off				\
	-DWANT_ALLEGROGL=off				\
	-DWANT_LOADPNG=off				\
	-DWANT_LOGG=off					\
	-DWANT_JPGALLEG=off				\
	-DWANT_X11=off					\
	-DWANT_LINUX_CONSOLE=on				\
	-DWANT_LINUX_FBCON=off				\
	-DWANT_LINUX_VGA=off				\
	-DWANT_LINUX_SVGALIB=off			\
	-DWANT_ALSA=off					\
	-DWANT_OSS=off					\
	-DWANT_JACK=off					\
	-DWANT_SGIAUDIO=off 

define Host/Configure
	cd $(HOST_BUILD_DIR) && cmake $(HOST_CMAKE_FLAGS) .
endef

## On the host, we only need to compile the allegro develpment tools: 
## dat&friends
define Host/Compile
	$(call Host/Compile/Default, VERBOSE=1 -j4)
endef

define Host/Install
	$(call Host/Install/Default)
#	$(INSTALL_BIN) $(HOST_BUILD_DIR)/lib-src/make-docfile $(STAGING_DIR_HOST)/bin/liballegro-make-docfile
#	$(INSTALL_BIN) $(HOST_BUILD_DIR)/src/prefix-args $(STAGING_DIR_HOST)/bin/liballegro-prefix-args
endef

# workaround for cmake.mk bug
ifneq ($(CONFIG_CCACHE),)
  CMAKE_C_COMPILER:=ccache
  CMAKE_CXX_COMPILER:=ccache
endif

EXTRA_CFLAGS = -DSETUP_SCREEN_W=320 -DSETUP_SCREEN_H=240 -DSETUP_CFG_FILE=\\\"/etc/allegrorc\\\"
TARGET_LDFLAGS = -L$(STAGING_DIR)/usr/lib -ldl -lrt

CMAKE_OPTIONS =								\
	-DRT_LIBRARY=							\
	-DALLEGRO_USE_CONSTRUCTOR_EXITCODE=0				\
	-DRT_LIBRARY=							\
	-DDL_LIBRARY=							\
	-DWANT_TOOLS=on							\
	-DWANT_TESTS=on							\
	-DWANT_MODULES=on						\
	-DWANT_EXAMPLES=on						\
	-DWANT_ALLEGROGL=off						\
	-DWANT_X11=off							\
	-DWANT_LINUX_CONSOLE=on						\
	-DWANT_LINUX_FBCON=on						\
	-DWANT_LINUX_VGA=off						\
	-DWANT_LINUX_SVGALIB=off					\
	-DWANT_ALSA=on							\
	-DWANT_OSS=off							\
	-DWANT_JACK=off							\
	-DWANT_SGIAUDIO=off						\
	-DWANT_LOADPNG=$(if $(CONFIG_PACKAGE_liballegro-png),on,off)	\
	-DWANT_JPGALLEG=$(if $(CONFIG_PACKAGE_liballegro-jpeg),on,off) \
	-DWANT_LOGG=$(if $(CONFIG_PACKAGE_liballegro-ogg),on,off)

# todo: patch CMakeLists.txt to force addons to be compiled as shared libs?
#	-DADDON_LINKAGE=SHARED

MAKE_FLAGS += -j4

define Build/Configure
	$(call Build/Configure/Default)
endef

define Build/Compile
	$(call Build/Compile/Default)
	$(call Build/Compile/Default -C PKG_BUILD_DIR)
#	ln -sf $(STAGING_DIR_HOST)/bin/liballegro-make-docfile $(PKG_BUILD_DIR)/lib-src/make-docfile
endef

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

define Build/InstallDev
	$(INSTALL_DIR) $(1)/usr/include/
	$(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/

	$(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/lib*.a \
		$(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/liballegro/install
	$(INSTALL_DIR) $(1)/usr/lib  $(1)/etc
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/liballeg* $(1)/usr/lib/
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/allegro $(1)/usr/lib/
	$(CP) ./files/allegrorc $(1)/etc/
endef

define Package/liballegro-data/install
	$(INSTALL_DIR) $(1)/usr/share/allegro
	$(CP) $(PKG_BUILD_DIR)/{keyboard.dat,language.dat} $(1)/usr/share/allegro
        # readme file is used by the allegro 'shooter' demo
	$(INSTALL_DIR) $(1)/usr/share/allegro/docs/{txt,src}
	$(CP) $(PKG_BUILD_DIR)/docs/txt/readme.txt \
		$(1)/usr/share/allegro/docs/txt
	$(CP) $(PKG_BUILD_DIR)/docs/src/thanks._tx \
		$(1)/usr/share/allegro/docs/src
endef

define Package/liballegro-png/install
	$(INSTALL_DIR) $(1)/usr/lib/
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libloadpng* $(1)/usr/lib/
endef

define Package/liballegro-jpeg/install
	$(INSTALL_DIR) $(1)/usr/lib/
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libjpgalleg* $(1)/usr/lib/
endef

define Package/liballegro-ogg/install
	$(INSTALL_DIR) $(1)/usr/lib/
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/liblogg* $(1)/usr/lib/
endef

define Package/liballegro-demo/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_DIR) $(1)/usr/share/allegro
	$(CP) $(PKG_BUILD_DIR)/demos/shooter/shooter $(1)/usr/bin/
	$(CP) $(PKG_BUILD_DIR)/demos/shooter/demo.dat $(1)/usr/share/allegro/shooter.dat	
	$(CP) $(PKG_BUILD_DIR)/demos/skater/skater $(1)/usr/bin/
	$(CP) $(PKG_BUILD_DIR)/demos/skater/demo.dat $(1)/usr/share/allegro/skater.dat
endef

define Package/liballegro-setup/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_DIR) $(1)/usr/share/allegro/
	$(CP) $(PKG_BUILD_DIR)/setup/setup $(1)/usr/bin/allegro-setup
	$(CP) $(PKG_BUILD_DIR)/setup/setup.dat $(1)/usr/share/allegro/
endef

define Package/liballegro-examples/install
	$(INSTALL_DIR) $(1)/usr/bin/allegro
	$(CP) $(PKG_BUILD_DIR)/examples/* $(1)/usr/bin/allegro/
	rm $(1)/usr/bin/allegro/{*.c,*.h,*.txt,*.cmake}
	rm -r $(1)/usr/bin/allegro/CMakeFiles
endef

define Package/liballegro-utils/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(CP) $(PKG_INSTALL_DIR)/usr/bin $(1)/usr
endef


$(eval $(call HostBuild))
$(eval $(call BuildPackage,liballegro))
$(eval $(call BuildPackage,liballegro-data))
$(eval $(call BuildPackage,liballegro-png))
$(eval $(call BuildPackage,liballegro-jpeg))
$(eval $(call BuildPackage,liballegro-ogg))
$(eval $(call BuildPackage,liballegro-demo))
$(eval $(call BuildPackage,liballegro-setup))
$(eval $(call BuildPackage,liballegro-examples))
$(eval $(call BuildPackage,liballegro-utils))


# The following comments configure the Emacs editor.  Just ignore them.
# Local Variables:
# compile-command: "cd ~/src/nanonote/allegro-4.4.2 && ~/bin/quilt-export target && make -C ~/h/src/qi/openwrt-xburst package/liballegro/compile -j2 V=99"
# End:
