Skip to content

Commit

Permalink
[wip] printf 出力メッセージを英語に変更
Browse files Browse the repository at this point in the history
ついでにいくつかバグ修正
  • Loading branch information
kobake committed Jun 2, 2018
1 parent 8b67043 commit 9142f6d
Showing 1 changed file with 75 additions and 52 deletions.
127 changes: 75 additions & 52 deletions MakefileMake/MakefileMake.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*! @file
/*! @file
@author Project Sakura-Editor
@date 2013.04.03 Uchi 作成
@date 2013.04.03 Uchi 作成
*/
/*
Copyright (C) 2013, Uchi
Expand Down Expand Up @@ -29,16 +29,16 @@
*/

/*
++ 概要 ++
++ 概要 ++
MinGW用の makefile を自動生成するためのモノ
MinGW用の makefile を自動生成するためのモノ
makefile を自動生成する
其れなりに手抜きなんで漢字のファイル名とかには未対応
makefile を自動生成する
其れなりに手抜きなんで漢字のファイル名とかには未対応
++ 使用方法 ++
++ 使用方法 ++
usage() を参照
usage() を参照
*/

#ifdef __MINGW32__
Expand Down Expand Up @@ -69,13 +69,14 @@
#undef PREPROCESSOR
#define PREPROCESSOR "gcc -x c++ -finput-charset=cp932 -fexec-charset=cp932 -E %s"

void fopen_s(
int fopen_s(
FILE** pFile,
const char *filename,
const char *mode
)
{
*pFile = fopen(filename, mode);
return pFile != NULL ? 0 : 1;
}
#endif // __MINGW32__

Expand All @@ -95,10 +96,18 @@ void fopen_s(

int usage()
{
printf("MakefileMake -file=<makefile> -dir=<トップディレクトリ>\n");
printf("<makefile>内ののオブジェクトファイル名を");
printf("トップディレクトリ配下のcppファイル名を");
printf("オブジェクトファイル名にした物に書替えます。\n");
// MakefileMake -file=<makefile> -dir=<トップディレクトリ>\n
// <makefile>内ののオブジェクトファイル名を
// トップディレクトリ配下のcppファイル名を
// オブジェクトファイル名にした物に書替えます。\n

printf(
"Usage: MakefileMake -file=<Makefile> -dir=<TopDirectory>\n"
"\n"
"MakefileMake replaces .o file lines in the <Makefile> by .cpp file names in the <TopDirectory>.\n"
"\n"
"NOTICE: <Makefile> will be overwritten by MakefileMake."
);

return 1;
}
Expand All @@ -122,7 +131,7 @@ struct SExpList {
std::vector<std::string> file_list; // filename_list


// ファイルリストを作成する
// ファイルリストを作成する
int makeFileList(std::string top_dir, std::string dir, SExpList sexp)
{
std::string path;
Expand Down Expand Up @@ -163,7 +172,7 @@ int makeFileList(std::string top_dir, std::string dir, SExpList sexp)
std::string fl_nm;

fl_nm = ffData.cFileName;
fl_nm.resize(fl_nm.size() - strlen(sexp.exp)); // 拡張子削除
fl_nm.resize(fl_nm.size() - strlen(sexp.exp)); // 拡張子削除
if (dir != "") {
fl_nm = dir + "/" + fl_nm;
}
Expand All @@ -177,7 +186,7 @@ int makeFileList(std::string top_dir, std::string dir, SExpList sexp)
return 0;
}

// ファイルリストを作成する(top level)
// ファイルリストを作成する(top level)
int makeFileListTop(const char* top_dir)
{
int res;
Expand All @@ -190,8 +199,8 @@ int makeFileListTop(const char* top_dir)
}


// ファイルを一つずつ取り出す
// 最後はNULLを返す
// ファイルを一つずつ取り出す
// 最後はNULLを返す
const char* getFile()
{
static int pt;
Expand All @@ -208,18 +217,18 @@ const char* getFile()
}


// オブジェクト行1行作成
// オブジェクト行1行作成
const char* makeObjLine(char* mkline, size_t bf_sz, const char* fl_nm)
{
sprintf_s( mkline, bf_sz, "%s.o \\\n", fl_nm);
return mkline;
}


// main関数
// main関数
int main(int argc, char* argv[])
{
// 引数解釈
// 引数解釈
const char* makefile = NULL;
const char* top_dir = NULL;

Expand Down Expand Up @@ -252,62 +261,70 @@ int main(int argc, char* argv[])
}
}
else {
printf("Error: 不明な引数[%s]\n", argv[i]);
// Error: 不明な引数[%s]
printf("Error: Unknown argument[%s]\n", argv[i]);
return usage();
}
}
else {
printf("Error: 不明な引数[%s]\n", argv[i]);
// 不明な引数[%s]
printf("Error: Unknown argument[%s]\n", argv[i]);
return usage();
}
}
if (makefile == NULL && top_dir != NULL) { return usage(); }
if (!makefile) { printf("Error: makefileを指定してください\n\n"); return usage(); }
if (!top_dir) { printf("Error: トップディレクトリを指定してください\n\n"); return usage(); }
if (!makefile){ printf("Error: Specify <Makefile>\n\n"); return usage(); } // makefileを指定してください
if (!top_dir) { printf("Error: Specify <Top directory>\n\n"); return usage(); } // トップディレクトリを指定してください


// トップディレクトリのチェック
// トップディレクトリのチェック
struct stat st;
int ret = stat( top_dir, &st );
if (ret != 0 || !(st.st_mode & _S_IFDIR)) {
printf("Error: トップディレクトリ[%s]が見つかりません\n", top_dir);
// Error: トップディレクトリ[%s]が見つかりません
printf("Error: Failed to stat TopDirectory[%s].\n", top_dir);
return 1;
}

// ファイルオープン
// ファイルオープン
FILE* in = NULL;
if (fopen_s( &in, makefile, "rt" ) != 0) {
printf("Error: 出力ファイル[%s]を開けません\n", makefile);
if (fopen_s(&in, makefile, "rt") != 0) {
// Error: 出力ファイル[%s]を開けません
printf("Error: Failed to open Makefile[%s] with read mode.\n", makefile);
return 1;
}

// テンポラリファイルの作成
// テンポラリファイルの作成
char tmp_file[_MAX_PATH];
char drive[_MAX_DRIVE], dir[_MAX_DIR];
if (_splitpath_s( makefile, drive, _countof(drive), dir, _countof(dir), NULL, 0, NULL, 0 )) {
printf("Error: 一時ファイル名を作れません[%s]\n", makefile);
// Error: 一時ファイル名を作れません[%s]
printf("Error: Failed to generate temporary file path. [makefile:%s]\n", makefile);
return 1;
}
if (_makepath_s( tmp_file, _countof(tmp_file), drive, dir, "mfXXXXXX", NULL )) {
printf("Error: 一時ファイル名を作れません[%s, %s]\n", drive, dir);
// Error: 一時ファイル名を作れません[%s, %s]
printf("Error: Failed to generate temporary file path. [drive:%s, dir:%s]\n", drive, dir);
return 1;
}
if (_mktemp_s(tmp_file, _countof(tmp_file))) {
printf("Error: 一時ファイル名を作れません[%s]\n", tmp_file);
// Error: 一時ファイル名を作れません[%s]
printf("Error: Failed to generate temporary file path. [tmp_file:%s]\n", tmp_file);
return 1;
}
FILE* out = NULL;
if (fopen_s( &out, tmp_file, "wt" ) != 0) {
printf("Error: 一時ファイル[%s]を開けません\n", tmp_file);
if (fopen_s(&out, tmp_file, "wt") != 0) {
// Error: 一時ファイル[%s]を開けません
printf("Error: Failed to open Tmpfile[%s] with write mode.\n", tmp_file);
return 1;
}

// ファイルリストの作成
// ファイルリストの作成
makeFileListTop(top_dir);

// ファイルの書替え
int mode = 0; // 0:.obj前 1:.obj中 2:.obj後
bool change = false; // 変更あり
// ファイルの書替え
int mode = 0; // 0:.obj前 1:.obj中 2:.obj後
bool change = false; // 変更あり

char line[1024];
char mkline[1024];
Expand All @@ -324,13 +341,13 @@ int main(int argc, char* argv[])
break;
case 1:
if (line[0] == '\n' || line[0] == '\0') {
// リスト終了?
// リスト終了?
fl_nm = getFile();
if (fl_nm != NULL) {
// ファイルが増えた
// ファイルが増えた
change = true;
do {
//出力
//出力
fprintf(out, "%s", makeObjLine( mkline, _countof(mkline), fl_nm ) );
} while ((fl_nm = getFile()) != NULL);
}
Expand All @@ -339,12 +356,12 @@ int main(int argc, char* argv[])
else {
fl_nm = getFile();
if (fl_nm == NULL) {
// ファイルが減った
// ファイルが減った
change = true;
continue;
}
makeObjLine( mkline, _countof(mkline), fl_nm );
// 変更有りか?
// 変更有りか?
if (!change && strcmp(line, mkline) != 0)
change = true;
wtline = mkline;
Expand All @@ -353,33 +370,39 @@ int main(int argc, char* argv[])
case 2:
break;
}
//出力
//出力
fprintf(out,"%s", wtline);
}

// close
fclose(in);
fclose(out);
#ifdef _DEBUG
printf("%d個のオブジェクトファイル名が出力されました\n", file_list.size());
// %d個のオブジェクトファイル名が出力されました
printf("Wrote %d object file names.\n", file_list.size());
#endif

// ファイルの入換え
// ファイルの入換え
if (change) {
if (remove(makefile)) {
printf("Error: makefile[%s]を削除出来ません\n", tmp_file);
// Error: makefile[%s]を削除出来ません
printf("Error: Failed to remove Makefile[%s].\n", makefile);
return 1;
}
if (rename( tmp_file, makefile )) {
printf("Error: 一時ファイル[%s]をmakfile[%s]に出来ません\n", tmp_file, makefile);
// Error: 一時ファイル[%s]をmakfile[%s]に出来ません
printf("Error: Failed to rename Tmpfile[%s] to Makefile[%s].\n", tmp_file, makefile);
return 1;
}
}
else {
if (remove(tmp_file)) {
printf("Warning: 一時ファイル[%s]を削除出来ません\n", tmp_file);
// Warning: 一時ファイル[%s]を削除出来ません
printf("Warning: Failed to remove Tmpfile[%s].\n", tmp_file);
}
printf("出力ファイルは最新です\n");

// 出力ファイルは最新です
printf("Makefile needs no change.\n");
}

return 0;
Expand Down

0 comments on commit 9142f6d

Please sign in to comment.