# Makefile for 3pp/xfree86-4.2.0

# For details on cross-compiling xfree86, check out the document at
# http://keithp.com/~keithp/download/xconf/cc-imake.pdf


### Requires these modules

REQUIRES += base/c
REQUIRES += link/3pp/zlib
REQUIRES += link/3pp/directfb


### Component specification

COMPONENT_IS_3PP  = true
COMPONENT_TARGETS = $(TARGET_NAME_VIP)
NEEDS_ABS_PATHS   = true


### Tar archive

tar_archive       = $(CURDIR)/X420src-1.tgz
src_dir           = $(TARGET)/xc
i586_patch        = geode remove_sm select_programs fontpath pointer00 \
                    xkb nobuiltinfonts nobgtile nopalette dontterminate \
                    xkbcomp ddxLoad nocapslock
mips_patch        = remove_sm select_programs fontpath pointer00 xkb \
                    nobuiltinfonts Imake.tmpl nobgtile \
                    dontterminate nomtrr xkbcomp ddxLoad dbe
sh4_patch         = remove_sm select_programs fontpath pointer00 xkb \
                    nobuiltinfonts Imake.tmpl nobgtile \
                    dontterminate xkbcomp ddxLoad dbe
mips1200_patch    = remove_sm select_programs fontpath pointer00 xkb \
                    nobuiltinfonts Imake.tmpl nobgtile \
                    dontterminate xkbcomp ddxLoad dbe
# TODO: use the nomtrr patch?


local_dist_dir    = $(CURDIR)/$(TARGET)/dist

xdfb_dir 	= $(CURDIR)/xdirectfb
xdfb_tar	= $(xdfb_dir)/XDirectFB-1.0-rc5.tar.gz
xdfb_src_dir	= $(CURDIR)/$(TARGET)/XDirectFB-1.0-rc5


### Targets

bin_targets += X
bin_targets += XDirectFB
bin_targets += xinit
bin_targets += xmodmap
bin_targets += xkbcomp
BIN_TARGETS = $(patsubst %,$(local_dist_dir)/bin/%,$(bin_targets))

lib_targets += libX11.so.6
lib_targets += libX11.so.6.2
lib_targets += libXIE.so
lib_targets += libXIE.so.6
lib_targets += libXIE.so.6.0
lib_targets += libXext.so
lib_targets += libXext.so.6
lib_targets += libXext.so.6.4
lib_targets += libXi.so
lib_targets += libXi.so.6
lib_targets += libXi.so.6.0
lib_targets += libXmu.so
lib_targets += libXmu.so.6
lib_targets += libXmu.so.6.2
lib_targets += libXmuu.so
lib_targets += libXmuu.so.1
lib_targets += libXmuu.so.1.0
lib_targets += libXpm.so
lib_targets += libXpm.so.4
lib_targets += libXpm.so.4.11
lib_targets += libXt.so
lib_targets += libXt.so.6
lib_targets += libXt.so.6.0
lib_targets += libXft.so
lib_targets += libXft.so.1
lib_targets += libXft.so.1.1
lib_targets += libXrender.so
lib_targets += libXrender.so.1
lib_targets += libXrender.so.1.1
lib_targets += libfreetype.so
lib_targets += libfreetype.so.6
lib_targets += libfreetype.so.6.2
LIB_TARGETS = $(patsubst %,$(local_dist_dir)/lib/%,$(lib_targets))

OTHER_TARGETS += $(TARGET_INSTALL_DIR)/lib/libX11.so
OTHER_TARGETS += $(TARGET_INSTALL_DIR)/include/X11
OTHER_TARGETS += $(TARGET_INSTALL_DIR)/include/DPS
OTHER_TARGETS += $(TARGET_INSTALL_DIR)/include/freetype2
OTHER_TARGETS += $(TARGET_INSTALL_DIR)/bin/freetype-config
OTHER_TARGETS += $(TARGET_INSTALL_DIR)/etc/X11/xkb
OTHER_TARGETS += $(TARGET_INSTALL_DIR)/lib/X11/locale

INTERFACE_LIBS += X11
INTERFACE_LIBS += Xext

x_environment  = IMAKECPP=cpp
x_environment += PATH=$(PATH)
x_environment += TOOLCHAIN_DIR=$(TOOLCHAIN_DIR)
x_environment += VIP_ARCH=$(TARGET_ARCH)
x_environment += CROSS_PREFIX="$(CROSS_PREFIX)"
x_environment += TARGET_DIST_DIR=$(TARGET_DIST_DIR)
x_environment += TARGET_3PP_DIST_DIR=$(TARGET_3PP_DIST_DIR)
x_environment += BSG_SRC=$(BSG_SRC)

.PHONY: install_x11_headers install_dps_headers install_freetype2_headers

DOC_TARGETS = licenses.html
DOC_OMIT_SOURCE_DIR = yes
DOC_PATH = ../../doc/doc


### Extra cleanup

CLEANUP_FILES += $(src_dir) .done $(local_dist_dir) $(xdfb_src_dir)


### Common.mk

include ../../../makesystem/common.mk

 
### Target specific configuration

ifeq ($(TARGET),$(TARGET_NAME_VIP500))
patch = $(i586_patch)
endif

ifeq ($(TARGET),$(TARGET_NAME_VIP1500))
patch = $(mips_patch)
directfb = yes
endif

ifeq ($(TARGET),$(TARGET_NAME_VIP1200))
patch = $(mips1200_patch)
directfb = yes
endif

ifeq ($(TARGET),$(TARGET_NAME_VIP1900))
patch = $(sh4_patch)
directfb = yes
endif



### Dependencies

$(src_dir): $(tar_archive)
	@echo Expanding $^
	@cd $(TARGET) && tar xfz $^
	@cd $(src_dir) && \
	  for p in $(patch) ; do \
	    echo "Applying patch $$p" ; \
	    patch -p1 < $(CURDIR)/$$p.patch ; \
	  done
ifneq ($(directfb),)
	@echo "Adding XDirectFB driver"
	@cd $(TARGET) && tar xfz $(xdfb_tar)
	@cd $(xdfb_src_dir) && \
	  for p in $(wildcard $(xdfb_dir)/*.patch) ; do \
            patch -p1 < $$p ; \
          done
	@cd $(src_dir) && patch -p0 < $(xdfb_src_dir)/xc-directfb.diff
	@cp -a $(xdfb_src_dir)/programs/Xserver/hw/directfb \
	       $(src_dir)/programs/Xserver/hw/
	@cp directfb.cf $(src_dir)/config/cf
endif
ifeq ($(TARGET),$(TARGET_NAME_VIP500))
	@echo "Adding Geode driver"
	@cp -a geode $(src_dir)/programs/Xserver/hw/kdrive
	@cp -f host.def.geode $(src_dir)/config/cf/host.def
	@cp -f tornado.cf.i586 $(src_dir)/config/cf/tornado.cf
endif
ifeq ($(TARGET),$(TARGET_NAME_VIP1500))
	@cp -f host.def.mips_dfb $(src_dir)/config/cf/host.def
	@cp -f tornado.cf.mips $(src_dir)/config/cf/tornado.cf
endif

ifeq ($(TARGET),$(TARGET_NAME_VIP1200))
	@cp -f host.def.mips1200_dfb $(src_dir)/config/cf/host.def
	@cp -f tornado.cf.mips $(src_dir)/config/cf/tornado.cf
endif

ifeq ($(TARGET),$(TARGET_NAME_VIP1900))
	@cp -f host.def.sh4_dfb $(src_dir)/config/cf/host.def
	@cp -f tornado.cf.sh4 $(src_dir)/config/cf/tornado.cf
endif
	@cp -f cross.def $(src_dir)/config/cf
	@touch $@

server:
	$(x_environment) $(MAKE) -C $(src_dir)/programs/Xserver

libs:
	$(x_environment) $(MAKE) -C $(src_dir)/lib/X11

$(TARGET)/.done: $(src_dir)
	$(x_environment) $(MAKE) -C $(src_dir) \
	  FLAGS='$(MFLAGS) -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)" CC="gcc"' \
	  World
	touch $@

$(local_dist_dir): $(TARGET)/.done
	@rm -rf $(local_dist_dir)
	$(x_environment) $(MAKE) -C $(src_dir) install \
	  DESTDIR=$(local_dist_dir)
ifeq ($(TARGET),$(TARGET_NAME_VIP500))
	@mv $(local_dist_dir)/bin/Xgeode $(local_dist_dir)/bin/X
endif
ifeq ($(TARGET),$(TARGET_NAME_VIP1500))
	@ln -s $(local_dist_dir)/usr/X11R6/bin $(local_dist_dir)/bin
	@ln -s $(local_dist_dir)/usr/X11R6/lib $(local_dist_dir)/lib
	@ln -s $(local_dist_dir)/usr/X11R6/lib $(local_dist_dir)/include
ifneq ($(directfb),)
	@mv $(local_dist_dir)/bin/XDirectFB $(local_dist_dir)/bin/X
else
	@mv $(local_dist_dir)/bin/Xxilleon $(local_dist_dir)/bin/X
endif
endif

ifeq ($(TARGET),$(TARGET_NAME_VIP1200))
	@ln -s $(local_dist_dir)/usr/X11R6/bin $(local_dist_dir)/bin
	@ln -s $(local_dist_dir)/usr/X11R6/lib $(local_dist_dir)/lib
	@ln -s $(local_dist_dir)/usr/X11R6/lib $(local_dist_dir)/include
	@mv $(local_dist_dir)/bin/XDirectFB $(local_dist_dir)/bin/X
endif

ifeq ($(TARGET),$(TARGET_NAME_VIP1900))
	@ln -s $(local_dist_dir)/usr/X11R6/bin $(local_dist_dir)/bin
	@ln -s $(local_dist_dir)/usr/X11R6/lib $(local_dist_dir)/lib
	@ln -s $(local_dist_dir)/usr/X11R6/lib $(local_dist_dir)/include
	@mv $(local_dist_dir)/bin/XDirectFB $(local_dist_dir)/bin/X
endif

$(LIB_TARGETS) $(BIN_TARGETS): $(local_dist_dir)
	@touch $(LIB_TARGETS) $(BIN_TARGETS)

$(TARGET_INSTALL_DIR)/lib/libX11.so.6.2: $(local_dist_dir)

$(TARGET_INSTALL_DIR)/lib/libX11.so: $(TARGET_INSTALL_DIR)/lib/libX11.so.6.2
	@echo "Adding missing libX11.so link required when configuring gtk+"
	@cd $(TARGET_INSTALL_DIR)/lib && ln -sf libX11.so.6.2 libX11.so
	@touch $(TARGET_INSTALL_DIR)/lib/libX11.so

$(TARGET_INSTALL_DIR)/include/X11: $(local_dist_dir)
	@echo "Installing X11 headers"
	@rm -rf $(TARGET_INSTALL_DIR)/include/X11
	@mkdir -p $(TARGET_INSTALL_DIR)/include
	@cp -a $(local_dist_dir)/include/X11 $(TARGET_INSTALL_DIR)/include
	@touch $@

$(TARGET_INSTALL_DIR)/include/DPS: $(local_dist_dir)
	@echo "Installing DPS (X11) headers"
	@rm -rf $(TARGET_INSTALL_DIR)/include/DPS
	@mkdir -p $(TARGET_INSTALL_DIR)/include
	@cp -a $(local_dist_dir)/include/DPS $(TARGET_INSTALL_DIR)/include
	@touch $@

$(TARGET_INSTALL_DIR)/include/freetype2: $(local_dist_dir)
	@echo "Installing freetype2 (X11) headers"
	@rm -rf $(TARGET_INSTALL_DIR)/include/freetype2
	@mkdir -p $(TARGET_INSTALL_DIR)/include
	@cp -a $(local_dist_dir)/include/freetype2 $(TARGET_INSTALL_DIR)/include
	@touch $@

$(TARGET_INSTALL_DIR)/bin/freetype-config: $(local_dist_dir)
	@echo "Installing freetype-config"
	@rm -rf $(TARGET_INSTALL_DIR)/bin/freetype-config
	@mkdir -p $(TARGET_INSTALL_DIR)/bin
	@cp -a $(local_dist_dir)/bin/freetype-config $(TARGET_INSTALL_DIR)/bin
	@touch $@

$(TARGET_INSTALL_DIR)/etc/X11/xkb: $(local_dist_dir)
	@echo "Installing XKB files"
	@rm -rf $(TARGET_INSTALL_DIR)/etc/X11/xkb
	@mkdir -p $(TARGET_INSTALL_DIR)/etc/X11/xkb
	@cp -a $(local_dist_dir)/etc/X11/xkb $(TARGET_INSTALL_DIR)/etc/X11
	@touch $@

$(TARGET_INSTALL_DIR)/lib/X11/locale: $(local_dist_dir)
	@echo "Installing locale files"
	@rm -rf $@
	@mkdir -p $@/common
	@cp -a $(local_dist_dir)/lib/X11/locale/C $@
	@cp -a $(local_dist_dir)/lib/X11/locale/common/ximcp.so.2 $@/common
	@cp -a $(local_dist_dir)/lib/X11/locale/common/xlcDef.so.2 $@/common
	@cp -a $(local_dist_dir)/lib/X11/locale/common/xomGeneric.so.2 $@/common
	@cp -a $(CURDIR)/compose.dir $@
	@cp -a $(CURDIR)/locale.dir $@
	@cp -a $(CURDIR)/Compose $@/C
	@touch $@
