Win32CompileMSYS

From VideoLAN Wiki
Revision as of 11:39, 26 September 2012 by J-b (talk | contribs)
Jump to navigation Jump to search

Introduction

About

MSys is a helper environment for MinGW, the compiler chain for Windows based on GCC.

It can build VLC natively on Windows. Note that you should probably cross compile VLC from Linux, because it is faster, and feels easier.

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

Windows tools needed

Text editor

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

You can look at notepad2. You can set File - Line endings - Default to "Unix (LF)", but it always saves opened files in the ending style they have.

Or you can look at notepad++.

Unzip Utility (7-zip)

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

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

TDM/MinGW Setup

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

Go through the wizard:

  • Select "Create"
  • Select 32bits
  • Install to C:\MinGW
  • Keep default settings

MSys

Use the MSys package found at

Unzip it to C:\MinGW

VLC sources

Git

Clone the git repo

git clone git://git.videolan.org/vlc.git

Get Precompiled contribs

cd vlc/contrib
mkdir win32 && cd win32
../bootstrap --build=i586-mingw32msvc
make prebuilt

Note: it will say tar complains, just ignore them and watch tar die. I had to manually execute the rest of the prebuilt target, which consists of

mv i586-mingw32msvc ..
cd ../i586-mingw32msvc
change_prefix.sh

I also found that change_prefix.sh, which rewrites .pc files to deal with their chosen location, used the -i option which is not supported by MSYS-shipped sed. I rewrote the sed script to write changes $file.new then mv $file.new $file.

Last change : whoami and hostname

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 search button:
  • 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/share/aclocal/* m4/
bootstrap 

Configure

sh extras/package/win32/configure.sh --host=i586-pc-mingw32msvc --disable-nls

If you want any custom options, like "--disable-lua" or anything of that nature, you can append them.

Make (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

If this step fails, try the following

  • Go back to "Precompiled contribs" section, and obtain the latest compiled contrib (under "Note for the brave")
  • In the configure script section (configure-msys.sh), open that file and add --disable-upnp

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

Note that with the 1.2 branch these names have changed slightly. Run '

grep ':' Makefile | grep package-win32

to see what they are now.

Troubleshooting

See Win32CompileMSYSTroubleShooting.

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

It was updated in July 2012 by gnosygnu. Note that there are several new notes in Win32CompileMSYSTroubleShooting. These reflect problems that were encountered on gnosygnu's setup (Windows XP SP3). Refer to this forum thread for more information.

See also