Win32CompileMSYSNew

From VideoLAN Wiki
Revision as of 22:35, 21 September 2010 by Rogerdpack (talk | contribs) (→‎MinGW)
Jump to navigation Jump to search

Introduction

About

MSys is a helper environment for MinGW, the compiler chain for Windows based on GCC. It is the fastest and recommended way to build VLC natively on Windows. Note that you can also cross compile VLC from a Linux box, if desired.

VLC is a complex program with many dependencies, so minimal command-line experience is required. Also, don't be in a hurry (2 hours is a minimum for the whole process) and don't despair if it doesn't work first time.

On the edge vs Conservative

This update aims at building versions from the 1.1.0 branch natively in the most straightforward way.

Of course, if you want to live on the edge, feel free to select more recent versions of the proposed tools, contribs or sources, but the build has only been thoroughly validated with the versions indicated in the main text flow.

Such alternative ways are indented, italicized and marked "Note for the brave" :-). Your mileage may vary

Acknowledgements

This howto was re-created by Jean-Baptiste Kempf and updated in June 2009, September 2009, December 2009 and March 2010.

It was updated in June 2010 by Vicne with the help of J-b, gnosygnu and MichaelMc

Windows tools needed

Text editor

To edit unix-style text documents you need a suitable editor.

For those wishing to have a Notepad look-and-feel I recommend notepad2, which may tempt you to ditch Notepad altogether. You can set File - Line endings - Default to "Unix (LF)", but it always saves opened files in the ending style they have.

Unzip Utility

Many files to downloaded will have to be uncompressed. As most of them use Linux-originated formats (.tar.gz, .tar.bz2, .tar.lzma), you will need a versatile unzipping utility. A recent version of 7-zip is therefore strongly advised.

Please note that most archives contain directory structures. Unless otherwise stated, you have to merge the contents with the existing dirs

Browser

Please install Mozilla Firefox or another modern browser (NOT Internet Explorer)

GNU Windows Environment

Before installing, ensure your Windows user name does not contain spaces (VLC will not build in a folder with spaces in it). If it does, please create another user on your system.

In the following text, we'll refer to this user name as "<username>". Replace it appropriately where needed of course.

MinGW

Note: you may be *required* to use TDM GCC. This is because some of the pre-built contribs were built using SlJl (TDM) exception handling. "Vanilla" GCC 4.0+ uses dwarf2, which can result in link errors. You have been warned. See this page for a background.
Note for the brave : The steps advised below use a modified version of MinGW. If you feel like staying with the vanilla MinGW intead, use the main installer 5.1.6 found at http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/MinGW%205.1.6/MinGW-5.1.6.exe/download , then go through the wizard:
* select "Downloading and Install"
* select candidate release
* select g++ and MinGW Make (in addition to the base system)
Then, update Mingw GCC to 4.4.0 by downloading http://sourceforge.net/projects/mingw/files/GCC%20Version%204/gcc-full-4.4.0-mingw32-bin-2.tar.lzma/download and extracting it to C:\Mingw (replacing files when asked). Finally, you'll gave to fix the file C:\MinGW\lib\gcc\mingw32\4.4.0\libstdc++.la by opening it and changing the line defining library_names so that it reads library_names=''


TDM/MinGW Setup

Use the installer found at http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/Previous/1.908.0/tdm-mingw-1.908.0-4.4.1-2.exe/download

Go through the wizard:

  • unckeck "Check for updated files..."
  • Select "Create"
  • install to C:\MinGW
  • keep default settings (i.e. under the gcc node, "TDM Unstable: 4.4.1-tdm-2" should be selected)
  • afterwords add C:\MinGW\bin to the windows PATH

MinGW utils

Installing mingw-utils is recommended: http://prdownloads.sourceforge.net/mingw/mingw-utils-0.3.tar.gz

Extract contents to c:\MinGW

MSys

MSys Setup

Use the installer found at http://sourceforge.net/project/downloading.php?group_id=2435&filename=MSYS-1.0.11.exe

Go through the wizard and install to to default C:\Msys\1.0

In the command window that opens, answer questions as follows:

Accept Post Install: [y]
MinGW Installed? :   [y]
path to MinGW:       [c:/MinGW]

MSys Developer Toolkit

Use the installer found at http://downloads.sourceforge.net/mingw/msysDTK-1.0.1.exe

Go through the wizard, keeping default values

AutoTools and libcrypt

Update autoconf, automake, libtool as well as libcrypt by downloading the following files and extracting them to C:\Msys\1.0:

Glib and PKG-CONFIG

Similarly, download the following files and extract them to C:\MSys\1.0:

Add pkg config path variable

Add the following line to the top of C:\MSys\1.0\msys.bat:

set PKG_CONFIG_PATH=/win32/lib/pkgconfig

Fix libtool search dirs

Open C:\MSys\1.0\bin\libtool and change line 9926 by appending ' /mingw/lib' to the end of 'compiler_lib_search_dirs'. The line should then read :

compiler_lib_search_dirs="/usr/lib /usr/lib /bin/../lib/gcc-lib/i686-pc-msys/2.95.3-1 /bin/../lib/gcc-lib /usr/lib/gcc-lib/i686-pc-msys/2.95.3-1 /bin/../lib/gcc-lib/i686-pc-msys/2.95.3-1/../../../../i686-pc-msys/lib /usr/lib/gcc-lib/i686-pc-msys/2.95.3-1/../../../../i686-pc-msys/lib /mingw/lib"

LUA tools

VLC uses the LUA scripting language (See lua.org). Unfortunately, no binaries are provided so you need to compile them.

cd ~/lua-5.1.4 
make mingw

This should produce lua.exe, luac.exe and lua51.dll in the src directory. Put these in your /bin with the commands:

cd src 
cp *.exe /bin
cp *.dll /bin
cd ..

Precompiled contribs

Note for the brave : Alternatively, you can get the latest contrib from :http://people.videolan.org/~jb/Contribs/
C:\MSys\1.0\win32\lib\libdvdnav.a

Contribs are basically some precompiled 3rd party library (Here's a list of what they all are).

VLC sources

Note for the brave : This section lists the steps for VLC version 1.1.0rc3. Alternatively, you could get the latest sources from the development tree using GIT. It's not as difficult as it looks to do so. If you want chose that route, please follow instructions on the Git Windows page (just download the VLC repository--you don't need the x264 one) then skip the next section "Last Change"

Base: VLC version 1.1.0rc3

add missing configure-msys (1.1.0rc3 only)

add missing configure-common 1.1.0rc3 only

Last change : whoami and hostname

Whoami is not available on Windows, and hostname doesn't support the -f option used by the build process. These utilities are used to show the name and computer of the person who compiled VLC in the 'About' box.

Note for the brave : the steps below are file changes so that compile works, but an alternative is to download and install GNU whoami and hostname functionality. This can be achieved by extracting who.exe, whoami.exe and hostname.exe from http://sourceforge.net/projects/mingw/files/MSYS/BaseSystem/coreutils/coreutils-5.97-2/coreutils-5.97-2-msys-1.0.11-ext.tar.lzma/download and saving them to C:/MSys/1.0/bin

Whoami

Create a new file containing the single line:

echo '<username>'

and save it as C:\MSys\1.0\bin\whoami (without any extension)

Hostname

Modify configure.ac so that it doesn't call 'hostname -f' as follows:

  • open C:\MSys\1.0\home\<username>\vlc\configure.ac
  • goto line 4740
  • change it as follows:
old: AC_DEFINE_UNQUOTED(VLC_COMPILE_HOST, "`hostname -f 2> /dev/null || hostname`", [host which ran configure])
new: AC_DEFINE_UNQUOTED(VLC_COMPILE_HOST, "`hostname`", [host which ran configure])

Build VLC

The build is made exclusively from the command line, so if you closed the prompt at the LUA step, re-execute C:\MSys\1.0\msys.bat, then type the commands as mentioned

Bootstrap

cd vlc
cp -v /usr/win32/share/aclocal/* m4/
cp -v /usr/share/aclocal/* m4/
PATH=/usr/win32/bin:$PATH ./bootstrap

Configure

sh extras/package/win32/configure-msys.sh

Compile

Note : If your <username> starts with the "u" or "x" character, change C:\MSys\1.0\home\<username>\config.h and double all backslashes in VLC_COMPILED_BY constant.

Type the following command :

PATH=/usr/win32/bin:$PATH make

Create self-contained packages

Once the compilation is done, build self-contained VLC packages with one of the following "make" commands:

make package-win32-base

(This will create a subdirectory named vlc-x.x.x with all the binaries "stripped" without any debugging symbols).

make package-win32-zip

(Same as above but will package the directory in a zip file).

make package-win32

(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).

make package-win32-base-debug

(This will create a subdirectory named vlc-x.x.x with all the binaries containing debug info usable by gdb).

Troubleshooting

  • It doesn't link, and complains about missing gcc symbols: You missed this line in the instructions:

Use text editor to change MinGW\lib\gcc\mingw32\4.4.0\libstdc++.la file (line should be library_names=) due to bug in latest MinGW.

  • Compilation stops early, after configure was complaining about mismatched quotes:

Check the VLC_COMPILE_HOST variable in your config.h - if it's Option f is not valid then hostname -f fails (on Windows, there is no such option as -f). In configure.ac change

AC_DEFINE_UNQUOTED(VLC_COMPILE_HOST, "`hostname -f 2> /dev/null || hostname`", [host which ran configure])

to

AC_DEFINE_UNQUOTED(VLC_COMPILE_HOST, "`hostname`", [host which ran configure])
PATH=/c/Program\ Files/NSIS/:$PATH make package-win32