#
#  Makefile for mppdec/mppenc for gcc
#  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

include version


# Name of this Makefile

MAKEFILE = Makefile

# DEBIAN DESTDIR

DESTDIR = `pwd`/debian/musepack-encoder/

# Build static binaries

#BLD_STATIC = 1

# Define, if building with MinGW

#MINGW    = 1

# Select the compiler. Normally gcc is used.

ifndef CC
CC       = gcc
endif
CC3      = gcc -pipe -L/lib
CC_MAJ   = $(shell $(CC) -dumpversion | cut -b 1)
CC_MIN   = $(shell $(CC) -dumpversion | cut -b 3)
TUNE    = $(shell [ $(CC_MAJ)$(CC_MIN) -ge 34 ] && echo tune || echo cpu)


# Select architecture and CPU type with the variable $(ARCH).
# If unset Intel 386 with optimization for Pentium is selected.

ifndef ARCH
ARCH     = -march=i586 -m$(TUNE)=i686
endif

ifdef MINGW
EXEEXT   = .exe
endif

# Paths of several test files for testing
# You don't need them for simple compiling

TEST1    = /Archive/Audio/technik/mpc/SV4test.mpc
TEST2    = /Archive/Audio/technik/mpc/SV5test.mpc
TEST3    = /Archive/Audio/technik/mpc/SV6test.mpc
TEST4    = /Archive/Audio/technik/mpc/SV7test.mpc
TEST5    = '/Archive/Audio/Fury in the Slaughterhouse/Mono -- [02] Generation got its own disease.pac'
TEST6    = /tmp/1.wav
TEST7    = G1.mpc
TEST8    = G2.mpc
TEST9    = /Archive/1.mpc
TEST10   = /Archive/CD.mpc
TEST11   = /tmp/1.wav
TEST12   = /tmp/2.wav

DATE     = `date '+%Y-%m-%d_%H-%M-%S'`
TMPFILE  = /tmp/tmpfile-mpp-$(DATE)-`hostname -f``tty|sed 's,/,-,g'`


# Prioriry used for testing. This should reduce effects of other programs
# while running the benchmark tests. Set to -20 if you are root, 0 otherwise

NICE     = nice -n -20


# Names of several tools

RM_F     = rm -f --
RM_RF    = rm -rf --
CP_F     = cp -f --
MV_F     = mv -f --
STRIP    = strip
CHOWN    = chown
CHMOD    = chmod
MKDIR    = mkdir
CLS      = clear
CAT      = cat
LPAC     = lpac
ZIP      = zip -9
BZIP2    = bzip2 -9
PGP      = pgp
TAR      = tar
LESS     = more
ENCODE   = uuencode
MAIL     = mail
DEVNULL  = /dev/null
LOGFILE  = /dev/tty
#LOGFILE = logfile


# Name of libraries you need for linking

ifndef MINGW
LDADD    = -lm
#LDADD   += -lesd
else
LDADD    = -lwinmm -lws2_32
endif
#LDADD  += -lossaudio
#LDADD  += -lrt
#LDADD  += -lsocket -lnsl


# Directory for object files

OBJDIR = ./o


# Path of additional includes and libs

ifndef MINGW
XINCLDIR = /usr/include
XLIBDIR  = /usr/lib
endif


# Warning options, unset if the compiler makes trouble because of unknown
# options

WARN  = #\
	-Wall                   \
	-pedantic               \
	-W                      \
	-Wshadow                \
	-Wbad-function-cast     \
	-Wcast-align            \
	-Wwrite-strings         \
	-Wconversion            \
	-Wsign-compare          \
	-Wstrict-prototypes     \
	-Wmissing-prototypes    \
	-Wmissing-declarations  \
	-Wnested-externs        \
	-Wno-long-long          \


# Feature select for different optimization versions

# Defined in mppenc.h for win32
ifndef MINGW
FEATURE += -DCVD_FASTLOG
FEATURE += -DFAST_MATH
endif
#FEATURE += -DEXTRA_DECONV
#FEATURE += -DFASTER


# Options for $(STRIP)

STRIPOPT = --remove-section .comment --remove-section .note.ABI-tag --remove-section .note --remove-section .gnu.warning.llseek --remove-section .gnu.version


# Die Zielvariante zum Ausliefern sollte nur 'OPTIM=-O3' und 'WARN=' enthalten,
# damit das Programm berall (alle CPUs, OS und Compiler) bersetzbar ist.

FLAGS = \
	-fomit-frame-pointer -funroll-loops \
	-mno-ieee-fp -ffast-math -pipe

ifneq ($(CC_MAJ),4)
FLAGS += -fmove-all-movables
endif
ifeq ($(CC_MAJ),2)
FLAGS += -malign-jumps=5 -malign-loops=0 -malign-functions=5
else
FLAGS += -falign-jumps=5 -falign-loops=0 -falign-functions=5
# unset optimizations that tend to break mppenc encodings
UNBREAK = \
	-fno-strict-aliasing -fno-gcse \
	-fno-finite-math-only -fno-unsafe-math-optimizations
endif

OPTIM_SPEED = -O2 $(FLAGS) $(UNBREAK)

OPTIM_SIZE = -Os $(FLAGS) $(UNBREAK)

# Options to generate Assembly code for inspecting

ASSEM = -S -fverbose-asm


# Some remaining possible options (time measurement and debugging)

#PROFILE = -DPROFILE
#DEBUG   = -DNDEBUG


#
# Overwrite problematic options which can't be understand by all compilers
#

ifdef USE_GCC272
ARCH        =
FEATURE     =
WARN        =
PROFILE     =
DEBUG       =
XINCLDIR    =
XLIBDIR     =
ASSEM       =
OPTIM_SPEED =
OPTIM_SIZE  =
endif


# Merge all options together for CFLAGS and CFLAG_SIZE

CFLAGS        += $(ARCH) $(FEATURE) $(WARN) $(PROFILE) $(DEBUG) -DMPPDEC_VERSION=\"$(MPPDEC_VERSION)\" -DMPPENC_VERSION=\"$(MPPENC_VERSION)\"
ifndef MINGW
CFLAGS       += -I$(XINCLDIR) -L$(XLIBDIR)
endif
#CFLAGS      += $(ASSEM)
CFLAGS_SIZE   = $(CFLAGS) $(OPTIM_SIZE)
CFLAGS       += $(OPTIM_SPEED)


# Name and Options for NASM, the Netwide Assembler

NASM          = nasm
ifndef MINGW
NASMFLAGS     = -f elf
else
NASMFLAGS     = -f win32
endif


# Another optimization for the Pentium Classic (60...200 MHz) and Pentium MMX (166...233 MHz)

ifdef PENTIUM
NASMFLAGS    += -DUSE_FXCH
endif


# Targets and general dependencies

MPPDEC_TARGET    = mppdec
MPPENC_TARGET    = mppenc$(EXEEXT)
STREAM_TARGET    = streamserver
REPLAY_TARGET    = replaygain$(EXEEXT)
CLIPSTAT_TARGET  = clipstat
TAGGER_TARGET    = tagger
ALL_TARGETS      = $(MPPENC_TARGET) $(REPLAY_TARGET)

OTHER_DEPEND_ASM = $(MAKEFILE) tools.inc version
OTHER_DEPEND_DEC = $(MAKEFILE) mppdec.h mpp.h config.h profile.h version
OTHER_DEPEND_ENC = $(OTHER_DEPEND_DEC) mppenc.h minimax.h


# Lists of object and C files

MPPDEC_OBJ = cpu_feat.o decode.o http.o huffsv7.o huffsv46.o id3tag.o mppdec.o profile.o requant.o synth.o synthasm.o synthtab.o toolsd.o wave_out.o stderr.o _setargv.o
MPPDEC_SRC =            decode.c http.c huffsv7.c huffsv46.c id3tag.c mppdec.c profile.c requant.c synth.c            synthtab.c tools.c  wave_out.c stderr.c _setargv.c
MPPDEC_ASO = cpu_feat.o                                                                                     synthasm.o


MPPENC_OBJ = analy_filter.o ans.o bitstream.o cvd.o fft4g.o fft4gasm.o fft_routines.o mppenc.o profile.o psy.o psy_tab.o quant.o huffsv7e.o encode_sv7.o wave_in.o tags.o toolse.o fastmath.o pipeopen.o stderr.o regress.o keyboard.o
ifdef MINGW
MPPENC_OBJ += winmsg.o
endif
MPPENC_SRC = analy_filter.c ans.c bitstream.c cvd.c fft4g.c            fft_routines.c mppenc.c profile.c psy.c psy_tab.c quant.c huffsv7.c  encode_sv7.c wave_in.c tags.c tools.c  fastmath.c pipeopen.c stderr.c regress.c keyboard.c
ifdef MINGW
MPPENC_SRC += winmsg.c
endif
MPPENC_ASO =                                                fft4gasm.o


REPLAY_OBJ = replaygain.o gain_analysis.o pipeopen.o stderr.o _setargv.o
REPLAY_SRC = replaygain.c gain_analysis.c pipeopen.c stderr.c _setargv.c
REPLAY_ASO =


CLIPSTAT_OBJ = clipstat.o pipeopen.o stderr.o
CLIPSTAT_SRC = clipstat.c pipeopen.c stderr.c
CLIPSTAT_ASO =


# Files for source packages

MPPDEC_PACKAGE = $(MPPDEC_SRC) AUTHORS CHANGES COPYING.LGPL ChangeLog INSTALL NEWS README SV7.txt MANUAL.TXT SHOWDIFFS version *.mak streamserver.c HowToRea.txt $(MAKEFILE) Makefile.nol Makefile.bsd Makefile.sun Makefile.BeOS Makefile.Darwin Makemsc.bat Maketcc.bat Makeztc.bat Makeztc.res Makeztc.ret Makeintel.bat config.c config.dsp streamserver.dsp udp_server_client.c msr.h cpu_feat.nas dump.c mppdec.dsp mpp.dsw mpp.h mpp.prj mppdec.h profile.h synthasm.nas tools.inc replaygain.c replaygain.dsp gain_analysis.[ch] pipeopen.[ch] _setargv.c name.c name.dsp
MPPENC_PACKAGE = $(MPPENC_SRC) TODO minimax.h mppenc.dsp mppenc.h fastmath.h winmsg.c A-*.txt fft4gasm.nas predict.h
WINAMP_PACKAGE = winamp/COPYING.LGPL winamp/INFO.txt winamp/README_mpc-plugin_english.txt winamp/README_mpc-plugin_finnish.txt winamp/README_mpc-plugin_german.txt winamp/README_mpc-plugin_korean.txt winamp/README_mpc-plugin_spanish.txt winamp/TODO winamp/bitstream.cpp winamp/bitstream.h winamp/colorbar-klemm.bmp winamp/colorbar-korean.bmp winamp/colorbar-old.bmp winamp/colorbar.bmp winamp/config.cpp winamp/http.cpp winamp/huffsv46.cpp winamp/huffsv46.h winamp/huffsv7.cpp winamp/huffsv7.h winamp/idtag.cpp winamp/idtag.h winamp/in2.h winamp/in_mpc.cpp winamp/in_mpc.dsp winamp/in_mpc.dsw winamp/in_mpc.h winamp/jnetlib/Makefile winamp/jnetlib/asyncdns.cpp winamp/jnetlib/asyncdns.h winamp/jnetlib/connection.cpp winamp/jnetlib/connection.h winamp/jnetlib/httpget.cpp winamp/jnetlib/httpget.h winamp/jnetlib/httpserv.cpp winamp/jnetlib/httpserv.h winamp/jnetlib/jnetlib.h winamp/jnetlib/listen.cpp winamp/jnetlib/listen.h winamp/jnetlib/netinc.h winamp/jnetlib/sercon.cpp winamp/jnetlib/sercon.h winamp/jnetlib/test.cpp winamp/jnetlib/test.dsp winamp/jnetlib/test.dsw winamp/jnetlib/udpconnection.cpp winamp/jnetlib/udpconnection.h winamp/jnetlib/util.cpp winamp/jnetlib/util.h winamp/language.h winamp/logo.bmp winamp/minimax.h winamp/mpc_dec.cpp winamp/mpc_dec.h winamp/out.h winamp/requant.cpp winamp/requant.h winamp/resource.h winamp/resource.hm winamp/synth_filter.cpp winamp/synth_filter.h winamp/tag-korean.rc winamp/tag.rc winamp/tagz.cpp winamp/tagz.h winamp/unihack.cpp winamp/ws_exp.h winamp/ws_loader.c winamp/ws_loader.h
XMMS_PACKAGE   = COPYING.LGPL xmms/ChangeLog xmms/in_mpc.c xmms/Makefile xmms/README_mpc-plugin_*.txt xmms/bitstream.[ch] xmms/huffsv{46,7}.[ch] xmms/minimax.h xmms/mpc_dec.[ch] xmms/mpplus_blue.xpm xmms/requant.[ch] xmms/synth_filter.[ch] xmms/xmms-musepack.spec xmms/xmms.dsp


# may be megabytes of Trash

TRASH       = ./*.o ./*.obj ./*.lst {$(MPPDEC_TARGET),$(MPPENC_TARGET)}{,-static,-diet} $(STREAM_TARGET) a.out ./*.da ./*.s $(REPLAY_TARGET)
AUX_TRASH   = ./*~ ./*/*~ ./*.bak ./.*~ DEADJOE mpp.lib config.h config .logging website/{*~,*/*~} report-*.txt .{,/*}/{Release,Debug}/*.{obj,pch,pdb,sbr,ilk,idb,exp,res} ./*.{plg,ncb,opt}
BACKUP_EXCL = *.mpc website/audio/* website/audio2/* website/audio3/* website/bin/* website/img/* i/* mpp{enc,dec}-[0-9].[0-9][0-9][a-z]/* rfc*.txt.bz2


# Broadcast destinations

BROADCAST_MPPDEC = busch piecha pfk zeiss case@mobiili.net steve.lhomme@free.fr Nicolaus.Berglmeir@t-online.de
BROADCAST_MPPENC = Andree.Buschmann@web.de patrick.piecha@micronas.com pfk f.klemm@zeiss.de Nicolaus.Berglmeir@t-online.de


########################################################################################
#
# Compile source packages

all:    $(ALL_TARGETS)


$(MPPDEC_TARGET): $(MPPDEC_OBJ)
ifndef BLD_STATIC
	$(CC)         $(CFLAGS) $(MPPDEC_OBJ) -o $(MPPDEC_TARGET)        $(LDADD)
#	-$(STRIP)     $(STRIPOPT)                $(MPPDEC_TARGET)
else
	$(CC) -static $(CFLAGS) $(MPPDEC_OBJ) -o $(MPPDEC_TARGET)-static $(LDADD)
#	-$(STRIP)     $(STRIPOPT)                $(MPPDEC_TARGET)-static
endif


$(MPPDEC_TARGET)16: $(MPPDEC_OBJ)
	make clean
	BITS=16 make mppdec
	$(MV_F) mppdec mppdec16
	$(MV_F) mppdec-static mppdec16-static


$(MPPDEC_TARGET)24: $(MPPDEC_OBJ)
	make clean
	BITS=24 make mppdec
	$(MV_F) mppdec mppdec24
	$(MV_F) mppdec-static mppdec24-static


$(MPPDEC_TARGET)32: $(MPPDEC_OBJ)
	make clean
	BITS=32 make mppdec
	$(MV_F) mppdec mppdec32
	$(MV_F) mppdec-static mppdec32-static


$(MPPENC_TARGET): $(MPPENC_OBJ)
ifndef BLD_STATIC
	$(CC)         $(CFLAGS) $(MPPENC_OBJ) -o $(MPPENC_TARGET)        $(LDADD)
#	-$(STRIP)     $(STRIPOPT)                $(MPPENC_TARGET)
else
	$(CC) -static $(CFLAGS) $(MPPENC_OBJ) -o $(MPPENC_TARGET)-static $(LDADD)
#	-$(STRIP)     $(STRIPOPT)                $(MPPENC_TARGET)-static
endif


$(MPPDEC_TARGET)-profiling: $(MPPDEC_OBJ)
	$(CC3) -c      $(CFLAGS) $(CSRC)                            -fprofile-arcs         $(LDADD)
	$(CC3)         $(CFLAGS) $(OBJ)  -o $(MPPDEC_TARGET)        -fprofile-arcs         $(LDADD)
	make
	make speed2
	$(CC3) -c      $(CFLAGS) $(CSRC)                            -fprofile-arcs         $(LDADD)
	$(CC3)         $(CFLAGS) $(OBJ)  -o $(MPPDEC_TARGET)        -fbranch-probabilities $(LDADD)
	$(CC3) -static $(CFLAGS) $(OBJ)  -o $(MPPDEC_TARGET)-static -fbranch-probabilities $(LDADD)


$(MPPDEC_TARGET)-diet:   $(MPPDEC_ASO) config.h
	diet $(CC) $(CFLAGS) -DUSE_DIET -DNDEBUG $(MPPDEC_SRC) $(MPPDEC_ASO) -o $(MPPDEC_TARGET)-diet
	elftrunc $(MPPDEC_TARGET)-diet $(MPPDEC_TARGET)-diet


$(MPPENC_TARGET)-diet:   $(MPPENC_ASO) config.h
	diet $(CC) $(CFLAGS) -DUSE_DIET -DNDEBUG $(MPPENC_SRC) $(MPPENC_ASO) -o $(MPPENC_TARGET)-diet
	elftrunc $(MPPENC_TARGET)-diet $(MPPENC_TARGET)-diet


$(STREAM_TARGET):
	$(CC) -DMPP_DECODER $(CFLAGS) -o $(STREAM_TARGET) $(STREAM_TARGET).c
	-$(STRIP)     $(STRIPOPT)           $(STREAM_TARGET)


$(REPLAY_TARGET): $(REPLAY_OBJ) mpp.h config.c
	$(CC) $(CFLAGS) $(REPLAY_OBJ) -o $(REPLAY_TARGET)      $(LDADD)
#	-$(STRIP)     $(STRIPOPT)           $(REPLAY_TARGET)


$(TAGGER_TARGET):
	$(CC) -DMPP_DECODER $(CFLAGS) -o $(TAGGER_TARGET) $(TAGGER_TARGET).c
	-$(STRIP)     $(STRIPOPT)           $(TAGGER_TARGET)


$(CLIPSTAT_TARGET):
	$(CC)         $(CFLAGS) $(CLIPSTAT_OBJ) -o $(CLIPSTAT_TARGET)  $(LDADD)
	-$(STRIP)     $(STRIPOPT)           $(CLIPSTAT_TARGET)


###########################################################################################
#
# Compile mppdec source code files

config.h: mpp.h config.c
	$(CC) -DMPP_DECODER $(CFLAGS) -o config config.c   $(LDADD) &> $(LOGFILE)
	@$(RM_F) config.h
	@./config "$(CC) $(CFLAGS) -o <<EXE>> <<SRC>> $(LDADD)" "./<<EXE>>"
	@$(RM_F) config


decode.o:   $(OTHER_DEPEND_DEC) dump.c
	$(CC) -c -DMPP_DECODER $(CFLAGS) decode.c

http.o:     $(OTHER_DEPEND_DEC)
	$(CC) -c -DMPP_DECODER $(CFLAGS) http.c

huffsv7.o: $(OTHER_DEPEND_DEC)
	$(CC) -c -DMPP_DECODER $(CFLAGS_SIZE) huffsv7.c

huffsv46.o: $(OTHER_DEPEND_DEC)
	$(CC) -c -DMPP_DECODER $(CFLAGS_SIZE) huffsv46.c

id3tag.o:   $(OTHER_DEPEND_DEC)
	$(CC) -c -DMPP_DECODER $(CFLAGS_SIZE) id3tag.c

mppdec.o:   $(OTHER_DEPEND_DEC)
	$(CC) -c -DMPP_DECODER $(CFLAGS) mppdec.c

profile.o:  $(OTHER_DEPEND_DEC)
	$(CC) -c -DMPP_DECODER $(CFLAGS) profile.c

requant.o:  $(OTHER_DEPEND_DEC)
	$(CC) -c -DMPP_DECODER $(CFLAGS_SIZE) requant.c

synth.o:    $(OTHER_DEPEND_DEC)
	$(CC) -c -DMPP_DECODER $(CFLAGS) -fno-omit-frame-pointer -O synth.c

synthtab.o: $(OTHER_DEPEND_DEC)
	$(CC) -c -DMPP_DECODER $(CFLAGS) synthtab.c

toolsd.o:    $(OTHER_DEPEND_DEC)
	$(CC) -c -DMPP_DECODER -o toolsd.o $(CFLAGS) tools.c

wave_out.o: $(OTHER_DEPEND_DEC)
	$(CC) -c -DMPP_DECODER $(CFLAGS) wave_out.c

synthasm.o: $(OTHER_DEPEND_ASM) synthasm.nas
	$(RM_F) synthasm.lst
	$(NASM) $(NASMFLAGS) synthasm.nas -o synthasm.o -l synthasm.lst

cpu_feat.o: $(OTHER_DEPEND_ASM) cpu_feat.nas
	$(RM_F) cpu_feat.lst
	$(NASM) $(NASMFLAGS) cpu_feat.nas -o cpu_feat.o -l cpu_feat.lst


################################################################################
#
# Compile mppenc source code files

wave_in.o:      $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER wave_in.c

psy.o:          $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER psy.c

ans.o:          $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER ans.c

cvd.o:          $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER cvd.c

huffsv7e.o:    $(OTHER_DEPEND_ENC)
	$(CC) -o huffsv7e.o -c $(CFLAGS_SIZE) -DMPP_ENCODER huffsv7.c

encode_sv7.o:   $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER encode_sv7.c

bitstream.o:    $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER bitstream.c

analy_filter.o: $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER analy_filter.c

quant.o:        $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER quant.c

fft4g.o:        $(OTHER_DEPEND_ENC) fft4g.c
	$(CC) -c $(CFLAGS) -DMPP_ENCODER -fno-omit-frame-pointer -O fft4g.c

fft4gasm.o:     $(OTHER_DEPEND_ASM) fft4gasm.nas
	$(NASM) $(NASMFLAGS) fft4gasm.nas -o fft4gasm.o -l fft4gasm.lst

fft_routines.o: $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER fft_routines.c

psy_tab.o:      $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER psy_tab.c

mppenc.o:       $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER mppenc.c

toolse.o:    $(OTHER_DEPEND_ENC)
	$(CC) -o toolse.o -c $(CFLAGS) -DMPP_ENCODER tools.c

tags.o:    $(OTHER_DEPEND_ENC)
	$(CC) -o tags.o -c $(CFLAGS) -DMPP_ENCODER tags.c

keyboard.o:       $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER keyboard.c

winmsg.o:       $(OTHER_DEPEND_ENC)
	$(CC) -c $(CFLAGS) -DMPP_ENCODER winmsg.c

################################################################################
#
# Compile replaygain source code files

replaygain.o:
	$(CC) -c $(CFLAGS) -DMPP_DECODER replaygain.c

gain_analysis.o:
	$(CC) -c $(CFLAGS) -DMPP_DECODER gain_analysis.c

pipeopen.o:
	$(CC) -c $(CFLAGS_SIZE) -DMPP_DECODER pipeopen.c

stderr.o:
	$(CC) -c $(CFLAGS_SIZE) -DMPP_DECODER stderr.c

fastmath.o:
	$(CC) -c $(CFLAGS_SIZE) -DMPP_ENCODER fastmath.c

clipstat.o:
	$(CC) -c $(CFLAGS_SIZE) -DMPP_DECODER clipstat.c

_setargv.o:
	$(CC) -c $(CFLAGS_SIZE) -DMPP_DECODER _setargv.c

####################################################################################

list:	list.o pipeopen.o _setargv.o stderr.o
	$(CC) $(CFLAGS_SIZE) -DMPP_ENCODER -o list list.o pipeopen.o _setargv.o stderr.o -lm

list.o:	list.c
	$(CC) -c $(CFLAGS_SIZE) -DMPP_ENCODER list.c


###############################################################################################
#
# Cleaning and removing unnecessary files

clean:
	@$(RM_F) $(TRASH)


mrproper:
	@$(RM_F) $(TRASH) $(AUX_TRASH)


###############################################################################################
#
# Speed tests and function tests

speedd1:
	@$(CAT)  "$(TEST9)" "$(MPPDEC_TARGET)" > $(DEVNULL)
	@$(CAT)  "$(TEST9)" "$(MPPDEC_TARGET)" > $(DEVNULL)
	@$(NICE) time ./mppdec       "$(TEST9)"  $(DEVNULL)
	@$(NICE) ../decorig/mppdec   "$(TEST9)"  $(DEVNULL)


speedd2:
	@$(CAT)  "$(TEST10)" "$(MPPDEC_TARGET)"   > $(DEVNULL)
	@$(CAT)  "$(TEST10)" "$(MPPDEC_TARGET)"   > $(DEVNULL)
	@$(NICE) time ./mppdec          "$(TEST10)" $(DEVNULL)
	@$(NICE) time ./mppdec          "$(TEST10)" $(DEVNULL)
	@$(NICE) time ../decorig/mppdec "$(TEST10)" $(DEVNULL)


testd1:
	./mppdec           "$(TEST4)" $(TEST11)
	../decorig/mppdec "$(TEST4)" $(TEST12)
	./wavcmp $(TEST11) $(TEST12) | $(LESS)
	$(RM_F) $(TEST11) $(TEST12)


testd2:
	@./mppdec          "$(TEST9)" $(TEST11)
	@../decorig/mppdec "$(TEST9)" $(TEST12)
	@./wavcmp $(TEST11) $(TEST12) | $(LESS)
	@$(RM_F) $(TEST11) $(TEST12)


testd3:
	@./mppdec          "$(TEST4)" $(TEST11)
	@../decorig/mppdec "$(TEST4)" $(TEST12)
	@./wavcmp $(TEST11) $(TEST12) > $(TMPFILE)
	@$(RM_F) $(TEST11) $(TEST12)
	@./mppdec          "$(TEST3)" $(TEST11)
	@../decorig/mppdec "$(TEST3)" $(TEST12)
	@./wavcmp $(TEST11) $(TEST12) >> $(TMPFILE)
	@$(RM_F) $(TEST11) $(TEST12)
	@./mppdec          "$(TEST2)" $(TEST11)
	@../decorig/mppdec "$(TEST2)" $(TEST12)
	@./wavcmp $(TEST11) $(TEST12) >> $(TMPFILE)
	@$(RM_F) $(TEST11) $(TEST12)
	@./mppdec          "$(TEST1)" $(TEST11)
	@../decorig/mppdec "$(TEST1)" $(TEST12)
	@./wavcmp $(TEST11) $(TEST12) >> $(TMPFILE)
	@$(RM_F) $(TEST11) $(TEST12)
	@$(LESS) $(TMPFILE)
	@$(RM_F) $(TMPFILE)


testd4:
	@./mppdec          "$(TEST1)" $(TEST11)
	@../decorig/mppdec "$(TEST1)" $(TEST12)
	@./wavcmp $(TEST11) $(TEST12) >> $(TMPFILE)
	@$(RM_F) $(TEST11) $(TEST12)


speede1:
	@-$(RM_F) $(TEST7) $(TEST8)
	@$(LPAC) -x $(TEST5) $(TEST6)
	@$(CAT) $(TEST6) > $(DEVNULL)
	@./$(MPPENC_TARGET) $(TEST6) $(TEST7)
	@$(CAT) $(TEST6) > $(DEVNULL)
	@../encorig/mppenc $(TEST6) $(TEST8)


speede2:
	@-$(RM_F) $(TEST7) $(TEST8)
	@$(CAT) $(TEST6) ./$(MPPENC_TARGET) > $(DEVNULL)
	@$(NICE) ./$(MPPENC_TARGET) $(TEST6) $(TEST7)
	@$(CAT) $(TEST6) > $(DEVNULL)
	@../encorig/mppenc $(TEST6) $(TEST8)


#################################################################################################################
#
# Backup of important files

backup:
	@make clean
	@$(ZIP) -r ../codec_$(DATE).zip ./* -x $(BACKUP_EXCL)


#################################################################################################################
#
# Installing all binary files

##install:
##	@make
##	@-mount -o remount,rw /usr &> $(DEVNULL)
##	@-$(CP_F)                      {mppdec,mppdec16,mppdec24,mppdec32,mppenc}{,-static,-diet} /usr/local/bin
##	@-$(CHOWN)  0.0 /usr/local/bin/{mppdec,mppdec16,mppdec24,mppdec32,mppenc}{,-static,-diet}
##	@-$(CHMOD) 4755 /usr/local/bin/{mppdec,mppdec16,mppdec24,mppdec32,mppenc}{,-static,-diet}
##	@-$(CP_F)                      replaygain                                                 /usr/local/bin

install:
	@make
	install -m 0755 mppenc$(EXEEXT) $(DESTDIR)/usr/bin/


installv:
	@make clean
	@make mppenc
	@-mount -o remount,rw /usr &> $(DEVNULL)
	@-$(CP_F)                      mppenc /usr/local/bin/mppenc-${MPPENC_VERSION}
	@-mount -o remount,ro /usr &> $(DEVNULL)


websrc:
	@chmod 755 Remove.tab
	@./Remove.tab -v {.,*,*/*,*/*/*,*/*/*/*}/*.{c,cpp,h,inc,nas,txt,htm,html}
	@make mrproper
	@$(RM_F) website/src/{mppdec,mppenc,winamp,xmms}-*.{tar.gz,tar.bz2,tar.Z,zip,pgp}
	@-$(MKDIR) mppdec-${MPPDEC_VERSION} mppenc-${MPPENC_VERSION} winamp-${WINAMP_VERSION} xmms-${XMMS_VERSION}
	@$(CP_F) $(MPPDEC_PACKAGE) mppdec-${MPPDEC_VERSION}
	@$(CP_F) $(MPPENC_PACKAGE) mppenc-${MPPENC_VERSION}
	@$(CP_F) $(WINAMP_PACKAGE) winamp-${WINAMP_VERSION}
	@$(CP_F) $(XMMS_PACKAGE)   xmms-${XMMS_VERSION}
	@-$(CHOWN) -R nobody.nogroup mppdec-${MPPDEC_VERSION} mppenc-${MPPENC_VERSION} winamp-${WINAMP_VERSION} xmms-${XMMS_VERSION}
	@$(TAR) cf - mppdec-${MPPDEC_VERSION} | bzip2 -9 > website/src/mppdec-${MPPDEC_VERSION}.tar.bz2
	@$(TAR) cf - mppenc-${MPPENC_VERSION} | bzip2 -9 > website/src/mppenc-${MPPENC_VERSION}.tar.bz2
	@$(TAR) cf - winamp-${WINAMP_VERSION} | bzip2 -9 > website/src/winamp-${WINAMP_VERSION}.tar.bz2
	@$(TAR) cf - xmms-${XMMS_VERSION}     | bzip2 -9 > website/src/xmms-${XMMS_VERSION}.tar.bz2
	@$(RM_RF) mppdec-${MPPDEC_VERSION} mppenc-${MPPENC_VERSION} winamp-${WINAMP_VERSION} xmms-${XMMS_VERSION}
	@$(PGP) -e website/src/mppenc-${MPPENC_VERSION}.tar.bz2 MPEGplus
	@$(CHMOD) 644 website/src/*


zip:
	@make websrc
	@/usr/local/bin/gz website/src/mpp*.tar.bz2
	@-mdel z:mpp??c*.tar.gz
	@-mcopy website/src/mpp??c*.tar.gz z:
	@-mdel a:mpp??c*.tar.gz
	@-mcopy website/src/mpp??c*.tar.gz a:


send:
	@make websrc
	@make onlysendsource


onlysendsource:
	@echo Sending Sources ...
	@$(ENCODE) website/src/mppdec-${MPPDEC_VERSION}.tar.bz2 website/src/mppdec-${MPPDEC_VERSION}-$(DATE).tar.bz2     | $(MAIL) -s "Source Decoder (${MPPDEC_VERSION}) ($(DATE))" $(BROADCAST_MPPDEC)
	@$(ENCODE) website/src/mppenc-${MPPENC_VERSION}.tar.bz2 website/src/mppenc-${MPPENC_VERSION}-$(DATE).tar.bz2.pgp | $(MAIL) -s "Source Encoder (${MPPENC_VERSION}) ($(DATE))" $(BROADCAST_MPPENC)
	@$(ENCODE) website/src/winamp-${WINAMP_VERSION}.tar.bz2 website/src/winamp-${WINAMP_VERSION}-$(DATE).tar.bz2     | $(MAIL) -s "Source WinAmp  (${WINAMP_VERSION}) ($(DATE))" $(BROADCAST_MPPDEC)
	@$(ENCODE) website/src/xmms-${XMMS_VERSION}.tar.bz2     website/src/xmms-${XMMS_VERSION}-$(DATE).tar.bz2         | $(MAIL) -s "Source XMMS    (${XMMS_VERSION}) ($(DATE))" $(BROADCAST_MPPDEC)
	@echo -e 'Bei Modifikationen bitte einsenden:\n\n\tQuelle (Zeitstempel der Mail: '$(DATE)')\n\tModifikationen bestimmt mit diff -abBU5 alteDatei neueDatei\n\nFrank Klemm (pfk@fuchs.offl.uni-jena.de)\n ' | $(MAIL) -s "Hinweis" $(BROADCAST)


onlysendbinary:
	@make
	@$(BZIP2) < mppdec-static | $(ENCODE) mppdec-${MPPDEC_VERSION}-linux-IA32-libc6-static.bz2 | $(MAIL) -s "Programm D" $(BROADCAST)
	@$(BZIP2) < mppenc-static | $(ENCODE) mppenc-${MPPENC_VERSION}-linux-IA32-libc6-static.bz2 | $(MAIL) -s "Programm E" $(BROADCAST)


#################################################################################################################
#
#

linux:
	@USE_GCC272=yes make


linstall: linux
	@$(CP_F) $(MPPDEC_TARGET) ~/bin1/mppdec_pp
	@$(CP_F) $(MPPENC_TARGET) ~/bin1/mppenc_pp
	@$(CP_F) $(REPLAY_TARGET) ~/bin1/replaygain_pp


solaris:
	@USE_GCC272=yes _SUNOS=yes make


sinstall: solaris
	@$(CP_F) $(MPPDEC_TARGET) ~/bin/mppdec_pp
	@$(CP_F) $(MPPENC_TARGET) ~/bin/mppenc_pp
	@$(CP_F) $(REPLAY_TARGET) ~/bin/replaygain_pp


######### end of Makefile ###################################################################################


