# atari/Makefile.in, the source file for atari/Makefile, is
#
# Copyright (c) 2019-2023 Thorsten Otto

CROSS_PREFIX=m68k-atari-mint-

CC = $(CROSS_PREFIX)gcc

AR = $(CROSS_PREFIX)ar
RANLIB = $(CROSS_PREFIX)ranlib
STRIP = $(CROSS_PREFIX)strip
AWK = awk

srcdir = .
top_srcdir = ..

CPU_CFLAGS=-m68020-60
CFLAGS = $(CPU_CFLAGS) -O2 -fomit-frame-pointer -Wall -W -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement -Werror
CPPFLAGS = -D_LARGEFILE64_SOURCE=1 -I. -I.. -I$(srcdir)/..
CPPFLAGS += -DHAVE_CONFIG_H \
	-I$(top_srcdir)/libtiff
SFLAGS = $(CFLAGS) -DTIFF_SLB -DJPEG_SLB -DPNGLIB_SLB -DZLIB_SLB -DLZMA_SLB
# slbexec.S must also be compilabe by pure-c, so we cannot preprocess it
# figure out the symbol prefix here
USER_LABEL_PREFIX := $(shell echo '__USER_LABEL_PREFIX__' | $(CROSS_PREFIX)gcc -E -P - 2>/dev/null)
ASFLAGS = -D_BasPag=$(USER_LABEL_PREFIX)_base -Wa,--register-prefix-optional

LDFLAGS= -lm -s
STACKSIZE = -Wl,-stack,128k
LDSHARED=$(CC) -s -nostartfiles -Wl,--mprg-flags,0x0f

STATICLIB=libtiff.a
SHAREDLIB=tiff.slb
IMPORTLIB=libtiff.slb.a
ALLLIBS=$(STATICLIB) $(SHAREDLIB) $(IMPORTLIB)

ARFLAGS=rcs
LDSHAREDLIBC= -nostdlib -lgcc
TAR=tar
SHELL=/bin/sh
EXE=

prefix = /usr
exec_prefix = ${prefix}
libdir = ${exec_prefix}/lib
bindir = ${exec_prefix}/bin
sharedlibdir = ${prefix}/../mint/slb
includedir = ${prefix}/include

VPATH += $(top_srcdir)/libtiff


OBJS = \
	tif_aux.o \
	tif_clos.o \
	tif_codc.o \
	tif_colr.o \
	tif_comp.o \
	tif_dir.o \
	tif_diri.o \
	tif_dirr.o \
	tif_dirw.o \
	tif_dump.o \
	tif_err.o \
	tif_ext.o \
	tif_fax3.o \
	tif_faxs.o \
	tif_flsh.o \
	tif_hash.o \
	tif_img.o \
	tif_jbig.o \
	tif_jpeg.o \
	tif_jp12.o \
	tif_lerc.o \
	tif_luv.o \
	tif_lzma.o \
	tif_lzw.o \
	tif_next.o \
	tif_ojpg.o \
	tif_open.o \
	tif_pack.o \
	tif_pixr.o \
	tif_pred.o \
	tif_prnt.o \
	tif_read.o \
	tif_strp.o \
	tif_swab.o \
	tif_thun.o \
	tif_tile.o \
	tif_vers.o \
	tif_warn.o \
	tif_webp.o \
	tif_writ.o \
	tif_zip.o \
	tif_zstd.o \
	tif_unix.o \
	longlong.o \
	lludiv.o \
	$(empty)

PIC_OBJS = header.lao libinit.lao $(OBJS:.o=.lao) qsort.lao bsearch.lao longlong.lao lludiv.lao
# only valid for patched gcc-13
#$(PIC_OBJS): FORMAT_WARN = -Wformat-short

GEN_IMP_OBJS = $(foreach num,$(shell seq 0 225),imp_$(num).o)

IMP_OBJS = libptr.o libopen.o libclose.o libfuncs.o slbload.o slbexec.o slbids.o longlong.o lludiv.o $(GEN_IMP_OBJS)

all: static shared

static: $(STATICLIB) 

SHARED_EXES = fax2ps$(EXE) fax2tiff$(EXE) pal2rgb$(EXE) ppm2tiff$(EXE) \
	raw2tiff$(EXE) tiff2bw$(EXE) tiff2pdf$(EXE) tiff2ps$(EXE) tiff2rgba$(EXE) tiffcmp$(EXE) \
	tiffcp$(EXE) tiffcrop$(EXE) tiffdither$(EXE) tiffdump$(EXE) tiffinfo$(EXE) tiffmedian$(EXE) \
	tiffset$(EXE) tiffsplit$(EXE)
TEST_EXES = rgb2ycbcr$(EXE) thumbnail$(EXE)

shared: .genimpsources $(SHAREDLIB) $(IMPORTLIB) $(SHARED_EXES) $(TEST_EXES)

.genimpsources: $(srcdir)/genimp.awk $(srcdir)/exports.h
	$(AWK) -f $(srcdir)/genimp.awk $(srcdir)/exports.h
	touch $@

$(GEN_IMP_OBJS:.o=.c): .genimpsources

%.o: %.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@

%.lao: %.c
	$(CC) $(SFLAGS) $(FORMAT_WARN) $(CPPFLAGS) -c $< -o $@

slbexec.o: slbexec.S
	$(CC) $(CFLAGS) $(CPPFLAGS) $(ASFLAGS) -c -o $@ $<

check: test

test: all teststatic testshared

teststatic: static

testshared: shared

$(STATICLIB): $(OBJS)
	$(RM) $@
	$(AR) $(ARFLAGS) $@ $^

$(IMPORTLIB): $(IMP_OBJS)
	$(RM) $@
	$(AR) $(ARFLAGS) $@ $^

$(IMP_OBJS): lib_imp.h exports.h .genimpsources
libopen.o libclose.o: libstrct.h vernum.h

OTHER_SHAREDLIBS = -llzma.slb -ljpeg.slb -lzstd -lwebp -lz.slb

header.lao libinit.lao: $(srcdir)/header.S vernum.h exports.h symbols.h .genimpsources

vernum.h: $(top_srcdir)/libtiff/tiffvers.h
	echo "#define TIFF_VERSION "`sed -n 's/.*Version \([0-9]*\).\([0-9]*\).\([0-9]*\).*/\3 \2 \1 1000 * + 1000 * + p/p' $< | dc`"L" > $@

$(SHAREDLIB): $(PIC_OBJS)
	$(LDSHARED) $(SFLAGS) $(CFLAGS) $^ -o $@ $(OTHER_SHAREDLIBS) $(LDSHAREDLIBC) $(LDFLAGS)
	stripex $@


$(PIC_OBJS): libslb.h libstrct.h


header.lao: header.S
	$(CC) $(SFLAGS) $(CPPFLAGS) -DSHAREDLIB=\"$(SHAREDLIB)\" -c -o $@ $<

libinit.lao: libinit.c
	$(CC) $(SFLAGS) $(CPPFLAGS) -c -o $@ $<

VPATH += $(top_srcdir)/tools

fax2ps$(EXE): fax2ps.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

fax2tiff$(EXE): fax2tiff.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

pal2rgb$(EXE): pal2rgb.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

ppm2tiff$(EXE): ppm2tiff.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

raw2tiff$(EXE): raw2tiff.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiff2bw$(EXE): tiff2bw.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiff2pdf$(EXE): tiff2pdf.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiff2ps$(EXE): tiff2ps.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiff2rgba$(EXE): tiff2rgb.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiffcmp$(EXE): tiffcmp.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiffcp$(EXE): tiffcp.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiffcrop$(EXE): tiffcrop.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiffdither$(EXE): tiffdith.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiffdump$(EXE): tiffdump.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiffinfo$(EXE): tiffinfo.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiffmedian$(EXE): tiffmed.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiffset$(EXE): tiffset.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

tiffsplit$(EXE): tiffsplt.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

thumbnail$(EXE): thumbnail.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

rgb2ycbcr$(EXE): rgb2ycbcr.lao $(IMPORTLIB)
	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(OTHER_SHAREDLIBS) $(LDFLAGS) $(STACKSIZE)

#
# To run the tests when cross-compiling:
# Do a "make check" on the host.
# This will FAIL all tests because the binaries cannot be executed,
# but will build all tools needed to run the tests.
# After that, switch to the emulator to this directory,
# and do a "make check" here.
#
# The lists of checks has been copied from ../test/Makefile.am,
# and may need to be adjusted for new releases
#
JPEG_DEPENDENT_CHECK_PROG=raw_decode
JPEG_DEPENDENT_TESTSCRIPTS=\
	tiff2rgba-quad-tile.jpg.sh \
	tiff2rgba-ojpeg_zackthecat_subsamp22_single_strip.sh \
	tiff2rgba-ojpeg_chewey_subsamp21_multi_strip.sh \
	tiff2rgba-ojpeg_single_strip_no_rowsperstrip.sh

check_PROGRAMS = \
	ascii_tag long_tag short_tag strip_rw rewrite custom_dir custom_dir_EXIF_231 \
	defer_strile_loading defer_strile_writing test_directory test_open_options \
	test_append_to_strip test_ifd_loop_detection testtypes test_signed_tags \
	$(JPEG_DEPENDENT_CHECK_PROG)

TESTSCRIPTS = \
	ppm2tiff_pbm.sh \
	ppm2tiff_pgm.sh \
	ppm2tiff_ppm.sh \
	fax2tiff.sh \
	tiffcp-g3.sh \
	tiffcp-g3-1d.sh \
	tiffcp-g3-1d-fill.sh \
	tiffcp-g3-2d.sh \
	tiffcp-g3-2d-fill.sh \
	tiffcp-g4.sh \
	tiffcp-logluv.sh \
	tiffcp-thumbnail.sh \
	tiffcp-lzw-compat.sh \
	tiffcp-lzw-scanline-decode.sh \
	tiffdump.sh \
	tiffinfo.sh \
	tiffcp-split.sh \
	tiffcp-split-join.sh \
	tiff2ps-PS1.sh \
	tiff2ps-PS2.sh \
	tiff2ps-PS3.sh \
	tiff2ps-EPS1.sh \
	tiff2pdf.sh \
	tiffcrop-doubleflip-logluv-3c-16b.sh \
	tiffcrop-doubleflip-minisblack-1c-16b.sh \
	tiffcrop-doubleflip-minisblack-1c-8b.sh \
	tiffcrop-doubleflip-minisblack-2c-8b-alpha.sh \
	tiffcrop-doubleflip-miniswhite-1c-1b.sh \
	tiffcrop-doubleflip-palette-1c-1b.sh \
	tiffcrop-doubleflip-palette-1c-4b.sh \
	tiffcrop-doubleflip-palette-1c-8b.sh \
	tiffcrop-doubleflip-rgb-3c-16b.sh \
	tiffcrop-doubleflip-rgb-3c-8b.sh \
	tiffcrop-extract-logluv-3c-16b.sh \
	tiffcrop-extract-minisblack-1c-16b.sh \
	tiffcrop-extract-minisblack-1c-8b.sh \
	tiffcrop-extract-minisblack-2c-8b-alpha.sh \
	tiffcrop-extract-miniswhite-1c-1b.sh \
	tiffcrop-extract-palette-1c-1b.sh \
	tiffcrop-extract-palette-1c-4b.sh \
	tiffcrop-extract-palette-1c-8b.sh \
	tiffcrop-extract-rgb-3c-16b.sh \
	tiffcrop-extract-rgb-3c-8b.sh \
	tiffcrop-extractz14-logluv-3c-16b.sh \
	tiffcrop-extractz14-minisblack-1c-16b.sh \
	tiffcrop-extractz14-minisblack-1c-8b.sh \
	tiffcrop-extractz14-minisblack-2c-8b-alpha.sh \
	tiffcrop-extractz14-miniswhite-1c-1b.sh \
	tiffcrop-extractz14-palette-1c-1b.sh \
	tiffcrop-extractz14-palette-1c-4b.sh \
	tiffcrop-extractz14-palette-1c-8b.sh \
	tiffcrop-extractz14-rgb-3c-16b.sh \
	tiffcrop-extractz14-rgb-3c-8b.sh \
	tiffcrop-R90-logluv-3c-16b.sh \
	tiffcrop-R90-minisblack-1c-16b.sh \
	tiffcrop-R90-minisblack-1c-8b.sh \
	tiffcrop-R90-minisblack-2c-8b-alpha.sh \
	tiffcrop-R90-miniswhite-1c-1b.sh \
	tiffcrop-R90-palette-1c-1b.sh \
	tiffcrop-R90-palette-1c-4b.sh \
	tiffcrop-R90-palette-1c-8b.sh \
	tiffcrop-R90-rgb-3c-16b.sh \
	tiffcrop-R90-rgb-3c-8b.sh \
	tiff2bw-palette-1c-8b.sh \
	tiff2bw-quad-lzw-compat.sh \
	tiff2bw-rgb-3c-8b.sh \
	tiff2rgba-logluv-3c-16b.sh \
	tiff2rgba-minisblack-1c-16b.sh \
	tiff2rgba-minisblack-1c-8b.sh \
	tiff2rgba-minisblack-2c-8b-alpha.sh \
	tiff2rgba-miniswhite-1c-1b.sh \
	tiff2rgba-palette-1c-1b.sh \
	tiff2rgba-palette-1c-4b.sh \
	tiff2rgba-palette-1c-8b.sh \
	tiff2rgba-rgb-3c-16b.sh \
	tiff2rgba-rgb-3c-8b.sh \
	testfax4.sh \
	testdeflatelaststripextradata.sh \
	$(JPEG_DEPENDENT_TESTSCRIPTS)

TESTS = $(check_PROGRAMS) $(TESTSCRIPTS)

check: 
	status=0; \
	export srcdir=../test; \
	for f in $(TESTS); do \
	  /bin/sh ../config/test-driver --test-name "$$f" --log-file $$f.log --trs-file $$f.trs -- $$srcdir/$$f; \
          if test $$? -ne 0; then status=1; fi; \
	done; \
        exit $$status

install-libs: all
	-@if [ ! -d $(DESTDIR)$(exec_prefix)  ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi
	-@if [ ! -d $(DESTDIR)$(libdir)       ]; then mkdir -p $(DESTDIR)$(libdir); fi
	-@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi
	$(RM) $(DESTDIR)$(libdir)/$(STATICLIB)
	$(RM) $(DESTDIR)$(libdir)/$(IMPORTLIB)
	install -m 644 $(STATICLIB) $(IMPORTLIB) $(DESTDIR)$(libdir)
	$(RM) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB)
	echo "install $(SHAREDLIB) $(DESTDIR)$(sharedlibdir)"
	install -m 755 $(SHAREDLIB) $(DESTDIR)$(sharedlibdir)

install: install-libs
	-@if [ ! -d $(DESTDIR)$(includedir)   ]; then mkdir -p $(DESTDIR)$(includedir); fi
	-@if [ ! -d $(DESTDIR)$(includedir)/slb   ]; then mkdir -p $(DESTDIR)$(includedir)/slb; fi
	-@if [ ! -d $(DESTDIR)$(exec_prefix)/bin  ]; then mkdir -p $(DESTDIR)$(exec_prefix)/bin; fi
	install -m 644 $(top_srcdir)/libtiff/tiff.h $(top_srcdir)/libtiff/tiffconf.h $(top_srcdir)/libtiff/tiffio.h $(top_srcdir)/libtiff/tiffio.hxx $(top_srcdir)/libtiff/tiffvers.h $(top_srcdir)/libtiff/tifflong.h $(DESTDIR)$(includedir)/
	install -m 644 $(srcdir)/slb/tiff.h $(srcdir)/slb/slbids.h $(DESTDIR)$(includedir)/slb
	install -m 755 $(SHARED_EXES) $(DESTDIR)$(exec_prefix)/bin

install-strip: install
	$(STRIP) -g -x $(DESTDIR)$(libdir)/$(STATICLIB)
	$(RANLIB) $(DESTDIR)$(libdir)/$(STATICLIB)
	$(STRIP) -g -x $(DESTDIR)$(libdir)/$(IMPORTLIB)
	$(RANLIB) $(DESTDIR)$(libdir)/$(IMPORTLIB)

bindist:
	$(MAKE) DESTDIR=/tmp/t/tiff PUREC=/windows/c/atari/pc/lib allbindist

allbindist:
	$(MAKE) clean
	$(MAKE) -j8 CPU_CFLAGS="-m68020-60"
	$(MAKE) libdir="$(libdir)/m68020-60" sharedlibdir=$(sharedlibdir)/020 install-strip
	$(MAKE) clean
	$(MAKE) -j8 CPU_CFLAGS="-mcpu=5475"
	$(MAKE) libdir="$(libdir)/m5475" sharedlibdir=$(sharedlibdir)/v4e install-strip
	$(MAKE) clean
	$(MAKE) -j8 CPU_CFLAGS="-m68000"
	$(MAKE) libdir="$(libdir)" sharedlibdir=$(sharedlibdir)/000 install-strip
	install -m 755 $(SHAREDLIB) $(DESTDIR)$(sharedlibdir)
	$(MAKE) clean
	install -d $(DESTDIR)/purec/include/slb $(DESTDIR)/purec/lib/000 $(DESTDIR)/purec/lib/020
	install -m 644 $(top_srcdir)/libtiff/tiff.h $(top_srcdir)/libtiff/tiffconf.h $(top_srcdir)/libtiff/tiffio.h $(top_srcdir)/libtiff/tiffvers.h $(top_srcdir)/libtiff/tifflong.h $(DESTDIR)/purec/include
	install -m 644 $(srcdir)/slb/tiff.h $(srcdir)/slb/slbids.h $(DESTDIR)/purec/include/slb
	cd $(DESTDIR)/purec/include && cr2nl -R -d .
	install -m 644 $(PUREC)/000/tiff.lib $(PUREC)/000/tiffslb.lib $(DESTDIR)/purec/lib/000
	install -m 644 $(PUREC)/020/tiff.lib $(PUREC)/020/tiffslb.lib $(DESTDIR)/purec/lib/020
	install -m 644 $(srcdir)/READ_SLB.txt $(DESTDIR)
	version=`sed -n 's/.*Version \([0-9]*\).\([0-9]*\).\([0-9]*\).*/\1.\2.\3/p' $(top_srcdir)/libtiff/tiffvers.h`; \
	shortversion=`echo $$version | tr -d '.'`; \
	( cd $(DESTDIR)/..; rm -f tiff$${shortversion}.zip; zip -r tiff$${shortversion}.zip `basename $(DESTDIR)`; ); \
	( cd $(top_srcdir); git archive --prefix=tiff-$${version}-slb/ HEAD | bzip2 > $(DESTDIR)/../tiff-$${version}-slb.tar.bz2; )

mostlyclean: clean
clean:
	$(RM) *.o *.lo *.lao *.a *.slb $(top_srcdir)/libtiff/*.o $(top_srcdir)/libtiff/*.lo $(top_srcdir)/libtiff/*.lao \
		$(GEN_IMP_OBJS:.o=.c) \
		$(SHARED_EXES) $(TEST_EXES)
	$(RM) .dirstamp .genimpsources nexports.h
	$(RM) *.log *.trs o-*.tif* o-*.ps o-*.pdf

maintainer-clean: distclean
distclean: clean docs
	-@$(RM) .DS_Store
	$(RM) vernum.h
