From 4e43bd06146941548c894321a34619e199f1d2f0 Mon Sep 17 00:00:00 2001
From: jstebbins <jstebbins.hb@gmail.com>
Date: Tue, 25 Oct 2011 02:18:15 +0000
Subject: [PATCH] Add optional yasm contrib

To enable, "configure --enable-local-yasm"

Ubuntu 10.04 LTS (lucid) has yasm 0.8 which is no longer compatible with
x264.  This change allows us to build yasm as a contrib and use it for
building both Libav and x264 which require yasm.

git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@4314 b64f7644-9d1e-0410-96f1-a4d463321fa5
---
 contrib/ffmpeg/module.defs     |  8 +++-
 contrib/x264/module.defs       |  7 ++-
 contrib/yasm/module.defs       |  5 ++
 contrib/yasm/module.rules      |  2 +
 make/configure.py              | 11 ++++-
 make/include/contrib.defs      |  6 ++-
 make/include/main.defs         |  4 ++
 pkg/linux/debian/control.lucid | 30 ++++++++++++
 pkg/linux/debian/rules.lucid   | 85 ++++++++++++++++++++++++++++++++++
 pkg/linux/module.rules         |  3 +-
 10 files changed, 155 insertions(+), 6 deletions(-)
 create mode 100644 contrib/yasm/module.defs
 create mode 100644 contrib/yasm/module.rules
 create mode 100644 pkg/linux/debian/control.lucid
 create mode 100644 pkg/linux/debian/rules.lucid

diff --git a/contrib/ffmpeg/module.defs b/contrib/ffmpeg/module.defs
index e231c5547..b71f197e3 100644
--- a/contrib/ffmpeg/module.defs
+++ b/contrib/ffmpeg/module.defs
@@ -1,4 +1,4 @@
-$(eval $(call import.MODULE.defs,FFMPEG,ffmpeg,BZIP2 ZLIB))
+$(eval $(call import.MODULE.defs,FFMPEG,ffmpeg,YASM BZIP2 ZLIB))
 $(eval $(call import.CONTRIB.defs,FFMPEG))
 
 FFMPEG.FETCH.url = http://download.handbrake.fr/handbrake/contrib/ffmpeg-v0.7-1318-g91038cd.tar.bz2
@@ -74,3 +74,9 @@ endif
 ifeq (solaris,$(BUILD.system))
     FFMPEG.CONFIGURE.extra += --disable-demuxer=mpc8
 endif
+
+ifeq (1,$(FEATURE.local_yasm))
+    FFMPEG.CONFIGURE.env = PATH="$(call fn.ABSOLUTE,$(CONTRIB.build/)bin):$(PATH)"
+    FFMPEG.BUILD.env = PATH="$(call fn.ABSOLUTE,$(CONTRIB.build/)bin):$(PATH)"
+endif
+
diff --git a/contrib/x264/module.defs b/contrib/x264/module.defs
index 0eba9f7ab..a78f554e1 100644
--- a/contrib/x264/module.defs
+++ b/contrib/x264/module.defs
@@ -1,4 +1,4 @@
-$(eval $(call import.MODULE.defs,X264,x264,PTHREADW32))
+$(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-r2106-07efeb4.tar.gz
@@ -16,3 +16,8 @@ ifeq (1-mingw,$(BUILD.cross)-$(BUILD.system))
     X264.CONFIGURE.env.CFLAGS = CFLAGS="-I$(call fn.ABSOLUTE,$(CONTRIB.build/)include) $(call fn.ARGS,X264.GCC,*archs *sysroot *minver ?extra)"
     X264.CONFIGURE.env.LDFLAGS = LDFLAGS="-L$(call fn.ABSOLUTE,$(CONTRIB.build/)lib) $(call fn.ARGS,X264.GCC,*archs *sysroot *minver)"
 endif
+
+ifeq (1,$(FEATURE.local_yasm))
+    X264.CONFIGURE.env.LOCAL_PATH = PATH="$(call fn.ABSOLUTE,$(CONTRIB.build/)bin):$(PATH)"
+    X264.BUILD.env = PATH="$(call fn.ABSOLUTE,$(CONTRIB.build/)bin):$(PATH)"
+endif
diff --git a/contrib/yasm/module.defs b/contrib/yasm/module.defs
new file mode 100644
index 000000000..90215575f
--- /dev/null
+++ b/contrib/yasm/module.defs
@@ -0,0 +1,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.1.0.tar.gz
+
diff --git a/contrib/yasm/module.rules b/contrib/yasm/module.rules
new file mode 100644
index 000000000..ade13f959
--- /dev/null
+++ b/contrib/yasm/module.rules
@@ -0,0 +1,2 @@
+$(eval $(call import.MODULE.rules,YASM))
+$(eval $(call import.CONTRIB.rules,YASM))
diff --git a/make/configure.py b/make/configure.py
index df9e853a5..02816658d 100644
--- a/make/configure.py
+++ b/make/configure.py
@@ -1091,6 +1091,11 @@ def createCLI():
     h = IfHost( 'Min OS X Version', '*-*-darwin*', none=optparse.SUPPRESS_HELP ).value
     grp.add_option( '--minver', default=None, action='store', metavar='VER',
         help=h )
+
+    h = IfHost( 'Build and use local yasm', '*-*-*', none=optparse.SUPPRESS_HELP ).value
+    grp.add_option( '--enable-local-yasm', default=False, action='store_true', help=h )
+    print "opt yasm"
+
     cli.add_option_group( grp )
 
     ## add tool locations
@@ -1246,6 +1251,7 @@ try:
         strip  = ToolProbe( 'STRIP.exe',  'strip' )
         tar    = ToolProbe( 'TAR.exe',    'gtar', 'tar' )
         wget   = ToolProbe( 'WGET.exe',   'wget', abort=False )
+        print "Probing yasm"
         yasm   = ToolProbe( 'YASM.exe',   'yasm', abort=False )
 
         xcodebuild = ToolProbe( 'XCODEBUILD.exe', 'xcodebuild', abort=False )
@@ -1455,6 +1461,7 @@ int main ()
     doc.add( 'PREFIX/', cfg.prefix_final + os.sep )
     
     doc.addBlank()
+    doc.add( 'FEATURE.local_yasm', int( options.enable_local_yasm ) )
     doc.add( 'FEATURE.asm',   'disabled' )
     doc.add( 'FEATURE.gtk',   int( not options.disable_gtk ))
     doc.add( 'FEATURE.gtk.update.checks',   int( not options.disable_gtk_update_checks ))
@@ -1511,8 +1518,10 @@ int main ()
     doc.add( 'GCC.ldsysroot', '$(GCC.sysroot)' )
     doc.add( 'GCC.ldminver', '$(GCC.minver)' )
 
-    if options.enable_asm and not Tools.yasm.fail:
+    print "enable_asm %d %d" % (options.enable_asm, options.enable_local_yasm)
+    if options.enable_asm and ( not Tools.yasm.fail or options.enable_local_yasm ):
         asm = ''
+        print "xxxxxxx enable_asm"
         if build.match( 'i?86-*' ):
             asm = 'x86'
             doc.add( 'LIBHB.GCC.D', 'HAVE_MMX', append=True )
diff --git a/make/include/contrib.defs b/make/include/contrib.defs
index 003152b85..4c813c7fb 100644
--- a/make/include/contrib.defs
+++ b/make/include/contrib.defs
@@ -82,6 +82,7 @@ define import.CONTRIB.defs
 
     $(1).CONFIGURE.args = !sete @dir !bootstrap !env !exe @host @prefix !deps !shared !static !extra
 
+    $(1).CONFIGURE.env.LOCAL_PATH =
     $(1).CONFIGURE.env.CC       = CC=$$($(1).GCC.gcc)
     $(1).CONFIGURE.env.CXX      = CXX=$$($(1).GCC.gxx)
     ##
@@ -103,7 +104,7 @@ define import.CONTRIB.defs
     $(1).CONFIGURE.env.LDFLAGS  = LDFLAGS="$$(call fn.ARGS,$(1).GCC,*archs *sysroot *minver)"
     $(1).CONFIGURE.env.PKG_CONFIG_PATH  = PKG_CONFIG_PATH="$$(call fn.ABSOLUTE,$$(CONTRIB.build/))lib/pkgconfig"
 
-    $(1).CONFIGURE.env.args = !CC !CFLAGS !CXX !CXXFLAGS !CPPFLAGS !LDFLAGS !PKG_CONFIG_PATH
+    $(1).CONFIGURE.env.args = !CC !CFLAGS !CXX !CXXFLAGS !CPPFLAGS !LDFLAGS !PKG_CONFIG_PATH !LOCAL_PATH
     $(1).CONFIGURE.env = $$(call fn.ARGS,$(1).CONFIGURE.env,$$($(1).CONFIGURE.env.args))
 
     $(1).CONFIGURE.target = $$($(1).build/).stamp.configure
@@ -115,12 +116,13 @@ define import.CONTRIB.defs
     ##
     ## target: build
     ##
+    $(1).BUILD.env      =
     $(1).BUILD.make     = $$(MAKE)
     $(1).BUILD.dir      = $$($(1).EXTRACT.dir/)
     $(1).BUILD.extra    =
     $(1).BUILD.ntargets =
 
-    $(1).BUILD.args = !make @dir !extra !ntargets
+    $(1).BUILD.args = !env !make @dir !extra !ntargets
     $(1).BUILD.args.dir = -C $$(1)
 
     $(1).BUILD.target = $$($(1).build/).stamp.build
diff --git a/make/include/main.defs b/make/include/main.defs
index 63b7aa38c..e68f679f7 100644
--- a/make/include/main.defs
+++ b/make/include/main.defs
@@ -83,6 +83,10 @@ ifeq (1-linux,$(FEATURE.gtk)-$(BUILD.system))
     MODULES += gtk
 endif
 
+ifeq (1,$(FEATURE.local_yasm))
+    MODULES += contrib/yasm
+endif
+
 ###############################################################################
 
 MODULES += doc
diff --git a/pkg/linux/debian/control.lucid b/pkg/linux/debian/control.lucid
new file mode 100644
index 000000000..156d629f3
--- /dev/null
+++ b/pkg/linux/debian/control.lucid
@@ -0,0 +1,30 @@
+Source: handbrake
+Section: graphics
+Priority: optional
+Maintainer: John Stebbins <jstebbins.hb@gmail.com>
+Build-Depends: debhelper (>= 6), autotools-dev, libtool, libgudev-1.0-dev, intltool, autoconf, libbz2-dev, zlib1g-dev, libwebkit-dev, libnotify-dev, libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev, wget, subversion, python (>= 2.6), libfribidi-dev (>= 0.19.0)
+Standards-Version: 3.8.4
+Homepage: http://www.handbrake.fr/
+
+Package: handbrake-cli
+Architecture: i386 amd64
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Conflicts: handbrake
+Description: versatile DVD ripper and video transcoder - command line
+ HandBrake is a versatile, easy-to-use tool for converting DVDs and other videos
+ into H.264, MPEG-4, or OGG formatted media. It's particularly useful for making
+ videos that are compatible with portable video devices such as the Apple
+ iPod/iPhone. This package contains the command-line variant,
+ HandBrakeCLI
+
+Package: handbrake-gtk
+Architecture: i386 amd64
+Depends: ${shlibs:Depends}, ${misc:Depends}, libwebkit-1.0-2, libnotify1
+Conflicts: handbrake
+Description: versatile DVD ripper and video transcoder - GTK GUI
+ HandBrake is a versatile, easy-to-use tool for converting DVDs and other videos
+ into H.264, MPEG-4, or OGG formatted media. It's particularly useful for making
+ videos that are compatible with portable video devices such as the Apple
+ iPod/iPhone. This package contains the graphical variant, ghb.
+
+
diff --git a/pkg/linux/debian/rules.lucid b/pkg/linux/debian/rules.lucid
new file mode 100644
index 000000000..caed627da
--- /dev/null
+++ b/pkg/linux/debian/rules.lucid
@@ -0,0 +1,85 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
+CROSS= --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
+else
+CROSS= --build $(DEB_BUILD_GNU_TYPE)
+endif
+
+PKGDESTDIR   = ../
+CONFIGURE    = ./configure --enable-local-yasm
+BUILDDIR     = build
+FORCEVERSION = 
+
+$(BUILDDIR)/GNUmakefile: $(CONFIGURE)
+	dh_testdir
+	unset CFLAGS; unset CPPLAGS; unset CXXLAGS; $(CONFIGURE) --disable-gtk-update-checks --prefix=/usr
+
+build:  $(BUILDDIR)/GNUmakefile
+	dh_testdir
+	#We must build both the main project and the GTK project
+	unset CFLAGS ; unset CPPLAGS ; unset CXXLAGS; $(MAKE) -C $(BUILDDIR)
+
+clean: 
+	dh_testdir
+	dh_testroot
+
+	dh_clean
+
+install: build
+	dh_testdir
+	dh_testroot
+	dh_installdirs
+	$(MAKE) -C $(BUILDDIR) DESTDIR=$(CURDIR)/debian/tmp install
+
+# Build architecture-independent files here.
+binary-indep: build install
+	dh_testdir
+	dh_testroot
+	dh_installchangelogs -i
+	dh_installdocs -i
+	dh_install --sourcedir=debian/tmp -i
+	dh_icons -i
+	dh_link -i
+	dh_compress -i
+	dh_fixperms -i
+	dh_installdeb -i
+	dh_gencontrol -i $(FORCEVERSION)
+	dh_md5sums -i
+	dh_builddeb --destdir=$(PKGDESTDIR) -i
+
+# Build architecture-dependent files here.
+binary-arch: build install
+	dh_testdir
+	dh_testroot
+	dh_install --sourcedir=debian/tmp -a
+	dh_installchangelogs -a
+	dh_installdocs -a
+	dh_installexamples -a
+	dh_installman -a
+	dh_link -a
+	dh_icons -a
+	dh_strip -a
+	dh_compress -a
+	dh_fixperms -a
+	dh_installdeb -a
+	dh_shlibdeps -a
+	dh_gencontrol -a $(FORCEVERSION)
+	dh_md5sums -a
+	dh_builddeb -a --destdir=$(PKGDESTDIR) -- -Zbzip2
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install 
diff --git a/pkg/linux/module.rules b/pkg/linux/module.rules
index 41fbc404b..b97f14189 100644
--- a/pkg/linux/module.rules
+++ b/pkg/linux/module.rules
@@ -105,7 +105,8 @@ $(PKG.src.deb.stamp): GNUmakefile
 	svn co -r$(HB.repo.rev) $(HB.repo.url) $(STAGE.out.src/)lucid/$(PKG.deb.basename)
 	$(CP.exe) -a $(SRC/)download $(STAGE.out.src/)lucid/$(PKG.deb.basename)
 	cp -a $(PWD)/$(PKG.debian) $(STAGE.out.src/)lucid/$(PKG.deb.basename)
-	$(CP.exe) $(STAGE.out.src/)lucid/$(PKG.deb.basename)/debian/control.karmic $(STAGE.out.src/)lucid/$(PKG.deb.basename)/debian/control
+	$(CP.exe) $(STAGE.out.src/)lucid/$(PKG.deb.basename)/debian/control.lucid $(STAGE.out.src/)lucid/$(PKG.deb.basename)/debian/control
+	$(CP.exe) $(STAGE.out.src/)lucid/$(PKG.deb.basename)/debian/rules.lucid $(STAGE.out.src/)lucid/$(PKG.deb.basename)/debian/rules
 	echo "handbrake ($(HB.version)ppa1~lucid1) lucid; urgency=low" > $(STAGE.out.src/)lucid/$(PKG.deb.basename)/debian/changelog
 	echo "  * Snapshot" >> $(STAGE.out.src/)lucid/$(PKG.deb.basename)/debian/changelog
 	echo "    - See timeline at http://trac.handbrake.fr/timeline" >> $(STAGE.out.src/)lucid/$(PKG.deb.basename)/debian/changelog
-- 
2.40.0