PACKAGE_NAME = CoreObject

include $(GNUSTEP_MAKEFILES)/common.make

FRAMEWORK_NAME = CoreObject

# ABI version (the API version is in CFBundleShortVersionString of FrameworkSource/Info.plist)
VERSION = 0.5

LIBRARIES_DEPEND_UPON = $(shell pkg-config --libs sqlite3) -lEtoileFoundation $(GUI_LIBS) $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS)

# For test builds, pass one more libdispatch include directory located in GNUstep Local domain
CoreObject_INCLUDE_DIRS = -IStore/fmdb/src -I$(GNUSTEP_LOCAL_LIBRARIES)/Headers/dispatch
CoreObject_CPPFLAGS += -DGNUSTEP_MISSING_API_COMPATIBILITY -DOS_OBJECT_USE_OBJC=0
CoreObject_LDFLAGS += -lsqlite3 -ldispatch
# TODO: Check that -fobjc-arc is all we need to pass, then remove -fobjc-nonfragile-abi -fblocks
CoreObject_OBJCFLAGS += -fblocks -fobjc-arc -Wall -Wno-arc-performSelector-leaks
LD=${CXX}

ifeq ($(test), yes)
  BUNDLE_NAME = $(FRAMEWORK_NAME)
  CoreObject_INCLUDE_DIRS += -I$(PROJECT_DIR)/Tests -I$(PROJECT_DIR)/Tests/TestModelObjects -I$(PROJECT_DIR)/Tests/Extras/Model 
  CoreObject_OBJCFLAGS += -Wno-unused-variable -Wno-unused-value
  CoreObject_LDFLAGS += -lEtoileFoundation $(GUI_LIBS) $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS)
  CoreObject_PRINCIPAL_CLASS = EditingContextTestCase
else
  CoreObject_OBJCFLAGS += -Wextra -Wno-sign-compare -Wno-unused-parameter
endif

# For running the test suite without a SSD (see also prepare-coreobject-ramdisk.sh that must be run before)
ifeq ($(ramdisk), yes)
  CoreObject_CPPFLAGS += -DIN_MEMORY_STORE
endif

OTHER_HEADER_DIRS = . Core Debugging Diff Extras/Diff Extras/Model Extras/ValueTransformers Model Store Undo Synchronization Synchronization/Messages Utilities StorageDataModel SchemaMigration

CoreObject_HEADER_FILES_DIR = $(COLLECTED_HEADER_DIR)
CoreObject_HEADER_FILES = $(foreach dir, ${OTHER_HEADER_DIRS}, $(notdir $(wildcard ${dir}/*.h)))

CoreObject_OBJC_FILES += $(wildcard Core/*.m)
CoreObject_OBJC_FILES += $(wildcard Diff/*.m)
CoreObject_OBJCC_FILES += $(wildcard Diff/*.mm)
CoreObject_CC_FILES += $(wildcard Diff/*.cc)
CoreObject_OBJC_FILES += $(wildcard Debugging/*.m)
CoreObject_OBJC_FILES += $(wildcard Extras/Diff/*.m)
CoreObject_OBJC_FILES += $(wildcard Extras/Model/*.m)
CoreObject_OBJC_FILES += $(wildcard Extras/ValueTransformers/*.m)
CoreObject_OBJC_FILES += $(wildcard Localization/*.m)
CoreObject_OBJC_FILES += $(wildcard Model/*.m)
CoreObject_OBJC_FILES += $(wildcard SchemaMigration/*.m)
CoreObject_OBJC_FILES += $(wildcard Store/*.m)
CoreObject_C_FILES += $(wildcard Store/*.c)
CoreObject_OBJC_FILES += $(wildcard Undo/*.m)
CoreObject_OBJC_FILES += $(wildcard Utilities/*.m)
CoreObject_OBJC_FILES += $(wildcard StorageDataModel/*.m)
CoreObject_OBJC_FILES += $(wildcard Synchronization/*.m)
CoreObject_OBJC_FILES += $(wildcard Synchronization/Messages/*.m)
# Don't compile fmdb/src/fmdb.m
CoreObject_OBJC_FILES += $(wildcard Store/fmdb/src/FM*.m)

ifeq ($(test), yes)
CoreObject_OBJC_FILES += $(wildcard Tests/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/Attribute/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/Core/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/Diff/*.m)
#CoreObject_OBJC_FILES += $(wildcard Tests/Extras/Model/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/Model/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/Relationship/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/SchemaMigration/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/StorageDataModel/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/Store/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/Undo/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/Serialization/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/TestModelObjects/*.m)
CoreObject_OBJC_FILES += $(wildcard Tests/Utilities/*.m)
endif

CoreObject_LANGUAGES = English French
CoreObject_RESOURCE_FILES_DIR = Localization
CoreObject_LOCALIZED_RESOURCE_FILES = Commits

CoreObjectDoc_MENU_TEMPLATE_FILE = Documentation/Templates/menu.html

CoreObjectDoc_HEADER_DIRS =
CoreObjectDoc_SOURCE_DIRS =
CoreObjectDoc_DOC_FILES = \
	Core/COBranch.h \
	Core/COEditingContext.h \
	Core/COEditingContext+Debugging.h \
	Core/COObject.h \
	Core/COObjectGraphContext.h \
	Core/COObjectGraphContext+Debugging.h \
	Core/COPersistentRoot.h \
	Core/COQuery.h \
	Core/COSerialization.h \
	Core/CORevision.h \
	Model/COBookmark.h \
	Model/COContainer.h \
	Model/COCollection.h \
	Model/COGroup.h \
	Model/COLibrary.h \
	Model/COTag.h \
	SchemaMigration/COModelElementMove.h \
	SchemaMigration/COSchemaMigration.h \
	SchemaMigration/COSchemaMigrationDriver.h \
	StorageDataModel/COAttachmentID.h \
	StorageDataModel/COItemGraph.h \
	StorageDataModel/COItem.h \
	StorageDataModel/COItem+JSON.h \
	StorageDataModel/COPath.h \
	StorageDataModel/COType.h \
	Undo/COCommand.h \
	Undo/COCommandGroup.h \
	Undo/COTrack.h \
	Undo/COUndoTrack.h \
	Utilities/COCommitDescriptor.h \
	Utilities/CODateSerialization.h \
	Utilities/COError.h  

include $(GNUSTEP_MAKEFILES)/aggregate.make
-include ../../etoile.make
-include etoile.make
-include ../../documentation.make
ifeq ($(test), yes)
  include $(GNUSTEP_MAKEFILES)/bundle.make
else	
  include $(GNUSTEP_MAKEFILES)/framework.make
endif

after-clean::
	rm -rf CoreObject.bundle