-
Notifications
You must be signed in to change notification settings - Fork 165
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MinGWでサクラエディタをビルドできるようにメイクファイルを更新する #351
MinGWでサクラエディタをビルドできるようにメイクファイルを更新する #351
Conversation
追記 コミットリストに kobake さんのコミットが含まれている理由は、 |
sakura_core/util/string_ex.cpp
Outdated
@@ -222,7 +222,9 @@ const char* stristr_j( const char* s1, const char* s2 ) | |||
// 互換 // | |||
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // | |||
|
|||
#if (defined(_MSC_VER) && _MSC_VER<1400) || defined(__MINGW32__) //VS2005より前なら | |||
#if (defined(_MSC_VER) && _MSC_VER<1400) //VS2005より前なら | |||
|| (defined(__MINGW32__) && defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
\
での行継続が必要ですね。
あと、MinGWの判定合ってますか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
レビューありがとうございます。
\ での行継続が必要ですね。
ビルドが通ったのは _MSC_VER が定義されていなかったからですね。
あと、MinGWの判定合ってますか?
MinGW側の判定はたぶん合ってると思います。
定義するときは -DMINGW_HAS_SECURE_API=1
としますが、
0とされたときに正しく動くようにする意図です。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sec_api/tchar_s.h などを見ると、#ifdef で判定しています。
そして、MinGW自身がセキュア系関数を持っているはずです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
デバッグできるようにするために設定をいじっていてMinGWの判定式の誤りに気付きました。
#if (defined(_MSC_VER) && _MSC_VER<1400) \
|| (defined(__MINGW32__) && (!defined(MINGW_HAS_SECURE_API) || MINGW_HAS_SECURE_API != 1)) //VS2005より前なら
「MINGW_HAS_SECURE_API
が未定義または1以外」が正しい条件でした。
すでにマージ済みなので別PRを投げます。
「本来あるべき」を考えると、これは「サポートしないビルド環境」を示す条件なので 「#if
ごと削除が妥当」と思っています。./configure
やautomake
に相当するもの(cmake)が準備できるまでの暫定処置と考えています。
sakura_core/util/string_ex.h
Outdated
@@ -144,7 +144,8 @@ int my_strnicmp( const char *s1, const char *s2, size_t n ); | |||
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // | |||
|
|||
// VS2005以降の安全版文字列関数 | |||
#if (defined(_MSC_VER) && _MSC_VER<1400) || defined(__MINGW32__) //VS2005より前なら | |||
#if (defined(_MSC_VER) && _MSC_VER<1400) //VS2005より前なら | |||
|| (defined(__MINGW32__) && defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
上と同様。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
上と同様、修正します。
sakura_core/StdAfx.h
Outdated
# include <sec_api/tchar_s.h> | ||
# include <sec_api/wchar_s.h> | ||
# include <sec_api/string_s.h> | ||
# include <sec_api/stdio_s.h> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
これらのヘッダーファイルは tchar.h などから自動的にインクルードされるものであって、明示的にインクルードするものではないのではないと思います。VCにもあるファイルをインクルードしておけば #ifdef を使わずともVCと同じようにコンパイルできるはずですし。
_mingw.h も普通は windows.h をインクルードしておけばよいと思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
自動インクルードされてくれる自身がなかったので明示的に書きました。
外してみてビルド通りそうなら外してしまおうと思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#ifdef __MINGW32___
のブロックごと外してビルドできましたので外してしまいました。
swprintf_s関数が見つからないという以下エラーの対応 io/CFileLoad.cpp:93:52: error: 'swprintf_s' was not declared in this scope swprintf_s(buf, _countof(buf), L"%I64u", megabytes);
…られる記述を訂正する rvalueの非const参照を宣言してはならないという以下エラーの対応 macro/CMacroFactory.cpp:92:37: error: invalid initialization of non-const reference of type 'std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>&' from an rvalue of type 'std::__cxx11::list<CMacroManagerBase* (*)(const wchar_t*)>::iterator {aka std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>}' auto& c_it = m_mMacroCreators.begin();
sakura-editor#303 CNativeA/CNativeW に対する AppendString のフォーマット書式対応版メソッドを準備 以下2ファイルのコンパイルエラーの対応 mingw32-make mem/CNativeW.o mingw32-make mem/CNativeA.o
古いMinGWのWindowsSDKに含まれていないCOMのIDを独自に定義している。 GNU 6.2.0には既に取り込まれているので、定義があるとビルドエラーになる。
8b9e422
to
8789964
Compare
レビューをおねがいします。 |
sprintf_s(cbuf, _countof(cbuf), "AppendStringF error. errno = %d", e); | ||
throw std::exception(cbuf); | ||
DEBUG_TRACE(L"AppendStringF error. errno = %d", e); | ||
throw std::exception(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
これは visual studio での動作を変えてしまうのでは?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
目的はビルドできるようにすることなので、コードの目的を変えない範囲で変更しています。
変更前)エラー情報を例外に詰めて投げる・・・catchするコードがないのでそのまま落ちる
変更後)エラー情報をデバッガに出力しエラーを投げる・・・catchするコードがないのでそのまま落ちる
std::exceptionのコンストラクタがconstexprでない文字列を受け付けないのが原因なので、恒久対応としては専用の例外クラスを自作することになると思っています。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
チケットを作っておいてもらえますか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#356 作りました。
mingw32-make clean すると以下のエラーが出ました。
mingw32-make githash を実行した後にもう一度 mingw32-make githash すると以下のエラーが表示されます。
またビルド方法を markdown にまとめてほしいです。 |
libwinpthread-1.dll のパスが通っていないと起動できない点を記載する必要があると思います。 また sakura.exe は起動できましたが、テキストの編集画面は出ませんでした。 |
このPRの目的はビルドできるようにすることです。
ビルドできないことに対する対処なのでcleanには手を入れてません。
最後の行しか見ていませんでした。
あとでコミット追加します。準備できたら声かけますのでよろしくお願いします。 |
このPRのスコープ外と考えていました。
出ませんでした。 |
パス区切りがスラッシュになっていることが原因でした。 |
別にチケット作ってもいいですし、 |
直っているのは確認しましたが、贅沢をいうと
|
直っているのを確認しました。 |
sakura_core/Makefile
Outdated
@@ -433,7 +433,7 @@ Funccode_enum.h: $(HEADERMAKE) Funccode_x.hsrc | |||
$(HEADERMAKE) -in=../sakura_core/Funccode_x.hsrc -out=../sakura_core/Funccode_enum.h -mode=enum -enum=EFunctionCode | |||
|
|||
githash: | |||
cmd /c $(CURDIR)/../sakura/githash.bat ../sakura_core | |||
cmd /c $(CURDIR)/../sakura/githash.bat ..\\sakura_core |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
githash.bat の中で / を置換する方法でもいいと思います。
確認しました。 |
対応しました。 delコマンドが出しているメッセージでした。 |
確認しました。 これもスコープ外なのかもしれませんが、
|
必要だと思ったので対応しました。 |
確認しました。 |
…ingw_makefile MinGWでサクラエディタをビルドできるようにメイクファイルを更新する
目的
最近いれた修正の影響で、Makefileを使ったビルドができなくなっています。
とりあえず、ビルドできる状態に戻します。 Issue #349
確認方法
自分は pleiades 4.6 Neon の C++ Full 版を使いました。
自分の場合
D:\eclipse4.6
に解凍してるのでpath=D:\eclipse4.6\eclipse\mingw\bin;%path%
でした。cd sakura_core
←フォルダ移動mingw32-make githash stdafx sakura_rc.o
←並行ビルドできないものを先に済ませるmingw32-make -j4
←マルチスレッド実行を指定してビルド開始。-j4
の数字は最大プロセス数なので、CPUコアに応じて増減させます。sakura.exe
を起動していたら「全終了」で落としてください。.\sakura.exe
で MinGW 版のEXEが起動します。現状「起動できること」以上の確認はできません。そこ以降は今後の課題。