summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--contrib/autoconf/module.defs1
-rw-r--r--contrib/automake/module.defs1
-rw-r--r--contrib/bzip2/module.defs1
-rw-r--r--contrib/cmake/module.defs1
-rw-r--r--contrib/fdk-aac/module.defs1
-rw-r--r--contrib/ffmpeg/module.defs1
-rw-r--r--contrib/fontconfig/module.defs1
-rw-r--r--contrib/freetype/module.defs1
-rw-r--r--contrib/fribidi/module.defs1
-rw-r--r--contrib/jansson/module.defs1
-rw-r--r--contrib/lame/module.defs1
-rw-r--r--contrib/libass/module.defs1
-rw-r--r--contrib/libbluray/module.defs1
-rw-r--r--contrib/libdvdnav/module.defs1
-rw-r--r--contrib/libdvdread/module.defs1
-rw-r--r--contrib/libgnurx/module.defs1
-rw-r--r--contrib/libiconv/module.defs1
-rw-r--r--contrib/libmfx/module.defs1
-rw-r--r--contrib/libogg/module.defs1
-rw-r--r--contrib/libsamplerate/module.defs1
-rw-r--r--contrib/libtheora/module.defs1
-rw-r--r--contrib/libtool/module.defs1
-rw-r--r--contrib/libvorbis/module.defs1
-rw-r--r--contrib/libvpx/module.defs1
-rw-r--r--contrib/libxml2/module.defs1
-rw-r--r--contrib/m4/module.defs1
-rw-r--r--contrib/pkgconfig/module.defs1
-rw-r--r--contrib/pthreadw32/module.defs1
-rw-r--r--contrib/x264/module.defs1
-rw-r--r--contrib/x265/module.defs1
-rw-r--r--contrib/yasm/module.defs1
-rw-r--r--contrib/zlib/module.defs1
-rw-r--r--doc/texi/building/prerequisites.common.texi2
-rw-r--r--make/configure.py74
-rw-r--r--make/fetch.py235
-rw-r--r--make/include/contrib.defs4
-rw-r--r--make/include/main.defs1
-rw-r--r--make/include/select.defs12
-rw-r--r--make/include/tool.defs3
-rwxr-xr-xmake/python_launcher25
40 files changed, 353 insertions, 35 deletions
diff --git a/contrib/autoconf/module.defs b/contrib/autoconf/module.defs
index c1c4140d9..b23480332 100644
--- a/contrib/autoconf/module.defs
+++ b/contrib/autoconf/module.defs
@@ -2,3 +2,4 @@ $(eval $(call import.MODULE.defs,AUTOCONF,autoconf,M4))
$(eval $(call import.CONTRIB.defs,AUTOCONF))
AUTOCONF.FETCH.url = http://download.handbrake.fr/handbrake/contrib/autoconf-2.69.tar.bz2
+AUTOCONF.FETCH.md5 = 58e0cca25061e1b3e2bc30a5be13815b
diff --git a/contrib/automake/module.defs b/contrib/automake/module.defs
index 72d39e6b0..d42542aad 100644
--- a/contrib/automake/module.defs
+++ b/contrib/automake/module.defs
@@ -2,3 +2,4 @@ $(eval $(call import.MODULE.defs,AUTOMAKE,automake,AUTOCONF))
$(eval $(call import.CONTRIB.defs,AUTOMAKE))
AUTOMAKE.FETCH.url = http://download.handbrake.fr/handbrake/contrib/automake-1.13.1.tar.bz2
+AUTOMAKE.FETCH.md5 = c66595aafe79e4e5455b4b3491fe6b05
diff --git a/contrib/bzip2/module.defs b/contrib/bzip2/module.defs
index 0a7463e20..b477d8b51 100644
--- a/contrib/bzip2/module.defs
+++ b/contrib/bzip2/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,BZIP2,bzip2))
$(eval $(call import.CONTRIB.defs,BZIP2))
BZIP2.FETCH.url = http://download.handbrake.fr/handbrake/contrib/bzip2-1.0.6.tar.gz
+BZIP2.FETCH.md5 = 6ec09fe81e3380184ed11e21ea06c215
BZIP2.EXTRACT.tarbase = bzip2
BZIP2.CONFIGURE = $(TOUCH.exe) $@
diff --git a/contrib/cmake/module.defs b/contrib/cmake/module.defs
index 0cd986bd6..56f6fea59 100644
--- a/contrib/cmake/module.defs
+++ b/contrib/cmake/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,CMAKE,cmake))
$(eval $(call import.CONTRIB.defs,CMAKE))
CMAKE.FETCH.url = http://download.handbrake.fr/handbrake/contrib/cmake-3.3.2.tar.gz
+CMAKE.FETCH.md5 = 5febbd11bcaac854a27eebaf4a124be2
CMAKE.CONFIGURE.deps =
CMAKE.CONFIGURE.shared =
diff --git a/contrib/fdk-aac/module.defs b/contrib/fdk-aac/module.defs
index 157c73132..dc8bafd74 100644
--- a/contrib/fdk-aac/module.defs
+++ b/contrib/fdk-aac/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,FDKAAC,fdkaac))
$(eval $(call import.CONTRIB.defs,FDKAAC))
FDKAAC.FETCH.url = http://download.handbrake.fr/handbrake/contrib/fdk-aac-0.1.4.tar.gz
+FDKAAC.FETCH.md5 = e274a7d7f6cd92c71ec5c78e4dc9f8b7
# fdk-aac configure script fails to add compiler optimizations if the
# CFLAGS env variable is set during configure. Since we set it, we
diff --git a/contrib/ffmpeg/module.defs b/contrib/ffmpeg/module.defs
index 682ecb575..03ddb3d0b 100644
--- a/contrib/ffmpeg/module.defs
+++ b/contrib/ffmpeg/module.defs
@@ -7,6 +7,7 @@ $(eval $(call import.MODULE.defs,FFMPEG,ffmpeg,$(__deps__)))
$(eval $(call import.CONTRIB.defs,FFMPEG))
FFMPEG.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libav-v11.3-0-g00abc00.tar.gz
+FFMPEG.FETCH.md5 = 23648740623345f122cfd0e015063c7e
FFMPEG.CONFIGURE.deps =
FFMPEG.CONFIGURE.env =
diff --git a/contrib/fontconfig/module.defs b/contrib/fontconfig/module.defs
index 8fe0785eb..ccb61f021 100644
--- a/contrib/fontconfig/module.defs
+++ b/contrib/fontconfig/module.defs
@@ -3,6 +3,7 @@ $(eval $(call import.MODULE.defs,FONTCONFIG,fontconfig,$(__deps__)))
$(eval $(call import.CONTRIB.defs,FONTCONFIG))
FONTCONFIG.FETCH.url = http://download.handbrake.fr/handbrake/contrib/fontconfig-2.11.94.tar.bz2
+FONTCONFIG.FETCH.md5 = c988ea12f4117330246e041109152b4a
FONTCONFIG.EXTRACT.tarbase = fontconfig-2.11.94
#
diff --git a/contrib/freetype/module.defs b/contrib/freetype/module.defs
index 4646ce295..be83c7855 100644
--- a/contrib/freetype/module.defs
+++ b/contrib/freetype/module.defs
@@ -3,5 +3,6 @@ $(eval $(call import.MODULE.defs,FREETYPE,freetype,$(__deps__)))
$(eval $(call import.CONTRIB.defs,FREETYPE))
FREETYPE.FETCH.url = http://download.handbrake.fr/handbrake/contrib/freetype-2.6.tar.bz2
+FREETYPE.FETCH.md5 = 5682890cb0267f6671dd3de6eabd3e69
FREETYPE.CONFIGURE.extra = --with-harfbuzz=no --with-png=no
diff --git a/contrib/fribidi/module.defs b/contrib/fribidi/module.defs
index 646a566ab..36d50f639 100644
--- a/contrib/fribidi/module.defs
+++ b/contrib/fribidi/module.defs
@@ -6,6 +6,7 @@ $(eval $(call import.MODULE.defs,FRIBIDI,fribidi))
$(eval $(call import.CONTRIB.defs,FRIBIDI))
FRIBIDI.FETCH.url = http://download.handbrake.fr/handbrake/contrib/fribidi-0.19.7.tar.bz2
+FRIBIDI.FETCH.md5 = 6c7e7cfdd39c908f7ac619351c1c5c23
ifeq (1-mingw,$(BUILD.cross)-$(BUILD.system))
FRIBIDI.CONFIGURE.extra = --with-glib=no
diff --git a/contrib/jansson/module.defs b/contrib/jansson/module.defs
index 494dc845e..7a9bd0ae3 100644
--- a/contrib/jansson/module.defs
+++ b/contrib/jansson/module.defs
@@ -2,5 +2,6 @@ $(eval $(call import.MODULE.defs,JANSSON,jansson))
$(eval $(call import.CONTRIB.defs,JANSSON))
JANSSON.FETCH.url = http://download.handbrake.fr/handbrake/contrib/jansson-2.6.tar.bz2
+JANSSON.FETCH.md5 = c70a52488db623a26f7213c7c6b7c878
JANSSON.CONFIGURE.bootstrap = rm -fr aclocal.m4 autom4te.cache; mkdir m4; autoreconf -fiv;
diff --git a/contrib/lame/module.defs b/contrib/lame/module.defs
index fbe842ad9..33da72785 100644
--- a/contrib/lame/module.defs
+++ b/contrib/lame/module.defs
@@ -2,4 +2,5 @@ $(eval $(call import.MODULE.defs,LAME,lame))
$(eval $(call import.CONTRIB.defs,LAME))
LAME.FETCH.url = http://download.handbrake.fr/handbrake/contrib/lame-3.98.tar.gz
+LAME.FETCH.md5 = 7036b52e792538fd665595d56b9e49a0
LAME.EXTRACT.tarbase = lame
diff --git a/contrib/libass/module.defs b/contrib/libass/module.defs
index 6f32d0ec1..03e37bd27 100644
--- a/contrib/libass/module.defs
+++ b/contrib/libass/module.defs
@@ -3,6 +3,7 @@ $(eval $(call import.MODULE.defs,LIBASS,libass,$(__deps__)))
$(eval $(call import.CONTRIB.defs,LIBASS))
LIBASS.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libass-0.12.3.tar.gz
+LIBASS.FETCH.md5 = 648ee785f966c69d4b5d50948e509d93
# Disable as many external dependencies as I can get away with
# and tell configure where to find our version of freetype
diff --git a/contrib/libbluray/module.defs b/contrib/libbluray/module.defs
index e336bfda0..7154bc706 100644
--- a/contrib/libbluray/module.defs
+++ b/contrib/libbluray/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,LIBBLURAY,libbluray,PKGCONFIG LIBXML2 FREETYPE)
$(eval $(call import.CONTRIB.defs,LIBBLURAY))
LIBBLURAY.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libbluray-0.8.1.tar.bz2
+LIBBLURAY.FETCH.md5 = c7a89966ad091fa6075a58d31a698e70
ifneq (max,$(LIBBLURAY.GCC.g))
LIBBLURAY.CONFIGURE.extra += --disable-debug
diff --git a/contrib/libdvdnav/module.defs b/contrib/libdvdnav/module.defs
index 27f171be8..2626d1697 100644
--- a/contrib/libdvdnav/module.defs
+++ b/contrib/libdvdnav/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,LIBDVDNAV,libdvdnav,PKGCONFIG LIBDVDREAD))
$(eval $(call import.CONTRIB.defs,LIBDVDNAV))
LIBDVDNAV.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libdvdnav-5.0.1-0-gaa3659d.tar.gz
+LIBDVDNAV.FETCH.md5 = 1fb10188c7a33f480011d3ddf32553c7
LIBDVDNAV.CONFIGURE.bootstrap = rm -fr aclocal.m4 autom4te.cache configure; autoreconf -I m4 -fiv;
ifneq (max,$(LIBDVDNAV.GCC.g))
diff --git a/contrib/libdvdread/module.defs b/contrib/libdvdread/module.defs
index bf05121d3..25e2eb0be 100644
--- a/contrib/libdvdread/module.defs
+++ b/contrib/libdvdread/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,LIBDVDREAD,libdvdread,PKGCONFIG))
$(eval $(call import.CONTRIB.defs,LIBDVDREAD))
LIBDVDREAD.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libdvdread-5.0.0-6-gcb1ae87.tar.gz
+LIBDVDREAD.FETCH.md5 = 607a5dd41b0dd2f35433d6deac79b99e
LIBDVDREAD.CONFIGURE.bootstrap = rm -fr aclocal.m4 autom4te.cache configure; autoreconf -I m4 -fiv;
ifeq (1-mingw,$(BUILD.cross)-$(BUILD.system))
diff --git a/contrib/libgnurx/module.defs b/contrib/libgnurx/module.defs
index e8e2ebe0c..a4c0f2504 100644
--- a/contrib/libgnurx/module.defs
+++ b/contrib/libgnurx/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,LIBGNURX,libgnurx))
$(eval $(call import.CONTRIB.defs,LIBGNURX))
LIBGNURX.FETCH.url = http://download.handbrake.fr/handbrake/contrib/mingw-libgnurx-2.5.1-src.tar.gz
+LIBGNURX.FETCH.md5 = 35c8fed3101ca1f253e9b6b1966661f6
LIBGNURX.EXTRACT.tarbase = mingw-libgnurx-2.5.1
LIBGNURX.CONFIGURE.env += AR="$(AR.exe)"
diff --git a/contrib/libiconv/module.defs b/contrib/libiconv/module.defs
index 391361f26..19e4a1240 100644
--- a/contrib/libiconv/module.defs
+++ b/contrib/libiconv/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,LIBICONV,libiconv))
$(eval $(call import.CONTRIB.defs,LIBICONV))
LIBICONV.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libiconv-1.13.tar.bz2
+LIBICONV.FETCH.md5 = 9c8b41b77f508edf72e26b406e873a2f
# this contrib will not build under MinGW with -std=gnu99
ifeq (1-mingw,$(BUILD.cross)-$(BUILD.system))
diff --git a/contrib/libmfx/module.defs b/contrib/libmfx/module.defs
index 3c6407921..719b4d840 100644
--- a/contrib/libmfx/module.defs
+++ b/contrib/libmfx/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,LIBMFX,libmfx))
$(eval $(call import.CONTRIB.defs,LIBMFX))
LIBMFX.FETCH.url = http://download.handbrake.fr/contrib/mfx_dispatch-9f4a84d7.tar.gz
+LIBMFX.FETCH.md5 = 694058b83b43b39b7e5b5fc38dbe2b88
LIBMFX.CONFIGURE.bootstrap = rm -fr aclocal.m4 autom4te.cache; autoreconf -fiv;
diff --git a/contrib/libogg/module.defs b/contrib/libogg/module.defs
index 4b1c8c9ac..e1b6e5fdc 100644
--- a/contrib/libogg/module.defs
+++ b/contrib/libogg/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,LIBOGG,libogg))
$(eval $(call import.CONTRIB.defs,LIBOGG))
LIBOGG.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libogg-1.3.0.tar.gz
+LIBOGG.FETCH.md5 = 0a7eb40b86ac050db3a789ab65fe21c2
LIBOGG.EXTRACT.tarbase = libogg-1.3.0
LIBOGG.CONFIGURE.extra = --disable-sdl
diff --git a/contrib/libsamplerate/module.defs b/contrib/libsamplerate/module.defs
index 468aa4739..410e6a134 100644
--- a/contrib/libsamplerate/module.defs
+++ b/contrib/libsamplerate/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,LIBSAMPLERATE,libsamplerate))
$(eval $(call import.CONTRIB.defs,LIBSAMPLERATE))
LIBSAMPLERATE.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libsamplerate-0.1.4.tar.gz
+LIBSAMPLERATE.FETCH.md5 = 69ec6c05f487458f688dda8f3e722e5d
LIBSAMPLERATE.EXTRACT.tarbase = libsamplerate
# Disable to avoid Carbon.h dependency on OSX
diff --git a/contrib/libtheora/module.defs b/contrib/libtheora/module.defs
index 7aef8e2dc..54435da6f 100644
--- a/contrib/libtheora/module.defs
+++ b/contrib/libtheora/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,LIBTHEORA,libtheora,LIBOGG LIBVORBIS))
$(eval $(call import.CONTRIB.defs,LIBTHEORA))
LIBTHEORA.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libtheora-1.1.0.tar.bz2
+LIBTHEORA.FETCH.md5 = d0f83cf7f13e2b3bd068a858ca1398ad
LIBTHEORA.CONFIGURE.extra = \
--disable-examples \
diff --git a/contrib/libtool/module.defs b/contrib/libtool/module.defs
index 803fb726a..26739730c 100644
--- a/contrib/libtool/module.defs
+++ b/contrib/libtool/module.defs
@@ -2,3 +2,4 @@ $(eval $(call import.MODULE.defs,LIBTOOL,libtool,AUTOCONF AUTOMAKE PKGCONFIG))
$(eval $(call import.CONTRIB.defs,LIBTOOL))
LIBTOOL.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libtool-2.4.2.tar.bz2
+LIBTOOL.FETCH.md5 = f1a2109b9cd9c03a8df1f47e672c3aeb
diff --git a/contrib/libvorbis/module.defs b/contrib/libvorbis/module.defs
index 84d018fc8..d63c92b75 100644
--- a/contrib/libvorbis/module.defs
+++ b/contrib/libvorbis/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,LIBVORBIS,libvorbis,LIBOGG))
$(eval $(call import.CONTRIB.defs,LIBVORBIS))
LIBVORBIS.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libvorbis-aotuv_b6.03.tar.bz2
+LIBVORBIS.FETCH.md5 = 586d2ac0fa13f32cba78be5db4a16330
LIBVORBIS.EXTRACT.tarbase = aotuv-b6.03_20110424
LIBVORBIS.CONFIGURE.extra = --with-ogg=$(call fn.ABSOLUTE,$(CONTRIB.build/)) HAVE_PKG_CONFIG="no"
diff --git a/contrib/libvpx/module.defs b/contrib/libvpx/module.defs
index e257d3493..77ab27cb1 100644
--- a/contrib/libvpx/module.defs
+++ b/contrib/libvpx/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,LIBVPX,libvpx,YASM))
$(eval $(call import.CONTRIB.defs,LIBVPX))
LIBVPX.FETCH.url = http://download.handbrake.fr/contrib/libvpx-v1.3.0.tar.bz2
+LIBVPX.FETCH.md5 = 14783a148872f2d08629ff7c694eb31f
LIBVPX.CONFIGURE.args.host =
LIBVPX.CONFIGURE.deps =
diff --git a/contrib/libxml2/module.defs b/contrib/libxml2/module.defs
index 4c1d14bba..aa37d0521 100644
--- a/contrib/libxml2/module.defs
+++ b/contrib/libxml2/module.defs
@@ -3,6 +3,7 @@ $(eval $(call import.MODULE.defs,LIBXML2,libxml2,$(__deps__)))
$(eval $(call import.CONTRIB.defs,LIBXML2))
LIBXML2.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libxml2-2.7.7.tar.gz
+LIBXML2.FETCH.md5 = 9abc9959823ca9ff904f1fbcf21df066
LIBXML2.EXTRACT.tarbase = libxml2-2.7.7
# The Python components do not build on MinGW due to the lack of a select() call
diff --git a/contrib/m4/module.defs b/contrib/m4/module.defs
index 1fd5b0aa4..b73674bed 100644
--- a/contrib/m4/module.defs
+++ b/contrib/m4/module.defs
@@ -2,3 +2,4 @@ $(eval $(call import.MODULE.defs,M4,m4))
$(eval $(call import.CONTRIB.defs,M4))
M4.FETCH.url = http://download.handbrake.fr/handbrake/contrib/m4-1.4.16.tar.bz2
+M4.FETCH.md5 = 8a7cef47fecab6272eb86a6be6363b2f
diff --git a/contrib/pkgconfig/module.defs b/contrib/pkgconfig/module.defs
index f87a343f3..24a006852 100644
--- a/contrib/pkgconfig/module.defs
+++ b/contrib/pkgconfig/module.defs
@@ -2,5 +2,6 @@ $(eval $(call import.MODULE.defs,PKGCONFIG,pkgconfig))
$(eval $(call import.CONTRIB.defs,PKGCONFIG))
PKGCONFIG.FETCH.url = http://download.handbrake.fr/handbrake/contrib/pkg-config-0.28.tar.bz2
+PKGCONFIG.FETCH.md5 = 60c2d5353d501c5619d535c6d4d80f1c
PKGCONFIG.CONFIGURE.extra = --with-internal-glib --disable-host-tool
diff --git a/contrib/pthreadw32/module.defs b/contrib/pthreadw32/module.defs
index 9499e855c..c2bfc0a5e 100644
--- a/contrib/pthreadw32/module.defs
+++ b/contrib/pthreadw32/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,PTHREADW32,pthreadw32))
$(eval $(call import.CONTRIB.defs,PTHREADW32))
PTHREADW32.FETCH.url = http://download.handbrake.fr/handbrake/contrib/pthreads-w32-cvs20100909.tar.bz2
+PTHREADW32.FETCH.md5 = d1dea735b53176567e9841ca77388633
PTHREADW32.CONFIGURE = $(TOUCH.exe) $@
diff --git a/contrib/x264/module.defs b/contrib/x264/module.defs
index ff4936a81..7497b9d6d 100644
--- a/contrib/x264/module.defs
+++ b/contrib/x264/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,X264,x264,YASM PTHREADW32))
$(eval $(call import.CONTRIB.defs,X264))
X264.FETCH.url = http://download.handbrake.fr/handbrake/contrib/x264-r2665-a01e339.tar.gz
+X264.FETCH.md5 = 4ffeac9157c5a7119b5b6ff36a5d96b7
X264.EXTRACT.tarbase = x264
X264.GCC.args.c_std =
diff --git a/contrib/x265/module.defs b/contrib/x265/module.defs
index 9a6c3dec4..e760a0836 100644
--- a/contrib/x265/module.defs
+++ b/contrib/x265/module.defs
@@ -3,6 +3,7 @@ $(eval $(call import.MODULE.defs,X265,x265,$(__deps__)))
$(eval $(call import.CONTRIB.defs,X265))
X265.FETCH.url = http://download.handbrake.fr/contrib/x265_1.9.tar.gz
+X265.FETCH.md5 = f34a1c4c660ff07511365cb0983cf164
X265.CONFIGURE.exe = cmake
X265.CONFIGURE.args.prefix = -DCMAKE_INSTALL_PREFIX="$(X265.CONFIGURE.prefix)"
diff --git a/contrib/yasm/module.defs b/contrib/yasm/module.defs
index b5f3ee788..ae1e31e7f 100644
--- a/contrib/yasm/module.defs
+++ b/contrib/yasm/module.defs
@@ -2,4 +2,5 @@ $(eval $(call import.MODULE.defs,YASM,yasm))
$(eval $(call import.CONTRIB.defs,YASM))
YASM.FETCH.url = http://download.handbrake.fr/handbrake/contrib/yasm-1.2.0.tar.gz
+YASM.FETCH.md5 = 4cfc0686cf5350dd1305c4d905eb55a6
diff --git a/contrib/zlib/module.defs b/contrib/zlib/module.defs
index 9ddab5746..541ced6dc 100644
--- a/contrib/zlib/module.defs
+++ b/contrib/zlib/module.defs
@@ -2,6 +2,7 @@ $(eval $(call import.MODULE.defs,ZLIB,zlib))
$(eval $(call import.CONTRIB.defs,ZLIB))
ZLIB.FETCH.url = http://download.handbrake.fr/handbrake/contrib/zlib-1.2.3.tar.gz
+ZLIB.FETCH.md5 = af3358a811ad3469a2e54db49f77d52a
ZLIB.EXTRACT.tarbase = zlib
ZLIB.CONFIGURE.args = !sete @dir !env !exe @prefix !extra
diff --git a/doc/texi/building/prerequisites.common.texi b/doc/texi/building/prerequisites.common.texi
index 30b1621f1..4c2088cd1 100644
--- a/doc/texi/building/prerequisites.common.texi
+++ b/doc/texi/building/prerequisites.common.texi
@@ -3,10 +3,8 @@ The following general tools are used on various platforms and it is recommended
@itemize @bullet
@item git - 2.4.3
@item python - Python 2.7.1
-@item curl - curl 7.21.4 (or wget)
@item m4 - GNU M4 1.4.6
@item make - GNU Make 3.81
@item patch - Patch 2.5.8
@item tar - GNU tar 1.26
-@item wget - GNU Wget 1.13.4 (or curl)
@end itemize
diff --git a/make/configure.py b/make/configure.py
index 7ef88977e..b5aa8efb2 100644
--- a/make/configure.py
+++ b/make/configure.py
@@ -1,7 +1,8 @@
###############################################################################
##
-## This script is coded for minimum version of Python 2.4 .
-## Pyhthon3 is incompatible.
+## This script is coded for minimum version of Python 2.7 .
+##
+## Python3 is incompatible.
##
## Authors: konablend
##
@@ -9,6 +10,7 @@
import fnmatch
import glob
+import json
import optparse
import os
import platform
@@ -19,7 +21,6 @@ import time
from datetime import datetime, timedelta
from optparse import OptionGroup
-from optparse import OptionGroup
from optparse import OptionParser
from sys import stderr
from sys import stdout
@@ -81,13 +82,13 @@ class Configure( object ):
def infof( self, format, *args ):
line = format % args
self._log_verbose.append( line )
- if cfg.verbose >= Configure.OUT_INFO:
+ if self.verbose >= Configure.OUT_INFO:
self._log_info.append( line )
stdout.write( line )
def verbosef( self, format, *args ):
line = format % args
self._log_verbose.append( line )
- if cfg.verbose >= Configure.OUT_VERBOSE:
+ if self.verbose >= Configure.OUT_VERBOSE:
stdout.write( line )
## doc is ready to be populated
@@ -97,14 +98,14 @@ class Configure( object ):
self.src_final = self._final_dir( self.build_dir, self.src_dir )
self.prefix_final = self._final_dir( self.build_dir, self.prefix_dir )
- cfg.infof( 'compute: makevar SRC/ = %s\n', self.src_final )
- cfg.infof( 'compute: makevar BUILD/ = %s\n', self.build_final )
- cfg.infof( 'compute: makevar PREFIX/ = %s\n', self.prefix_final )
+ self.infof( 'compute: makevar SRC/ = %s\n', self.src_final )
+ self.infof( 'compute: makevar BUILD/ = %s\n', self.build_final )
+ self.infof( 'compute: makevar PREFIX/ = %s\n', self.prefix_final )
## perform chdir and enable log recording
def chdir( self ):
if os.path.abspath( self.build_dir ) == os.path.abspath( self.src_dir ):
- cfg.errln( 'build (scratch) directory must not be the same as top-level source root!' )
+ self.errln( 'build (scratch) directory must not be the same as top-level source root!' )
if self.build_dir != os.curdir:
if os.path.exists( self.build_dir ):
@@ -136,18 +137,18 @@ class Configure( object ):
try:
return open( *args )
except Exception, x:
- cfg.errln( 'open failure: %s', x )
+ self.errln( 'open failure: %s', x )
def record_log( self ):
if not self._record:
return
self._record = False
self.verbose = Configure.OUT_QUIET
- file = cfg.open( 'log/config.info.txt', 'w' )
+ file = self.open( 'log/config.info.txt', 'w' )
for line in self._log_info:
file.write( line )
file.close()
- file = cfg.open( 'log/config.verbose.txt', 'w' )
+ file = self.open( 'log/config.verbose.txt', 'w' )
for line in self._log_verbose:
file.write( line )
file.close()
@@ -1175,6 +1176,39 @@ class ConfigDocument:
cfg.errln( 'failed writing to %s\n%s', fname, x )
###############################################################################
+
+def encodeFetchConfig():
+ fname = 'fetch.cfg'
+ ftmp = fname + '.tmp'
+ data = [
+ options.disable_fetch,
+ options.disable_fetch_md5,
+ options.accept_fetch_url,
+ options.deny_fetch_url,
+ ]
+ try:
+ try:
+ file = cfg.open( ftmp, 'w' )
+ json.dump(data, file)
+ file.write('\n')
+ finally:
+ try:
+ file.close()
+ except:
+ pass
+ except Exception, x:
+ try:
+ os.remove( ftmp )
+ except Exception, x:
+ pass
+ cfg.errln( 'failed writing to %s\n%s', ftmp, x )
+
+ try:
+ os.rename( ftmp, fname )
+ except Exception, x:
+ cfg.errln( 'failed writing to %s\n%s', fname, x )
+
+###############################################################################
##
## create cli parser
##
@@ -1212,9 +1246,19 @@ def createCLI():
## add hidden options
cli.add_option( '--xcode-driver', default='bootstrap', action='store', help=optparse.SUPPRESS_HELP )
+
+ ## add general options
cli.add_option( '--force', default=False, action='store_true', help='overwrite existing build config' )
cli.add_option( '--verbose', default=False, action='store_true', help='increase verbosity' )
+ ## add fetch options
+ grp = OptionGroup( cli, 'Fetch Options' )
+ grp.add_option( '--disable-fetch', default=False, action='store_true', help='disable automatic downloads of 3rd-party distributions' )
+ grp.add_option( '--disable-fetch-md5', default=False, action='store_true', help='disable MD5 data error detection' )
+ grp.add_option( '--accept-fetch-url', default=[], action='append', metavar='SPEC', help='accept URL regex pattern' )
+ grp.add_option( '--deny-fetch-url', default=[], action='append', metavar='SPEC', help='deny URL regex pattern' )
+ cli.add_option_group( grp )
+
## add install options
grp = OptionGroup( cli, 'Directory Locations' )
h = IfHost( 'specify sysroot of SDK for Xcode builds', '*-*-darwin*', none=optparse.SUPPRESS_HELP ).value
@@ -1448,7 +1492,6 @@ try:
class Tools:
ar = ToolProbe( 'AR.exe', 'ar' )
cp = ToolProbe( 'CP.exe', 'cp' )
- curl = ToolProbe( 'CURL.exe', 'curl', abort=False )
gcc = ToolProbe( 'GCC.gcc', 'gcc', IfHost( 'gcc-4', '*-*-cygwin*' ))
if host.match( '*-*-darwin*' ):
@@ -1463,7 +1506,6 @@ try:
ranlib = ToolProbe( 'RANLIB.exe', 'ranlib' )
strip = ToolProbe( 'STRIP.exe', 'strip' )
tar = ToolProbe( 'TAR.exe', 'gtar', 'tar' )
- wget = ToolProbe( 'WGET.exe', 'wget', abort=False )
yasm = ToolProbe( 'YASM.exe', 'yasm', abort=False, minversion=[1,2,0] )
autoconf = ToolProbe( 'AUTOCONF.exe', 'autoconf', abort=False )
automake = ToolProbe( 'AUTOMAKE.exe', 'automake', abort=False )
@@ -1474,8 +1516,6 @@ try:
xcodebuild = ToolProbe( 'XCODEBUILD.exe', 'xcodebuild', abort=False )
lipo = ToolProbe( 'LIPO.exe', 'lipo', abort=False )
- fetch = SelectTool( 'FETCH.select', 'fetch', ['wget',wget], ['curl',curl] )
-
## run tool probes
for tool in ToolProbe.tools:
tool.run()
@@ -1887,6 +1927,8 @@ int main ()
## perform
doc.write( 'make' )
doc.write( 'm4' )
+ encodeFetchConfig()
+
if options.launch:
Launcher( targets )
diff --git a/make/fetch.py b/make/fetch.py
new file mode 100644
index 000000000..6b781faf9
--- /dev/null
+++ b/make/fetch.py
@@ -0,0 +1,235 @@
+###############################################################################
+##
+## This script is coded for minimum version of Python 2.7 .
+##
+## Python3 is incompatible.
+##
+## Authors: konablend
+##
+###############################################################################
+
+import errno
+import hashlib
+import json
+import os
+import re
+import tempfile
+import traceback
+import urllib2
+
+from optparse import OptionGroup
+from optparse import OptionParser
+from sys import stderr
+from sys import stdout
+from urlparse import urlparse
+
+###############################################################################
+
+class Fetch(object):
+ def __init__(self, options, urls):
+ if options.disable:
+ self.errln('fetching files from the network is disabled.')
+ self.options = options
+ self.urls = urls
+ if len(self.urls) > 1:
+ self.infof('\n')
+ self.verbosef('OPTIONS:\n')
+ self.verbosef(' disable: %s\n' % self.options.disable)
+ self.verbosef(' disable_md5: %s\n' % self.options.disable_md5)
+ self.verbosef(' config: %s\n' % self.options.config)
+ self.verbosef(' md5: %s\n' % self.options.md5)
+ self.verbosef(' output_dir: %s\n' % self.options.output_dir)
+ index = 0
+ for spec in self.options.accept_url:
+ self.verbosef(' accept_url[%d]: %s\n' % (index,spec))
+ index += 1
+ if not self.options.accept_url:
+ self.verbosef(' accept_url: %s\n' % None)
+ index = 0
+ for spec in self.options.deny_url:
+ self.verbosef(' deny_url[%d]: %s\n' % (index,spec))
+ index += 1
+ if not self.options.deny_url:
+ self.verbosef(' deny_url: %s\n' % None)
+
+ def run(self):
+ files = []
+ for url in self.urls:
+ files.append(self._process_url(url))
+ index = 0
+ for file in files:
+ file.dump(index)
+ index += 1
+ for file in files:
+ if file.run():
+ return
+ self.errln('download failed.')
+
+ def errln(self, format, *args):
+ s = (format % args)
+ if re.match( '^.*[!?:;.]$', s ):
+ stderr.write('ERROR: %s fetch stop.\n' % (s))
+ else:
+ stderr.write('ERROR: %s; fetch stop.\n' % (s))
+ exit(1)
+
+ def warnln(self, format, *args):
+ s = (format % args)
+ if re.match( '^.*[!?:;.]$', s ):
+ stderr.write('WARNING: %s fetch continuing.\n' % (s))
+ else:
+ stderr.write('WARNING: %s; fetch continuing.\n' % (s))
+
+ def infof(self, format, *args):
+ stdout.write(format % args)
+
+ def verbosef(self, format, *args):
+ if self.options.verbose:
+ stdout.write(format % args)
+
+ def _process_url(self, url):
+ props = {}
+ index = 0
+ while True:
+ m = re.match('(\[(\w+)=([^]]+)\])?(.*)', url[index:])
+ if not m.group(1):
+ break
+ props[m.group(2)] = m.group(3)
+ index += len(m.group(1))
+ return File(url[index:], **props)
+
+###############################################################################
+
+class File(object):
+ def __init__(self, url, **kwargs):
+ self.url = url
+ self.md5 = kwargs.get('md5', fetch.options.md5)
+ self.filename = os.path.join(fetch.options.output_dir,os.path.basename(urlparse(self.url).path))
+ self.active = True
+ self.active_descr = 'default'
+ self._accept()
+ self._deny()
+
+ def dump(self, index):
+ fetch.verbosef('URL[%d]: %s\n' % (index,self.url))
+ fetch.verbosef(' MD5: %s\n' % self.md5)
+ fetch.verbosef(' filename: %s\n' % self.filename)
+ fetch.verbosef(' active: %s (%s)\n' % ('yes' if self.active else 'no',self.active_descr))
+
+ def run(self):
+ if not self.active:
+ return False
+ try:
+ if self._download():
+ return True
+ except Exception, x:
+ if fetch.options.verbose:
+ traceback.print_exc()
+ fetch.warnln('%s' % x)
+ return False
+
+ def _accept(self):
+ if not fetch.options.accept_url:
+ return
+ index = 0
+ for spec in fetch.options.accept_url:
+ if re.match(spec, self.url):
+ self.active_descr = 'via accept rule %d: %s' % (index,spec)
+ return
+ index += 1
+ self.active = False
+ self.active_descr = 'no matching spec'
+
+ def _deny(self):
+ index = 0
+ for spec in fetch.options.deny_url:
+ if re.match(spec, self.url):
+ self.active = False
+ self.active_descr = 'via deny rule %d: %s' % (index,spec)
+ return
+ index += 1
+
+ def _download(self):
+ fetch.infof('downloading %s to %s\n' % (self.url,self.filename))
+ hasher = hashlib.md5()
+ ftmp = self.filename + '.' + os.path.basename(tempfile.mktemp())
+ r = urllib2.urlopen(self.url, None, 30)
+ try:
+ o = open(ftmp, 'w')
+ info = r.info()
+ try:
+ content_length = int(info.getheader('Content-Length'))
+ except:
+ content_length = None
+ data_total = 0
+ while True:
+ data = r.read(65536)
+ if not data:
+ break
+ o.write(data)
+ hasher.update(data)
+ data_total += len(data)
+ except:
+ os.unlink(ftmp)
+ finally:
+ for closeable in [r,o]:
+ try:
+ if not closeable:
+ continue
+ closeable.close()
+ except:
+ pass
+
+ if content_length and content_length != data_total:
+ fetch.warnln('expected %d bytes, got %d bytes' % (content_length,data_total))
+ os.unlink(ftmp)
+ return False
+
+ if not fetch.options.disable_md5 and self.md5 and self.md5 == hasher.hexdigest():
+ s = ' (verified)'
+ else:
+ s = ''
+
+ fetch.infof("downloaded '%s' - %d bytes - %s%s\n" % (self.filename,data_total,hasher.hexdigest(),s))
+ if not fetch.options.disable_md5 and self.md5 and self.md5 != hasher.hexdigest():
+ os.unlink(ftmp)
+ raise RuntimeError("expected MD5 hash '%s', got '%s'" % (self.md5, hasher.hexdigest()))
+
+ if os.access(self.filename, os.F_OK) and not os.access(self.filename, os.W_OK):
+ os.unlink(ftmp)
+ raise IOError(errno.EACCES, "Permission denied: '%s'" % self.filename)
+
+ try:
+ os.rename(ftmp,self.filename)
+ except:
+ os.unlink(ftmp)
+
+ return True
+
+###############################################################################
+
+def load_config(option, opt, value, parser):
+ with open(value, 'r') as file:
+ data = json.load(file)
+ parser.values.disable = data[0]
+ parser.values.disable_md5 = data[1]
+ parser.values.accept_url = data[2]
+ parser.values.deny_url = data[3]
+
+###############################################################################
+
+parser = OptionParser('usage: %prog [OPTIONS...] [URL...]')
+
+parser.description = 'Fetch files from the network.'
+
+parser.add_option('--verbose', default=False, action='store_true', help='increase verbosity')
+parser.add_option('--config', default=None, action='callback', metavar='FILE', type='str', callback=load_config, help='specify configuration file')
+parser.add_option('--disable', default=False, action='store_true', help='print disabled message and exit with error')
+parser.add_option('--disable-md5', default=False, action='store_true', help='disable MD5 data error detection')
+parser.add_option('--md5', default=None, action='store', metavar='HASH', help='set default MD5 hash value')
+parser.add_option('--accept-url', default=[], action='append', metavar='SPEC', help='accept URL regex pattern')
+parser.add_option('--deny-url', default=[], action='append', metavar='SPEC', help='deny URL regex pattern')
+parser.add_option('--output-dir', default='', action='store', help='specify output directory')
+
+fetch = Fetch(*parser.parse_args())
+fetch.run()
diff --git a/make/include/contrib.defs b/make/include/contrib.defs
index 55f2992c6..040a416e0 100644
--- a/make/include/contrib.defs
+++ b/make/include/contrib.defs
@@ -26,11 +26,11 @@ define import.CONTRIB.defs
##
## target: fetch
##
- $(1).FETCH.tar = $$(CONTRIB.download/)$$(notdir $$($(1).FETCH.url))
+ $(1).FETCH.tar = $$(CONTRIB.download/)$$(notdir $$(firstword $$($(1).FETCH.url)))
$(1).FETCH.url = FETCH_IS_UNDEFINED
$(1).FETCH.target = $$($(1).FETCH.tar)
define $(1).FETCH
- $$(call FETCH,$$@,$$($(1).FETCH.url))
+ $$(FETCH.exe) --config $(BUILD/)fetch.cfg --output-dir $$(dir $$@) $$(if $$($(1).FETCH.md5),--md5 $$($(1).FETCH.md5)) $$($(1).FETCH.url)
endef
##
diff --git a/make/include/main.defs b/make/include/main.defs
index 1781fb41e..1aa36c485 100644
--- a/make/include/main.defs
+++ b/make/include/main.defs
@@ -2,7 +2,6 @@ include $(SRC/)make/include/base.defs
include $(SRC/)make/include/contrib.defs
include $(SRC/)make/include/function.defs
include $(SRC/)make/include/gcc.defs
-include $(SRC/)make/include/select.defs
include $(SRC/)make/include/target.defs
include $(SRC/)make/include/tool.defs
diff --git a/make/include/select.defs b/make/include/select.defs
deleted file mode 100644
index 32a652523..000000000
--- a/make/include/select.defs
+++ /dev/null
@@ -1,12 +0,0 @@
-##
-## fetch a file from the web via well-known anonymous protocols such as HTTP.
-##
-## $(1) = output filename
-## $(2) = URL
-##
-FETCH = $(FETCH.$(FETCH.select))
-
-FETCH.select = MISSING
-FETCH.MISSING = $(error one of the following tools is required: wget, curl)
-FETCH.curl = $(CURL.exe) -q -L -o $(1) $(2)
-FETCH.wget = $(WGET.exe) -O $(1) $(2)
diff --git a/make/include/tool.defs b/make/include/tool.defs
index 3efe5d83f..579a6dd98 100644
--- a/make/include/tool.defs
+++ b/make/include/tool.defs
@@ -1,13 +1,12 @@
AR.exe = ar
CP.exe = cp
-CURL.exe = curl
+FETCH.exe = $(SRC/)make/python_launcher $(SRC/)make/fetch.py
M4.exe = m4
MKDIR.exe = mkdir
PATCH.exe = patch
RM.exe = rm
TAR.exe = tar
TOUCH.exe = touch
-WGET.exe = wget
MV.exe = mv
ZIP.exe = zip
LN.exe = ln
diff --git a/make/python_launcher b/make/python_launcher
new file mode 100755
index 000000000..c2d9d8da0
--- /dev/null
+++ b/make/python_launcher
@@ -0,0 +1,25 @@
+#! /bin/sh
+#
+
+inpath()
+{
+ IFS=:
+ for d in $PATH
+ do
+ if [ -x $d/$1 ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+for p in python2.7 python2.6 python2.5 python2.4 python2 python
+do
+ if ( inpath $p ); then
+ exec $p "$@"
+ exit 0
+ fi
+done
+
+echo "ERROR: no suitable version of python found."
+exit 1