Showing posts with label Git. Show all posts
Showing posts with label Git. Show all posts

Friday, April 22, 2011

[Git] modified GPAC repository

golgol氏が管理しているGitHub上のGPAC repositoryが半年以上停滞してしまっているので、勝手ながら、svn repogitoryの更新を取り込んでgolgol氏のパッチを当てた別のrepositoryを作りました。

https://github.com/wipple/GPAC

半年の間にsvnの方が1000近く更新を重ねていて、conflictしまくっていたのでパッチを若干弄っています。svnの更新によって当てる必要がなくなったものは外しています。また、svnの更新によって発生する問題に対する新しい修正パッチなども当てています。

最初はGitHub上からforkしようと思ったんですけど、git svnがうまくいかなかったりしたので、自分でgit svn cloneして一から作りました。ブランチは基本的にgolgol氏のrepositoryと一緒で、masterとplainとgpac_fixesの3つです。まずsvnの更新を取り込んでからgpac_fixesブランチにおいて適宜conflictを解消してパッチを当て、ビルドテストなどをしてから大丈夫そうであればmasterブランチに取り込みます。なので通常はmasterブランチで使用すれば大丈夫です。ちなみにplainブランチは名前からもわかる通り、何のパッチも当てていないもの(svn repositoryから引っ張ってきただけのもの)です。GPAC(笑)と笑うためのものなので通常は使用しないでください。

パッチがおかしいんじゃないかとか、ビルドができないとか、こういうパッチを当ててほしいとか、その他何かありましたらご連絡を。

Monday, February 28, 2011

[x264] Revision Roll [Git]

x264のコミットメッセージに
Fix 10L in r1912

とか
Fix regression in rev1549

のようなものが出てくることがあります。こういうときに、「どういうコミットだったっけ?」と確認したくてリビジョンナンバーを頼りに遡ろうとすると、結構手間がかかるんですよね、Gitって。猫科研究所のx264チェンジログとかx264.nlのビルドログを利用してリビジョンナンバーからハッシュ値を調べる必要があります。実際にGitに渡すのはリビジョンナンバーではなくハッシュ値でないといけません(タグがついていればそれも利用できますが、x264はついていないですし…)。

例えば、たまに2chのx264のスレとかで「rev1790だと大丈夫だけどrev1803以降だとおかしくなる」というようなレスがありますが、こういうときにいちいちハッシュ値を調べるのって面倒です。面倒なので、リビジョンナンバーを指定するとハッシュ値を自動で調べてgit resetやgit showやgit diffに渡す、簡単なシェルスクリプト(rev_roll.sh)を書きました。名前からして適当です(笑)x264.gitからgit cloneしたフォルダに入れて使ってください。使い方は、スクリプトの冒頭10行ちょっとを読めばすぐにわかると思います。自分に必要な最低限のオプションしか用意していませんが(苦笑)



エラーメッセージとかかなり適当なスクリプトですけど、リビジョンナンバーで操作したいときにどうすればいいかのヒントにはなるかな、と。必要なら色々弄ってオプションを追加してください。あと、このスクリプトは、あくまでplainなx264.gitしか想定していないので、他の用途で使って不具合が出たときは自分で弄って修正してください。ブランチはorigin/masterで決めうちにしちゃっていますし。「もうちょっといい方法があるよ〜」って人は是非教えてくださいm(__)m

…。

実はGistを使ってみたかっただけ疑惑(ぉ

Sunday, February 27, 2011

[FFmpeg] さらばlibavcore

しばらくビルドをサボっている間にFFmpegのlibavcoreがlibavutilにmergeされたらしい。おいおい…。さすがにちょっとあきれた…。

2010年の7月21日に追加され、その影響でlavfサポートのx264のビルドがうまくいかなくなることで多くの人の脳裏に焼きついたlibavcore。タブ補完でlibavcodecとバッティングしてイライラさせてくれたlibavcore。わずか半年余りでその短い生涯を終えることになったけど、君の事は一生忘れない。

…。

と冗談はさておき、このことで注意しておいた方がよさそうなことを一応メモしておきます。ビルダー向けの記事です。「んなこと知ってるよ(笑)」という方は無視してください。

Sunday, January 30, 2011

[MacOSX] Gitのビルド

Mac OS XでGitをビルドするのは簡単です。Xcodeさえインストールしてあれば、Gitのサイトからsourceを落としてきて、伸張して、ターミナルでディレクトリに移動(cd)して、以下のようなコマンドを入力していけば済みます。
$ ./configure --prefix=/usr/local && make -j3 && sudo make install

さて。このビルドによって作成されたバイナリがどのライブラリにlinkしているかを調べるには、otoolというコマンドを使います。
$ otool -L git
git:
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.0.0)
/opt/local/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

はてさて。/opt/localほにゃららにlinkしています。Gitは、/opt/local/libや/sw/libというディレクトリが存在するかをチェックして、もし存在するならそこにあるライブラリにlinkするようにしているのでこういうことになります。以下がMakefileの該当箇所です。
ifeq ($(uname_S),Darwin)
ifndef NO_FINK
ifeq ($(shell test -d /sw/lib && echo y),y)
BASIC_CFLAGS += -I/sw/include
BASIC_LDFLAGS += -L/sw/lib
endif
endif
ifndef NO_DARWIN_PORTS
ifeq ($(shell test -d /opt/local/lib && echo y),y)
BASIC_CFLAGS += -I/opt/local/include
BASIC_LDFLAGS += -L/opt/local/lib
endif
endif
PTHREAD_LIBS =
endif

この/swと/opt/localは、それぞれFinkとMacPorts(旧DarwinPorts)によって作成されるものです。これらによってインストールされるライブラリは大抵/usr/lib以下にあるものより新しいものなので、普段はこれでも問題ありません。

ただ、例えばビルドしたバイナリを他の環境で動かしたい時などは問題が出る場合があります。相手の環境にFinkやMacPortsがインストールされているとは限りませんし、またたとえそれらをインストールしていても、自分の環境と同じライブラリがインストールされているとも限りません。そのため、バイナリ配布をする際には必ずotoolコマンドでチェックして、自分の環境にしかインストールされていないライブラリにlinkしていないかを確認する必要があります。

では本題。Gitでビルドする際に、/opt/local/libや/sw/libのライブラリにlinkしないようにするにはどうすればいいのか。

  1. FinkやMacPortsをアンインストール———そしてビルダーデビュー(笑)

  2. /opt/localや/swを一時的に別の場所に退避———デスクトップとか。ゴミ箱オススメ(ぉぃ

  3. Makefileの該当箇所を弄る———削除しちゃえ(爆

  4. 'NO_FINK'や'NO_DARWIN_PORTS'を定義———これが一番マシです


4の'NO_FINK'や'NO_DARWIN_PORTS'は、さっきのMakefileの抜粋の2行目と8行目にも出てきました。configureにコメントで解説が書いてあります。
# Define NO_FINK if you are building on Darwin/Mac OS X, have Fink
# installed in /sw, but don't want GIT to link against any libraries
# installed there. If defined you may specify your own (or Fink's)
# include directories and library directories by defining CFLAGS
# and LDFLAGS appropriately.
#
# Define NO_DARWIN_PORTS if you are building on Darwin/Mac OS X,
# have DarwinPorts installed in /opt/local, but don't want GIT to
# link against any libraries installed there. If defined you may
# specify your own (or DarwinPort's) include directories and
# library directories by defining CFLAGS and LDFLAGS appropriately.

手順としては、

  1. ./configureを走らせる

  2. config.mak.autogenというファイルを開く

  3. 適当な行に'NO_FINK=YesPlease'や'NO_DARWIN_PORTS=YesPlease'などと追加する

  4. makeする


とやっていきます。するとこんな感じになります。
$ otool -L git
git:
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

めでたしめでたしです。これで安心して/opt/localと/swをゴミ箱に捨てられます(ぉ

Friday, January 28, 2011

FFmpeg Git

一昨日くらいに、x264のバイナリを新しいのにしなきゃと思って、ffmpegのgit pullをしたら「libswscaleが云々」と怒られて更新ができなくなった…。原因がよくわからなくて、一度ディレクトリを消してから再度cloneしたら直った…。そして昨日またx264の更新が来たので今朝git pullをしてみたら、今度は「Already up-to-date.」と言われた…。

え…あのFFmpegが2日も更新がないとか…。なにそれ天変地異でも起きるんですか…?(滝汗)

どうも怪しいと思ってサイト(Get FFmpeg)を覗いてみたら、とうとうsvnからgitに完全移行していました。んで、clone URLが git://git.ffmpeg.org/ffmpeg/ から git://git.ffmpeg.org/ffmpeg.git に変わっていました。これがgit pullがうまくいかなかった原因か…。

FFmpegSourceもgitに移行しないかなー。ただ単にplainのまま使うならsvnでもgitでもどっちでもいいんですが、パッチ当てたりちょっとコード弄ったり、開発面で考えるとgitの方が断然効率がいいんですよね。本当に管理がしやすい。でもGoogle Codeがgit採用していないんですよねえ…。うーん…(笑)