SubDir TOP contrib ; # Use curl on Mac OS X since it's always installed, and assume wget # is installed for all other systems if $(OS) = MACOSX { WGET = curl -q -L -o ; } else { WGET = wget -O ; } if $(OS) = UNKNOWN { OS = CYGWIN ; } if $(OS) = SOLARIS { PATCH = gpatch ; STRIP = echo ; } else { PATCH = patch ; STRIP = strip -S ; } # Wget rule: downloads $(<) from the link in $(>) rule Wget { Depends $(<) : $(>) ; } actions Wget { $(RM) $(<) && $(WGET) $(<) `cat $(>)` && ( touch $(<) || true ) } # liba52 rule LibA52 { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibA52 { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf a52dec && (gzip -dc a52dec.tar.gz | tar xf -) && cd a52dec && $(PATCH) -p1 < ../patch-a52dec.patch && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/liba52.a } Wget $(SUBDIR)/a52dec.tar.gz : $(SUBDIR)/version_a52dec.txt ; LibA52 $(SUBDIR)/lib/liba52.a : $(SUBDIR)/a52dec.tar.gz ; # FAAD2 rule LibFaad2 { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibFaad2 { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf faad2 && (gzip -dc faad2.tar.gz | tar xf -) && cd faad2 && $(PATCH) -p1 < ../patch-faad2-libtool22.patch && ./bootstrap && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache --disable-shared && $(MAKE) && $(MAKE) install } Wget $(SUBDIR)/faad2.tar.gz : $(SUBDIR)/version_faad2.txt ; LibFaad2 $(SUBDIR)/lib/libfaad.a : $(SUBDIR)/faad2.tar.gz ; # libavcodec rule LibAvCodec { FFMPEG_PATCH = "$(PATCH) -p0 < ../patch-ffmpeg.patch" ; FFMPEG_PATCH += " && $(PATCH) -p0 < ../patch-ffmpeg-latm.patch " ; FFMPEG_PATCH += " && $(PATCH) -p0 < ../patch-ffmpeg-mpegleak.patch " ; if $(OS) = CYGWIN { FFMPEG_PATCH += " && $(PATCH) -p1 < ../patch-ffmpeg-cygwin.patch " ; } else if $(OS) = SOLARIS { FFMPEG_PATCH += " && $(PATCH) -p1 < ../patch-ffmpeg-solaris.patch " ; } if $(OS) = SOLARIS { # # Not all of ffmpeg works on Solaris - disable the bits that # don't. When we get new versions of FFMPEG we can try enabling # then again. # FFMPEG_EXTRA_OPTIONS = "--disable-vis --disable-demuxer=mpc8 --disable-vhook --disable-network" ; } Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibAvCodec { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf ffmpeg && (gzip -dc ffmpeg.tar.gz | tar xf -) && cd ffmpeg && $(FFMPEG_PATCH) && ./configure --prefix=$CONTRIB --enable-gpl --enable-pthreads --enable-swscale \ --disable-shared --enable-static --disable-encoders \ --enable-encoder=mpeg4 --enable-encoder=ac3 --enable-encoder=snow \ --enable-libfaad --disable-ffmpeg --disable-ffserver \ --disable-muxers --enable-muxer=ipod --disable-bsfs --disable-vhook \ --extra-cflags="-I$CONTRIB/include" \ --extra-ldflags="-L$CONTRIB/lib" $(FFMPEG_EXTRA_OPTIONS) && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libavcodec.a } Wget $(SUBDIR)/ffmpeg.tar.gz : $(SUBDIR)/version_ffmpeg.txt ; LibAvCodec $(SUBDIR)/lib/libavcodec.a : $(SUBDIR)/ffmpeg.tar.gz ; rule LibAvUtil { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibAvUtil { $(STRIP) $(<) } LibAvUtil $(SUBDIR)/lib/libavutil.a : $(SUBDIR)/lib/libavcodec.a ; LibAvUtil $(SUBDIR)/lib/libavformat.a : $(SUBDIR)/lib/libavcodec.a ; LibAvUtil $(SUBDIR)/lib/libswscale.a : $(SUBDIR)/lib/libavcodec.a ; # HandBrake does not include a DVD decrypting library, # so if a user requests it, let them download and compile it from a 3rd party if $(CSS) = 1 { # libdvdcss # We need libdvdcss.so for libdvdread's configure to work... rule LibDvdCss { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibDvdCss { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf libdvdcss-1.2.9 && (gzip -dc libdvdcss.tar.gz | tar xf - ) && cd libdvdcss-1.2.9 && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libdvdcss.a } Wget $(SUBDIR)/libdvdcss.tar.gz : $(SUBDIR)/version_libdvdcss.txt ; LibDvdCss $(SUBDIR)/lib/libdvdcss.a : $(SUBDIR)/libdvdcss.tar.gz ; } # libdca rule LibDCA { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibDCA { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf libdca && (gzip -dc libdca.tar.gz | tar xf - ) && cd libdca && $(PATCH) -p1 < ../patch-libdca.patch && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libdca.a } Wget $(SUBDIR)/libdca.tar.gz : $(SUBDIR)/version_libdca.txt ; LibDCA $(SUBDIR)/lib/libdca.a : $(SUBDIR)/libdca.tar.gz ; # libdvdread rule LibDvdRead { Depends $(<) : $(>) ; Depends lib : $(<) ; if $(OS) = MACOSX { DVDREAD_PATCH = "$(PATCH) -p0 < ../patch-libdvdread-css-vlc-dylib.patch &&" ; } if $(OS) = CYGWIN { DVDREAD_PATCH = "$(PATCH) -p1 < ../patch-libdvdread-cygwin.patch &&" ; } } if $(CSS) = 1 # Include CSS support in libdvdread if requested { actions LibDvdRead { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf libdvdread && (gzip -dc libdvdread.tar.gz | tar xf - ) && cd libdvdread && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache --disable-shared --with-libdvdcss=$CONTRIB && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libdvdread.a } } else { # Cygwin/Windows doesn't use CSS as of now, so don't include it on the # configure line. # MacOSX uses a dylib for CSS, so it doesn't need including there either. actions LibDvdRead { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf libdvdread && (gzip -dc libdvdread.tar.gz | tar xf - ) && cd libdvdread && $(DVDREAD_PATCH) ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache --disable-shared && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libdvdread.a } } Wget $(SUBDIR)/libdvdread.tar.gz : $(SUBDIR)/version_libdvdread.txt ; LibDvdRead $(SUBDIR)/lib/libdvdread.a : $(SUBDIR)/libdvdread.tar.gz ; # libfaac rule LibFaac { Depends $(<) : $(>) ; Depends lib : $(<) ; if $(OS) = CYGWIN { CYGWIN_PATCH = "$(PATCH) -p1 < ../patch-faac-cygwin.patch &&" ; } } actions LibFaac { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf faac && (gzip -dc faac.tar.gz | tar xf - ) && cd faac && $(CYGWIN_PATCH) ./bootstrap && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache --disable-shared --enable-static --without-mp4v2 && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libfaac.a } Wget $(SUBDIR)/faac.tar.gz : $(SUBDIR)/version_faac.txt ; LibFaac $(SUBDIR)/lib/libfaac.a : $(SUBDIR)/faac.tar.gz ; # libmp3lame rule LibMp3Lame { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibMp3Lame { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf lame && (gzip -dc lame.tar.gz | tar xf - ) && cd lame && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache --disable-shared && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libmp3lame.a } Wget $(SUBDIR)/lame.tar.gz : $(SUBDIR)/version_lame.txt ; LibMp3Lame $(SUBDIR)/lib/libmp3lame.a : $(SUBDIR)/lame.tar.gz ; # libmp4v2 rule LibMp4v2 { LIBMP4V2_PATCH = "" ; Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibMp4v2 { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf libmp4v2 && (gzip -dc libmp4v2.tar.gz | tar xf - ) && cd libmp4v2 && $(LIBMP4V2_PATCH) ./configure --prefix=$CONTRIB && $(MAKE) && make install && $(STRIP) $CONTRIB/lib/libmp4v2.a } Wget $(SUBDIR)/libmp4v2.tar.gz : $(SUBDIR)/version_libmp4v2.txt ; LibMp4v2 $(SUBDIR)/lib/libmp4v2.a : $(SUBDIR)/libmp4v2.tar.gz ; rule LibMkv { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibMkv { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf libmkv && (gzip -dc libmkv.tar.gz | tar xf - ) && cd libmkv && ./configure --disable-shared --enable-static --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libmkv.a } Wget $(SUBDIR)/libmkv.tar.gz : $(SUBDIR)/version_libmkv.txt ; LibMkv $(SUBDIR)/lib/libmkv.a : $(SUBDIR)/libmkv.tar.gz ; # libmpeg2 rule LibMpeg2 { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibMpeg2 { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf mpeg2dec && (gzip -dc mpeg2dec.tar.gz | tar xf - ) && cd mpeg2dec && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache --disable-shared --disable-sdl --without-x && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libmpeg2.a } Wget $(SUBDIR)/mpeg2dec.tar.gz : $(SUBDIR)/version_mpeg2dec.txt ; LibMpeg2 $(SUBDIR)/lib/libmpeg2.a : $(SUBDIR)/mpeg2dec.tar.gz ; # libogg rule LibOgg { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibOgg { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf libogg && (gzip -dc libogg.tar.gz | tar xf - ) && cd libogg && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache --disable-shared && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libogg.a } Wget $(SUBDIR)/libogg.tar.gz : $(SUBDIR)/version_libogg.txt ; LibOgg $(SUBDIR)/lib/libogg.a : $(SUBDIR)/libogg.tar.gz ; # libsamplerate rule LibSampleRate { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibSampleRate { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf libsamplerate && (gzip -dc libsamplerate.tar.gz | tar xf - ) && cd libsamplerate && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache --disable-shared && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libsamplerate.a } Wget $(SUBDIR)/libsamplerate.tar.gz : $(SUBDIR)/version_libsamplerate.txt ; LibSampleRate $(SUBDIR)/lib/libsamplerate.a : $(SUBDIR)/libsamplerate.tar.gz ; # libvorbis rule LibVorbis { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibVorbis { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf libvorbis && (gzip -dc libvorbis.tar.gz | tar xf - ) && cd libvorbis && ./configure --prefix=$CONTRIB --with-ogg=$CONTRIB --cache-file=$CONTRIB/config.cache --disable-shared && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libvorbis.a } Wget $(SUBDIR)/libvorbis.tar.gz : $(SUBDIR)/version_libvorbis.txt ; LibVorbis $(SUBDIR)/lib/libvorbis.a : $(SUBDIR)/libvorbis.tar.gz ; rule LibVorbisEnc { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibVorbisEnc { $(STRIP) $(<) } LibVorbisEnc $(SUBDIR)/lib/libvorbisenc.a : $(SUBDIR)/lib/libvorbis.a ; # libtheora rule LibTheora { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibTheora { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf libtheora && (gzip -dc libtheora.tar.gz | tar xf - ) && cd libtheora && HAVE_PKG_CONFIG="no" && export HAVE_PKG_CONFIG && ./configure --prefix=$CONTRIB --with-ogg=$CONTRIB --with-vorbis=$CONTRIB --cache-file=$CONTRIB/config.cache --disable-shared \ --disable-oggtest --disable-vorbistest --disable-sdltest --disable-examples && $(MAKE) && $(MAKE) install && $(STRIP) $CONTRIB/lib/libtheora.a } Wget $(SUBDIR)/libtheora.tar.gz : $(SUBDIR)/version_libtheora.txt ; LibTheora $(SUBDIR)/lib/libtheora.a : $(SUBDIR)/libtheora.tar.gz ; # libx264 rule LibX264 { LIBX264_PATCH = "" ; if $(OS) = CYGWIN { LIBX264_PATCH += "$(PATCH) -p1 < ../patch-x264-cygwin.patch && " ; } else if $(OS) = SOLARIS { LIBX264_PATCH += " $(PATCH) -p1 < ../patch-x264-solaris.patch && " ; } LIBX264_PATCH += "$(PATCH) -p0 < ../patch-x264-idr.patch && " ; Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibX264 { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf x264 && (gzip -dc x264.tar.gz | tar xf - ) && cd x264 && $(LIBX264_PATCH) bash ./configure --prefix=$CONTRIB --enable-pthread && $(MAKE) libx264.a && cp libx264.a $CONTRIB/lib/ && cp x264.h $CONTRIB/include/ && $(STRIP) $CONTRIB/lib/libx264.a } Wget $(SUBDIR)/x264.tar.gz : $(SUBDIR)/version_x264.txt ; LibX264 $(SUBDIR)/lib/libx264.a : $(SUBDIR)/x264.tar.gz ; # libxvidcore rule LibXvidCore { LIBXVIDCORE_PATCH = "" ; if $(OS) = MACOSX { LIBXVIDCORE_PATCH = "$(PATCH) -p1 < ../patch-xvidcore-macosx.patch && " ; } else if $(OS) = CYGWIN { LIBXVIDCORE_PATCH = "$(PATCH) -p1 < ../patch-xvidcore-cygwin.patch && " ; } LIBXVIDCORE_PATCH += "$(PATCH) -p1 < ../patch-xvidcore-nasm-2.00-configure.patch && " ; LIBXVIDCORE_PATCH += "$(PATCH) -p1 < ../patch-xvidcore-fdct.patch && " ; Depends $(<) : $(>) ; Depends lib : $(<) ; } actions LibXvidCore { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf xvidcore && (gzip -dc xvidcore.tar.gz | tar xf - ) && cd xvidcore && $(LIBXVIDCORE_PATCH) cd build/generic/ && ./configure --prefix=$CONTRIB --cache-file=$CONTRIB/config.cache && $(MAKE) libxvidcore.a && cp ./=build/libxvidcore.a $CONTRIB/lib/ && cp ../../src/xvid.h $CONTRIB/include/ && $(STRIP) $CONTRIB/lib/libxvidcore.a } Wget $(SUBDIR)/xvidcore.tar.gz : $(SUBDIR)/version_xvidcore.txt ; LibXvidCore $(SUBDIR)/lib/libxvidcore.a : $(SUBDIR)/xvidcore.tar.gz ; # zlib if $(OS) = CYGWIN { rule Zlib { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions Zlib { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf zlib && (gzip -dc zlib.tar.gz | tar xf - ) && cd zlib && ./configure --prefix=$CONTRIB && $(MAKE) && $(MAKE) install && touch $CONTRIB/.contrib && $(STRIP) $CONTRIB/lib/libz.a } Wget $(SUBDIR)/zlib.tar.gz : $(SUBDIR)/version_zlib.txt ; Zlib $(SUBDIR)/lib/libz.a : $(SUBDIR)/zlib.tar.gz ; } # bzip2 if $(OS) = CYGWIN { rule BZip2 { Depends $(<) : $(>) ; Depends lib : $(<) ; } actions BZip2 { cd `dirname $(>)` && CONTRIB=`pwd` && rm -rf bzip2 && (gzip -dc bzip2.tar.gz | tar xf - ) && cd bzip2 && $(MAKE) && $(MAKE) install && cp libbz2.a $CONTRIB/lib/ && $(STRIP) $CONTRIB/lib/libbz2.a } Wget $(SUBDIR)/bzip2.tar.gz : $(SUBDIR)/version_bzip2.txt ; BZip2 $(SUBDIR)/lib/libbz2.a : $(SUBDIR)/bzip2.tar.gz ; }