# atari/Makefile.in, the source file for atari/Makefile, is
#
# Copyright (c) 2019 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=-O2 -Wall -W -fomit-frame-pointer -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Werror $(CPU_CFLAGS)
CPPFLAGS = -I. -I.. -I$(srcdir)/..
CPPFLAGS += -DHAVE_CONFIG_H -I$(top_srcdir)
SFLAGS = $(CFLAGS) -DBZIP2_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__' | $(CC) -E -P - 2>/dev/null)
ASFLAGS = -D_BasPag=$(USER_LABEL_PREFIX)_base -Wa,--register-prefix-optional

LDFLAGS= -s
LDSHARED=$(CC) -s -nostartfiles -Wl,--mprg-flags,0x0f

STATICLIB=libbz2.a
SHAREDLIB=bz2.slb
IMPORTLIB=libbz2.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)


OBJS = \
	blocksrt.o \
	bzlib.o \
	compress.o \
	crctable.o \
	decompr.o \
	huffman.o \
	randtab.o \
	$(empty)

PIC_OBJS = header.lao libinit.lao $(OBJS:.o=.lao)

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

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

all: static shared

static: $(STATICLIB) 

SHARED_EXES = bzip2$(EXE) bzip2recover$(EXE)

shared: .genimpsources $(SHAREDLIB) $(IMPORTLIB) $(SHARED_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) $(CPPFLAGS) -c $< -o $@

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

check: test

test: all teststatic testshared

teststatic: static

testshared: shared
	@cat $(top_srcdir)/words1
	./bzip2 -1  < $(top_srcdir)/sample1.ref > sample1.rb2
	./bzip2 -2  < $(top_srcdir)/sample2.ref > sample2.rb2
	./bzip2 -3  < $(top_srcdir)/sample3.ref > sample3.rb2
	./bzip2 -d  < $(top_srcdir)/sample1.bz2 > sample1.tst
	./bzip2 -d  < $(top_srcdir)/sample2.bz2 > sample2.tst
	./bzip2 -ds < $(top_srcdir)/sample3.bz2 > sample3.tst
	cmp $(top_srcdir)/sample1.bz2 sample1.rb2 
	cmp $(top_srcdir)/sample2.bz2 sample2.rb2
	cmp $(top_srcdir)/sample3.bz2 sample3.rb2
	cmp sample1.tst $(top_srcdir)/sample1.ref
	cmp sample2.tst $(top_srcdir)/sample2.ref
	cmp sample3.tst $(top_srcdir)/sample3.ref

$(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 =

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

vernum.h: $(top_srcdir)/bzlib_private.h
	echo "#define BZIP2_VERSION "`sed -n 's/.*define BZ_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 $@ $<


bzip2$(EXE): bzip2.lao $(IMPORTLIB)
	$(CC) $(SFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $^

bzip2recover$(EXE): bzip2recover.lao
	$(CC) $(SFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $^


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 $(SHARED_EXES)
	@mkdir -p $(DESTDIR)$(includedir)/slb
	@mkdir -p $(DESTDIR)$(exec_prefix)/bin
	for i in bzlib.h; do \
		install -m 644 $(top_srcdir)/$$i $(DESTDIR)$(includedir); \
	done
	install -m 644 $(srcdir)/slb/bzip2.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)
	$(STRIP) $(DESTDIR)$(exec_prefix)/bin/bzip2$(EXE)

bindist:
	$(MAKE) DESTDIR=/tmp/t/bzip2 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)/bzlib.h $(DESTDIR)/purec/include
	install -m 644 slb/bzip2.h slb/slbids.h $(DESTDIR)/purec/include/slb
	cd $(DESTDIR)/purec/include && cr2nl -R -d .
	install -m 644 $(PUREC)/000/bz2slb.lib $(DESTDIR)/purec/lib/000
	install -m 644 $(PUREC)/020/bz2slb.lib $(DESTDIR)/purec/lib/020
	install -m 644 READ_SLB.txt $(DESTDIR)
	version=`sed -n 's/.*define BZ_VERSION *"\([0-9]*\).\([0-9]*\).\([0-9]*\).*/\1.\2.\3/p' $(top_srcdir)/bzlib_private.h`; \
	shortversion=`echo $$version | tr -d '.'`; \
	( cd $(DESTDIR)/..; rm -f bzip2$${shortversion}.zip; zip -r bzip2$${shortversion}.zip `basename $(DESTDIR)`; ); \
	( cd $(top_srcdir); git archive --prefix=bzip2-$${version}-slb/ HEAD | bzip2 > $(DESTDIR)/../bzip2-$${version}-slb.tar.bz2; )

mostlyclean: clean
clean:
	$(RM) *.o *.lao *.a *.slb $(top_srcdir)/*.o $(top_srcdir)/*.lo \
		$(GEN_IMP_OBJS:.o=.c) \
		$(SHARED_EXES)
	$(RM) .dirstamp .genimpsources nexports.h sample*

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