■ 開発環境
- OS
  Windows XP Professional / Windows 8 Pro / Windows 8.1 Pro / Windows 10 Pro
- Tera Term Project でリリースに使用しているコンパイラ
-- Visual Studio 2005 SP1 (Standard Edition 以上)
   Service Pack 1 (VS80sp1-KB926602-X86-JPN.exe)
   Microsoft Visual Studio 2005 Service Pack 1 MFC セキュリティ更新プログラム (VS80sp1-KB2538218-v2-X86-INTL.exe)
   Windows Vista 以上でビルドする場合は、Visual Studio 2005 Service Pack 1 Update for Windows Vista (VS80sp1-KB932236-X86-JPN.exe)
   Windows Server 2003 R2 Platform SDK(Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1)
   注: Visual Studio 2005 Standard Editionでは、OpenSSL のビルドが失敗します。Windows Server 2003 R2 Platform SDK をインストールし、"Crypt32.Lib"をリンクできるようにしておく必要があります。
       SDK でインストールされたディレクトリが最優先になるよう、INCLUDE および LIB 環境変数を設定します。
       例: INCLUDE "C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include"
           LIB     "C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib"
           修正バッチファイル C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat
- サポートされているコンパイラ
-- Visual Studio 2005 (Express EditionはTera Term 4.103から対応)
   - SDK 7.0
     - Windows Server 2003 R2 Platform SDK
       (= Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1)
       (5.2.3790.2075.51.PlatformSDK_Svr2003R2_rtm.img)
     - Microsoftのサイトからは入手不可能(2019/04/07時点)
   - SDK 7.1
     - Microsoft Windows SDK for Windows 7 and .NET Framework 4
       (GRMSDK_EN_DVD.iso)
     - Windows95でも動作するバイナリをビルド可能
     - Visual Studio 2005で利用するにはKB949009(VS80sp1-KB949009-X86-INTL.exe)かKB980422(VS80sp1-KB980422-x86-INTL.exe)が必要
       - KB949009,KB980422はMicrosoftのサイトから入手不可能
-- Visual Studio 2008 SP1 (Standard Edition 以上)
   注: コンパイルされた実行ファイルは Windows NT 4.0, 95, 98, Me で動きません。
-- Visual Studio 2010 SP1 (Professional Edition 以上)
   注: コンパイルされた実行ファイルは Windows 2000, NT 4.0, 95, 98, Me で動きません。
-- Visual Studio 2012 Update 4 (Professional Edition 以上)
   注: コンパイルされた実行ファイルは Windows Vista, XP, 2000, NT 4.0, 95, 98, Me で動きません。
       Windows Vista, XP をサポートするには v110_xp を指定してください。
-- Visual Studio Community 2013 Update 5
   MFC MBCS DLL アドオン (vc_mbcsmfc.exe)
   注: コンパイルされた実行ファイルは Windows Vista, XP, 2000, NT 4.0, 95, 98, Me で動きません。
       Windows Vista, XP をサポートするには v120_xp を指定してください。
-- Visual Studio Community 2015 Update 3
   注: コンパイルされた実行ファイルは Windows Vista, XP, 2000, NT 4.0, 95, 98, Me で動きません。
       Windows Vista, XP をサポートするには v140_xp を指定してください。
-- Visual Studio Community 2017 
   注: コンパイルされた実行ファイルは Windows Vista, XP, 2000, NT 4.0, 95, 98, Me で動きません。
       Windows Vista, XP をサポートするには v141_xp を指定してください。
-- Visual Studio Community 2019
   注: コンパイルされた実行ファイルは Windows Vista, XP, 2000, NT 4.0, 95, 98, Me で動きません。
- バッチファイルからビルドするために
  Visual Studio のコマンドプロンプトからバッチファイルを実行するか、以下のように環境変数を設定してください。
  使用したいバージョンの Visual Studio の "(x86) Native Tools Command Prompt" を実行し、コンパイラのパスに関係する PATH と VSINSTALLDIR 変数を環境変数に登録してください。
  例: INCLUDE       C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE;C:\Program Files (x86)\Windows Kits\8.1\include\shared;C:\Program Files (x86)\Windows Kits\8.1\include\um;
      LIB           C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\LIB;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x86;
      PATH          C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN;C:\Program Files (x86)\Windows Kits\8.1\bin\x86
      VSINSTALLDIR  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC
- インストーラ
  Inno Setup 5.6.1 ANSI (http://www.jrsoftware.org/isinfo.php)
  Inno Setup Preprocessor
  ISTool 5.3.0.1 (https://sourceforge.net/projects/istool/)
- その他
  Cygwin 最新版(v4.105からCygTerm+はVista以降対応となったため)
  ActivePerl 5.10 以上 または Strawberry Perl 5.30.1.1 以上
    ビルド過程で使用します
    - OpenSSL のコンパイル(必須)
    - ドキュメントファイルの文字コード・改行コード変換(必須)
    - リビジョン番号取得 (perlがない場合リビジョン番号を取得せずにビルドします)
  Subversion for Windows (http://sourceforge.net/projects/win32svn/)
    リビジョン番号取得時に使用します
    buildtools/svnrev/toolinfo.txt に svn.exe のフルパスを記述いてください。
    詳しくは buildtools/svnrev/readme.md を参照ください


■ ライブラリ
- Oniguruma 6.9.7.1 (https://github.com/kkos/oniguruma)
- LibreSSL 3.4.2 (https://www.libressl.org/)
- zlib 1.2.11 (http://www.zlib.net/)
- PuTTY 0.76 (http://www.chiark.greenend.org.uk/~sgtatham/putty/)
- SFMT 1.5.1 (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index-jp.html)
- cJSON 1.7.14 (https://github.com/DaveGamble/cJSON/)
- The reference C implementation of Argon2 20190702 (https://github.com/P-H-C/phc-winner-argon2)

■ SVN コミッターへの注意
- SVN リポジトリは一般向けとは違い、以下の通りです。
  svn+ssh://svn.osdn.net/svnroot/ttssh2/trunk

- ファイルを別のディレクトリで編集しないでください。
  コミットしたときに別の人の修正を削除してしまうことがあります。

- アップデート・コミット時の注意
  svnの処理が失敗することがあるので、ファイルをエディタ等で開いたままで行わないでください。

- 言語ファイル編集時の注意
  言語ファイル(installer\release\lang\*.lng)は多言語対応エディタ(vim, EmEditor, Notepad++等)で編集してください。


■ TERATERM.INI への項目追加
- 項目名
すでに EnableFoo... や DisableBar... が混在してしまっているが、混乱しやすい。
今後は Baz... という形式にするのが望ましい。


■ メニューID追加時の命名規則

1桁目は 5

2桁目は
  Tera Term VT ウィンドウなら  0
  Tera Term TEK ウィンドウなら 1
  TTSSH なら                   2
  TTProxy なら                 3
  TTXKanjiMenu なら            4

3桁目は
  [File] メニューなら    1
  [Edit] メニューなら    2
  [Setup] メニューなら   3
  [Control] メニューなら 4
  [Window] メニューなら  8
  [Help] メニューなら    9


例：File配下にTTSSHのメニューを追加する

#define ID_SSHSCPMENU       52110


■ マクロコマンド追加時の作業リスト
  Tera Termマクロを新設するときの作業手順について、以下に示します。

１．ソースコードの修正
-- コマンドの内部 ID を採番する。（「内部 ID」は"helpid.h"にも使用される）
   ... teraterm/ttmacro/ttmparse.h
-- コマンド名を走査して内部 ID に変換する。
   ... CheckReservedWord@teraterm/ttmacro/ttmparse.c
-- コマンドの内部 ID から実際に処理をする関数を呼ぶ。
   ... ExecCmnd@teraterm/ttmacro/ttl.c
-- 処理する関数を作る。

２． ヘルプ(言語ごと)
-- コマンドのヘルプを作る。
   ... doc/LANG/html/macro/command/hogefunc.html
-- コマンド一覧ページに追加する。
   ... doc/LANG/html/macro/command/index.html
-- ヘルプトピックに追加する。
   ... doc/LANG/teraterm.hhc
-- ヘルプページのコンテキスト ID を採番する。
   値は コマンドの内部 ID + 92000。
   ... teraterm/common/helpid.h
-- コンテキスト ID と呼び出すファイルのエイリアスを作成する。
   テキストエディタで直接開き、[ALIAS]にHTMLを追加する。
   ... doc/LANG/teraterm.hhp


■ ライブラリのビルド方法
  1. PuTTY (used by TTSSH)
     (1) PuTTY のソースを libs/putty の中に展開する。
     * ttssh ソリューション配下の putty プロジェクトにより必要な機能のみが静的ライブラリ化され、ttxssh.dll にリンクされるため、展開するだけでよい。

  2. Oniguruma (used by Tera Term Macro)
     (1) oniguruma のソースを libs/oniguruma の中に展開する。
     (2) スタートメニューから「Visual Studio 2005 コマンド プロンプト」を起動する。
     (3) コマンドプロンプト上から libs ディレクトリに移動し、buildoniguruma6.bat を実行する。

  3. LibreSSL (used by TTSSH)
     (1) LibreSSL のソースを libs/libressl の中に展開する。
     (2) スタートメニューから「Visual Studio 2005 コマンド プロンプト」を起動する。
     (3) コマンドプロンプト上から libs ディレクトリに移動し、buildlibressl.bat を実行する。

  4. Zlib (used by TTSSH)
     (1) zlib のソースを libs/zlib の中に展開する。
     (2) スタートメニューから「Visual Studio 2005 コマンド プロンプト」を起動する。
     (3) コマンドプロンプト上から libs ディレクトリに移動し、buildzlib.bat を実行する。

  5. SFMT (used by Tera Term Macro)
     (1) SFMT のソースを libs/SFMT の中に展開する。
     (2) スタートメニューから「Visual Studio 2005 コマンド プロンプト」を起動する。
     (3) コマンドプロンプト上から libs ディレクトリに移動し、buildSFMT.bat を実行する。
     (4) 必要に応じて libs/SFMT/SFMT_version_for_teraterm.h のバージョン番号を修正する。

  6. cJSON (used by TTXCheckUpdate plugin)
     (1) cJSON のソースを libs/cJSON の中に展開する。

  7. The reference C implementation of Argon2 (used by TTSSH)
     (1) argon2 のソースを libs/argon2 の中に展開する。
     * argon2 リファレンス実装には静的ライブラリを生成するプロジェクトファイルが含まれていない。ttssh ソリューション配下の argon2 プロジェクトにより静的ライブラリが生成され、ttxssh.dll にリンクされるため、展開するだけでよい。


■ Tera Termのビルド方法
  Tera Termのビルド方法について以下に示します。
  ビルドにはVisual Studio 2005 Standard Edition以上が必要です。（Visual Studio 2005 Express Editionは不可）

  1. ソースコードをOSDN(https://ja.osdn.net/projects/ttssh2/)からチェックアウトする。
  2. teraterm\visualc\ttermpro.sln をVisual Studioで開く。
     .slnファイルの改行コードが"LF"になっていると、Visual Studioが起動しないので注意願います。
  3. ソリューションをビルドする。
  4. ビルドに成功するとteraterm ディレクトリに実行プログラムが生成される。


■ TeraTerm Menuのビルド方法
  1. ソースコードをOSDN(https://ja.osdn.net/projects/ttssh2/)からチェックアウトする。
  2. ttpmenu\ttpmenu.sln をVisual Studioで開く。
  3. ソリューションをビルドする。
  4. ビルドに成功すると ttpmenu ディレクトリに ttpmenu.exe が生成される。


■ TTXKanjiMenuのビルド方法
  1. ソースコードをOSDN(https://ja.osdn.net/projects/ttssh2/)からチェックアウトする。
  2. TTXKanjiMenu\ttxkanjimenu.sln をVisual Studioで開く。
  3. ソリューションをビルドする。
  4. ビルドに成功すると TTXKanjiMenu ディレクトリに ttxkanjimenu.dll が生成される。


■ TTProxyのビルド方法
  TTProxyのビルド方法について以下に示します。
  ビルドにはVisual Studio 2005(VC++8.0)が必要です。

  1. ソースコードをOSDN(https://ja.osdn.net/projects/ttssh2/)からチェックアウトする。
  2. TTProxy\TTProxy.sln をVisual Studioで開く。
  3. ソリューションをビルドする。
  4. ビルドに成功すると TTProxy ディレクトリにDLLが生成される。


■ TTSSHのビルド方法
  TTSSHのビルド方法について以下に示します。
  ビルドにはVisual Studio 2005(VC++8.0)、ActivePerlが必要です。

  * TTSSH単体のビルドは VS2005 Express Edition でも可能です。ttpcmn.libをリンクするため、Tera Termのビルドを事前に行っておく必要があります。VS2005 Express EditionではTera Termのビルドはできませんが、ttpcmn.libは作成することができます。

  * VS2008 Express Editionでビルドすると、.rcファイルで下記のエラーが発生します。
      .\ttxssh.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.

    本現象を回避するには、.rcファイルをテキストエディタで開き、afxres.hのincludeを削除し、新規に2行を追加します。

      - #include "afxres.h"
      + #include <windows.h>
      + #define IDC_STATIC -1

  1. ソースコードをOSDN(https://ja.osdn.net/projects/ttssh2/)からチェックアウトする。
  2. ttssh2\ttssh.sln をVisual Studioで開く。
  3. ソリューションをビルドする。
  4. ビルドに成功するとttssh2\ttxssh ディレクトリにDLLが生成される。


■ CygTermのビルド方法
  CygTermのビルド方法について以下に示します。

   1. Cygwin(https://www.cygwin.com/)をインストールする。
   2. Cygwinのシェルを起動し、cygterm ディレクトリへ移動する。
      # cd cygterm
   3. CygTermをコンパイルする。
      # make


■ TTXSamplesのビルド方法
  リポジトリのTTXSamplesに Tera Term Extension (TTX)のサンプルがあります。
  TTXを作る際の参考にしてください。
  TTXSamplesのビルドにはVisual Studio 2005(VC++8.0)が必要です。
  Tera Term本体とは違い、Express Editionでもビルド可能です。

  1. ソースコードをOSDN(https://ja.osdn.net/projects/ttssh2/)からチェックアウトする。
  2. TTXSamples\TTXSamples.sln をVisual Studioで開く。
  3. ソリューションをビルドする。
  4. ビルドに成功すると TTXSamples ディレクトリにDLLが生成される。
  各TTXの詳細については、プロジェクト内のReadMe-ja.txtを参照してください。


■ ヘルプファイルのビルド方法
  ヘルプファイルのビルド方法について以下に示します。

  1. HTML Help Compiler を入手する。
     Visual Studio (2017 以降) を "C++ MFC" オプションを選択してインストールすると、HTML Help Compiler (hhc.exe) がインストールされる。

  2. doc\makechm.bat を実行する。


■ リリースの方法
  リリースの方法について以下に示します。

  0. RC 作成時にバージョンを一つインクリメントする。
     一般にテストを呼びかけ、旧バージョンとの同時実行が考えられるため、このタイミングとする(cf. TT_FILEMAPNAME 定義)。
     - teraterm\common\tt-version.h
     - ttssh2\ttxssh\ttxssh-version.h
     - ttpmenu\ttpmenu.rc // 変更時のみ
     - TTProxy\TTProxy.rc // 変更時のみ
     - TTXKanjiMenu\ttxkanjimenu.rc // 変更時のみ
     - installer\teraterm.iss
       AppVer を上げ、"RC" を追加
       snapshot を コメントアウト
       バッチファイルの呼び出しを修正
     この年における最初のリリースの場合は、著作権表示の「最後の発行の年」をインクリメントする。
     - teraterm\keycode\keycode-version.rc // VERSIONINFO
     - teraterm\teraterm\tt-version.rc // VERSIONINFO
     - teraterm\ttpcmn\ttpcmn-version.rc // VERSIONINFO
     - teraterm\ttpdlg\ttpdlg.rc // dialog
     - teraterm\ttpmacro\ttm-version.rc // VERSIONINFO
     - teraterm\ttptek\ttptek-version.rc // VERSIONINFO
     - ttssh2\ttxssh\ttxssh.rc // dialog
     - ttssh2\ttxssh\ttxssh-version.rc // VERSIONINFO
     - ttpmenu\ttpmenu.rc // dialog, VERSIONINFO
     - TTProxy\TTProxy.rc // dialog, VERSIONINFO(en), VERSIONINFO(ja)
     - TTXKanjiMenu\ttxkanjimenu.rc // VERSIONINFO
     - installer\teraterm.iss
     - installer\release\license.txt // Tera Term, TTSSH, Cygterm+, TTProxy, TeraTerm Menu, TTX KanjiMenu
     - doc\en\html\index.html
     - doc\en\html\about\copyright.html // Tera Term, TTSSH, Cygterm+, TTProxy, TeraTerm Menu, TTX KanjiMenu
     - doc\en\html\macro\index.html
     - doc\ja\html\index.html
     - doc\ja\html\about\copyright.html // Tera Term, TTSSH, Cygterm+, TTProxy, TeraTerm Menu, TTX KanjiMenu
     - doc\ja\html\macro\index.html

  1. 依存ライブラリ、ツール、インポート元の最新版をチェックする。
     Visual Studio
       http://www.microsoft.com/japan/msdn/vstudio/downloads/default.aspx
     Inno Setup
       http://www.jrsoftware.org/isdl.php
     Oniguruma
       https://github.com/kkos/oniguruma
     LibreSSL
       https://www.libressl.org/
     zlib
       http://www.zlib.net/
     PuTTY
       http://www.chiark.greenend.org.uk/~sgtatham/putty/
     SFMT
       http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index-jp.html
     CygTerm
       https://googledrive.com/host/0B1s-dM6d6yC4fmhEZ3c0VTNFWEFtV3daUlRGQmFHVnBmVHRybUNnUVliNWktNDRlZ2NnZTQ/index.html

  2. ドキュメントを確認する。
     - ダイアログ上の設定項目・UIのない特別オプション・コマンドラインパラメータ・新規マクロコマンドなど、対応するドキュメントに漏れがないか確認する。
     - 変更履歴の書き忘れを確認する。
       おおむね変更した順に追記される変更履歴の順番を変更する。だいたいの指針としては、ターミナルエミュレーション関係・アプリケーションとしての変更・マクロの順。
     - ドキュメント差分が翻訳されていることを確認する。

  3. バージョンを上げ、日付を変更する。
     - teraterm.iss
       AppVer から RC を削除
     - html/about/hisotry.html

     CygTerm+ は例外で、リリースとは関係なくバージョンが上がる。
     パッチがコミットされると即リリース扱いになり、リリース日はその日付となる。
     これは、バージョンの末尾が patchlevel であり、コンパイラの入手が容易なため。

  4. 前回のリリースからCygTerm+に変更がある場合は、64bit Cygwinでビルドして cygterm\cygterm+-x86_64\cygterm.exe の差し替えを行う。
  
  5. 動作確認をする
     - インストーラを作成する。
       ISTool で teraterm\installer\teraterm.iss を開き、[Project]-[Compile Setup]で作成される。
     - インストールおよび実行をテストする。

  6. SVN のタグを作成する。
     タグ名は「teraterm-バージョン」。たとえば、v4.82ならば"teraterm-4_82"。
     svn copy -m "Release 4.82" svn+ssh://svn.osdn.net/svnroot/ttssh2/trunk svn+ssh://svn.osdn.net/svnroot/ttssh2/tags/teraterm-4_82

  7. リリース用のタグでチェックアウトし直す。

  8. インストーラを作成する。
     - teraterm\installer\teraterm.iss を編集する
       #define AppVer "4.???"
       ;#define snapshot GetDateTimeString('yyyymmdd_hhnnss', '', '');
       
       [InnoIDE_PreCompile]
       Name: makechm.bat
       ;Name: build.bat
       Name: build.bat; Parameters: rebuild

       [InnoIDE_PostCompile]
       Name: makearchive.bat; Parameters: release

       [PreCompile]
       Name: makechm.bat
       ;Name: build.bat
       Name: build.bat; Parameters: rebuild

       [PostCompile]
       Name: makearchive.bat; Parameters: release

       [_ISToolPreCompile]
       Name: makechm.bat
       ;Name: build.bat
       Name: build.bat; Parameters: rebuild

       [_ISToolPostCompile]
       Name: makearchive.bat; Parameters: release   
       
  
     - ISTool で teraterm\installer\teraterm.iss を開き、[Project]-[Compile Setup]で作成される

  9. OSDN を更新する。
     - [ダウンロード]-[管理]-[新規作成]
         変更履歴を入力してリリースを作成する。
     - [ニュース一覧]-[新規登録]
         ニュース記事を作成する。

  10. メーリングリストにアナウンスする。

  11. プロジェクトページを更新する。

  12. スナップショットを削除する。

  13. フォーラムに告知する。
      - Announcements http://logmett.com/support-forums/5
        Announcements に新規投稿する。種類は Announcement。
        一つ前の Announcement の種類を Normal に変更する。
        Announcement は三個残すことになっているので、三つ前の Announcement を削除する。

  14. Twitter に告知する。
      https://twitter.com/Tera_Term
      リリース告知をツイートして固定する。

  15. Chocolatey の登録を更新
