include $(GNUSTEP_MAKEFILES)/common.make

ifeq ($(FOUNDATION_LIB), gnu)
  GNUSTEP_INSTALLATION_DIR = $(GNUSTEP_SYSTEM_ROOT)
endif

ifeq ($(FOUNDATION_LIB), apple)
  GNUSTEP_INSTALLATION_DIR = /
endif

LIBRARY_NAME = libCamelBones
PACKAGE_NAME = CamelBones
VERSION = 0.2.2

# Get the files list
include GNUmakefile.files

# Get the Perl info
include GNUmakefile.perl

libCamelBones_HEADER_FILES_DIR = .
libCamelBones_HEADER_FILES_INSTALL_DIR = CamelBones

ADDITIONAL_OBJCFLAGS += -O3 -Wall -Wno-unused -Wno-import

ifeq ($(FOUNDATION_LIB), gnu)
  libCamelBones_RESOURCE_FILES_INSTALL_DIR = Library/Libraries/Resources/CamelBones

  APPKIT_FUNCS_TXT = appkit_funcs.gnu.txt
  FOUNDATION_FUNCS_TXT = foundation_funcs.gnu.txt

  include $(GNUSTEP_MAKEFILES)/library.make
else
  FRAMEWORK_NAME = CamelBones

  ADDITIONAL_LDFLAGS += -compatibility_version 1.0.0 -seg1addr 0x3000000

  APPKIT_FUNCS_TXT = appkit_funcs.txt
  FOUNDATION_FUNCS_TXT = foundation_funcs.txt

  CamelBones_HEADER_FILES = $(libCamelBones_HEADER_FILES)
  CamelBones_OBJC_FILES = $(libCamelBones_OBJC_FILES)
  CamelBones_C_FILES = $(libCamelBones_C_FILES)
  CamelBones_OBJ_FILES = $(libCamelBones_OBJ_FILES)
  CamelBones_RESOURCE_DIRS = $(libCamelBones_RESOURCE_DIRS)
  CamelBones_RESOURCE_FILES = $(libCamelBones_RESOURCE_FILES)
  CamelBones_HEADER_FILES_INSTALL_DIR = $(libCamelBones_HEADER_FILES_INSTALL_DIR)
  CamelBones_LIB_DIRS = $(libCamelBones_LIB_DIRS)
  CamelBones_LIBRARIES_DEPEND_UPON = $(libCamelBones_LIBRARIES_DEPEND_UPON)
  CamelBones_INCLUDE_DIRS = $(libCamelBones_INCLUDE_DIRS)

  include $(GNUSTEP_MAKEFILES)/framework.make
endif

# Dependencies and build scripts for XS files
CamelBones_xs.m: CamelBones.xs
	@echo " Creating CamelBones_xs.m ..."
	$(ECHO_NOTHING)\
	$(PERL) $(PERL_PRIVLIB)/ExtUtils/xsubpp -typemap $(PERL_PRIVLIB)/ExtUtils/typemap CamelBones.xs > CamelBones_xs.m\
	$(END_ECHO)

AppKit_Functions.xs: $(APPKIT_FUNCS_TXT) process_description.pl
	@echo " Creating AppKit_Functions.xs ..."
	$(ECHO_NOTHING)\
	mkdir -p CamelBones/; \
	./process_description.pl CamelBones::AppKit AppKit_Functions.xs CamelBones/AppKit.pm $(APPKIT_FUNCS_TXT) \
	$(END_ECHO)

AppKit_Functions_xs.m: AppKit_Functions.xs
	@echo " Creating AppKit_Functions_xs.m ..."
	$(ECHO_NOTHING)\
	$(PERL) $(PERL_PRIVLIB)/ExtUtils/xsubpp -typemap $(PERL_PRIVLIB)/ExtUtils/typemap AppKit_Functions.xs > AppKit_Functions_xs.m\
	$(END_ECHO)

Foundation_Functions.xs: $(FOUNDATION_FUNCS_TXT) process_description.pl
	@echo " Creating Foundation_Functions.xs ..."
	$(ECHO_NOTHING)\
	mkdir -p CamelBones/; \
	./process_description.pl CamelBones::Foundation Foundation_Functions.xs CamelBones/Foundation.pm $(FOUNDATION_FUNCS_TXT) \
	$(END_ECHO)

Foundation_Functions_xs.m: Foundation_Functions.xs
	@echo " Creating Foundation_Functions_xs.m ..."
	$(ECHO_NOTHING)\
	$(PERL) $(PERL_PRIVLIB)/ExtUtils/xsubpp -typemap $(PERL_PRIVLIB)/ExtUtils/typemap Foundation_Functions.xs > Foundation_Functions_xs.m\
	$(END_ECHO)
	
ifneq ($(FOUNDATION_LIB), gnu)

libffi/lib/libffi.a: libffi-2.00/configure
	@echo " Building libffi ..."
	$(ECHO_NOTHING)\
	cd libffi-2.00 ;\
	./configure --prefix=`pwd`/../libffi --disable-shared ;\
	make; make install\
	$(END_ECHO)

endif
	
clean::
	rm -f *_xs.m
	rm -f AppKit_Functions.xs
	rm -f Foundation_Functions.xs
	rm -f CamelBones/AppKit.pm
	rm -f CamelBones/Foundation.pm
	rm -rf libffi
	-cd libffi-2.00; make distclean

ifeq ($(FOUNDATION_LIB), gnu)
install::
	@echo "Installing resources to $(GNUSTEP_SYSTEM_ROOT)/$(libCamelBones_RESOURCE_FILES_INSTALL_DIR)..."
	$(ECHO_NOTHING)\
	mkdir -p $(GNUSTEP_SYSTEM_ROOT)/$(libCamelBones_RESOURCE_FILES_INSTALL_DIR)/ ;\
	cp -r $(libCamelBones_RESOURCE_FILES) $(GNUSTEP_SYSTEM_ROOT)/$(libCamelBones_RESOURCE_FILES_INSTALL_DIR)/ ;\
	$(END_ECHO)
else
install::
	@echo "Renaming CamelBones.framework to CamelBones-$(CB_TARGET_NAME).framework..."
	$(ECHO_NOTHING)\
	rm -f /Library/Frameworks/CamelBones-$(CB_TARGET_NAME).framework ;\
	mv /Library/Frameworks/CamelBones.framework /Library/Frameworks/CamelBones-$(CB_TARGET_NAME).framework ;\
	$(END_ECHO)

	@echo "Creating CamelBones.framework symlink..."
	$(ECHO_NOTHING)\
	ln -s /Library/Frameworks/CamelBones-$(CB_TARGET_NAME).framework /Library/Frameworks/CamelBones.framework ;\
	$(END_ECHO)	
endif
