# Makefile for
# lrzip. This is processed by configure to produce the final
# Makefile
# See README.Assembler for notes about ASM module.

prefix=/usr
exec_prefix=${prefix}
datarootdir=${prefix}/share
ASM_OBJ=7zCrc.o
PACKAGE_TARNAME=lrzip-0.23
INSTALL_BIN=$(exec_prefix)/bin
INSTALL_MAN1=/usr/share/man/man1
INSTALL_DOC=${datarootdir}/doc/${PACKAGE_TARNAME}


LIBS=-llzo2 -lbz2 -lz -lm -lpthread 
CC=gcc
CXX=g++
CFLAGS=-O3 -march=native -I. -I$(srcdir) -Wall -W
CXXFLAGS=-O3 -march=native -I. -I$(srcdir) -Wall -W 
LZMA_CFLAGS=-I./lzma -I./lzma/CPP -I./lzma/CPP/7zip -I./lzma/CPP/myWindows \
	 -I./lzma/CPP/include_windows -DCOMPRESS_MF_MT -D_REENTRANT -c

INSTALLCMD=/usr/bin/install -c
LN_S=ln -s
RM=rm -f
ASM=nasm -f elf


srcdir=.
SHELL=/bin/sh

.SUFFIXES:
.SUFFIXES: .c .o

OBJS= rzip.o runzip.o main.o stream.o util.o \
  LZMADecoder.o \
  LZMAEncoder.o \
  LZOutWindow.o \
  RangeCoderBit.o \
  InBuffer.o \
  OutBuffer.o \
  StreamUtils.o \
  CRC.o \
  $(ASM_OBJ) \
  MatchFinder.o \
  C_FileIO.o \
  Threads.o \
  MatchFinderMt.o \
  LZMALib.o

DOCFILES= AUTHORS ChangeLog COPYING README README-NOT-BACKWARD-COMPATIBLE \
	  TODO WHATS-NEW \
	  doc/README.Assembler doc/README.benchmarks \
	  doc/README.lzo_compresses.test.txt \
	  doc/Current-Benchmarks.txt doc/magic.header.txt

MANFILES= man/lrzip.1

#note that the -I. is needed to handle config.h when using VPATH
.c.o:
	$(CC) $(CFLAGS) $(LZMA_CFLAGS) $< -o $@

all: lrzip man doc

7zCrc.o: ./lzma/C/7zCrc.c
	$(CC) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/C/7zCrc.c

7zCrcT8.o: ./lzma/C/7zCrcT8.c
	$(CC) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/C/7zCrcT8.c

7zCrcT8U.o: ./lzma/ASM/x86/7zCrcT8U.s
	$(ASM) -o 7zCrcT8U.o ./lzma/ASM/x86/7zCrcT8U.s

LZMALib.o: ./lzma/LZMALib.cpp
	$(CXX) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/LZMALib.cpp

LZMADecoder.o:  ./lzma/CPP/7zip/Compress/LZMA/LZMADecoder.cpp
	$(CXX) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/CPP/7zip/Compress/LZMA/LZMADecoder.cpp

LZMAEncoder.o: ./lzma/CPP/7zip/Compress/LZMA/LZMAEncoder.cpp
	$(CXX) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/CPP/7zip/Compress/LZMA/LZMAEncoder.cpp

LZOutWindow.o: ./lzma/CPP/7zip/Compress/LZ/LZOutWindow.cpp
	$(CXX) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/CPP/7zip/Compress/LZ/LZOutWindow.cpp

RangeCoderBit.o: ./lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBit.cpp
	$(CXX) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBit.cpp

InBuffer.o: ./lzma/CPP/7zip/Common/InBuffer.cpp
	$(CXX) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/CPP/7zip/Common/InBuffer.cpp

OutBuffer.o: ./lzma/CPP/7zip/Common/OutBuffer.cpp
	$(CXX) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/CPP/7zip/Common/OutBuffer.cpp

StreamUtils.o: ./lzma/CPP/7zip/Common/StreamUtils.cpp
	$(CXX) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/CPP/7zip/Common/StreamUtils.cpp

C_FileIO.o: ./lzma/CPP/Common/C_FileIO.cpp
	$(CXX) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/CPP/Common/C_FileIO.cpp

CRC.o: ./lzma/CPP/Common/CRC.cpp
	$(CXX) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/CPP/Common/CRC.cpp

Threads.o: ./lzma/C/Threads.c
	$(CC) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/C/Threads.c

MatchFinder.o: ./lzma/C/Compress/Lz/MatchFinder.c
	$(CC) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/C/Compress/Lz/MatchFinder.c

MatchFinderMt.o: ./lzma/C/Compress/Lz/MatchFinderMt.c
	$(CC) $(CFLAGS) $(LZMA_CFLAGS) ./lzma/C/Compress/Lz/MatchFinderMt.c


install: all
	mkdir -p $(DESTDIR)${INSTALL_BIN}
	${INSTALLCMD} -m 755 lrzip $(DESTDIR)${INSTALL_BIN}
	( cd $(DESTDIR)${INSTALL_BIN} && ${LN_S} -f lrzip lrunzip )
	mkdir -p $(DESTDIR)${INSTALL_MAN1}
	${INSTALLCMD} -m 644 $(MANFILES) $(DESTDIR)${INSTALL_MAN1}
	mkdir -p $(DESTDIR)${INSTALL_DOC}
	${INSTALLCMD} -m 644 $(DOCFILES) $(DESTDIR)${INSTALL_DOC}

lrzip: $(OBJS)
	$(CXX) $(CXXFLAGS) -o lrzip $(OBJS) $(LIBS)

static: $(OBJS)
	$(CXX) $(CXXFLAGS) -static -o lrzip $(OBJS) $(LIBS)

clean:
	-${RM} *~ $(OBJS) lrzip config.cache config.log config.status


# obsolete code
# remove from make clean
#cd lzma && make clean && cd ..
#liblzma: 
#	cd lzma && make && cd ..
# man: rzip.1
#lrzip.1: lrzip.yo
#	yodl2man -o lrzip.1 lrzip.yo

#web/lrzip-man.html: lrzip.yo
#	mkdir -p man
#	yodl2html -o web/lrzip-man.html lrzip.yo

#docs: lrzip.1 web/lrzip-man.html

