#-------------------------------------------------------------------------------
# UMFPACK Makefile for compiling on Unix systems
#-------------------------------------------------------------------------------

# Select your architecture by un-commenting the appropriate line

#include Make.generic
include Make.linux
# include Make.sgi
# include Make.solaris
# include Make.alpha
# include Make.rs6000

#-------------------------------------------------------------------------------
# no modifications should be necessary below this line.
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# The UMFPACK files:
#-------------------------------------------------------------------------------

all: umfpack_demo umfpack_l_demo umfpack_simple umfpack.a

INC = umfpack.h umf_config.h umf_version.h umf_internal.h \
	umf_analyze.h umf_apply_order.h umf_assemble.h umf_blas3_update.h \
	umf_build_tuples.h umf_build_tuples_usage.h umf_colamd.h \
	umf_create_element.h umf_dump.h umf_extend_front.h \
	umf_free.h umf_garbage_collection.h umf_get_memory.h umf_init_front.h \
	umf_is_permutation.h umf_kernel.h umf_kernel_init.h \
	umf_kernel_init_usage.h umf_kernel_wrapup.h umf_local_search.h \
	umf_lsolve.h umf_ltsolve.h umf_malloc.h umf_mem_alloc_element.h \
	umf_mem_alloc_head_block.h umf_mem_alloc_tail_block.h \
	umf_mem_free_tail_block.h umf_mem_init_memoryspace.h \
	umf_order_front_tree.h umf_report_perm.h umf_realloc.h \
	umf_report_vector.h umf_row_search.h umf_scale_column.h \
	umf_set_stats.h umf_solve.h umf_symbolic_usage.h \
	umf_transpose.h umf_tuple_lengths.h umf_usolve.h umf_utsolve.h \
	umf_valid_numeric.h umf_valid_symbolic.h umfpack_col_to_triplet.h \
	umfpack_defaults.h umfpack_free_numeric.h umfpack_free_symbolic.h \
	umfpack_get_numeric.h umfpack_get_lunz.h umfpack_get_symbolic.h \
	umfpack_numeric.h umfpack_qsymbolic.h umfpack_report_control.h \
	umfpack_report_info.h umfpack_report_matrix.h umfpack_report_numeric.h \
	umfpack_report_perm.h umfpack_report_status.h \
	umfpack_report_symbolic.h umfpack_report_triplet.h \
	umfpack_report_vector.h umfpack_solve.h umfpack_symbolic.h \
	umfpack_transpose.h umfpack_triplet_to_col.h umfpack_wsolve.h \
	umfpack_timer.h

# Double precision, int version:

DI =	umf_analyze.o umf_apply_order.o umf_assemble.o umf_blas3_update.o \
	umf_build_tuples.o umf_build_tuples_usage.o umf_colamd.o \
	umf_create_element.o umf_dump.o umf_extend_front.o \
	umf_free.o umf_garbage_collection.o umf_get_memory.o umf_init_front.o \
	umf_is_permutation.o umf_kernel.o umf_kernel_init.o \
	umf_kernel_init_usage.o umf_kernel_wrapup.o umf_local_search.o \
	umf_lsolve.o umf_ltsolve.o umf_malloc.o umf_mem_alloc_element.o \
	umf_mem_alloc_head_block.o umf_mem_alloc_tail_block.o \
	umf_mem_free_tail_block.o umf_mem_init_memoryspace.o \
	umf_order_front_tree.o umf_report_perm.o umf_realloc.o \
	umf_report_vector.o umf_row_search.o umf_scale_column.o \
	umf_set_stats.o umf_solve.o umf_symbolic_usage.o \
	umf_transpose.o umf_tuple_lengths.o umf_usolve.o umf_utsolve.o \
	umf_valid_numeric.o umf_valid_symbolic.o umfpack_col_to_triplet.o \
	umfpack_defaults.o umfpack_free_numeric.o umfpack_free_symbolic.o \
	umfpack_get_numeric.o umfpack_get_lunz.o umfpack_get_symbolic.o \
	umfpack_numeric.o umfpack_qsymbolic.o umfpack_report_control.o \
	umfpack_report_info.o umfpack_report_matrix.o umfpack_report_numeric.o \
	umfpack_report_perm.o umfpack_report_status.o \
	umfpack_report_symbolic.o umfpack_report_triplet.o \
	umfpack_report_vector.o umfpack_solve.o umfpack_symbolic.o \
	umfpack_transpose.o umfpack_triplet_to_col.o umfpack_wsolve.o

# Double precision, long version:
DL =	umfl_analyze.o umfl_apply_order.o umfl_assemble.o umfl_blas3_update.o \
	umfl_build_tuples.o umfl_build_tuples_usage.o umfl_colamd.o \
	umfl_create_element.o umfl_dump.o umfl_extend_front.o \
	umfl_free.o umfl_garbage_collection.o umfl_get_memory.o \
	umfl_init_front.o umfl_is_permutation.o umfl_kernel.o \
	umfl_kernel_init.o umfl_kernel_init_usage.o umfl_kernel_wrapup.o \
	umfl_local_search.o umfl_lsolve.o umfl_ltsolve.o umfl_malloc.o \
	umfl_mem_alloc_element.o umfl_mem_alloc_head_block.o \
	umfl_mem_alloc_tail_block.o umfl_mem_free_tail_block.o \
	umfl_mem_init_memoryspace.o umfl_order_front_tree.o umfl_report_perm.o \
	umfl_realloc.o umfl_report_vector.o umfl_row_search.o \
	umfl_scale_column.o umfl_set_stats.o umfl_solve.o \
	umfl_symbolic_usage.o umfl_transpose.o umfl_tuple_lengths.o \
	umfl_usolve.o umfl_utsolve.o umfl_valid_numeric.o \
	umfl_valid_symbolic.o umfpack_l_col_to_triplet.o umfpack_l_defaults.o \
	umfpack_l_free_numeric.o umfpack_l_free_symbolic.o \
	umfpack_l_get_numeric.o umfpack_l_get_lunz.o umfpack_l_get_symbolic.o \
	umfpack_l_numeric.o umfpack_l_qsymbolic.o umfpack_l_report_control.o \
	umfpack_l_report_info.o umfpack_l_report_matrix.o \
	umfpack_l_report_numeric.o umfpack_l_report_perm.o \
	umfpack_l_report_status.o umfpack_l_report_symbolic.o \
	umfpack_l_report_triplet.o umfpack_l_report_vector.o \
	umfpack_l_solve.o umfpack_l_symbolic.o umfpack_l_transpose.o \
	umfpack_l_triplet_to_col.o umfpack_l_wsolve.o

# routines that don't depend on int/long version:
GENERIC = umfpack_timer.o

SRC =	umf_analyze.c umf_apply_order.c umf_assemble.c umf_blas3_update.c \
	umf_build_tuples.c umf_build_tuples_usage.c umf_colamd.c \
	umf_create_element.c umf_dump.c umf_extend_front.c \
	umf_free.c umf_garbage_collection.c umf_get_memory.c umf_init_front.c \
	umf_is_permutation.c umf_kernel.c umf_kernel_init.c \
	umf_kernel_init_usage.c umf_kernel_wrapup.c umf_local_search.c \
	umf_lsolve.c umf_ltsolve.c umf_malloc.c umf_mem_alloc_element.c \
	umf_mem_alloc_head_block.c umf_mem_alloc_tail_block.c \
	umf_mem_free_tail_block.c umf_mem_init_memoryspace.c \
	umf_order_front_tree.c umf_report_perm.c umf_realloc.c \
	umf_report_vector.c umf_row_search.c umf_scale_column.c \
	umf_set_stats.c umf_solve.c umf_symbolic_usage.c umfpack_timer.c \
	umf_transpose.c umf_tuple_lengths.c umf_usolve.c umf_utsolve.c \
	umf_valid_numeric.c umf_valid_symbolic.c umfpack_col_to_triplet.c \
	umfpack_defaults.c umfpack_free_numeric.c umfpack_free_symbolic.c \
	umfpack_get_numeric.c umfpack_get_lunz.c umfpack_get_symbolic.c \
	umfpack_numeric.c umfpack_qsymbolic.c umfpack_report_control.c \
	umfpack_report_info.c umfpack_report_matrix.c umfpack_report_numeric.c \
	umfpack_report_perm.c umfpack_report_status.c \
	umfpack_report_symbolic.c umfpack_report_triplet.c \
	umfpack_report_vector.c umfpack_solve.c umfpack_symbolic.c \
	umfpack_transpose.c umfpack_triplet_to_col.c umfpack_wsolve.c 

#-------------------------------------------------------------------------------
# compile each routine in the DL version
#-------------------------------------------------------------------------------

umfl_analyze.o: umf_analyze.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_analyze.c -o umfl_analyze.o

umfl_apply_order.o: umf_apply_order.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_apply_order.c -o umfl_apply_order.o

umfl_assemble.o: umf_assemble.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_assemble.c -o umfl_assemble.o

umfl_blas3_update.o: umf_blas3_update.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_blas3_update.c -o umfl_blas3_update.o

umfl_build_tuples.o: umf_build_tuples.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_build_tuples.c -o umfl_build_tuples.o

umfl_build_tuples_usage.o: umf_build_tuples_usage.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_build_tuples_usage.c -o umfl_build_tuples_usage.o

umfl_colamd.o: umf_colamd.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_colamd.c -o umfl_colamd.o

umfl_create_element.o: umf_create_element.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_create_element.c -o umfl_create_element.o

umfl_dump.o: umf_dump.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_dump.c -o umfl_dump.o

umfl_extend_front.o: umf_extend_front.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_extend_front.c -o umfl_extend_front.o

umfl_free.o: umf_free.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_free.c -o umfl_free.o

umfl_garbage_collection.o: umf_garbage_collection.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_garbage_collection.c -o umfl_garbage_collection.o

umfl_get_memory.o: umf_get_memory.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_get_memory.c -o umfl_get_memory.o

umfl_init_front.o: umf_init_front.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_init_front.c -o umfl_init_front.o

umfl_is_permutation.o: umf_is_permutation.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_is_permutation.c -o umfl_is_permutation.o

umfl_kernel.o: umf_kernel.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_kernel.c -o umfl_kernel.o

umfl_kernel_init.o: umf_kernel_init.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_kernel_init.c -o umfl_kernel_init.o

umfl_kernel_init_usage.o: umf_kernel_init_usage.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_kernel_init_usage.c -o umfl_kernel_init_usage.o

umfl_kernel_wrapup.o: umf_kernel_wrapup.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_kernel_wrapup.c -o umfl_kernel_wrapup.o

umfl_local_search.o: umf_local_search.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_local_search.c -o umfl_local_search.o

umfl_lsolve.o: umf_lsolve.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_lsolve.c -o umfl_lsolve.o

umfl_ltsolve.o: umf_ltsolve.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_ltsolve.c -o umfl_ltsolve.o

umfl_malloc.o: umf_malloc.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_malloc.c -o umfl_malloc.o

umfl_mem_alloc_element.o: umf_mem_alloc_element.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_mem_alloc_element.c -o umfl_mem_alloc_element.o

umfl_mem_alloc_head_block.o: umf_mem_alloc_head_block.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_mem_alloc_head_block.c -o umfl_mem_alloc_head_block.o

umfl_mem_alloc_tail_block.o: umf_mem_alloc_tail_block.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_mem_alloc_tail_block.c -o umfl_mem_alloc_tail_block.o

umfl_mem_free_tail_block.o: umf_mem_free_tail_block.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_mem_free_tail_block.c -o umfl_mem_free_tail_block.o

umfl_mem_init_memoryspace.o: umf_mem_init_memoryspace.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_mem_init_memoryspace.c -o umfl_mem_init_memoryspace.o

umfl_order_front_tree.o: umf_order_front_tree.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_order_front_tree.c -o umfl_order_front_tree.o

umfl_report_perm.o: umf_report_perm.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_report_perm.c -o umfl_report_perm.o

umfl_realloc.o: umf_realloc.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_realloc.c -o umfl_realloc.o

umfl_report_vector.o: umf_report_vector.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_report_vector.c -o umfl_report_vector.o

umfl_row_search.o: umf_row_search.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_row_search.c -o umfl_row_search.o

umfl_scale_column.o: umf_scale_column.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_scale_column.c -o umfl_scale_column.o

umfl_set_stats.o: umf_set_stats.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_set_stats.c -o umfl_set_stats.o

umfl_solve.o: umf_solve.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_solve.c -o umfl_solve.o

umfl_symbolic_usage.o: umf_symbolic_usage.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_symbolic_usage.c -o umfl_symbolic_usage.o

umfl_transpose.o: umf_transpose.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_transpose.c -o umfl_transpose.o

umfl_tuple_lengths.o: umf_tuple_lengths.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_tuple_lengths.c -o umfl_tuple_lengths.o

umfl_usolve.o: umf_usolve.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_usolve.c -o umfl_usolve.o

umfl_utsolve.o: umf_utsolve.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_utsolve.c -o umfl_utsolve.o

umfl_valid_numeric.o: umf_valid_numeric.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_valid_numeric.c -o umfl_valid_numeric.o

umfl_valid_symbolic.o: umf_valid_symbolic.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umf_valid_symbolic.c -o umfl_valid_symbolic.o

umfpack_l_col_to_triplet.o: umfpack_col_to_triplet.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_col_to_triplet.c -o umfpack_l_col_to_triplet.o

umfpack_l_defaults.o: umfpack_defaults.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_defaults.c -o umfpack_l_defaults.o

umfpack_l_free_numeric.o: umfpack_free_numeric.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_free_numeric.c -o umfpack_l_free_numeric.o

umfpack_l_free_symbolic.o: umfpack_free_symbolic.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_free_symbolic.c -o umfpack_l_free_symbolic.o

umfpack_l_get_numeric.o: umfpack_get_numeric.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_get_numeric.c -o umfpack_l_get_numeric.o

umfpack_l_get_lunz.o: umfpack_get_lunz.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_get_lunz.c -o umfpack_l_get_lunz.o

umfpack_l_get_symbolic.o: umfpack_get_symbolic.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_get_symbolic.c -o umfpack_l_get_symbolic.o

umfpack_l_numeric.o: umfpack_numeric.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_numeric.c -o umfpack_l_numeric.o

umfpack_l_qsymbolic.o: umfpack_qsymbolic.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_qsymbolic.c -o umfpack_l_qsymbolic.o

umfpack_l_report_control.o: umfpack_report_control.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_report_control.c -o umfpack_l_report_control.o

umfpack_l_report_info.o: umfpack_report_info.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_report_info.c -o umfpack_l_report_info.o

umfpack_l_report_matrix.o: umfpack_report_matrix.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_report_matrix.c -o umfpack_l_report_matrix.o

umfpack_l_report_numeric.o: umfpack_report_numeric.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_report_numeric.c -o umfpack_l_report_numeric.o

umfpack_l_report_perm.o: umfpack_report_perm.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_report_perm.c -o umfpack_l_report_perm.o

umfpack_l_report_status.o: umfpack_report_status.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_report_status.c -o umfpack_l_report_status.o

umfpack_l_report_symbolic.o: umfpack_report_symbolic.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_report_symbolic.c -o umfpack_l_report_symbolic.o

umfpack_l_report_triplet.o: umfpack_report_triplet.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_report_triplet.c -o umfpack_l_report_triplet.o

umfpack_l_report_vector.o: umfpack_report_vector.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_report_vector.c -o umfpack_l_report_vector.o

umfpack_l_solve.o: umfpack_solve.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_solve.c -o umfpack_l_solve.o

umfpack_l_symbolic.o: umfpack_symbolic.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_symbolic.c -o umfpack_l_symbolic.o

umfpack_l_transpose.o: umfpack_transpose.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_transpose.c -o umfpack_l_transpose.o

umfpack_l_triplet_to_col.o: umfpack_triplet_to_col.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_triplet_to_col.c -o umfpack_l_triplet_to_col.o

umfpack_l_wsolve.o: umfpack_wsolve.c $(INC)
	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c umfpack_wsolve.c -o umfpack_l_wsolve.o


# Note: the above set of rules for the long version can be replaced with the
# following two rules, on Solaris and Linux, but not on the SGI or RS6000:
# 
# umfl_%.o: umf_%.c $(INC)
# 	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c -o $@ $<
# 
# umfpack_l_%.o: umfpack_%.c $(INC)
# 	$(CC) -DDLONG $(CFLAGS) $(CONFIG) -DNDEBUG -c -o $@ $<


#-------------------------------------------------------------------------------
# Create the double precision, int version, and the generic routines
#-------------------------------------------------------------------------------

$(DI): $(INC)

$(GENERIC): $(INC)

.c.o:
	$(CC) -DDINT $(CFLAGS) $(CONFIG) -DNDEBUG -c $<

#-------------------------------------------------------------------------------
# Create the umfpack.a library
#-------------------------------------------------------------------------------

umfpack.a: $(DI) $(DL) $(GENERIC)
	ar cr umfpack.a $(DI) $(DL) $(GENERIC)
	- $(RANLIB) umfpack.a
	- cat License

#-------------------------------------------------------------------------------
# Create the two demo programs, run them, and compare the output
#-------------------------------------------------------------------------------

umfpack_demo: umfpack_demo.c $(INC) umfpack.a
	$(CC) $(CFLAGS) $(CONFIG) -DNDEBUG -o umfpack_demo umfpack_demo.c umfpack.a $(LIB)
	./umfpack_demo > my_umfpack_demo.out
	- diff umfpack_demo.out my_umfpack_demo.out

umfpack_l_demo: umfpack_l_demo.c $(INC) umfpack.a
	$(CC) $(CFLAGS) $(CONFIG) -DNDEBUG -o umfpack_l_demo umfpack_l_demo.c umfpack.a $(LIB)
	./umfpack_l_demo > my_umfpack_l_demo.out
	- diff umfpack_l_demo.out my_umfpack_l_demo.out

umfpack_simple: umfpack_simple.c $(INC) umfpack.a
	$(CC) $(CFLAGS) $(CONFIG) -DNDEBUG -o umfpack_simple umfpack_simple.c umfpack.a $(LIB)
	- cat License
	./umfpack_simple

#-------------------------------------------------------------------------------
# Clean-up.  After making umfpack.a, you can do "make clean"
#-------------------------------------------------------------------------------

clean:
	- rm *.o *.obj *.ln

#-------------------------------------------------------------------------------
# Remove all but the files in the original distribution
#-------------------------------------------------------------------------------

purge:
	- rm *.o *.obj *.ln
	- rm umfpack.a umfpack_demo umfpack_simple umfpack_l_demo
	- rm umfpack.mex* umfpack.dll
	- rm UserGuide.aux UserGuide.bbl UserGuide.blg
	- rm UserGuide.log UserGuide.toc
	- rm my_umfpack_demo.out my_umfpack_l_demo.out

#-------------------------------------------------------------------------------
# Create the umfpack mexFunction for Matlab.  The *.o files are removed so that
# they are not confused with the stand-alone *.o files (for umfpack.a).
#-------------------------------------------------------------------------------

umfpack: umfpackmex.c $(SRC) $(INC)
	- rm *.o *.obj
	mex -inline -v -O -DNCBLAS -DNDEBUG -output umfpack umfpackmex.c $(SRC)
	- rm *.o *.obj

#-------------------------------------------------------------------------------
# Create the User Guide.  This assumes you have m4, latex, and ghostscript.
# The User Guide comes pre-made (UserGuide.ps and UserGuide.pdf) so you
# shouldn't need to create it here.
#-------------------------------------------------------------------------------

UserGuide.tex:  UserGuide.m4tex $(INC) umfpack_simple.c umfpack_demo.c
	m4 UserGuide.m4tex | expand -8 > UserGuide.tex

UserGuide.ps: UserGuide.tex UserGuide.bib
	latex UserGuide
	bibtex UserGuide
	latex UserGuide
	latex UserGuide
	dvips UserGuide

UserGuide.pdf:  UserGuide.ps
	ps2pdf UserGuide.ps UserGuide.pdf

#-------------------------------------------------------------------------------
# lint the source.
#-------------------------------------------------------------------------------

lint:
	lint $(LINTFLAGS) -DDINT  -DNBLAS umfpack_demo.c $(SRC)
	lint $(LINTFLAGS) -DDLONG -DNBLAS umfpack_l_demo.c $(SRC)

