<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Grae</id>
	<title>VideoLAN Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Grae"/>
	<link rel="alternate" type="text/html" href="https://wiki.videolan.org/Special:Contributions/Grae/"/>
	<updated>2026-11-04T16:09:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=12061</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=12061"/>
		<updated>2008-07-05T22:39:17Z</updated>

		<summary type="html">&lt;p&gt;Grae: /* Configure your global git config */   Probably, new version of git changes the syntax of the config commands.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Basic Git usage =&lt;br /&gt;
== Getting VLC source code via Git ==&lt;br /&gt;
 $ git clone git://git.videolan.org/vlc.git&lt;br /&gt;
Voilà! The full VLC history should be on your hard disk in vlc/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out repo.or.cz mirror.&lt;br /&gt;
 $ git clone http://repo.or.cz/r/vlc.git&lt;br /&gt;
&lt;br /&gt;
 $ git log&lt;br /&gt;
to see the full log of the trunk.&lt;br /&gt;
 $ gitk&lt;br /&gt;
to see the log graphically.&lt;br /&gt;
&lt;br /&gt;
You can also browse the sources via [http://git.videolan.org/ gitweb].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the currently available Cygwin 1.5.25-12 with git package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in the mail archives of the Cygwin project mailing list here &lt;br /&gt;
[http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, it is the following Windows Security Update (April 3, 2007) which is actually the cause of the Cygwin issue: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;It is possible to get &#039;git clone&#039; working again on the affected systems by removing the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&lt;br /&gt;
May need to use &lt;br /&gt;
$ git repo-config {various options} &lt;br /&gt;
1.4.4.2 Requires the repo-config command rather than just config&lt;br /&gt;
&lt;br /&gt;
=== Personal Information ===&lt;br /&gt;
Tell git your name. (use mostly by git-commit)&lt;br /&gt;
 $ git config --global user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
 $ git config --global user.email &amp;quot;me@example.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Using git with color (Tip) ===&lt;br /&gt;
If you want to use git with colored output use:&lt;br /&gt;
 $ git config --global color.ui true&lt;br /&gt;
&lt;br /&gt;
If you are using an old git version (prior to 1.5.5) and previous command didn&#039;t work, use:&lt;br /&gt;
 $ git config --global color.diff auto&lt;br /&gt;
 $ git config --global color.status auto&lt;br /&gt;
 $ git config --global color.branch auto&lt;br /&gt;
&lt;br /&gt;
=== Setting up &amp;quot;git up&amp;quot; (Tip) ===&lt;br /&gt;
If you want to be able to just keep in sync using &amp;quot;git up&amp;quot; use:&lt;br /&gt;
 $ git config --global alias.up &amp;quot;pull --rebase&amp;quot;&lt;br /&gt;
And if you like your tree to be messy and don&#039;t want git to complain (like in svn) use:&lt;br /&gt;
 $ git config --global alias.up &#039;!sh -c &amp;quot;git stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Setting up &amp;quot;git wu&amp;quot; (Git What&#039;s Up) (Tip) ===&lt;br /&gt;
If you want to see what you are about to &amp;quot;git push&amp;quot;:&lt;br /&gt;
 $ git config --global alias.wu &amp;quot;log --stat origin..@{0}&amp;quot;&lt;br /&gt;
Now use:&lt;br /&gt;
 $ git wu&lt;br /&gt;
&lt;br /&gt;
=== Setting up &amp;quot;git wup&amp;quot; (Git What&#039;s Up - with patch) (Tip) ===&lt;br /&gt;
If you want to see what you are about to &amp;quot;git push&amp;quot;, along with the diff:&lt;br /&gt;
 $ git config --global alias.wup &amp;quot;log -p origin..@{0}&amp;quot;&lt;br /&gt;
Now use:&lt;br /&gt;
 $ git wup&lt;br /&gt;
&lt;br /&gt;
== General GIT Workflow ==&lt;br /&gt;
1.  Make your file edits in your local repository.&lt;br /&gt;
&lt;br /&gt;
2.  &amp;quot;git commit&amp;quot;      the changes in your local repository&lt;br /&gt;
&lt;br /&gt;
3.  &amp;quot;git pull --rebase&amp;quot;  or &amp;quot;git up&amp;quot; (if you did &#039;&#039;git config --global alias.up &amp;quot;pull --rebase&amp;quot;&#039;&#039;) to bring the rest of your local repository up to date&lt;br /&gt;
&lt;br /&gt;
4.  &amp;quot;git log origin..master&amp;quot;    to check what you are going to commit&lt;br /&gt;
&lt;br /&gt;
4.  &amp;quot;git push&amp;quot;    to move your changes up to the master&lt;br /&gt;
&lt;br /&gt;
&amp;quot;git stash&amp;quot;    if you want to &amp;quot;hide&amp;quot; your changes.  Do this if you think there may be other commits against ther same things you are working on, want to refresh yourself (using a git pull --rebase) from the master. Use &amp;quot;git stash apply&amp;quot; to get your stash back. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;git checkout -f master&amp;quot;     if you think your tree is pretty hopeless, need a kill-and-fill to bring the master into your local repository.&lt;br /&gt;
&lt;br /&gt;
== List the local branch ==&lt;br /&gt;
You can now list your local branch by doing&lt;br /&gt;
 $ git branch&lt;br /&gt;
which should ouput&lt;br /&gt;
 $ git branch&lt;br /&gt;
 * master&lt;br /&gt;
&lt;br /&gt;
== List your local non committed changes ==&lt;br /&gt;
 $ git status | less&lt;br /&gt;
&lt;br /&gt;
== Commit ==&lt;br /&gt;
Now you can start to work on your tree. As soon as you feel you&#039;ve reached a step in developement you can commit &#039;&#039;&#039;locally&#039;&#039;&#039; your work by&lt;br /&gt;
 $ git commit -a&lt;br /&gt;
or&lt;br /&gt;
 $ git commit &amp;lt;specific files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== List your commits ==&lt;br /&gt;
 $ git log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keeping your local working branch in sync ==&lt;br /&gt;
 $ git pull --rebase&lt;br /&gt;
&lt;br /&gt;
To shorten up that command type&lt;br /&gt;
 $ git config --global alias.up &amp;quot;pull --rebase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now you can just type:&lt;br /&gt;
 $ git up&lt;br /&gt;
&lt;br /&gt;
== Use a graphical interface ==&lt;br /&gt;
 $ gitk          # Tree Browser&lt;br /&gt;
 $ qgit          # Tree Browser&lt;br /&gt;
 $ git-gui       # Commit/push/... editor&lt;br /&gt;
&lt;br /&gt;
== Submitting patches to the vlc-devel ==&lt;br /&gt;
&lt;br /&gt;
First make sure you have &#039;&#039;&#039;read&#039;&#039;&#039; our [[Sending Patches]] page. And that you&#039;ve &#039;&#039;&#039;read&#039;&#039;&#039; the [[Sending Patches#Check_List| Check List]].&lt;br /&gt;
&lt;br /&gt;
If you have been developing on vlc locally and (still) don&#039;t have write access, you can submit all your commit in one shot using:&lt;br /&gt;
 $ rm -Rf patches&lt;br /&gt;
 $ git format-patch -o patches origin&lt;br /&gt;
 $ git-send-email --to vlc-devel@videolan.org patches&lt;br /&gt;
If you have multiple patch consider using:&lt;br /&gt;
 $ git-send-email --compose --no-chain-reply-to --to vlc-devel@videolan.org patches&lt;br /&gt;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply do&lt;br /&gt;
* [PATCH 0/m]&lt;br /&gt;
** [PATCH 1/m]&lt;br /&gt;
*** [PATCH 2/m]&lt;br /&gt;
**** ...&lt;br /&gt;
But :&lt;br /&gt;
* [PATCH 0/m]&lt;br /&gt;
** [PATCH 1/m]&lt;br /&gt;
** [PATCH 2/m]&lt;br /&gt;
** ..&lt;br /&gt;
&lt;br /&gt;
= Advanced usage =&lt;br /&gt;
== Creating a secondary local branch ==&lt;br /&gt;
If you want to work on a specific project that could require a branch of the trunk, create a local branch of the current branch by doing:&lt;br /&gt;
 $ git branch mywork&lt;br /&gt;
and to actually use it do:&lt;br /&gt;
 $ git checkout mywork&lt;br /&gt;
Which could be summarized by:&lt;br /&gt;
 $ git checkout -b mywork&lt;br /&gt;
&lt;br /&gt;
Then do some commit on it... And you can go back to your original master branch by doing:&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
&lt;br /&gt;
== Fetching a remote branch ==&lt;br /&gt;
To see the remote branch use:&lt;br /&gt;
 $ git branch -r&lt;br /&gt;
If the remote branch is named 0.8.6-bugfix&lt;br /&gt;
 $ git branch 0.8.6-bugfix origin/0.8.6-bugfix &lt;br /&gt;
 Branch 0.8.6-bugfix set up to track remote branch refs/remotes/origin/0.8.6-bugfix.&lt;br /&gt;
 $ git branch&lt;br /&gt;
  0.8.6-bugfix&lt;br /&gt;
  * master&lt;br /&gt;
To checkout that branch use:&lt;br /&gt;
 $ git checkout 0.8.6-bugfix&lt;br /&gt;
To stay up-to-date a simple&lt;br /&gt;
 $ git pull --rebase&lt;br /&gt;
Should be enough.&lt;br /&gt;
&lt;br /&gt;
If warnings appear that files still need updating:&lt;br /&gt;
 $ include/libvlc_internal.h: needs update&lt;br /&gt;
   include/mediacontrol_internal.h: needs update&lt;br /&gt;
   include/vlc/libvlc.h: needs update&lt;br /&gt;
   include/vlc_update.h: needs update&lt;br /&gt;
   modules/access/mms/mms.c: needs update&lt;br /&gt;
   ...&lt;br /&gt;
&lt;br /&gt;
Then do a checkout -f to revert non committed local changes&lt;br /&gt;
 $ git checkout -f&lt;br /&gt;
&lt;br /&gt;
To stay up-to-date another&lt;br /&gt;
 $ git pull --rebase&lt;br /&gt;
Should give no more warnings.&lt;br /&gt;
&lt;br /&gt;
To push to the remote branch, use:&lt;br /&gt;
 $git push origin 0.8.6-bugfix:0.8.6-bugfix&lt;br /&gt;
&lt;br /&gt;
== Creating a remote branch ==&lt;br /&gt;
If the new remote branch is named 0.9.0-bugfix, and is based on the local master branch.&lt;br /&gt;
First make sure everything go as planned with the --dry-run option:&lt;br /&gt;
 $ git push --dry-run origin master:refs/heads/0.9.0-stable&lt;br /&gt;
 To git@git.videolan.org:vlc.git&lt;br /&gt;
 * [new branch]      master -&amp;gt; 0.9.0-stable&lt;br /&gt;
&lt;br /&gt;
Then push it:&lt;br /&gt;
 $ git push origin master:refs/heads/0.9.0-stable&lt;br /&gt;
 To git@git.videolan.org:vlc.git&lt;br /&gt;
 * [new branch]      master -&amp;gt; 0.9.0-stable&lt;br /&gt;
 $ git branch -r&lt;br /&gt;
  origin/0.9.0-stable&lt;br /&gt;
  origin/master&lt;br /&gt;
&lt;br /&gt;
To checkout that branch now see &#039;&#039;Fetching a remote branch&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Publishing your own fork ==&lt;br /&gt;
Goto [http://repo.or.cz/w/vlc.git http://repo.or.cz/w/vlc.git] and click [http://repo.or.cz/m/regproj.cgi?name=vlc/ fork]. You will be able to publish your work there.&lt;br /&gt;
&lt;br /&gt;
Please don&#039;t forget to send a mail to the vlc-devel as soon as you create your fork.&lt;br /&gt;
&lt;br /&gt;
== Revert your non-committed local changes ==&lt;br /&gt;
 $ git checkout -f&lt;br /&gt;
&lt;br /&gt;
==Edit or undo not yet pushed commits ==&lt;br /&gt;
This will undo the last commit&lt;br /&gt;
 $ git reset HEAD^&lt;br /&gt;
which is the same as&lt;br /&gt;
 $ git reset master^&lt;br /&gt;
(if you are checked-out copy of your tree is master)&lt;br /&gt;
And also the same as&lt;br /&gt;
 $ git reset a44a594 # note that there is no need to use the full sha id&lt;br /&gt;
&lt;br /&gt;
If you have a stack of patch that you have not yet committed you can delete one patch from the list using git rebase --interactive&lt;br /&gt;
 $ git rebase --interactive origin&lt;br /&gt;
  pick eacf185 test&lt;br /&gt;
  pick 56322eb VLMA owner is vlma prod.&lt;br /&gt;
 &lt;br /&gt;
  # Rebase 826757e..56322eb onto 826757e&lt;br /&gt;
  #&lt;br /&gt;
  # Commands:&lt;br /&gt;
  #  pick = use commit&lt;br /&gt;
  #  edit = use commit, but stop for amending&lt;br /&gt;
  #  squash = use commit, but meld into previous commit&lt;br /&gt;
&lt;br /&gt;
== Diff-ing ==&lt;br /&gt;
* You can diff between two branches using&lt;br /&gt;
 $ git diff branch1 branch2&lt;br /&gt;
* You can diff between the previous 10th commit and current using&lt;br /&gt;
 $ git diff HEAD~10 HEAD&lt;br /&gt;
* You can diff between the previous 10th commit and current of the branch &amp;quot;mywork&amp;quot; using&lt;br /&gt;
 $ git diff mywork~10 mywork&lt;br /&gt;
* Imagine that git log is like&lt;br /&gt;
 $ git log&lt;br /&gt;
 commit e0394f269305edd09843257e7c1d1a66aaf48ab3&lt;br /&gt;
 Author: jb &amp;lt;jb&amp;gt;&lt;br /&gt;
 Date:   Fri Apr 13 07:14:48 2007 +0000&lt;br /&gt;
    qt4 - Mousewheel (2)&lt;br /&gt;
 commit e80b339081aa6755f67c9bd8e2aacf93a9a79d95&lt;br /&gt;
 [..]&lt;br /&gt;
 commit ff7004b70fd239e4120deb160e2991bd5237b8df&lt;br /&gt;
 [..]&lt;br /&gt;
 commit a44a594898f981a145cfcace5f16f8973f9eb46f&lt;br /&gt;
 [..]&lt;br /&gt;
 commit 690df705c963cf6bf6f5746d54bc97a85ff91919&lt;br /&gt;
 [..]&lt;br /&gt;
 commit 679f8b1c3e0baa469efa970588b95a625c595d64&lt;br /&gt;
 [..]&lt;br /&gt;
&lt;br /&gt;
 $ git diff a44a594898f981a145cfcace5f16f8973f9eb46f~2 e80b339081aa6755f67c9bd8e2aacf93a9a79d95&lt;br /&gt;
Will be equivalent to:&lt;br /&gt;
 $ git diff ff7004b70fd239e4120deb160e2991bd5237b8df e80b339081aa6755f67c9bd8e2aacf93a9a79d95&lt;br /&gt;
And to:&lt;br /&gt;
 $ git diff HEAD~4 HEAD^&lt;br /&gt;
&lt;br /&gt;
* Remember that to produce a patch you should rather use git-format-patch than git-diff most of the time.&lt;br /&gt;
&lt;br /&gt;
== Tracking regression ==&lt;br /&gt;
git has a great tool called [http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html git-bisect] to help you to track a faulty commit. Imagine you are tracking a bug that is known to appear after 0.8.6 (assuming 0.8.6 is tagged):&lt;br /&gt;
 $ git bisect start&lt;br /&gt;
 $ git bisect bad # tell git current version has the bug you are tracking&lt;br /&gt;
 $ git bisect good 0.8.6 # tell git 0.8.6 didn&#039;t has the bug&lt;br /&gt;
And then git will checkout a certain revision, and ask you to test it. And you simply say whether this version has the bug.&lt;br /&gt;
If it has the bug:&lt;br /&gt;
 $ git bisect bad&lt;br /&gt;
if the bug is not present:&lt;br /&gt;
 $ git bisect good&lt;br /&gt;
And so on by bisection... At the end git will indicate the faulty commit. Most of the time this tool is really efficient to track regression.&lt;br /&gt;
&lt;br /&gt;
If you can provide a script that test the presence of the bug &lt;br /&gt;
 $ git bisect run &amp;lt;script_name&amp;gt;&lt;br /&gt;
will be able to track down the regression by itself. See [http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html git-bisect Documentation].&lt;br /&gt;
&lt;br /&gt;
= Using Git to push to VideoLAN git =&lt;br /&gt;
== Initial requirement ==&lt;br /&gt;
* Make sure you&#039;ve set your name and email in your commits&lt;br /&gt;
 $ git config --global user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
 $ git config --global user.email &amp;quot;me@example.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Convert your tree to use your ssh push commit access ==&lt;br /&gt;
 $ vi vlc/.git/config&lt;br /&gt;
And replace git://git.videolan.org/vlc.git by git@git.videolan.org:vlc.git&lt;br /&gt;
&lt;br /&gt;
== Staying up to date ==&lt;br /&gt;
  $ git pull --rebase&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to have to type --rebase everytime you pull do:&lt;br /&gt;
 $ git config branch.master.rebase true&lt;br /&gt;
&lt;br /&gt;
This one creates a merge object which is not how SVN worked, so let&#039;s use the first version...&lt;br /&gt;
  $ git pull&lt;br /&gt;
&lt;br /&gt;
== Pushing your work ==&lt;br /&gt;
  $ git log origin..master     # Check what you are going to push&lt;br /&gt;
  $ git push&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- GSoC 2007&lt;br /&gt;
= Using Git to publish your work (for SoC student?) =&lt;br /&gt;
First get the official VLC &#039;&#039;&#039;Soc&#039;&#039;&#039; trunk&lt;br /&gt;
 $ git clone git://git.videolan.org/vlc-soc.git&lt;br /&gt;
 $ cd vlc-soc&lt;br /&gt;
Ask for write access to a branch (called your_name_branch). Now we will make git know that you want to publish on this branch&lt;br /&gt;
 $ git config remote.my_soc_public_branch.url ssh://your_name@altair.videolan.org/home/videolan/gitroot/vlc-soc.git&lt;br /&gt;
Now tell git that you want to automatically push the local master branch to the public your_name_branch:&lt;br /&gt;
 $ git config remote.my_soc_public_branch.push +master:your_name_branch # the &amp;quot;+&amp;quot; will tell git to force update ignoring conflicts&lt;br /&gt;
&lt;br /&gt;
Do some work and commit it to your master branch.&lt;br /&gt;
 $ git commit -a&lt;br /&gt;
You can also sync with the trunk (origin) as needed&lt;br /&gt;
 $ git pull --rebase origin&lt;br /&gt;
And don&#039;t forget to publish your changes:&lt;br /&gt;
 $ git push my_soc_public_branch&lt;br /&gt;
Now you should be able to see your latest changes in your branch via [http://git.videolan.org/ gitweb].&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Documentation about git =&lt;br /&gt;
* [http://git.or.cz/ Official Git Website]&lt;br /&gt;
* [http://www.kernel.org/pub/software/scm/git/docs/tutorial.html Git Tutorial]&lt;br /&gt;
* [http://git.or.cz/course/svn.html Switching from SVN to git using cogito]&lt;br /&gt;
* [http://wiki.sourcemage.org/Git_Guide Very good Git guide]&lt;br /&gt;
&lt;br /&gt;
[[Category:Building]]&lt;/div&gt;</summary>
		<author><name>Grae</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Hacker_Guide/Input&amp;diff=11989</id>
		<title>Hacker Guide/Input</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Hacker_Guide/Input&amp;diff=11989"/>
		<updated>2008-06-26T16:48:10Z</updated>

		<summary type="html">&lt;p&gt;Grae: /* Structures exported to the interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=The complex multi-layer input=&lt;br /&gt;
&lt;br /&gt;
The idea behind the input module is to treat packets, without knowing at all what is in it. It only takes a packet, reads its ID, and delivers it to the decoder at the right time indicated in the packet header (SCR and PCR fields in MPEG). All the basic browsing operations are implemented without peeking at the content of the elementary stream.&lt;br /&gt;
&lt;br /&gt;
Thus it remains very generic. This also means you can&#039;t do stuff like &amp;quot;play 3 frames now&amp;quot; or &amp;quot;move forward 10 frames&amp;quot; or &amp;quot;play as fast as you can but play all frames&amp;quot;. It doesn&#039;t even know what a &amp;quot;frame&amp;quot; is. There is no privileged elementary stream, like the video one could be (for the simple reason that, according to MPEG, a stream may contain several video ES).&lt;br /&gt;
&lt;br /&gt;
==What happens to a file==&lt;br /&gt;
&lt;br /&gt;
An input thread is spawned for every file read. Indeed, input structures and decoders need to be reinitialized because the specificities of the stream may be different. input_CreateThread is called by the interface thread (playlist module).&lt;br /&gt;
&lt;br /&gt;
At first, an input plug-in capable of reading the plugin item is looked for [this is inappropriate : we should first open the socket, and then probe the beginning of the stream to see which plug-in can read it]. The socket is opened by either input_FileOpen, input_NetworkOpen, or input_DvdOpen. This function sets two very important parameters : b_pace_control and b_seekable (see next section).&lt;br /&gt;
&lt;br /&gt;
===Note===&lt;br /&gt;
We could use so-called &amp;quot;access&amp;quot; plugins for this whole mechanism of opening the input socket. This is not the case because we thought only those three methods were to be used at present, and if we need others we can still build them in.&lt;br /&gt;
&lt;br /&gt;
Now we can launch the input plugin&#039;s pf_init function, and an endless loop doing pf_read and pf_demux. The plugin is responsible for initializing the stream structures (p_input-&amp;gt;stream), managing packet buffers, reading packets and demultiplex them. But in most tasks it will be assisted by functions from the advanced input API (c). That is what we will study in the coming sections !&lt;br /&gt;
&lt;br /&gt;
==Stream Management==&lt;br /&gt;
&lt;br /&gt;
The function which has opened the input socket must specify two properties about it :&lt;br /&gt;
&lt;br /&gt;
p_input-&amp;gt;stream.b_pace_control : Whether or not the stream can be read at our own pace (determined by the stream&#039;s frequency and the host computer&#039;s system clock). For instance a file or a pipe (including TCP/IP connections) can be read at our pace, if we don&#039;t read fast enough, the other end of the pipe will just block on a write() operation. On the contrary, UDP streaming (such as the one used by VideoLAN Server) is done at the server&#039;s pace, and if we don&#039;t read fast enough, packets will simply be lost when the kernel&#039;s buffer is full. So the drift introduced by the server&#039;s clock must be regularly compensated. This property controls the clock management, and whether or not fast forward and slow motion can be done.&lt;br /&gt;
&lt;br /&gt;
Subtilities in the clock management : With a UDP socket and a distant server, the drift is not negligible because on a whole movie it can account for seconds if one of the clocks is slightly fucked up. That means that presentation dates given by the input thread may be out of sync, to some extent, with the frequencies given in every Elementary Stream. Output threads (and, anecdotically, decoder threads) must deal with it.&lt;br /&gt;
&lt;br /&gt;
The same kind of problems may happen when reading from a device (like video4linux&#039;s /dev/video ) connected for instance to a video encoding board. There is no way we could differentiate it from a simple cat foo.mpg | vlc - , which doesn&#039;t imply any clock problem. So the Right Thing (c) would be to ask the user about the value of b_pace_control , but nobody would understand what it means (you are not the dumbest person on Earth, and obviously you have read this paragraph several times to understand it :-). Anyway, the drift should be negligible since the board would share the same clock as the CPU, so we chose to neglect it.&lt;br /&gt;
&lt;br /&gt;
p_input-&amp;gt;stream.b_seekable : Whether we can do lseek() calls on the file descriptor or not. Basically whether we can jump anywhere in the stream (and thus display a scrollbar) or if we can only read one byte after the other. This has less impact on the stream management than the previous item, but it is not redundant, because for instance cat foo.mpg | vlc - is b_pace_control = 1 but b_seekable = 0. On the contrary, you cannot have b_pace_control = 0 along with b_seekable = 1. If a stream is seekable, p_input-&amp;gt;stream.p_selected_area-&amp;gt;i_size must be set (in an arbitrary unit, for instance bytes, but it must be the same as p_input-&amp;gt;i_tell which indicates the byte we are currently reading from the stream).&lt;br /&gt;
&lt;br /&gt;
===Offset to time conversions===&lt;br /&gt;
Functions managing clocks are located in src/input/input_clock.c. All we know about a file is its start offset and its end offset (p_input-&amp;gt;stream.p_selected_area-&amp;gt;i_size), currently in bytes, but it could be plugin-dependant. So how the hell can we display in the interface a time in seconds ? Well, we cheat. PS streams have a mux_rate property which indicates how many bytes we should read in a second. This is subject to change at any time, but practically it is a constant for all streams we know. So we use it to determine time offsets.&lt;br /&gt;
&lt;br /&gt;
==Structures exported to the interface==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s focus on the communication API between the input module and the interface. The most important file is include/input_ext-intf.h, which you should know almost by heart. This file defines the input_thread_t structure, the stream_descriptor_t and all programs and ES descriptors included (you can view it as a tree).&lt;br /&gt;
&lt;br /&gt;
Update: input_thread_t is now defined in include/vlc_input.h&lt;br /&gt;
&lt;br /&gt;
First, note that the input_thread_t structure features two void * pointers, p_method_data and p_plugin_data, which you can respectivly use for buffer management data and plugin data.&lt;br /&gt;
&lt;br /&gt;
Second, a stream description is stored in a tree featuring program descriptors, which themselves contain several elementary stream descriptors. For those of you who don&#039;t know all MPEG concepts, an elementary stream, aka ES, is a continuous stream of video or (exclusive) audio data, directly readable by a decoder, without decapsulation.&lt;br /&gt;
&lt;br /&gt;
This tree structure is illustrated by the following figure, where one stream holds two programs. In most cases there will only be one program (to my knowledge only TS streams can carry several programs, for instance a movie and a football game at the same time - this is adequate for satellite and cable broadcasting).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Warning===&lt;br /&gt;
&lt;br /&gt;
For all modifications and accesses to the p_input-&amp;gt;stream structure, you must hold the p_input-&amp;gt;stream.stream_lock.&lt;br /&gt;
&lt;br /&gt;
ES are described by an ID (the ID the appropriate demultiplexer will look for), a stream_id (the real MPEG stream ID), a type (defined in ISO/IEC 13818-1 table 2-29) and a litteral description. It also contains context information for the demultiplexer, and decoder information p_decoder_fifo we will talk about in the next chapter. If the stream you want to read is not an MPEG system layer (for instance AVI or RTP), a specific demultiplexer will have to be written. In that case, if you need to carry additional information, you can use void * p_demux_data at your convenience. It will be automatically freed on shutdown.&lt;br /&gt;
&lt;br /&gt;
===Why ID and not use the plain MPEG stream_id ?===&lt;br /&gt;
&lt;br /&gt;
When a packet (be it a TS packet, PS packet, or whatever) is read, the appropriate demultiplexer will look for an ID in the packet, find the relevant elementary stream, and demultiplex it if the user selected it. In case of TS packets, the only information we have is the ES PID, so the reference ID we keep is the PID. PID don&#039;t exist in PS streams, so we have to invent one. It is of course based on the stream_id found in all PS packets, but it is not enough, since private streams (ie. AC3, SPU and LPCM) all share the same stream_id (0xBD). In that case the first byte of the PES payload is a stream private ID, so we combine this with the stream_id to get our ID (if you did not understand everything, it isn&#039;t very important - just remember we used our brains before writing the code :-).&lt;br /&gt;
&lt;br /&gt;
The stream, program and ES structures are filled in by the plugin&#039;s pf_init() using functions in src/input/input_programs.c, but are subject to change at any time. The DVD plugin parses .ifo files to know which ES are in the stream; the TS plugin reads the PAT and PMT structures in the stream; the PS plugin can either parse the PSM structure (but it is rarely present), or build the tree &amp;quot;on the fly&amp;quot; by pre-parsing the first megabyte of data.&lt;br /&gt;
&lt;br /&gt;
===Warning===&lt;br /&gt;
&lt;br /&gt;
In most cases we need to pre-parse (that is, read the first MB of data, and go back to the beginning) a PS stream, because the PSM (Program Stream Map) structure is almost never present. This is not appropriate, though, but we don&#039;t have the choice. A few problems will arise. First, non-seekable streams cannot be pre-parsed, so the ES tree will be built on the fly. Second, if a new elementary stream starts after the first MB of data (for instance a subtitle track won&#039;t show up during the credits), it won&#039;t appear in the menu before we encounter the first packet. We cannot pre-parse the entire stream because it would take hours (even without decoding it).&lt;br /&gt;
&lt;br /&gt;
It is currently the responsibility of the input plugin to spawn the necessary decoder threads. It must call input_SelectES ( input_thread_t * p_input, es_descriptor_t * p_es ) on the selected ES.&lt;br /&gt;
&lt;br /&gt;
The stream descriptor also contains a list of areas. Areas are logical discontinuities in the stream, for instance chapters and titles in a DVD. There is only one area in TS and PS streams, though we could use them when the PSM (or PAT/PMT) version changes. The goal is that when you seek to another area, the input plugin loads the new stream descriptor tree (otherwise the selected ID may be wrong).&lt;br /&gt;
&lt;br /&gt;
==Methods used by the interface==&lt;br /&gt;
&lt;br /&gt;
Besides, input_ext-intf.c provides a few functions to control the reading of the stream :&lt;br /&gt;
&lt;br /&gt;
*input_SetStatus ( input_thread_t * p_input, int i_mode ) : Changes the pace of reading. i_mode can be one of INPUT_STATUS_END, INPUT_STATUS_PLAY, INPUT_STATUS_PAUSE, INPUT_STATUS_FASTER, INPUT_STATUS_SLOWER.&lt;br /&gt;
&lt;br /&gt;
===Note===&lt;br /&gt;
Internally, the pace of reading is determined by the variable p_input-&amp;gt;stream.control.i_rate. The default value is DEFAULT_RATE. The lower the value, the faster the pace is. Rate changes are taken into account in input_ClockManageRef. Pause is accomplished by simply stopping the input thread (it is then awaken by a pthread signal). In that case, decoders will be stopped too. Please remember this if you do statistics on decoding times (like src/video_parser/vpar_synchro.c does). Don&#039;t call this function if p_input-&amp;gt;b_pace_control == 0.&lt;br /&gt;
&lt;br /&gt;
*input_Seek ( input_thread_t * p_input, off_t i_position ) : Changes the offset of reading. Used to jump to another place in a file. You mustn&#039;t call this function if p_input-&amp;gt;stream.b_seekable == 0. The position is a number (usually long long, depends on your libc) between p_input-&amp;gt;p_selected_area-&amp;gt;i_start and p_input-&amp;gt;p_selected_area-&amp;gt;i_size (current value is in p_input-&amp;gt;p_selected_area-&amp;gt;i_tell).&lt;br /&gt;
&lt;br /&gt;
===Note===&lt;br /&gt;
Multimedia files can be very large, especially when we read a device like /dev/dvd, so offsets must be 64 bits large. Under a lot of systems, like FreeBSD, off_t are 64 bits by default, but it is not the case under GNU libc 2.x. That is why we need to compile VLC with -D_FILE_OFFSET_BITS=64 -D__USE_UNIX98.&lt;br /&gt;
&lt;br /&gt;
===Escaping stream discontinuities===&lt;br /&gt;
&lt;br /&gt;
Changing the reading position at random can result in a messed up stream, and the decoder which reads it may segfault. To avoid this, we send several NULL packets (ie. packets containing nothing but zeros) before changing the reading position. Indeed, under most video and audio formats, a long enough stream of zeros is an escape sequence and the decoder can exit cleanly.&lt;br /&gt;
&lt;br /&gt;
*input_OffsetToTime ( input_thread_t * p_input, char * psz_buffer, off_t i_offset ) : Converts an offset value to a time coordinate (used for interface display). [currently it is broken with MPEG-2 files]&lt;br /&gt;
*input_ChangeES ( input_thread_t * p_input, es_descriptor_t * p_es, u8 i_cat ) : Unselects all elementary streams of type i_cat and selects p_es. Used for instance to change language or subtitle track.&lt;br /&gt;
*input_ToggleES ( input_thread_t * p_input, es_descriptor_t * p_es, boolean_t b_select ) : This is the clean way to select or unselect a particular elementary stream from the interface.&lt;br /&gt;
&lt;br /&gt;
==Buffers management==&lt;br /&gt;
&lt;br /&gt;
Input plugins must implement a way to allocate and deallocate packets (whose structures will be described in the next chapter). We basically need four functions :&lt;br /&gt;
&lt;br /&gt;
*pf_new_packet ( void * p_private_data, size_t i_buffer_size ) : Allocates a new data_packet_t and an associated buffer of i_buffer_size bytes.&lt;br /&gt;
*pf_new_pes ( void * p_private_data ) : Allocates a new pes_packet_t.&lt;br /&gt;
*pf_delete_packet ( void * p_private_data, data_packet_t * p_data )  : Deallocates p_data.&lt;br /&gt;
*pf_delete_pes ( void * p_private_data, pes_packet_t * p_pes ) : Deallocates p_pes. &lt;br /&gt;
&lt;br /&gt;
All functions are given p_input-&amp;gt;p_method_data as first parameter, so that you can keep records of allocated and freed packets.&lt;br /&gt;
&lt;br /&gt;
===Buffers management strategies===&lt;br /&gt;
&lt;br /&gt;
Buffers management can be done in three ways :&lt;br /&gt;
&lt;br /&gt;
#Traditional libc allocation : For a long time we have used in the PS plugin malloc() and free() every time we needed to allocate or deallocate a packet. Contrary to a popular belief, it is not that slow.&lt;br /&gt;
#Netlist : In this method we allocate a very big buffer at the beginning of the problem, and then manage a list of pointers to free packets (the &amp;quot;netlist&amp;quot;). This only works well if all packets have the same size. It is used for long for the TS input. The DVD plugin also uses it, but adds a refcount flag because buffers (2048 bytes) can be shared among several packets. It is now deprecated and won&#039;t be documented.&lt;br /&gt;
#Buffer cache : We are currently developing a new method. It is already in use in the PS plugin. The idea is to call malloc() and free() to absorb stream irregularities, but re-use all allocated buffers via a cache system. We are extending it so that it can be used in any plugin without performance hit, but it is currently left undocumented.&lt;br /&gt;
&lt;br /&gt;
==Demultiplexing the stream==&lt;br /&gt;
&lt;br /&gt;
After being read by pf_read , your plugin must give a function pointer to the demultiplexer function. The demultiplexer is responsible for parsing the packet, gathering PES, and feeding decoders.&lt;br /&gt;
&lt;br /&gt;
Demultiplexers for standard MPEG structures (PS and TS) have already been written. You just need to indicate input_DemuxPS and input_DemuxTS for pf_demux. You can also write your own demultiplexer.&lt;br /&gt;
&lt;br /&gt;
It is not the purpose of this document to describe the different levels of encapsulation in an MPEG stream. Please refer to your MPEG specification for that.&lt;/div&gt;</summary>
		<author><name>Grae</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Win32CompileCygwinNew&amp;diff=11801</id>
		<title>Win32CompileCygwinNew</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Win32CompileCygwinNew&amp;diff=11801"/>
		<updated>2008-06-05T14:06:19Z</updated>

		<summary type="html">&lt;p&gt;Grae: /* Selecting Cygwin packages to install */   Basically, atleast sometimes you get a compile error requesting libiconv.  Which sometimes not include in the cygwin, thing.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a new version of the Win32CompileCygwin written by [[User:J-b|Jean-Baptiste Kempf]]&lt;br /&gt;
&#039;&#039;&#039;This version ONLY works for 0.9.x.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
This is a guide for Windows users with a step-by-step instruction to download, install, configure and build your VLC.&lt;br /&gt;
&lt;br /&gt;
This guide uses [http://www.cygwin.com &#039;&#039;&#039;Cygwin&#039;&#039;&#039;] a Linux-like environment for Windows used for compilation of the VLC source code.&lt;br /&gt;
&lt;br /&gt;
Start off by creating a VLC and a download folder on your hard drive where you can put all the installation files:&lt;br /&gt;
&lt;br /&gt;
 C:\VLC\&lt;br /&gt;
 C:\VLC\Downloads&lt;br /&gt;
&lt;br /&gt;
For further reference, the assumption is made that the local user will be &#039;Administrator&#039;.&lt;br /&gt;
&lt;br /&gt;
=Cygwin=&lt;br /&gt;
&lt;br /&gt;
Download the latest [http://www.cygwin.com/cygwin/setup.exe Cygwin setup] and save it in your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\VLC\Downloads\&lt;br /&gt;
&lt;br /&gt;
More info about Cygwin can be found at http://www.cygwin.com or http://sourceware.org/cygwin&lt;br /&gt;
&lt;br /&gt;
==Selecting Cygwin packages to install==&lt;br /&gt;
&lt;br /&gt;
Run the setup program with the following options:&lt;br /&gt;
&lt;br /&gt;
Installation type : Install from Internet (default)&lt;br /&gt;
&lt;br /&gt;
Root directory : C:\cygwin (default)&lt;br /&gt;
&lt;br /&gt;
Local Package directory : C:\VLC\Downloads\cygwin (your download location)&lt;br /&gt;
&lt;br /&gt;
Internet Connection : Direct Connection (preferred, if it fails try another)&lt;br /&gt;
&lt;br /&gt;
Download Site : Choose a download site closest to you (FTP preferred)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the &amp;quot;Select Packages&amp;quot; section of the installation process you can select packages by clicking the button with the rotating 2 arrows. (This is under the &amp;quot;New&amp;quot; section). It shows &amp;quot;Skip&amp;quot; next to the button if the package isn&#039;t selected yet.&lt;br /&gt;
&lt;br /&gt;
Clicking the button a few times will rotate through the possible package versions including &amp;quot;Skip&amp;quot; (meaning do not install or remove if installed) and &amp;quot;Keep&amp;quot; (meaning keep using the current installed version). If a package was already installed it will also show the &amp;quot;Current&amp;quot; version just to the left of it.&lt;br /&gt;
&lt;br /&gt;
Select the following packages (some others will automatically be selected as well):&lt;br /&gt;
&lt;br /&gt;
 Archive&lt;br /&gt;
   unzip&lt;br /&gt;
   zip&lt;br /&gt;
&lt;br /&gt;
 Devel&lt;br /&gt;
   autoconf&lt;br /&gt;
   automake&lt;br /&gt;
   binutils&lt;br /&gt;
   cvs&lt;br /&gt;
   expat&lt;br /&gt;
   gcc&lt;br /&gt;
   gcc-core&lt;br /&gt;
   gcc-g++&lt;br /&gt;
   gcc-mingw&lt;br /&gt;
   gcc-mingw-core&lt;br /&gt;
   gcc-mingw-g++&lt;br /&gt;
   gdb&lt;br /&gt;
   gettext&lt;br /&gt;
   gettext-devel&lt;br /&gt;
   git&lt;br /&gt;
   libiconv&lt;br /&gt;
   libtool&lt;br /&gt;
   make&lt;br /&gt;
   mingw-runtime&lt;br /&gt;
   nasm&lt;br /&gt;
   patchutils&lt;br /&gt;
   pkg-config&lt;br /&gt;
   subversion&lt;br /&gt;
 &lt;br /&gt;
 Editor&lt;br /&gt;
   vim&lt;br /&gt;
&lt;br /&gt;
 Libs&lt;br /&gt;
   libgcrypt&lt;br /&gt;
&lt;br /&gt;
 Web&lt;br /&gt;
   curl (optional: for building extras/contrib)&lt;br /&gt;
   wget (optional: for building extras/contrib)&lt;br /&gt;
&lt;br /&gt;
==Cygwin environment==&lt;br /&gt;
&lt;br /&gt;
Start Cygwin from the icon on your desktop (With Windows Vista run it with admin rights, so right click and select &amp;quot;Run as administrator&amp;quot;). If it runs for the first time it will automatically create a home\&amp;quot;username&amp;quot; folder in the Cygwin environment; user being the currently logged on Windows user. Assuming this is the &#039;Administrator&#039; user it will create the following folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator (example)&lt;br /&gt;
&lt;br /&gt;
NOTE: On your desktop, you can rightclick the Cygwin icon and (in the Options field of the Cygwin Properties) set the Command history Buffer size to as large as possible: 999. This setting will make it possible to scroll back further in the Cygwin environment.&lt;br /&gt;
&lt;br /&gt;
=VLC source code=&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
The very latest VLC source code can be obtained through a tool called Git. The Cygwin package we&#039;re about to install comes with an internal git component.&lt;br /&gt;
&lt;br /&gt;
 cd /cygdrive/c/VLC/&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.videolan.org/vlc.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the currently available Cygwin 1.5.25-12 with git package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in the mail archives of the Cygwin project mailing list here &lt;br /&gt;
[http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, it is the following Windows Security Update (April 3, 2007) which is actually the cause of the Cygwin issue: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;It is possible to get &#039;git clone&#039; working again on the affected systems by removing the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Snapshots ==&lt;br /&gt;
&lt;br /&gt;
You can do the same by using the snapshots in the nightly builds site.&lt;br /&gt;
&lt;br /&gt;
=Bootstrap=&lt;br /&gt;
&lt;br /&gt;
Open the configure.ac file, and modify the requirement for gettext 0.17 to 0.15 (so replace line &#039;&#039;&#039;AM_GNU_GETTEXT_VERSION(0.17)&#039;&#039;&#039; with line &#039;&#039;&#039;AM_GNU_GETTEXT_VERSION(0.15)&#039;&#039;&#039;), and then run bootstrap.&lt;br /&gt;
&lt;br /&gt;
 cd vlc&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
&lt;br /&gt;
= External libraries to the source code=&lt;br /&gt;
&lt;br /&gt;
VLC depends on other libraries (code) to provide some features like AC3 audio or MPEG-4 video encoding/decoding etc.&lt;br /&gt;
&lt;br /&gt;
Depending on your needs you will have to install and compile some or all of these external libraries. &lt;br /&gt;
&lt;br /&gt;
== Get the Win32 &amp;quot;contrib&amp;quot; package ==&lt;br /&gt;
&lt;br /&gt;
A package with most of these libraries already compiled so it&#039;s actually really easy to compile a full-featured version of vlc can be found here:&lt;br /&gt;
&lt;br /&gt;
http://download.videolan.org/pub/testing/win32/&lt;br /&gt;
&lt;br /&gt;
Download the latest version of a &amp;quot;contrib&amp;quot; package for win32:&lt;br /&gt;
&lt;br /&gt;
 contrib-20060730-win32-bin-gcc-3.4.5-only.tar.bz2 (example)&lt;br /&gt;
&lt;br /&gt;
Those days, you should use&lt;br /&gt;
 http://people.videolan.org/~jb/Contribs/contrib-20080215-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It&#039;s a good idea to check the INSTALL.Win32 file in the VLC source directory for the appropriate contrib download file.&lt;br /&gt;
&lt;br /&gt;
Save it into your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\VLC\Downloads\&lt;br /&gt;
&lt;br /&gt;
==Installing the Win32 &amp;quot;contrib&amp;quot; package in Cygwin==&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell:&lt;br /&gt;
&lt;br /&gt;
 cd /cygdrive/c/VLC/Downloads&lt;br /&gt;
 tar xf contrib-20080215-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2 -C /&lt;br /&gt;
&lt;br /&gt;
Replace with your version of the &amp;quot;contrib&amp;quot; file and DON&#039;T FORGET THE / (slash)&lt;br /&gt;
at the end.&lt;br /&gt;
&lt;br /&gt;
This will extract the contents of the file into usr/win32 folder within your Cygwin environment.&lt;br /&gt;
&lt;br /&gt;
NOTE: Make sure to DELETE your old version (/usr/win32 folder) instead of extracting a new version on top of it.&lt;br /&gt;
&lt;br /&gt;
==Keeping the Win32 &amp;quot;contrib&amp;quot; package up-to-date==&lt;br /&gt;
&lt;br /&gt;
For maintenance purposes periodically check:&lt;br /&gt;
&lt;br /&gt;
http://download.videolan.org/pub/testing/win32/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Configure=&lt;br /&gt;
&lt;br /&gt;
In order to make our lives just a bit easier the following section describes what commandline options should be used for compiling and those commands will then be put into a &amp;quot;script&amp;quot; that can be executed (rather than having to copy and paste all the time).&lt;br /&gt;
&lt;br /&gt;
==Configure script for compiling VLC==&lt;br /&gt;
&lt;br /&gt;
Create a new text document with the following lines:&lt;br /&gt;
&lt;br /&gt;
  PATH=/usr/win32/bin:$PATH \&lt;br /&gt;
  PKG_CONFIG_PATH=/usr/win32/lib/pkgconfig \&lt;br /&gt;
  CPPFLAGS=&amp;quot;-I/usr/win32/include -I/usr/win32/include/ebml&amp;quot; \&lt;br /&gt;
  LDFLAGS=-L/usr/win32/lib \&lt;br /&gt;
  CC=&amp;quot;gcc -mno-cygwin&amp;quot; CXX=&amp;quot;g++ -mno-cygwin&amp;quot; \&lt;br /&gt;
  ./configure \&lt;br /&gt;
      --host=i686-pc-mingw32 \&lt;br /&gt;
      --disable-gtk \&lt;br /&gt;
      --enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin \&lt;br /&gt;
      --enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac \&lt;br /&gt;
      --with-ffmpeg-zlib --enable-faad --enable-flac --enable-theora \&lt;br /&gt;
      --with-wx-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-freetype-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-fribidi-config-path=/usr/win32/bin \&lt;br /&gt;
      --enable-live555 --with-live555-tree=/usr/win32/live.com \&lt;br /&gt;
      --enable-caca --with-caca-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-xml2-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-dvdnav-config-path=/usr/win32/bin \&lt;br /&gt;
      --disable-cddax --disable-vcdx --enable-goom \&lt;br /&gt;
      --enable-twolame --enable-dvdread \&lt;br /&gt;
      --enable-debug  --enable-dca \&lt;br /&gt;
      --disable-mkv --disable-taglib&lt;br /&gt;
&lt;br /&gt;
NOTE: The following options are added for debug purposes and makes the final package a bit larger but the advantage is it&#039;s easier to debug in case of crash reports:&lt;br /&gt;
&lt;br /&gt;
 --disable-optimizations&lt;br /&gt;
 --enable-debug&lt;br /&gt;
&lt;br /&gt;
If you want to report a crash bug to the VLC team, it is necessary that you provide a stack backtrace. Unfortunately, Windows automatic crash reporter cannot generate such a backtrace as debug symbols used by GCC compiler aren&#039;t understood by Windows, therefore we suggest that you install Dr. MinGW (http://jrfonseca.dyndns.org/projects/gnu-win32/software/drmingw/) which will extend Windows Just-In-Time Debugger and provide the necessary debug information.&lt;br /&gt;
&lt;br /&gt;
NOTE: The following options is needed for Qt4 support:&lt;br /&gt;
&lt;br /&gt;
 --enable-qt4&lt;br /&gt;
&lt;br /&gt;
As of version 0.9.0 VLC will include the Qt interface. More information can be found about QT here: http://www.trolltech.com&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Win32 contrib package&amp;quot; at present includes the linux and Windows equivalents of uic, moc and roc executables which are required for building this interface.&lt;br /&gt;
&lt;br /&gt;
The linuxs executables have to be &#039;&#039;&#039;deleted&#039;&#039;&#039; from the contrib folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\usr\win32\bin\moc (example)&lt;br /&gt;
 C:\cygwin\usr\win32\bin\rcc (example)&lt;br /&gt;
 C:\cygwin\usr\win32\bin\uic (example)&lt;br /&gt;
&lt;br /&gt;
Save as filename in your &amp;quot;scripts&amp;quot; folder at your download/install location:&lt;br /&gt;
&lt;br /&gt;
 configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
NOTE: Save using &amp;quot;All files&amp;quot; and not &amp;quot;Text files&amp;quot; otherwise Windows might append the extension .txt&lt;br /&gt;
&lt;br /&gt;
Copy the file into your home directory:&lt;br /&gt;
 &lt;br /&gt;
 C:\cygwin\home\Administrator&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell: &lt;br /&gt;
&lt;br /&gt;
 dos2unix configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
After your configure-vlc.sh is completed, copy it to your vlc directory and run it:&lt;br /&gt;
&lt;br /&gt;
 ./configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
If it complains about permissions, use chmod and try again:&lt;br /&gt;
&lt;br /&gt;
 chmod 777 configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
NOTE. (If you plan to use JVLC) To make vlc-control.dll accessible by Java on &#039;&#039;Windows&#039;&#039; cofigure-vlc.sh should be modified to include &amp;quot;-Wl,--add-stdcal-alias&amp;quot;. Example:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 CC=&amp;quot;gcc -mno-cygwin -Wl,--add-stdcall-alias&amp;quot; CXX=&amp;quot;g++ -mno-cygwin -Wl,--add-stdcall-alias&amp;quot; \&lt;br /&gt;
 ./configure \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===POSIX emulation layer===&lt;br /&gt;
&lt;br /&gt;
VLC can be built with or without the so called POSIX emulation layer. Without is the default and is usually better (and with hasn&#039;t been tested for quite some time). If you do want to use the emulation layer, then just leave out the line with the following options:&lt;br /&gt;
&lt;br /&gt;
 CC=&amp;quot;gcc -mno-cygwin&amp;quot; CXX=&amp;quot;g++ -mno-cygwin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Compiling source code=&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to start Cygwin again...&lt;br /&gt;
&lt;br /&gt;
==Compiling VLC==&lt;br /&gt;
&lt;br /&gt;
Enter the following commands in your Cygwin shell:&lt;br /&gt;
&lt;br /&gt;
 cd vlc&lt;br /&gt;
&lt;br /&gt;
Build it! (remember to run configure-vlc.sh before first build)&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Cross your fingers and wait... because it might take few hours before compilation is done.&lt;br /&gt;
If you have multicore CPU or multi CPU box, you can use -j2 switch (or maybe -j3 or -j4 etc.) to speed up make process&lt;br /&gt;
&lt;br /&gt;
 make -j2&lt;br /&gt;
&lt;br /&gt;
==Creating self contained packages==&lt;br /&gt;
&lt;br /&gt;
Once the compilation is done, you can either run VLC directly from the source tree or you can build self-contained VLC packages with the following &amp;quot;make&amp;quot; commands:&lt;br /&gt;
&lt;br /&gt;
 make package-win32-base&lt;br /&gt;
&lt;br /&gt;
(This will create a subdirectory named vlc-x.x.x with all the binaries &amp;quot;stripped&amp;quot; without any debugging symbols).&lt;br /&gt;
&lt;br /&gt;
 make package-win32-zip&lt;br /&gt;
&lt;br /&gt;
(Same as above but will package the directory in a zip file).&lt;br /&gt;
&lt;br /&gt;
 make package-win32&lt;br /&gt;
&lt;br /&gt;
(Same as above but will also create an auto-installer package. You will need to have NSIS installed in its default location for this to work).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Advanced usage=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Updating Cygwin package versions==&lt;br /&gt;
&lt;br /&gt;
If you need to update or install additional packages you can just run the Cygwin setup.exe from your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\cygwin\setup.exe          (example)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==GDB (Gnu Debugger)==&lt;br /&gt;
&lt;br /&gt;
This section requires that you installed the gdb (Gnu Debugger) in Cygwin.&lt;br /&gt;
&lt;br /&gt;
This is a typical example of creating a crashlog:&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk&lt;br /&gt;
&lt;br /&gt;
 gdb --args vlc.exe --fast-mutex --reset-config --reset-plugins-cache&lt;br /&gt;
&lt;br /&gt;
NOTE: vlc-0.9.0 uses libtool for building sources, if you want to debug from the source tree, you should type the following command instead:&lt;br /&gt;
&lt;br /&gt;
 libtool --mode=execute gdb --args vlc --reset-config --reset-plugins-cache&lt;br /&gt;
&lt;br /&gt;
In the debugger mode run the program and make sure you reset the preferences!&lt;br /&gt;
&lt;br /&gt;
 (gdb) run &lt;br /&gt;
&lt;br /&gt;
NOTE: the (gdb) is just a prompt which means you are in the debugger mode, please note that &#039;&#039;--fast-mutex&#039;&#039; option is no longer supported in vlc-0.9.0&lt;br /&gt;
&lt;br /&gt;
It will now take a lot longer than usual for VLC to start :)&lt;br /&gt;
&lt;br /&gt;
Now operate VLC as you would normally do. As soon as a crash issue occurs&lt;br /&gt;
you&#039;ll notice a line like this:&lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 0x0041394c in playlist_ItemGetById (p_playlist=0x19ec4f8, i_id=29)&lt;br /&gt;
     at src/playlist/item-ext.c:459&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 459             i = i_bottom + ( i_top - i_bottom ) / 2;&lt;br /&gt;
&lt;br /&gt;
Now you can do a &amp;quot;backtrace&amp;quot; by using the bt command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
&lt;br /&gt;
And output similar to this will be created:&lt;br /&gt;
&lt;br /&gt;
 #0  0x0041394c in playlist_ItemGetById (p_playlist=0x19ec4f8, i_id=29) &lt;br /&gt;
     at src/playlist/item-ext.c:459&lt;br /&gt;
 #1  0x0b26bbf7 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29fef8}) at playlist.cpp:695&lt;br /&gt;
 #2  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29e8b0}) at playlist.cpp:689&lt;br /&gt;
 #3  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29a818}) at playlist.cpp:689&lt;br /&gt;
 #4  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x299718}) at playlist.cpp:689&lt;br /&gt;
 #5  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0xffff0000}) at playlist.cpp:689&lt;br /&gt;
 #6  0x0b26bf49 in wxvlc::Playlist::AppendItem (this=0x1822e288,&lt;br /&gt;
     event=@0x1827afd0) at playlist.cpp:564&lt;br /&gt;
 #7  0x0b2757fc in wxvlc::Playlist::OnPlaylistEvent (this=0x1822e288,&lt;br /&gt;
     event=@0x1827afd0) at playlist.cpp:1438&lt;br /&gt;
 #8  0x0b3771b8 in wxEvtHandler::ProcessEventIfMatches ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #9  0x0b376a1c in wxEventHashTable::HandleEvent ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #10 0x0b37730d in wxEvtHandler::ProcessEvent ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #11 0x0b37711b in wxEvtHandler::ProcessPendingEvents ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 #12 0x0b376017 in wxAppConsole::ProcessPendingEvents ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #13 0x0b3ec75a in wxIdleWakeUpModule::MsgHookProc ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/bmpbuttn.h:81&lt;br /&gt;
 #14 0x773aca2d in USER32!GetScrollRange ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/user32.dll&lt;br /&gt;
 #15 0x00000000 in ?? () from&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To backtrace all the running threads use:&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all bt&lt;br /&gt;
&lt;br /&gt;
These are the log outputs that are more usefull to developers than just mentioning &amp;quot;it crashes&amp;quot;!&lt;br /&gt;
&lt;br /&gt;
NOTE: In GDB mode there are sometimes situations where GDB initially &amp;quot;crashes&amp;quot; on certain network activity (opening network shares, network traffic) which in normal operation does not occur. Just select c for continue until &amp;quot;normal&amp;quot; operation continues.&lt;br /&gt;
&lt;br /&gt;
== Common errors ==&lt;br /&gt;
===vlc.exe: Permission denied===&lt;br /&gt;
&lt;br /&gt;
A make finished successfully and produced vlc.exe, but running the executable returns the following:&lt;br /&gt;
&lt;br /&gt;
 bash: ./vlc.exe: Permission denied&lt;br /&gt;
&lt;br /&gt;
The permissions on both vlc.exe &amp;amp; vlc.exe.manifest must be set to executable. &lt;br /&gt;
&lt;br /&gt;
FIX: Type the following:&lt;br /&gt;
 &lt;br /&gt;
 chmod 755 vlc.exe vlc.exe.manifest&lt;br /&gt;
&lt;br /&gt;
===error: parse error before &#039;(&#039; token===&lt;br /&gt;
&lt;br /&gt;
A make (compile) of FFmpeg results in the following error:&lt;br /&gt;
&lt;br /&gt;
 /usr/include/sys/unistd.h:203: error: parse error before &#039;(&#039; token&lt;br /&gt;
 make[1]: *** [ffm.o] Error 1&lt;br /&gt;
&lt;br /&gt;
It&#039;s very likely you are usix the POSIX emulater which you shouldn&#039;t...&lt;br /&gt;
&lt;br /&gt;
FIX: compile with the option &lt;br /&gt;
&lt;br /&gt;
 -mno-cygwin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token==&lt;br /&gt;
&lt;br /&gt;
 In file included from /usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../include/w32&lt;br /&gt;
 api/windows.h:52,&lt;br /&gt;
                  from ../../../include/vlc_common.h:459,&lt;br /&gt;
                  from ../../../include/vlc/vlc.h:153,&lt;br /&gt;
                  from dshow.cpp:31:&lt;br /&gt;
 /usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../include/w32api/wingdi.h:3:1: warn&lt;br /&gt;
 ing: this is the location of the previous definition&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:35,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/ddraw.h:14: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:35,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/ddraw.h:5552: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:45,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/strmif.h:2: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dsound.h:13,&lt;br /&gt;
                  from /usr/win32/include/amaudio.h:18,&lt;br /&gt;
                  from /usr/win32/include/dshow.h:47,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/d3dtypes.h:22: warning: ignoring #pragma warning&lt;br /&gt;
 /usr/win32/include/d3dtypes.h:1813: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:48,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/control.h:2: warning: ignoring #pragma warning&lt;br /&gt;
 dshow.cpp: In function `int CommonOpen(vlc_object_t*, access_sys_t*, vlc_bool_t)&lt;br /&gt;
 &#039;:&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;.&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;=&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;.&#039; token&lt;br /&gt;
 dshow.cpp:485: error: expected `;&#039; before &amp;quot;IAMCrossbar&amp;quot;&lt;br /&gt;
 dshow.cpp:491: error: `pXbar&#039; undeclared (first use this function)&lt;br /&gt;
 dshow.cpp:491: error: (Each undeclared identifier is reported only once for each&lt;br /&gt;
 function it appears in.)&lt;br /&gt;
 make[6]: *** [libdshow_plugin_a-dshow.o] Error 1&lt;br /&gt;
 make[6]: Leaving directory `/home/Administrator/vlc-trunk/modules/access/dshow&#039;&lt;br /&gt;
 make[5]: *** [all-modules] Error 1&lt;br /&gt;
 make[5]: Leaving directory `/home/Administrator/vlc-trunk/modules/access/dshow&#039;&lt;br /&gt;
 make[4]: *** [all-recursive] Error 1&lt;br /&gt;
 make[4]: Leaving directory `/home/Administrator/vlc-trunk/modules/access&#039;&lt;br /&gt;
 make[3]: *** [all] Error 2&lt;br /&gt;
&lt;br /&gt;
Basically in case of conflict svn adds &amp;quot;&amp;lt;&amp;lt;&amp;lt; mine&amp;quot; and &amp;quot;=======&amp;quot; and &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt; r1242&amp;quot; which makes gcc complain.&lt;br /&gt;
&lt;br /&gt;
FIX: revert the offending file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objective C source seen but `OBJC&#039; is undefined==&lt;br /&gt;
&lt;br /&gt;
The configure process stops halfway.&lt;br /&gt;
&lt;br /&gt;
 + aclocal-1.9 -I m4&lt;br /&gt;
 + autoconf&lt;br /&gt;
 + autoheader&lt;br /&gt;
 + automake-1.9 --add-missing --copy -Wall&lt;br /&gt;
 configure.ac: installing `autotools/install-sh&#039;&lt;br /&gt;
 configure.ac: installing `autotools/missing&#039;&lt;br /&gt;
 activex/Makefile.am:143: shell $(VLC_CONFIG: non-POSIX variable name&lt;br /&gt;
 activex/Makefile.am:143: (probably a GNU make extension)&lt;br /&gt;
 activex/Makefile.am: installing `autotools/compile&#039;&lt;br /&gt;
 activex/Makefile.am: installing `autotools/depcomp&#039;&lt;br /&gt;
 modules/gui/macosx/Makefile.am: Objective C source seen but `OBJC&#039; is undefined&lt;br /&gt;
 modules/misc/testsuite/Makefile.am: Objective C source seen but `OBJC&#039; is undefi&lt;br /&gt;
 ned&lt;br /&gt;
 src/Makefile.am: Objective C source seen but `OBJC&#039; is undefined&lt;br /&gt;
 Makefile.am:282: user target `vlc$(EXEEXT)&#039; defined here...&lt;br /&gt;
 /usr/share/automake-1.9/am/program.am: ... overrides Automake target `vlc$(EXEEX&lt;br /&gt;
 T)&#039; defined here&lt;br /&gt;
 Makefile.am:230:   while processing program `vlc&#039;&lt;br /&gt;
 make: *** No targets specified and no makefile found.  Stop.&lt;br /&gt;
 &lt;br /&gt;
This problem is related to a warning earlier on and only occured in a few revisions where a built-in workaround wasn&#039;t working properly:&lt;br /&gt;
&lt;br /&gt;
 + echo &#039;Enabling provisional autoconf 2.59 work-around. Update autoconf ASAP.&#039;&lt;br /&gt;
 Enabling provisional autoconf 2.59 work-around. Update autoconf ASAP.&lt;br /&gt;
&lt;br /&gt;
FIX: update autoconf to 2.60 or newer. If Cygwin doesn&#039;t provide this version yet then build it yourself from extras/contrib.&lt;br /&gt;
&lt;br /&gt;
Enter the following commands in your Cygwin shell:&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk/extras/contrib&lt;br /&gt;
&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
&lt;br /&gt;
 cd src&lt;br /&gt;
&lt;br /&gt;
 make .autoconf&lt;br /&gt;
&lt;br /&gt;
There should now be compiled autoconf version (probably 2.60 or newer) in extras/contrib that the bootstrap process will use.&lt;br /&gt;
&lt;br /&gt;
Now start the whole &amp;quot;Compile VLC&amp;quot; process from the start again.&lt;br /&gt;
&lt;br /&gt;
==Error: cannot create temporary file for diversion: Permission denied==&lt;br /&gt;
&lt;br /&gt;
If the above error appears, it might mean you don&#039;t have the TMPDIR defined in cygwin. You will need to define it and have its value point to your temporary directory. You can use &#039;&#039;&#039;export TMPDIR=&amp;quot;/cygdrive/c/temp&amp;quot;&#039;&#039;&#039; or any directory for it (/cygdrive/c/temp is same as C:\temp). If this doesn&#039;t help, make sure you run cygwin with admin rights (With Windows Vista, right click cygwin shortcut and select &amp;quot;Run as administrator&amp;quot;). Avira AntiVir might also cause issues to m4, so disabling it while ./bootstrap might help.&lt;br /&gt;
&lt;br /&gt;
=Version=&lt;br /&gt;
&lt;br /&gt;
20050627 Initial version&lt;br /&gt;
&lt;br /&gt;
20050628 Updated some more exceptions&lt;br /&gt;
&lt;br /&gt;
20050628 Some info added about FFmpeg compiling with AMR&lt;br /&gt;
&lt;br /&gt;
20050629 Finalized FFmpeg compiling&lt;br /&gt;
&lt;br /&gt;
20050630 Cross-compiling&lt;br /&gt;
&lt;br /&gt;
20050724 Some extra compile explanations&lt;br /&gt;
&lt;br /&gt;
20050726 Removed cross-compiling (was for linux -&amp;gt; win32) Patching source code with .diff files&lt;br /&gt;
&lt;br /&gt;
20050823 Added zlib error&lt;br /&gt;
&lt;br /&gt;
20050923 --enable-sdl --with-sdl-config-path=/usr/win32/bin added to configure. Added debug section&lt;br /&gt;
&lt;br /&gt;
20051102 Changed FFmpeg lib names&lt;br /&gt;
&lt;br /&gt;
20051128 Detailed Cygwin upgrade/downgrade for gcc 3.3. Renamed some update scripts. Added FFmpeg CVS update. --disable-gnomevfs added to configure (only used on linux)&lt;br /&gt;
&lt;br /&gt;
20060121 PKG_CONFIG_PATH=/usr/win32/lib/pkgconfig added to configure&lt;br /&gt;
&lt;br /&gt;
20060128 Added curl and libtool to Cygwin for those that want to be able to build extras/contrib themselves&lt;br /&gt;
&lt;br /&gt;
20060217 Added make install-libs install-headers to FFmpeg compile&lt;br /&gt;
&lt;br /&gt;
20060222 Remark about missing &amp;quot;gettext&amp;quot; libs for Cygwin during install&lt;br /&gt;
&lt;br /&gt;
20060225 ./bootstrap: you need libtool&lt;br /&gt;
&lt;br /&gt;
20060618 Updated GCC to 3.4 version and added FFmpeg SVN and DTS support&lt;br /&gt;
&lt;br /&gt;
20060805 Added note about using older binutils and gdb for Cygwin!&lt;br /&gt;
&lt;br /&gt;
20060915 Added note about updating autoconf from extras/contrib for an OBJC problem during configure&lt;br /&gt;
&lt;br /&gt;
20061108 Added note this document is no longer usable since Cygwin has been unusable probably related to some bash/dos2unix change&lt;br /&gt;
&lt;br /&gt;
20070612 Added note about --enable-dca&lt;br /&gt;
&lt;br /&gt;
20080228 New version by [[User:J-b|jb]]&lt;br /&gt;
&lt;br /&gt;
20080307 Added --host=i686-pc-mingw32 option to the configure script&lt;br /&gt;
&lt;br /&gt;
20080311 Simplification&lt;br /&gt;
&lt;br /&gt;
20080323 Added some tips for Vista &lt;br /&gt;
&lt;br /&gt;
[[Category:Building]]&lt;br /&gt;
[[Category:Coding]]&lt;/div&gt;</summary>
		<author><name>Grae</name></author>
	</entry>
</feed>