mozbuid

参考
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/Windows_Prerequisites

ビルド環境
XP SP3 32bit
VC2010 Express

まずこれを実行
cad07c25-abee-4821-bb72-b45e2925bc4c

start-shell-msvc2010.bat を実行

これは環境変数を設定した後mingwを起動するようだ。

mingwではドライブ名が/c/みたいになる。ここにソースを置く

ソースを取ってくる。時間がかかる。hgはMercurialというSCMツール

失敗してるのでもう一回

ビルド

最初に設定ファイルを作るみたいなのでもう一回

エラー

SDKがないというエラー、–disable-gamepadをやれば回避できるらしいのでmozconfigファイルを作成して追加。

c:/mozilla-build/mozmake/mozmake.EXE -f client.mkから実行しろといわれてるので実行

d3dcompiler.hがないという・・・仕方ないのでJune 2010 DirectX SDK をインストール。

C:\Program Files\Microsoft DirectX SDK (June 2010)\Include\D3Dcompiler.hがあることを確認。

start-shell-msvc2010.batの下のほうにインクルードディレクトリを追加。

start-shell-msvc2010.batを実行してパスを確認。

途中でこんなのが出た。

やっと終わった

489分かかった。mach runしろとのことなので実行

1998c2d0-1f12-42f4-a3cb-8155eae97389

途中で出たVSサポートのビルドをしてみる

.slnができたのでVC2010で開いてみる。いくつかのプロジェクトが読み込めなかった。Expressのせいだろうか。
F11を押してデバッグ。ビルドせずに実行した。
93f40675-cc0a-4e27-93a1-a673bdeb5e14

感想:
ビルドに時間がかかりすぎた。仮想環境で作業しながらだったが実記でやったほうがいいかもしれない。

WindowsのActive Setup

レジストリキー
HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components

ユーザログオン時、HKLMの方をチェックし、それと同一のエントリーがHKCUになければコピーする。StubPathが設定されている場合はこれを実行する。

ユーザごとにログオンしたとき何かをセットアップしたい場合にはここに記述できる。

BeginInvokeとスレッド

.netのBeginInvokeにはデリゲート標準とコントロールの実装があるのでわかりずらいので整理

・delegateのBeginInvoke
BeginInvokeは非同期で実行する。登録できる関数は1個で2個以上だと例外が発生する。関数は別スレッドで実行される。

・ControlのBeginInvoke
ControlのBeginInvokeはWin32のPostMessageみたいなもので別スレッドでは実行しない。一般的にControlはそれを作ったスレッドしか触れないのでマルチスレッドで別スレッドからcontrolにアクセスするときは使う。PostMessageとは言っても引数を渡したり、あとで待ったりできるので高機能。

Form1.cs

Form2.cs

Class1.cs

form1は別スレッドでform2を作る。_f2にはform1のスレッドからは触れないのでBeginInvokeまたはInvokeを呼ぶことになる。関数はForm1にあってもいい。InvokeRequiredを使えば、Invokeが必要か判断できる。ただし多用すると、簡単にデッドロックになるだろう。このソースは本来form2を作るときもっと慎重にやらないとならないがスルーしてる。

vc2010 outdir targetdirが違うと怒られる

以前のプロジェクト設定でリンカーの出力を標準とは違う場所にしていると怒られるようだ。

一般設定の出力場所を設定して、リンカーの方は標準にもどせばいい。

ただここにフルパスを指定したい場合は最後を\\と\を2つければならないみたいだ

boostライブラリのファイル名

Windowsの場合の話(オリジナル

libboost_regex-vc71-mt-d-1_34.lib

lib
これ自体がstaticライブ来の場合つく

boost_regex
ライブラリの名前

vc71
ビルドするのに使ったツール

mt
マルチスレッドサポートありでビルド

d
dのほかにいくつかある。以下参照
s linking statically to the C++ standard library and compiler runtime support libraries.
g using debug versions of the standard and runtime support libraries.
y using a special debug build of Python.
d building a debug version of your code.7
p using the STLPort standard library rather than the default one supplied with your compiler.
n using STLPort’s deprecated “native iostreams” feature.8

s
標準ライブラリをスタティックリンクしている
g
デバッグバージョンのランタイムライブラリでリンクしている
y
よくわからないがパイソンのデバッグビルドでリンクしている
d
これ自体がデバッグバージョンのビルド
p
STLPortを使ってビルドしている
n
STLPortのdeprecatedなnative iostreamsでビルドしている

ここには何もつかない場合もある、普通は何もつかないかgdがつくと思われる。

1_34
バージョンナンバー
これがつくのとつかないの同じファイルができるようだが、本来Linuxのシンボリックリンクだと思われる。Windowsの場合はどっちもファイルの実体のようだ

cscriptでファイルをダウンロード

chromiumのdevツールからget_file.jsをコピペ

接続にServerXMLHTTP、ファイル操作にADODBを使ってかなり強引と思われる。これは同期で動くと思うので、いったんメモリにダウンロードデータを蓄えるため大きいファイルはきびしいとおもわれる。

MSのサンプルをコピペ

これはWinHttpをつかっている、これも同期なのでさっきと同じ問題がある。調べてみるとこのオブジェクトには非同期機能とコールバック機能やストリーム機能もあるようだ。

よくよく調べてみるとwshでバイナリを扱うのは大変なようだ。面倒なのでスルー。

svnとgitの簡易対応表

subversion git
svn co url git clone url
svn update git pull
svn add file
svn rm file
svn mv file
git add file
git rm file
git mv file
svn commit git commit -a
svn diff git diff
svn status git status
svnadmin create repo
svn import file://repo
git init
git add .
git commit
リポジトリと手元のファイルの2種類 リモートリポジトリと自分用リポジトリ(.git)と手元のファイルの3種類
urlで/trunk /tagsなどを分ける urlの中にすでに入っている
+1されていくリビジョン sha1で管理、最新がHEAD、ひとつ前がHEAD^、もうひとつ前がHEAD^^