
ifeq ($(KERNELRELEASE),)
TOPDIR = ../..

include $(TOPDIR)/Preamble.make
else
# We are included by kbuild.

OUR_TOPDIR	:= $(M)/..

include $(OUR_TOPDIR)/Config.make

endif

COMPAT_SOURCES =
COMPAT_HEADERS =
SOURCES =
HEADERS =

EXTRA_CFLAGS += -I$(OUR_TOPDIR)/fs/ocfs2

ifdef OCFS_DEBUG
EXTRA_CFLAGS += -g
EXTRA_CFLAGS += -DDEBUG
endif

EXTRA_CFLAGS += -DCATCH_BH_JBD_RACES -DOCFS2_ORACORE_WORKAROUNDS

EXTRA_CFLAGS += -DOCFS2_CDSL

EXTRA_CFLAGS += -DCONFIG_OCFS2_DEBUG_MASKLOG

EXTRA_CFLAGS += -DCONFIG_OCFS2_FS_STATS

ifdef NO_DELAYED_WORK_STRUCT
EXTRA_CFLAGS += -DNO_DELAYED_WORK_STRUCT
endif

COMPAT_SOURCES += compat_sync_mapping_range.c
ifdef NO_SYNC_MAPPING_RANGE
SOURCES += compat_sync_mapping_range.c
EXTRA_CFLAGS += -DNO_SYNC_MAPPING_RANGE
endif

ifdef NO_FAULT_IN_VMOPS
EXTRA_CFLAGS += -DNO_FAULT_IN_VMOPS
endif

ifdef NO_F_PATH_IN_STRUCT_FILE
EXTRA_CFLAGS += -DNO_F_PATH_IN_STRUCT_FILE
endif

ifdef KMEM_CACHE_CREATE_DTOR
EXTRA_CFLAGS += -DKMEM_CACHE_CREATE_DTOR
endif

ifdef STRUCT_SUBSYSTEM_DEFINED
EXTRA_CFLAGS += -DSTRUCT_SUBSYSTEM_DEFINED
endif

ifdef NO_FALLOCATE
EXTRA_CFLAGS += -DNO_FALLOCATE
endif

ifdef NO_SPLICE_HEADER
EXTRA_CFLAGS += -DNO_SPLICE_HEADER
endif

COMPAT_SOURCES += compat_should_remove_suid.c
ifdef NO_SHOULD_REMOVE_SUID
SOURCES += compat_should_remove_suid.c
EXTRA_CFLAGS += -DNO_SHOULD_REMOVE_SUID
endif

COMPAT_SOURCES += compat_generic_segment_checks.c
ifdef NO_GENERIC_SEGMENT_CHECKS
SOURCES += compat_generic_segment_checks.c
EXTRA_CFLAGS += -DNO_GENERIC_SEGMENT_CHECKS
endif

ifdef SOP_IS_NOT_CONST
EXTRA_CFLAGS += -DSOP_IS_NOT_CONST
endif

ifdef IOP_IS_NOT_CONST
EXTRA_CFLAGS += -DIOP_IS_NOT_CONST
endif

ifdef FOP_IS_NOT_CONST
EXTRA_CFLAGS += -DFOP_IS_NOT_CONST
endif

ifdef AOPS_IS_NOT_CONST
EXTRA_CFLAGS += -DAOPS_IS_NOT_CONST
endif

ifdef NO_VECTORIZED_AIO
CFLAGS_file.o += -DNO_VECTORIZED_AIO
endif

ifdef NO_SPLICE_SUPPORT
EXTRA_CFLAGS += -DNO_SPLICE_SUPPORT
else
COMPAT_SOURCES += compat_splice.c
ifdef NO_SPLICE_FROM_PIPE
SOURCES += compat_splice.c
EXTRA_CFLAGS += -DNO_SPLICE_FROM_PIPE
endif
endif

ifdef B_SIZE_IS_U32
EXTRA_CFLAGS += -DB_SIZE_IS_U32
endif

ifdef NO_EXPORTFS_HEADER
EXTRA_CFLAGS += -DNO_EXPORTFS_HEADER
endif

ifdef NO_LOCKDEP
EXTRA_CFLAGS += -DNO_LOCKDEP
endif

ifdef NO_MANDATORY_LOCK
EXTRA_CFLAGS += -DNO_MANDATORY_LOCK
endif

ifdef WRITEBACK_CONTROL_NO_RANGE_PREFIX
CFLAGS_compat_sync_mapping_range.o += -DWRITEBACK_CONTROL_NO_RANGE_PREFIX
endif

ifdef NO_SYNC_FILE_FLAGS
EXTRA_CFLAGS += -DNO_SYNC_FILE_FLAGS
endif

ifdef NO_BLKCNT_T
EXTRA_CFLAGS += -DNO_BLKCNT_T
endif

ifdef NO_I_PRIVATE
EXTRA_CFLAGS += -DNO_I_PRIVATE
endif

ifdef NO_PAGE_MKWRITE
EXTRA_CFLAGS += -DNO_PAGE_MKWRITE
endif

ifdef NO_VFSMOUNT_IN_GET_SB_BDEV
EXTRA_CFLAGS += -DNO_VFSMOUNT_IN_GET_SB_BDEV
endif

ifdef NO_READ_MAPPING_PAGE
EXTRA_CFLAGS += -DNO_READ_MAPPING_PAGE
endif

ifdef FILLDIR_T_WITH_INO_T
EXTRA_CFLAGS += -DFILLDIR_T_WITH_INO_T
endif

ifdef INVALIDATEPAGE_RETURNS_INT
EXTRA_CFLAGS += -DINVALIDATEPAGE_RETURNS_INT
endif

ifdef DIO_OLD_GET_BLOCKS
EXTRA_CFLAGS += -DDIO_OLD_GET_BLOCKS
endif

ifdef NO_LINUX_UACCESS_H
EXTRA_CFLAGS += -DNO_LINUX_UACCESS_H
endif

ifdef HAS_MS_LOOP_NO_AOPS
EXTRA_CFLAGS += -DHAS_MS_LOOP_NO_AOPS
endif

ifdef HAS_FOPS_SENDFILE
EXTRA_CFLAGS += -DHAS_FOPS_SENDFILE
endif

ifdef NO_CONFIRM_IN_STRUCT_PIPE_BUF_OPERATIONS
EXTRA_CFLAGS += -DNO_CONFIRM_IN_STRUCT_PIPE_BUF_OPERATIONS
endif

ifdef NO_INODE_DOUBLE_LOCK
EXTRA_CFLAGS += -DNO_INODE_DOUBLE_LOCK
endif

ifdef NO_MUTEX_LOCK_NESTED
EXTRA_CFLAGS += -DNO_MUTEX_LOCK_NESTED
endif

ifdef STATFS_TAKES_SB
EXTRA_CFLAGS += -DSTATFS_TAKES_SB
endif

ifdef NO_I_PRIVATE
EXTRA_CFLAGS += -DNO_I_PRIVATE
endif

#
# Since SUBDIRS means something to kbuild, define them safely.  Do not
# include trailing slashes.
#
SAFE_SUBDIRS = cluster dlm

SOURCES +=			\
	alloc.c 		\
	aops.c 			\
	buffer_head_io.c	\
	dcache.c 		\
	dir.c 			\
	dlmglue.c 		\
	export.c		\
	extent_map.c 		\
	file.c 			\
	heartbeat.c 		\
	inode.c 		\
	ioctl.c			\
	journal.c 		\
	localalloc.c 		\
	locks.c			\
	mmap.c 			\
	namei.c 		\
	resize.c		\
	slot_map.c 		\
	suballoc.c 		\
	super.c 		\
	symlink.c 		\
	sysfile.c 		\
	uptodate.c		\
	ver.c

HEADERS += 			\
	ocfs2_fs.h		\
	ocfs1_fs_compat.h	\
	ocfs2_lockid.h		\
	ocfs2.h			\
	buffer_head_io.h	\
	alloc.h			\
	aops.h			\
	dcache.h		\
	dir.h			\
	dlmglue.h		\
	export.h		\
	extent_map.h		\
	file.h			\
	heartbeat.h		\
	inode.h			\
	ioctl.h			\
	journal.h		\
	localalloc.h		\
	locks.h			\
	mmap.h			\
	namei.h			\
	resize.h		\
	slot_map.h		\
	suballoc.h		\
	super.h			\
	symlink.h		\
	sysfile.h		\
	uptodate.h		\
	ocfs2_lockingver.h	\
	ver.h

OBJECTS = $(subst .c,.o,$(SOURCES))
VERSION_FILES = $(SOURCES) $(HEADERS) $(COMPAT_SOURCES) $(COMPAT_HEADERS)
VERSION_SRC = ver.c
VERSION_PREFIX = OCFS2

INSTALL_MOD_DIR := fs/ocfs2

obj-m := ocfs2.o

ocfs2-objs := $(OBJECTS)

ifneq ($(KERNELRELEASE),)
#
# Argh, Versioning.make has ordering requirements, so we put this here
#
STAMP_DIR	:= $(OUR_TOPDIR)/fs/ocfs2
include $(OUR_TOPDIR)/Versioning.make
CFLAGS_$(VERSION_OBJ) += $(VERDEFS)

obj-m += $(addsuffix /,$(SAFE_SUBDIRS))
endif

ifeq ($(KERNELRELEASE),)
#
# Called from a regular "make". Just forward to kbuild.
#

DIST_FILES = $(SOURCES) $(HEADERS) $(COMPAT_SOURCES) $(COMPAT_HEADERS)

ALL_RULES = stamp-md5 build-modules

CLEAN_RULES = clean-modules

INSTALL_RULES = install-modules

# Traverse subdirs via Makebo for "make dist"
ifeq ($(MAKECMDGOALS),dist-all)
SUBDIRS = $(SAFE_SUBDIRS)
endif

build-modules:
	$(MAKE) -C $(TOPDIR)/fs build-modules

install-modules:
	$(MAKE) -C $(TOPDIR)/fs install-modules

clean-modules:
	$(MAKE) -C $(TOPDIR)/fs clean-modules

include $(TOPDIR)/Postamble.make

endif
