CC = gcc
NASM = nasm
USE_MMX = 0
USE_CSS = 1



ifeq ($(origin CFLAGS), environment)
HAVE_CFLAGS := yes
else
HAVE_CFLAGS := no
endif


OBJDIR := $(shell uname --machine)

$(shell sh -c 'if ! test -d $(OBJDIR)\; then \
	mkdir $(OBJDIR)\; \
	mkdir $(OBJDIR)/audio\; \
	mkdir $(OBJDIR)/video\; fi' )




ifeq ($(OBJDIR), alpha)
  USE_MMX = 0
  ifneq ($(HAVE_CFLAGS), yes)
    CFLAGS = -O4 -arch ev67 -ieee -accept c99_keywords -gcc_messages
  endif
endif

ifeq ($(OBJDIR), i686)
  USE_MMX = 1
  ifneq ($(HAVE_CFLAGS), yes)
    CFLAGS = -O2 -D_FILE_OFFSET_BITS=64 -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2 -I/usr/local/include
  endif
endif


ifeq ($(USE_CSS), 1)
  CFLAGS += -DHAVE_CSS
endif

ifeq ($(USE_MMX), 1)
  CFLAGS += -DHAVE_MMX
  ASMOBJS = $(OBJDIR)/video/mmxidct.o
  NASMOBJS = $(OBJDIR)/video/reconmmx.o
endif








#CFLAGS += -g







UTILOBJS = \
	$(OBJDIR)/mpeg3cat.o \
	$(OBJDIR)/mpeg3dump.o \
	$(OBJDIR)/mpeg3split.o \
	$(OBJDIR)/mpeg3toc.o


OBJS = \
	$(OBJDIR)/bitstream.o \
	$(OBJDIR)/libmpeg3.o \
	$(OBJDIR)/mpeg3atrack.o \
	$(OBJDIR)/mpeg3css.o \
	$(OBJDIR)/mpeg3demux.o \
	$(OBJDIR)/mpeg3ifo.o \
	$(OBJDIR)/mpeg3io.o \
	$(OBJDIR)/mpeg3title.o \
	$(OBJDIR)/mpeg3vtrack.o \
	$(OBJDIR)/audio/ac3.o \
	$(OBJDIR)/audio/bit_allocation.o \
	$(OBJDIR)/audio/dct.o \
	$(OBJDIR)/audio/exponents.o \
	$(OBJDIR)/audio/header.o \
	$(OBJDIR)/audio/layer2.o \
	$(OBJDIR)/audio/layer3.o \
	$(OBJDIR)/audio/mantissa.o \
	$(OBJDIR)/audio/mpeg3audio.o \
	$(OBJDIR)/audio/pcm.o \
	$(OBJDIR)/audio/synthesizers.o \
	$(OBJDIR)/audio/tables.o \
	$(OBJDIR)/video/getpicture.o \
	$(OBJDIR)/video/headers.o \
	$(OBJDIR)/video/idct.o \
	$(OBJDIR)/video/macroblocks.o \
	$(OBJDIR)/video/mmxtest.o \
	$(OBJDIR)/video/motion.o \
	$(OBJDIR)/video/mpeg3video.o \
	$(OBJDIR)/video/output.o \
	$(OBJDIR)/video/reconstruct.o \
	$(OBJDIR)/video/seek.o \
	$(OBJDIR)/video/slice.o \
	$(OBJDIR)/video/vlc.o \
	$(OBJDIR)/workarounds.o

OUTPUT = $(OBJDIR)/libmpeg3.a
SHAREDOUTPUT = $(OBJDIR)/libmpeg3.so
UTILS = $(OBJDIR)/mpeg3dump $(OBJDIR)/mpeg3cat $(OBJDIR)/mpeg3toc $(OBJDIR)/mpeg3split
LIBS = -lm -lpthread


$(shell echo $(CFLAGS) > $(OBJDIR)/c_flags)


all: $(OUTPUT) $(SHAREDOUTPUT) util

$(OUTPUT): $(OBJS) $(ASMOBJS) $(NASMOBJS) $(UTILOBJS)
	ar rcs $(OUTPUT) $(OBJS) $(ASMOBJS) $(NASMOBJS)

$(SHAREDOUTPUT): $(OBJS) $(ASMOBJS) $(NASMOBJS)
	gcc -shared -o $(SHAREDOUTPUT) $(OBJS) $(ASMOBJS) $(NASMOBJS)

$(OBJDIR)/mpeg3dump: $(OUTPUT)
	$(CC) -o $(OBJDIR)/mpeg3dump mpeg3dump.c $(OUTPUT) $(LIBS)

$(OBJDIR)/mpeg3cat: $(OUTPUT)
	$(CC) -o $(OBJDIR)/mpeg3cat mpeg3cat.c $(OUTPUT) $(LIBS)

$(OBJDIR)/mpeg3toc: $(OUTPUT)
	$(CC) -o $(OBJDIR)/mpeg3toc mpeg3toc.c $(OUTPUT) $(LIBS)

$(OBJDIR)/mpeg3split: $(OUTPUT)
	$(CC) -o $(OBJDIR)/mpeg3split mpeg3split.c $(OUTPUT) $(LIBS)

$(OBJDIR)/mpeg2qt: $(OUTPUT)
	$(CC) -o $(OBJDIR)/mpeg2qt mpeg2qt.c \
		$(OUTPUT) \
		$(LIBS) \
		-I. \
		-I../quicktime \
		../quicktime/$(OBJDIR)/libquicktime.a \
		-lpng \
		-lz \
		-ldl

util: $(UTILS)

install: 
	cp $(UTILS) /usr/bin

clean:
	rm -rf $(OBJDIR)

backup: clean
	cd .. && \
	tar zcf libmpeg3.tar.gz libmpeg3

wc:
	cat *.c *.h audio/*.c audio/*.h video/*.c video/*.h | wc

$(OBJS): 
	$(CC) -c `cat $(OBJDIR)/c_flags` $(subst $(OBJDIR)/,, $*.c) -o $*.o
$(ASMOBJS): 
	$(CC) -c `cat $(OBJDIR)/c_flags` $(subst $(OBJDIR)/,, $*.S) -o $*.o
$(NASMOBJS): 
	$(NASM) -f elf $(subst $(OBJDIR)/,, $*.s) -o $*.o

$(OBJDIR)/bitstream.o:  			    bitstream.c
$(OBJDIR)/mpeg3dump.o: 				    mpeg3dump.c
$(OBJDIR)/libmpeg3.o: 				    libmpeg3.c
$(OBJDIR)/mpeg3atrack.o: 			    mpeg3atrack.c
$(OBJDIR)/mpeg3cat.o: 				    mpeg3cat.c
$(OBJDIR)/mpeg3css.o: 				    mpeg3css.c
$(OBJDIR)/mpeg3demux.o: 			    mpeg3demux.c
$(OBJDIR)/mpeg3ifo.o: 				    mpeg3ifo.c
$(OBJDIR)/mpeg3io.o: 				    mpeg3io.c
$(OBJDIR)/mpeg3split.o: 			    mpeg3split.c
$(OBJDIR)/mpeg3title.o: 			    mpeg3title.c
$(OBJDIR)/mpeg3toc.o: 				    mpeg3toc.c
$(OBJDIR)/mpeg3toc3.o:  			    mpeg3toc3.c
$(OBJDIR)/mpeg3vtrack.o: 			    mpeg3vtrack.c
$(OBJDIR)/audio/ac3.o:  			    audio/ac3.c
$(OBJDIR)/audio/bit_allocation.o: 		    audio/bit_allocation.c
$(OBJDIR)/audio/dct.o:  			    audio/dct.c
$(OBJDIR)/audio/exponents.o: 			    audio/exponents.c
$(OBJDIR)/audio/header.o: 			    audio/header.c
$(OBJDIR)/audio/layer2.o: 			    audio/layer2.c
$(OBJDIR)/audio/layer3.o: 			    audio/layer3.c
$(OBJDIR)/audio/mantissa.o: 			    audio/mantissa.c
$(OBJDIR)/audio/mpeg3audio.o: 			    audio/mpeg3audio.c
$(OBJDIR)/audio/pcm.o:  			    audio/pcm.c
$(OBJDIR)/audio/synthesizers.o: 		    audio/synthesizers.c
$(OBJDIR)/audio/tables.o: 			    audio/tables.c
$(OBJDIR)/video/getpicture.o: 			    video/getpicture.c
$(OBJDIR)/video/headers.o: 			    video/headers.c
$(OBJDIR)/video/idct.o: 			    video/idct.c
$(OBJDIR)/video/macroblocks.o:  		    video/macroblocks.c
$(OBJDIR)/video/mmxtest.o: 			    video/mmxtest.c
$(OBJDIR)/video/motion.o: 			    video/motion.c
$(OBJDIR)/video/mpeg3video.o: 			    video/mpeg3video.c
$(OBJDIR)/video/output.o: 			    video/output.c
$(OBJDIR)/video/reconstruct.o:  		    video/reconstruct.c
$(OBJDIR)/video/seek.o: 			    video/seek.c
$(OBJDIR)/video/slice.o: 			    video/slice.c
$(OBJDIR)/video/vlc.o:  			    video/vlc.c
$(OBJDIR)/workarounds.o:  			    workarounds.c







































