# Makefile for XZ
# Generated by manually reducing the output from a system using
# GCC 5.1.0 where configure could be run.

BITS ?= 64
WARN=-Wall -Wextra -Wvla -Wformat=2 -Winit-self -Wmissing-include-dirs -Wstrict-aliasing -Wfloat-equal -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wlogical-op -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn -Wredundant-decls
INC=-I. -Isrc/liblzma -Isrc/liblzma/api -Isrc/common -Ilib -Isrc/liblzma/common -Isrc/liblzma/check -Isrc/liblzma/lz -Isrc/liblzma/rangecoder -Isrc/liblzma/lzma -Isrc/liblzma/delta -Isrc/liblzma/simple
XZDEF=-DLOCALEDIR=\"\" -DHAVE_CONFIG_H -D_THREAD_SAFE -pthread -fvisibility=hidden -DTUKLIB_SYMBOL_PREFIX=lzma_
CC=gcc -std=c99
CFLAGS=-m$(BITS) -g -O2 $(XZDEF)

LIBLZMASRC= \
          src/common/tuklib_physmem.c			\
          src/common/tuklib_cpucores.c			\
          src/liblzma/common/common.c				\
          src/liblzma/common/block_util.c			\
          src/liblzma/common/easy_preset.c			\
          src/liblzma/common/filter_common.c			\
          src/liblzma/common/hardware_physmem.c			\
          src/liblzma/common/index.c				\
          src/liblzma/common/stream_flags_common.c		\
          src/liblzma/common/vli_size.c				\
          src/liblzma/common/alone_encoder.c			\
          src/liblzma/common/block_buffer_encoder.c		\
          src/liblzma/common/block_encoder.c			\
          src/liblzma/common/block_header_encoder.c		\
          src/liblzma/common/easy_buffer_encoder.c		\
          src/liblzma/common/easy_encoder.c			\
          src/liblzma/common/easy_encoder_memusage.c		\
          src/liblzma/common/filter_buffer_encoder.c		\
          src/liblzma/common/filter_encoder.c			\
          src/liblzma/common/filter_flags_encoder.c		\
          src/liblzma/common/index_encoder.c			\
          src/liblzma/common/stream_buffer_encoder.c		\
          src/liblzma/common/stream_encoder.c			\
          src/liblzma/common/stream_flags_encoder.c		\
          src/liblzma/common/vli_encoder.c			\
          src/liblzma/common/hardware_cputhreads.c		\
          src/liblzma/common/outqueue.c				\
          src/liblzma/common/stream_encoder_mt.c		\
          src/liblzma/common/alone_decoder.c			\
          src/liblzma/common/auto_decoder.c			\
          src/liblzma/common/block_buffer_decoder.c		\
          src/liblzma/common/block_decoder.c			\
          src/liblzma/common/block_header_decoder.c		\
          src/liblzma/common/easy_decoder_memusage.c		\
          src/liblzma/common/filter_buffer_decoder.c		\
          src/liblzma/common/filter_decoder.c			\
          src/liblzma/common/filter_flags_decoder.c		\
          src/liblzma/common/index_decoder.c			\
          src/liblzma/common/index_hash.c			\
          src/liblzma/common/stream_buffer_decoder.c		\
          src/liblzma/common/stream_decoder.c			\
          src/liblzma/common/stream_flags_decoder.c		\
          src/liblzma/common/vli_decoder.c			\
          src/liblzma/check/check.c				\
          src/liblzma/check/crc32_table.c			\
          src/liblzma/check/crc32_fast.c			\
          src/liblzma/check/crc64_table.c			\
          src/liblzma/check/crc64_fast.c			\
          src/liblzma/check/sha256.c			\
          src/liblzma/lz/lz_encoder.c				\
          src/liblzma/lz/lz_encoder_mf.c			\
          src/liblzma/lz/lz_decoder.c				\
          src/liblzma/lzma/lzma_encoder.c			\
          src/liblzma/lzma/lzma_encoder_presets.c		\
          src/liblzma/lzma/lzma_encoder_optimum_fast.c		\
          src/liblzma/lzma/lzma_encoder_optimum_normal.c	\
          src/liblzma/lzma/fastpos_table.c			\
          src/liblzma/lzma/lzma_decoder.c			\
          src/liblzma/lzma/lzma2_encoder.c			\
          src/liblzma/lzma/lzma2_decoder.c			\
          src/liblzma/rangecoder/price_table.c			\
          src/liblzma/delta/delta_common.c			\
          src/liblzma/delta/delta_encoder.c			\
          src/liblzma/delta/delta_decoder.c			\
          src/liblzma/simple/simple_coder.c			\
          src/liblzma/simple/simple_encoder.c			\
          src/liblzma/simple/simple_decoder.c			\
          src/liblzma/simple/x86.c				\
          src/liblzma/simple/powerpc.c				\
          src/liblzma/simple/ia64.c				\
          src/liblzma/simple/arm.c				\
          src/liblzma/simple/armthumb.c				\
          src/liblzma/simple/sparc.c
LIBLZMAOBJ=$(LIBLZMASRC:.c=.o)

XZSRC = \
          src/xz/args.c				\
          src/xz/coder.c			\
          src/xz/file_io.c			\
          src/xz/hardware.c			\
          src/xz/list.c				\
          src/xz/main.c				\
          src/xz/message.c			\
          src/xz/mytime.c			\
          src/xz/options.c			\
          src/xz/signals.c			\
          src/xz/suffix.c			\
          src/xz/util.c				\
          src/common/tuklib_open_stdxxx.c	\
          src/common/tuklib_progname.c		\
          src/common/tuklib_exit.c		\
          src/common/tuklib_mbstr_width.c	\
          src/common/tuklib_mbstr_fw.c
XZOBJ=$(XZSRC:.c=.o)

TESTEXES= \
    create_compress_files.exe	\
    test_check.exe		\
    test_stream_flags.exe	\
    test_filter_flags.exe	\
    test_block_header.exe	\
    test_index.exe		\
    test_bcj_exact_size.exe

xz.exe: config.h $(LIBLZMAOBJ) $(XZOBJ)
	$(CC) $(CFLAGS) $^ -o $@

clean:
	del /s *.o
	del config.h
	del /s *.exe
	del /q /s /f *.i
	del /q /f compress_*
	del /q /f tmp_compressed tmp_uncompressed
	del /q /f tests\compress_generated_*

config.h: windows/config.h.w$(BITS)
	copy windows\config.h.w$(BITS) config.h

define run-check
	cmd /C "cd tests & $(1) & if errorlevel 1 ( echo FAIL: $(1) & exit 1 ) else ( echo PASS: $(1) )" &&
endef

check: xz.exe $(addprefix tests/,$(TESTEXES))
	@$(foreach test,$(TESTEXES),$(call run-check,$(test))) echo Finished running standalone tests
	@cmd /C windows\test.bat
	@echo Finished running scripted tests

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

%.i: %.c
	$(CC) $(CFLAGS) $(WARN) $(INC) -C -E $< > $@

%.exe: %.o $(LIBLZMAOBJ)
	$(CC) $(CFLAGS) $(WARN) $(INC) $< $(LIBLZMAOBJ) -o $@

