MinGW+Msys2上でのvlcビルド

Install MSys2 and GCC

MSYS2 installer
からMSys2をインストールする。推奨は32ビットバージョン
デフォルトでインストールしコマンドラインから実行する。

msys32のパッケージ更新

C:\32msys32にインストールしたとする

C:\32msys32\msys2.exe

msys2.exeを起動する

1度目

$ pacman -Syu

2度目

$ pacman -Su

Tools

以下のようにパッケージをインストールする。
git
subversion
cvs
automake
autoconf
libtool
m4
make
gettext
pkg-config
mingw-w64-i686-lua
findutils
mingw-w64-i686-headers
yasm patch

$> pacman -S git subversion cvs automake autoconf libtool m4 make gettext pkg-config mingw-w64-i686-lua findutils  mingw-w64-i686-headers yasm patch

エラーが出ることもあるので分散して実行してみるといい。ちなみに2016年6月16日現在はpacman -S mingw-w64-i686-headersで失敗した。

$> pacman -S git subversion cvs automake autoconf libtool m4 make gettext 
$> pacman -S pkg-config mingw-w64-i686-lua findutils  
$> pacman -S yasm patch
$> pacman -S mingw-w64-i686-headers 

gcc

mingw-w64.からgccをダウンロードして「C:\32msys32\」に解凍する。
※解凍したフォルダはi686-4.9.2-release-win32-sjlj-rt_v3-rev0なのでその中にあるmingw32フォルダをルートに上書きコピーした

Restart

MSys2を終了してautorebase.bat(起動してもすぐに閉じてしまう)を実行させ、mingw32_shell.batからMSys2を再度起動させる。
※mingw32_shell.bat(旧フォルダからコピー)をダブルクリックして起動する

GCCの確認

以下のようにバージョンを確認する

$ gcc -v

以下のように表示されればOK

Thread model: win32
gcc version 4.9.2 (i686-win32-sjlj-rev0, Built by MinGW-W64 project)

VLCソースコードの取得

以下のようにGitで取得する

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

※Windowsのユーザー名にスペースが入っていないこと。

3rdパーティーのライブラリを取得

$ cd vlc/contrib
$ mkdir win32
$ cd win32
../bootstrap --build=i686-w64-mingw32
$ make prebuilt←バージョン不一致を発生するので以下の2行を実行する
 または
$ make fetch
$ make

※すべてが「moc -v」で良ければOK。

$ cd vlc/contrib
$ mkdir win32
$ cd win32
../bootstrap --build=i686-w64-mingw32
$ make prebuilt

make prebuiltする場合は以下を実行する?

$ cd vlc
$ git checkout ddba52206f69bb123bea8ed4d4ada07b3cb1223c

https://forum.videolan.org/viewtopic.php?t=136077

ragelがなくてエラーが出たのでdownload&install

$ wget http://www.colm.net/files/ragel/ragel-6.10.tar.gz
$ tar zxvf ragel-6.10.tar.gz
$ cd ragel-6.10
$ ./configure
$ make
$ make install

インストールしたら再度vlc/contrib/win32に移動して

$ pwd
$ vlc/contrib/win32
$ make

blurayのところでantがないというエラーが発生したのでvlc/contrib/src/blurayを削除して再度makeして次に進んだ

また以下のエラーが発生した

mkdir -p -- /home/ganasonic/vlc/contrib/i686-w64-mingw32/share/aclocal && cd cddb && autoreconf -fiv -I/home/ganasonic/vlc/contrib/i686-w64-mingw32/share/aclocal
autoreconf: Entering directory `.'
autoreconf: running: autopoint --force
/usr/bin/autopoint: 行 485: /usr/share/gettext/archive.dir.tar.xz: No such file or directory
tar: これは tar アーカイブではないようです
tar: gettext-0.14.4: アーカイブ内に見つかりません
tar: 前のエラーにより失敗ステータスで終了します
autopoint: *** infrastructure files for version 0.14.4 not found; this is autopoint from GNU gettext-tools 0.19.8.1
autopoint: *** Stop.
autoreconf: autopoint failed with exit status: 1
make: *** [../../contrib/src/cddb/rules.mak:33: .cddb] エラー 1

以下を実行した

$ pacman -S gettext-devel
$ pacman -S gettext

以下のcmakeが見つからないというエラーが出た

rm -f toolchain.cmake
echo "set(CMAKE_SYSTEM_NAME Windows)" >> toolchain.cmake
echo "set(CMAKE_BUILD_TYPE Release)" >> toolchain.cmake
echo "set(CMAKE_C_COMPILER gcc)" >> toolchain.cmake
echo "set(CMAKE_CXX_COMPILER g++)" >> toolchain.cmake
echo "set(CMAKE_FIND_ROOT_PATH /home/ganasonic/vlc/contrib/i686-w64-mingw32)" >> toolchain.cmake
echo "set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)" >> toolchain.cmake
echo "set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)" >> toolchain.cmake
echo "set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)" >> toolchain.cmake
touch -r .ffmpeg .dep-ffmpeg
cd chromaprint && CC="gcc" CXX="g++" LD="ld" AR="ar" CCAS="gcc -c" RANLIB="ranlib" STRIP="strip" PATH="/home/ganasonic/vlc/contrib/i686-w64-mingw32/bin:/home/ganasonic/vlc/extras/tools/build/bin:/mingw32/bin:/usr/local/bin:/usr/bin:/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl" CPPFLAGS=" -I/home/ganasonic/vlc/contrib/i686-w64-mingw32/include " CFLAGS=" -I/home/ganasonic/vlc/contrib/i686-w64-mingw32/include -g -O2 " CXXFLAGS=" -I/home/ganasonic/vlc/contrib/i686-w64-mingw32/include  -g -O2 " LDFLAGS=" -L/home/ganasonic/vlc/contrib/i686-w64-mingw32/lib" cmake . -DCMAKE_TOOLCHAIN_FILE=/home/ganasonic/vlc/contrib/win32/toolchain.cmake -DCMAKE_INSTALL_PREFIX=/home/ganasonic/vlc/contrib/i686-w64-mingw32 -G "MSYS Makefiles" -DBUILD_SHARED_LIBS:BOOL=OFF
/bin/sh: cmake: コマンドが見つかりません
make: *** [../../contrib/src/chromaprint/rules.mak:24: .chromaprint] エラー 127

以下を実行した

$ pacman -S cmake

以下を実行した

$ make
cd chromaprint && CC="gcc" CXX="g++" LD="ld" AR="ar" CCAS="gcc -c" RANLIB="ranlib" STRIP="strip" PATH="/home/ganasonic/vlc/contrib/i686-w64-mingw32/bin:/home/ganasonic/vlc/extras/tools/build/bin:/mingw32/bin:/usr/local/bin:/usr/bin:/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl" CPPFLAGS=" -I/home/ganasonic/vlc/contrib/i686-w64-mingw32/include " CFLAGS=" -I/home/ganasonic/vlc/contrib/i686-w64-mingw32/include -g -O2 " CXXFLAGS=" -I/home/ganasonic/vlc/contrib/i686-w64-mingw32/include  -g -O2 " LDFLAGS=" -L/home/ganasonic/vlc/contrib/i686-w64-mingw32/lib" cmake . -DCMAKE_TOOLCHAIN_FILE=/home/ganasonic/vlc/contrib/win32/toolchain.cmake -DCMAKE_INSTALL_PREFIX=/home/ganasonic/vlc/contrib/i686-w64-mingw32 -G "MSYS Makefiles" -DBUILD_SHARED_LIBS:BOOL=OFF
CMake Error: Could not create named generator MSYS Makefiles

Generators
  Unix Makefiles               = Generates standard UNIX makefiles.
  Ninja                        = Generates build.ninja files.
  CodeBlocks - Ninja           = Generates CodeBlocks project files.
  CodeBlocks - Unix Makefiles  = Generates CodeBlocks project files.
  CodeLite - Ninja             = Generates CodeLite project files.
  CodeLite - Unix Makefiles    = Generates CodeLite project files.
  Eclipse CDT4 - Ninja         = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.
  KDevelop3                    = Generates KDevelop 3 project files.
  KDevelop3 - Unix Makefiles   = Generates KDevelop 3 project files.
  Kate - Ninja                 = Generates Kate project files.
  Kate - Unix Makefiles        = Generates Kate project files.
  Sublime Text 2 - Ninja       = Generates Sublime Text 2 project files.
  Sublime Text 2 - Unix Makefiles
                               = Generates Sublime Text 2 project files.

make: *** [../../contrib/src/chromaprint/rules.mak:24: .chromaprint] エラー 1

以下を実行した

$ pacman -S cmake

以下を実行した

../../contrib/src/protobuf/rules.mak:25: *** Protobuf compiler (protoc) not found!.  中止.

以下を実行した

$ pacman -S protobuf

ビルド

VLCのルートフォルダで以下のように実行する。

$ ./bootstrap

※ここで失敗する
※2017/09/04は成功

$ ./bootstrap
NOTE: GNU gettext appears to be missing or out-of-date.
Please install or update GNU gettext.
Also check if you have cvs, a dependency of autopoint.
Otherwise, you will not be able to build a source tarball.
==============================================================

generating modules/**/Makefile.am
.
+ autoreconf --install --force --verbose -I m4
autoreconf: Entering directory `.'
autoreconf: running: true --force
autoreconf: running: aclocal -I m4 --force -I m4
' is already registered with AC_CONFIG_FILES.
../../lib/autoconf/status.m4:288: AC_CONFIG_FILES is expanded from...
/usr/share/aclocal-1.15/cond-if.m4:23: AM_COND_IF is expanded from...
configure.ac:4293: the top level
autom4te: /usr/bin/m4 failed with exit status: 1
aclocal-1.15: error: echo failed with exit status: 1
autoreconf: aclocal failed with exit status: 1

Configure

$ mkdir win32
$ cd win32
$ sh ../extras/package/win32/configure.sh --host=i686-w64-mingw32 --disable-nls

ここで失敗するのでconfigure.shの8500行目あたりを修正する

#  test -n "$BUILDCC" && break
done
#test -n "$BUILDCC" || BUILDCC="false"

#if test "$BUILDCC" = "false"; then :

#  as_fn_error $? "Cannot find native C99 compiler: please define BUILDCC." "$LINENO" 5

#fi

Note: If you want any custom options, like “–disable-lua” or anything of that nature, you can append them.

Make (compile)

make -j4