#@(#) Makefile started by makeout(1) 2026-09-05 10:25:32
# generated by:   ...

NULL =
PROGFILES = $(wildcard ../example/*/*.f90) $(wildcard ../example/*/*.F90) $(wildcard ../app/*.f90) $(wildcard ../app/*.F90)
TESTFILES = $(wildcard ../test/*.f90) $(wildcard ../test/*.F90) $(wildcard ../test/*.f) $(wildcard ../test/*.F)

TPROG1 = ${TESTFILES:.f90=}
TPROG  = ${TPROG1:.F90=}

CPROGFILES = $(wildcard ../app/*.c)

PROG =  $(patsubst %.f90,%, $(patsubst %.F90,%,$(PROGFILES)))

CPROG = ${CPROGFILES:.c=}

SRCS =  $(wildcard *.f90) $(wildcard *.F90) $(wildcard *.c)
OBJS =  $(patsubst %.c,%.o,$(patsubst %.f90,%.o,$(patsubst %.F90,%.o,$(SRCS))))

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# platform-specific values you will probably change
#
LIBRARY := libGPF.a
LIB := GPF
#LIBS := -lncurses -lcurl -ltinfo -lsqlite3 -lreadline
LIBS := $(shell bash ../scripts/if_library_found ncurses curl tinfo sqlite3 readline X11)
CC := cc
CFLAGS := -O
FC := gfortran
FFLAGS := -O -fcoarray=single
F90 := gfortran
F90FLAGS := -fno-range-check -fcoarray=single
LDFLAGS :=  -fcoarray=single
#-----------------------------------------------------------------------------#
gfortran: F90=gfortran
#gfortran: F90FLAGS := -fcoarray=single -g -O -Wall -Wextra -Wno-maybe-uninitialized -Wno-uninitialized -finit-local-zero
gfortran: F90FLAGS := -fcoarray=single -g -O -Wall -Wextra
#gfortran: F90FLAGS := -fno-range-check -fcoarray=single -g -O -Wall -Wextra
gfortran: FFLAGS := -fcoarray=single -g -O -Wall -Wextra
gfortran: LDFLAGS := -fcoarray=single
gfortran: all
	@echo built with $(F90)
#-----------------------------------------------------------------------------#
nvfortran: F90=nvfortran
nvfortran: F90FLAGS := -Minform=inform -Mbackslash -traceback
nvfortran: all
	@echo built with $(F90)
#-----------------------------------------------------------------------------#
ifx: F90=ifx
ifx: F90FLAGS := -warn all -traceback -coarray=single
ifx: FFLAGS := -warn all -traceback -coarray=single
ifx: FC := ifx
ifx: LDFLAGS :=
ifx: all
	@echo built with $(F90)
#-----------------------------------------------------------------------------#
flang: F90=flang
flang: F90FLAGS :=
flang: CC := clang
flang: FC := flang
flang: FFLAGS := -O 
flang: LDFLAGS := 
flang: all
	@echo built with $(F90)
#-----------------------------------------------------------------------------#
lfortran: F90=lfortran
lfortran: F90FLAGS := --no-style-suggestions --realloc-lhs-arrays --print-leading-space --std f23 --use-loop-variable-after-loop --cpp --legacy-array-sections
lfortran: all
	@echo built with $(F90)
#-----------------------------------------------------------------------------#
ifort: F90=ifort
ifort: F90FLAGS := -warn all -traceback
ifort: all
	@echo built with $(F90)
#-----------------------------------------------------------------------------#
nagfor: F90=nagfor
nagfor: F90FLAGS := -C all
nagfor: all
	@echo built with $(F90)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
all: $(PROG) $(CPROG) $(TPROG)
	@test -f test_suite_log.txt || $(MAKE) test
	@echo "That is all folks!"

$(PROG): $(LIBRARY)

	-$(F90) $(LDFLAGS) $@.f90 -L. -l$(LIB) -o $@ $(LIBS)

$(TPROG): $(LIBRARY)

	-$(F90) $(LDFLAGS) $@.f90 -L. -l$(LIB) -o $@ $(LIBS)

$(LIBRARY): $(OBJS)
	$(AR) $(ARFLAGS) $@ $^


.SUFFIXES: $(SUFFIXES) .f90 .F90 .ff .FF .shf
# .shf -- assumed to write Fortran code to stdout when executed
# .FF -- run thru prep(1) with    $system directives allowed
# .ff -- run thru prep(1) without $system directives allowed

.f90.o:
	$(F90) $(F90FLAGS) -c $<

.F90.o:
	$(F90) $(F90FLAGS) -c $<

.f95.o:
	$(F90) $(F90FLAGS) -c $<

.F95.o:
	$(F90) $(F90FLAGS) -c $<

.f03.o:
	$(F90) $(F90FLAGS) -c $<

.F03.o:
	$(F90) $(F90FLAGS) -c $<
#=================================================================================
# Fortran free format file known to have prep(1) preprocessor directives
# run thru prep(1) preprocessor with system commands allowed, variable F90 defined
# Assumes .F90 file does not exist previously, as it will overwrite it.
.FF.F90:
	@# run thru prep(1) preprocessor with system commands allowed
	prep -D F90 `uname -o` -verbose -system .true. -i $(<) -o $(*F).F90
	@[ -s $(*F).F90 ] || echo "error: $(*F).F90 is empty"
#=================================================================================
# Fortran free format file known to have prep(1) preprocessor directives
# run thru prep(1) preprocessor with no system commands allowed, variable F90
# defined. Assumes .F90 file does not exist previously, as it will overwrite it.
.ff.f90:
	@# run thru prep(1) preprocessor with system commands allowed
	prep -D F90 `uname -o` -verbose -i $(<) -o $(*F).F90
	@[ -s $(*F).F90 ] || echo "error: $(*F).F90 is empty"
#=================================================================================
.PHONY: test
test: $(TPROG)
	@test -e ../scripts/test_suite && chmod u+xr ../scripts/test_suite||echo "test_suite not found"
	-PATH="`pwd`/../scripts:$$PATH"; which test_suite && env F90=$(F90) test_suite -l test_suite_log.txt
	-(exec 2>&1;echo $?|xargs -n 1 env)|tee -a test_suite_log.txt
#=================================================================================
.PHONY: clean
clean:
	rm -fv $(PROG) $(CPROG) $(OBJS) $(TPROG) *.smod *.mod *.o

.PHONY: help
help:
	- # make [compiler]   -- build M_unicode module and run test if no test log
	- # run  [compiler]   -- run demo programs and app programs
	- # test [compiler]   -- run test program (requires additional modules) 
	- # man               -- show all manpages as text                      
	- # ship              -- rebuild archive files of manpages              
	- # clean             -- clean directory of object files and executables
	- # doxygen           -- run doxygen(1) if you have it                  
	- # help              -- display this text                              
	- #                                                                    
	- #   where compiler is  gfortran|ifx|nvfortran|ifort|nagfor, and you
	- #   must build with "make [COMPILER]" before "make run|test [COMPILER]"

.PHONY: ship
ship:
	: make easily distributed archive files of manpages
	mkdir -p ../docs; \
	 cd ../man/;    gzip */*.?m_unicode; \
	 gzip -r ../docs/manpages.zip   */*m_unicode*.gz; \
	 tar cvfz ../docs/manpages.tgz */*m_unicode*.gz; \
	 gunzip */*.?m_unicode.gz

.PHONY: show
show:
	: "CC        $(CC)"
	: "CFLAGS    $(CLAGS)"
	: "FC        $(FC)"
	: "FFLAGS    $(FFLAGS)"
	: "F90       $(F90)"
	: "F90FLAGS  $(F90FLAGS)"
	: "LDFLAGS   $(LDLAGS)"
	: "LIBS      $(LIBS)"

.PHONY: run
run: $(PROG)
	# run everything
	echo $? | xargs -n 1
#	echo $? | xargs -n 1  |xargs -iXX /bin/time XX  \</dev/null
	echo $? | xargs -n 1  |(set +x;xargs -iXX env XX 2>&1)

.PHONY: testall
testall: $(TPROG)
	# run everything
	echo $? | xargs -n 1
	echo $? | xargs -n 1  |(set +x;xargs -iXX env XX 2>&1)

.PHONY: doxygen
doxygen:
	doxygen dox.in

.PHONY: man
man:
	@mandb ../man 1>&2
	@env MANPATH=../man MANWIDTH=256 man -k .|col -b
	@env MANPATH=../man MANWIDTH=80  man --encoding=UTF-8 --troff-device=utf8 --regex '.*'|col -b
#=================================================================================

C-getgp.o: draw.h
C-pcl5.o: draw.h
C-pbm.o: draw.h
M_expr.o: M_list.o M_strings.o
M_kracken.o: M_args.o M_framework__journal.o M_list.o M_strings.o
M_messages.o: M_anything.o M_journal.o M_strings.o
C-attr.o: draw.h
C-drivers.o: draw.h
C-rtf.o: draw.h
M_args.o: M_framework.o M_list.o M_strings.o
C-text.o: draw.h
C-xfig.o: draw.h
C-aspect.o: draw.h
C-scale.o: draw.h
M_units.o: M_anything.o define_compiler.inc
M_time__oop.o: M_strings.o M_time.o
M_orderpack__ctrper.o: M_orderpack__mrgrnk.o
M_isolatin.o: M_unicode.o
C-cgmt.o: draw.h
M_orderpack__unista.o: M_orderpack__uniinv.o
C-vml.o: draw.h
M_unicode.o: define_compiler.inc
M_hashkeys__sha3.o: M_strings.o M_system.o
M_framework.o: M_framework__approx.o M_framework__journal.o M_framework__msg.o M_framework__timing.o M_framework__utility.o M_framework__verify.o
C-draw.o: draw.h
M_msg.o: define_compiler.inc
M_graph.o: M_draw.o
M_framework__journal.o: M_framework__msg.o
C-curves.o: draw.h
M_orderpack__mulcnt.o: M_orderpack__uniinv.o
M_overload.o: define_compiler.inc
C-matrix.o: draw.h
C-mapping.o: draw.h
C-points.o: draw.h
C-pdf.o: draw.h
M_math.o: M_anything.o M_framework__journal.o M_framework__verify.o M_sort.o
M_xyplot.o: M_calculator.o M_color.o M_draw.o M_drawplus.o M_hybrid.o M_journal.o M_kracken.o M_math.o M_strings.o M_system.o M_time.o M_verify.o
paranoia.o: M_journal.o
C-arcs.o: draw.h
C-buffer.o: draw.h
M_orderpack.o: M_orderpack__ctrper.o M_orderpack__fndnth.o M_orderpack__indmed.o M_orderpack__indnth.o M_orderpack__inspar.o M_orderpack__inssor.o M_orderpack__median.o M_orderpack__mrgref.o M_orderpack__mrgrnk.o M_orderpack__mulcnt.o M_orderpack__rapknr.o M_orderpack__refpar.o M_orderpack__refsor.o M_orderpack__rinpar.o M_orderpack__rnkpar.o M_orderpack__uniinv.o M_orderpack__unipar.o M_orderpack__unirnk.o M_orderpack__unista.o M_orderpack__valmed.o M_orderpack__valnth.o
M_sort.o: define_compiler.inc
M_matrix.o: M_LA.o M_framework.o M_help.o M_history.o M_intrinsics.o M_io.o M_list.o M_orderpack.o M_sets.o M_strings.o M_time.o
C-valloc.o: draw.h
C-usemap.o: draw.h
M_slices.o: M_draw.o
C-viewp.o: draw.h
C-M_drawplus.o: draw.h
M_calculator.o: M_framework__approx.o M_framework__journal.o M_io.o M_list.o M_math.o M_process.o M_random.o M_strings.o M_system.o M_time.o
M_datapac.o: M_datapac__d.o M_datapac__s.o
C-nil.o: draw.h
C-ppm.o: draw.h
M_pixel__slices.o: M_pixel.o
C-move.o: draw.h
M_hashkeys.o: M_strings.o
C-verror.o: draw.h
M_system.o: define_compiler.inc
C-patches.o: draw.h
C-hpdxy.o: draw.h
C-fti.o: draw.h
M_logic.o: M_calculator.o M_framework__journal.o
C-mif.o: draw.h
M_fixedform.o: M_framework__journal.o M_ncurses.o nc_errmessage.inc nc_printescape.inc nc_printhtml.inc nc_printplain.inc nc_printunicode.inc
M_strings.o: M_journal.o define_compiler.inc
C-pref.o: draw.h
C-clip.o: draw.h
M_journal.o: M_msg.o
C-tensor.o: draw.h
C-objects.o: draw.h
M_io.o: M_journal.o M_strings.o M_uuid.o define_compiler.inc
M_sets.o: M_orderpack.o
C-tek.o: draw.h
C-polygons.o: draw.h
M_xterm.o: M_framework__verify.o M_strings.o M_system.o
M_anything.o: define_compiler.inc
M_history.o: M_journal.o M_strings.o
calc_NC.o: M_calculator.o M_framework__journal.o M_ncurses.o
M_bessel.o: M_framework__journal.o
M_framework__approx.o: M_framework__journal.o define_compiler.inc
M_csv.o: M_strings.o
M_LA.o:
M_framework__verify.o: M_framework__msg.o
C-newtokens.o: draw.h
C-getstring.o: draw.h
M_namelist.o: M_list.o M_strings.o
C-X11.o: draw.h
M_time.o: M_strings.o define_compiler.inc
C-canvas.o: draw.h
M_strings__oop.o: M_strings.o
C-gnu.o: draw.h
M_drawplus.o: M_calculator.o M_draw.o M_journal.o M_strings.o M_units.o M_verify.o
C-vog.o: draw.h
C-svg.o: draw.h
C-trans.o: draw.h
M_framework__attr.o: M_framework__msg.o
M_calcomp.o: M_draw.o M_strings.o
M_path.o: M_io.o M_strings.o M_system.o
M_uuid.o: M_random.o M_time.o
C-hpgt.o: draw.h
M_hybrid.o: M_calculator.o M_framework__journal.o M_kracken.o
C-unixplot.o: draw.h
M_help.o: M_journal.o
M_verify.o: M_journal.o M_msg.o define_compiler.inc
C-viewing.o: draw.h
C-ps.o: draw.h
C-rect.o: draw.h
