#*====================================================================*
#-  Copyright (C) 2001 Leptonica.  All rights reserved.
#-  This software is distributed in the hope that it will be
#-  useful, but with NO WARRANTY OF ANY KIND.
#-  No author or distributor accepts responsibility to anyone for the
#-  consequences of using this software, or for whether it serves any
#-  particular purpose or works at all, unless he or she says so in
#-  writing.  Everyone is granted permission to copy, modify and
#-  redistribute this source code, for commercial or non-commercial
#-  purposes, with the following restrictions: (1) the origin of this
#-  source code must not be misrepresented; (2) modified versions must
#-  be plainly marked as such; and (3) this notice may not be removed
#-  or altered from any source or modified source distribution.
#*====================================================================*/


#   makefile  (for linux)
#
#   Hand-built -- editable -- simple -- makefile
#
#   For a nodebug version:             make
#   For a debug version:               make DEBUG=yes debug
#   For a shared library version:      make SHARED=yes shared
#   For all versions:                  make all
#   With nonstandard header directories
#                    make EXTRAINCLUDES="-I<nonstandard-incl-dir>"
#
#   To remove object files in src: make clean
#   To remove object files and executables in prog: make clean
#
#   Customization for endianness of machine hardware:
#   When using the gnu compiler, endianness is automatically
#   determined and set properly.  Otherwise, set the $CPPFLAGS variable:
#       On little-endian machines (e.g., i386, x86-64):
#          CPPFLAGS = $(INCLUDES) -DL_LITTLE_ENDIAN
#       On big-endian machines (e.g., Mac Power PC, Sun Sparc):
#          CPPFLAGS = $(INCLUDES) -DL_BIG_ENDIAN
#
#   Customization for I/O with external libraries (jpeg, png, tiff, gif):
#   Set flags in environ.h.  The default is to have libjpeg, libpng,
#   libtiff and libz, but not libgif.
#
#   Customization for non-POSIX-compliant GNU functions
#   fmemopen() and open_memstream().
#   The default is not to use, because they only work on linux.
#   To use these, #define HAVE_FMEMOPEN to 1 in environ.h.
#
#   Customization for cygwin:
#   (1) Use the appropriate $CC
#   (2) For the leptprotos target, the executable that has been
#       built is xtractprotos.exe.  (add the ".exe")
#
#   Customization for Microsoft compilers
#   (1) None required for recent versions (e.g., VC++9, VC++ Express).
#       Use the project files supplied:
#           leptonlib.sln
#           leptonlib.vcproj
#   (2) You can also substitute arrayaccess.h.vc for arrayaccess.h, to
#       use the inline macros rather than function calls which are slower.
#
#   To generate function prototypes, you need a program called
#       xtractprotos.  Build it with this command:
#          make xtractprotos
#       Then use it with 'make allprotos'


###  Stuff used by Makefile
RM =		rm -f
TEST =		test
MKDIRHIER =	mkdir -p
LIBRARIAN =	ar cq
RANLIB =	ranlib


#   Libraries are built into a binary tree.  By default, the root
#   is in the parent directory.
ROOT_DIR =	..

BASE_OBJ =	$(ROOT_DIR)/obj
OBJ_NODEBUG =	$(ROOT_DIR)/obj/nodebug
OBJ_DEBUG =	$(ROOT_DIR)/obj/debug
OBJ_SHARED =	$(ROOT_DIR)/obj/shared

BASE_LIB =	$(ROOT_DIR)/lib
LIB_NODEBUG =	$(ROOT_DIR)/lib/nodebug
LIB_DEBUG =	$(ROOT_DIR)/lib/debug
LIB_SHARED =	$(ROOT_DIR)/lib/shared


#   Include files
INCLUDES =	-I. $(EXTRAINCLUDES)
PROTOTYPE_DIR =	.

#   Which flags to use?
#     use -Werror to verify there are no serious warnings
#     use g++ to apply stricter rules.  Libraries made with g++ may not
#        link to programs compiled with gcc (depends on the glibc version).
#     use -Wunused to identify unused varables
#     use -DNO_CONSOLE_IO to remove all L_INFO, L_WARNING, L_ERROR and
#        ERROR_* logging, and to remove all DEBUG information dependent
#        on whether or not NO_CONSOLE_IO has been defined.
#     use -D_CYGWIN_ENVIRON (and without -fPIC) for cygwin
CC =		gcc -ansi -Werror -D_BSD_SOURCE -DANSI -fPIC
#CC =		gcc -ansi -Werror -D_CYGWIN_ENVIRON -DANSI
#CC =		gcc -ansi -Werror -DNO_CONSOLE_IO -D_BSD_SOURCE -DANSI -fPIC
#CC =		g++ -Werror -D_BSD_SOURCE -fPIC
#CC =		g++ -Wunused -D_BSD_SOURCE -fPIC
#CC =		gcc -ansi -D_BSD_SOURCE -DANSI

#   Test for processor endianness (valid with gnu make only)
ENDIANNESS := $(shell $(CC) -o endiantest endiantest.c; ./endiantest; rm -f endiantest)

# Conditional compilation (depending on processor endianness)
CPPFLAGS =      $(INCLUDES) -D$(ENDIANNESS)
#CPPFLAGS =	$(INCLUDES) -DL_LITTLE_ENDIAN
#CPPFLAGS =	$(INCLUDES) -DL_BIG_ENDIAN

#   Shared library linker options
SONAME_OPTION = -Wl,-h,

ifdef  SHARED
    OPTIMIZE =		-O2 -fPIC
else
    ifdef  DEBUG
	OPTIMIZE =	-g
    else
	OPTIMIZE =	-O2
    endif
endif


OPTIONS =
CFLAGS =		$(OPTIMIZE) $(OPTIONS)
LIBRARIAN_SHARED =	gcc -shared

#   Libraries differing only in their minor revision numbers
#   are required to have the same interface.  By using
#   "-h" in the ld, the "soname" is <libname>.X, where X is
#   the major revision number.
#   Links are created among the files <libname>.X.Y,
#   <libname>.X, and <libname>, where Y is the minor revision number.
MAJOR_REV = 1
MINOR_REV = 62

#########################################################

# Libraries

LEPTLIB =		liblept.a
LEPTLIB_SHARED =	liblept.so

#########################################################

LEPTLIB_C =	adaptmap.c affine.c affinecompose.c \
		arithlow.c arrayaccess.c \
		bardecode.c baseline.c bbuffer.c \
		bilinear.c binarize.c \
		binexpand.c binexpandlow.c \
		binreduce.c binreducelow.c \
		blend.c bmf.c bmpio.c bmpiostub.c \
		boxbasic.c boxfunc1.c boxfunc2.c boxfunc3.c \
		ccbord.c ccthin.c classapp.c \
		colorcontent.c colormap.c colormorph.c \
		colorquant1.c colorquant2.c colorseg.c \
		compare.c conncomp.c \
		convolve.c convolvelow.c correlscore.c \
		dwacomb.2.c dwacomblow.2.c \
		edge.c enhance.c \
		fhmtauto.c fhmtgen.1.c fhmtgenlow.1.c \
		flipdetect.c fliphmtgen.c \
		fmorphauto.c fmorphgen.1.c fmorphgenlow.1.c \
		fpix1.c fpix2.c \
		gifio.c gifiostub.c gplot.c graphics.c \
		graymorph.c graymorphlow.c \
		grayquant.c grayquantlow.c heap.c \
		jbclass.c jpegio.c jpegiostub.c \
		kernel.c list.c maze.c \
		morph.c morphapp.c morphdwa.c morphseq.c \
		numabasic.c numafunc1.c numafunc2.c \
		pageseg.c paintcmap.c \
		parseprotos.c partition.c \
		pix1.c pix2.c pix3.c pix4.c \
		pixabasic.c pixacc.c \
		pixafunc1.c pixafunc2.c \
		pixalloc.c pixarith.c \
		pixconv.c pixtiling.c \
		pngio.c pngiostub.c pnmio.c pnmiostub.c \
		projective.c psio.c psiostub.c \
		ptra.c pts.c queue.c rank.c \
		readbarcode.c readfile.c \
		rop.c ropiplow.c roplow.c \
		rotate.c rotateam.c rotateamlow.c \
		rotateorth.c rotateorthlow.c rotateshear.c \
		runlength.c sarray.c \
		scale.c scalelow.c \
		seedfill.c seedfilllow.c \
		sel1.c sel2.c selgen.c \
		shear.c skew.c stack.c \
		textops.c tiffio.c tiffiostub.c \
		utils.c viewfiles.c \
		warper.c watershed.c writefile.c \
		zlibmem.c zlibmemstub.c

LEPTLIB_H =	allheaders.h alltypes.h \
		array.h arrayaccess.h bbuffer.h \
		bmf.h bmp.h ccbord.h \
		environ.h gplot.h \
		heap.h imageio.h \
		jbclass.h jpeglib.h \
		leptprotos.h list.h \
		morph.h pix.h ptra.h queue.h \
		readbarcode.h stack.h \
		watershed.h

##################################################################

#  Main targets
 
nodebug: dirs $(LEPTLIB:%=$(LIB_NODEBUG)/%)

all:
	make -f makefile TARGET=$(TARGET) nodebug
	make -f makefile TARGET=$(TARGET) DEBUG=true debug
	make -f makefile TARGET=$(TARGET) SHARED=true shared

DEBUG_LIBS = $(LEPTLIB:%=$(LIB_DEBUG)/%)
SHARED_LIBS = $(LEPTLIB_SHARED:%=$(LIB_SHARED)/%)
debug:	dirs $(DEBUG_LIBS)
shared:	dirs $(SHARED_LIBS)

##################################################################

#   Proto target
#
#  Note: To make the prototype file leptprotos.h requires the existence
#  of the xtractprotos executable.  However, we don't let the allprotos
#  target depend explicitly on xtractprotos because of a dependency loop
#  back on leptprotos.h, which causes an extra library compilation
#  when you 'make allprotos'.  Before making allprotos the first
#  time, 'make xtractprotos'  (Also, see the comments near the top
#  of this Makefile.)
#
#  Note for cygwin: change the leptprotos target to:
#     - test for xtractprotos.exe 
#     - run ./xtractprotos.exe ...

allprotos:	leptprotos

leptprotos:	$(LEPTLIB_C)
		@$(TEST) -f xtractprotos || echo "First run 'make xtractprotos'"
		./xtractprotos -prestring=LEPT_DLL $(LEPTLIB_C) > tempprotos.h
		mv tempprotos.h $(PROTOTYPE_DIR)/$@.h

##################################################################

#  xtractprotos
#
xtractprotos:	dirs leptlib xtractprotos.o
	$(CC) -o xtractprotos xtractprotos.o $(LIB_NODEBUG)/liblept.a

xtractprotos.o:	xtractprotos.c

##################################################################

#   Rule to make optimized library

$(LIB_NODEBUG)/%.a:
		$(RM) $@
		$(LIBRARIAN) $@ $<
		$(RANLIB) $@

#   Rule to make debuggable library

$(LIB_DEBUG)/%.a:
		$(RM) $@
		$(LIBRARIAN) $@ $<
		$(RANLIB) $@

#   Rule to make shared library

$(LIB_SHARED)/%.so:
		$(RM) $@
		$(LIBRARIAN_SHARED) $(SONAME_OPTION)$(notdir $@).$(MAJOR_REV) -o $@ $<
	mv $@ $@.$(MAJOR_REV).$(MINOR_REV)
	cd $(LIB_SHARED); rm $(notdir $@).$(MAJOR_REV); \
	  ln -s $(notdir $@).$(MAJOR_REV).$(MINOR_REV) $(notdir $@).$(MAJOR_REV)
	cd $(LIB_SHARED); rm $(notdir $@); \
	  ln -s $(notdir $@).$(MAJOR_REV) $(notdir $@)

##################################################################

#   No-debug library dependencies and rules

leptlib:	$(LIB_NODEBUG)/$(LEPTLIB)
$(LIB_NODEBUG)/$(LEPTLIB):	$(LEPTLIB_C:%.c=$(OBJ_NODEBUG)/%.o)
		$(RM) $@
		$(LIBRARIAN) $@ $(LEPTLIB_C:%.c=$(OBJ_NODEBUG)/%.o)
		$(RANLIB) $@

#   Debug library dependencies and rules

leptlibd:	$(LIB_DEBUG)/$(LEPTLIB)
$(LIB_DEBUG)/$(LEPTLIB):	$(LEPTLIB_C:%.c=$(OBJ_DEBUG)/%.o)
		$(RM) $@
		$(LIBRARIAN) $@ $(LEPTLIB_C:%.c=$(OBJ_DEBUG)/%.o)
		$(RANLIB) $@

#   Shared library dependencies, rules and links

leptlibs:	$(LIB_SHARED)/$(LEPTLIB_SHARED)
$(LIB_SHARED)/$(LEPTLIB_SHARED):	$(LEPTLIB_C:%.c=$(OBJ_SHARED)/%.o)
		$(RM) $@
		$(LIBRARIAN_SHARED) $(SONAME_OPTION)$(notdir $@).$(MAJOR_REV) -o $@ $(LEPTLIB_C:%.c=$(OBJ_SHARED)/%.o)
	mv $@ $@.$(MAJOR_REV).$(MINOR_REV)
	cd $(LIB_SHARED); rm $(notdir $@).$(MAJOR_REV); \
	  ln -s $(notdir $@).$(MAJOR_REV).$(MINOR_REV) $(notdir $@).$(MAJOR_REV)
	cd $(LIB_SHARED); rm $(notdir $@); \
	  ln -s $(notdir $@).$(MAJOR_REV) $(notdir $@)

#########################################################

#   Rules for compiling source

$(OBJ_NODEBUG)/%.o:	%.c  $(LEPTLIB_H)
		@$(TEST) -d $(OBJ_NODEBUG) || $(MKDIRHIER) $(OBJ_NODEBUG)
		$(COMPILE.c) -o $@ $<

$(OBJ_DEBUG)/%.o:	%.c  $(LEPTLIB_H)
		@$(TEST) -d $(OBJ_DEBUG) || $(MKDIRHIER) $(OBJ_DEBUG)
		$(COMPILE.c) -o $@ $<

$(OBJ_SHARED)/%.o:	%.c  $(LEPTLIB_H)
		@$(TEST) -d $(OBJ_SHARED) || $(MKDIRHIER) $(OBJ_SHARED)
		$(COMPILE.c) -o $@ $<

###########################################################

#   Prepare a local environment

dirs:
		@$(TEST) -d $(BASE_OBJ) || $(MKDIRHIER) $(BASE_OBJ)
		@$(TEST) -d $(OBJ_NODEBUG) || $(MKDIRHIER) $(OBJ_NODEBUG)
		@$(TEST) -d $(OBJ_DEBUG) || $(MKDIRHIER) $(OBJ_DEBUG)
		@$(TEST) -d $(OBJ_SHARED) || $(MKDIRHIER) $(OBJ_SHARED)
		@$(TEST) -d $(BASE_LIB) || $(MKDIRHIER) $(BASE_LIB)
		@$(TEST) -d $(LIB_NODEBUG) || $(MKDIRHIER) $(LIB_NODEBUG)
		@$(TEST) -d $(LIB_DEBUG) || $(MKDIRHIER) $(LIB_DEBUG)
		@$(TEST) -d $(LIB_SHARED) || $(MKDIRHIER) $(LIB_SHARED)


###########################################################

clean:		
		$(RM) $(OBJ_NODEBUG)/*.o $(OBJ_DEBUG)/*.o \
			$(OBJ_SHARED)/*.o \
			$(LIB_NODEBUG)/*.a $(LIB_DEBUG)/*.a \
			$(LIB_SHARED)/*.so $(LIB_SHARED)/*.so.? \
			$(LIB_SHARED)/*.so.?.* \
			xtractprotos.o xtractprotos

###########################################################

depend:
	/usr/bin/makedepend -DNO_PROTOS $(CPPFLAGS) $(LEPTLIB_C)

###########################################################
# DO NOT DELETE THIS LINE -- make depend depends on it.




