Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 155 additions & 8 deletions src/RisohEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7808,13 +7808,62 @@ BOOL InitLangListBox(HWND hwnd)
return TRUE;
}

BOOL MMainWnd::DoLoadRC(HWND hwnd, LPCWSTR szPath)
// Helper function to get header file path from TEXTINCLUDE 1 data
static MStringW GetTextInclude1HeaderFile(const EntrySet& res, LPCWSTR szRCPath)
{
// reload the resource.h if necessary
UnloadResourceH(hwnd);
if (g_settings.bAutoLoadNearbyResH)
CheckResourceH(hwnd, szPath);
// Find TEXTINCLUDE 1 entry
auto p_textinclude1 = res.find(ET_LANG, L"TEXTINCLUDE", WORD(1));
if (!p_textinclude1 || p_textinclude1->m_data.empty())
return L"";

// Extract the header file name from the data
std::string data(p_textinclude1->m_data.begin(), p_textinclude1->m_data.end());

// Remove trailing NUL characters
while (!data.empty() && data.back() == '\0')
data.pop_back();

// Remove surrounding quotes if present
if (data.size() >= 2 && data.front() == '"' && data.back() == '"')
{
data = data.substr(1, data.size() - 2);
}

// If empty or contains write protect marker, return empty
// Note: "< " prefix indicates the file is read-only (e.g., "< resource.h\0")
// This is a Visual C++ convention for write-protecting RC files
if (data.empty() || data.find("< ") != std::string::npos)
return L"";

// Convert to wide string
MAnsiToWide a2w(CP_UTF8, data.c_str());
MStringW strHeaderFile = a2w.c_str();

// If it's an absolute path, use it directly
if (PathIsRelativeW(strHeaderFile.c_str()) == FALSE)
{
if (PathFileExistsW(strHeaderFile.c_str()))
return strHeaderFile;
return L"";
}

// Build full path relative to RC file directory
WCHAR szDir[MAX_PATH];
StringCchCopyW(szDir, _countof(szDir), szRCPath);
PathRemoveFileSpecW(szDir);

WCHAR szFullPath[MAX_PATH];
PathCombineW(szFullPath, szDir, strHeaderFile.c_str());

// Check if the file exists
if (PathFileExistsW(szFullPath))
return szFullPath;

return L"";
}

BOOL MMainWnd::DoLoadRC(HWND hwnd, LPCWSTR szPath)
{
// load the RC file to the res1 variable
EntrySet res1;
if (!DoLoadRCEx(hwnd, szPath, res1, FALSE))
Expand Down Expand Up @@ -7902,6 +7951,28 @@ BOOL MMainWnd::DoLoadRC(HWND hwnd, LPCWSTR szPath)
entry->m_lang = 0;
}

// Load resource.h based on TEXTINCLUDE 1
// Issue #301: Support TEXTINCLUDE 1
// TN035: TEXTINCLUDE 1 contains the resource symbol header file name
UnloadResourceH(hwnd);
if (g_settings.bAutoLoadNearbyResH)
{
// First, try to load the header file specified in TEXTINCLUDE 1
// Prefer res2 (loaded with APSTUDIO_INVOKED) as it contains TEXTINCLUDE resources
// Fall back to res1 if res2 is empty (e.g., when APSTUDIO_INVOKED loading failed)
MStringW strHeaderFile = GetTextInclude1HeaderFile(!res2.empty() ? res2 : res1, szPath);
if (!strHeaderFile.empty())
{
// Load the header file from TEXTINCLUDE 1 value
DoLoadResH(hwnd, strHeaderFile.c_str());
}
else
{
// Fall back to searching for resource.h in standard locations
CheckResourceH(hwnd, szPath);
}
}

// TEXTINCLUDE 3 を取り込んだら、TEXTINCLUDE 3 をリセット。
if (include_textinclude3_flag == INCLUDE_TEXTINCLUDE3_YES)
{
Expand Down Expand Up @@ -8781,7 +8852,10 @@ BOOL MMainWnd::DoWriteRC(LPCWSTR pszFileName, LPCWSTR pszResH, const EntrySet& f
EntrySet textinclude;
textinclude.add_default_TEXTINCLUDE();

p_textinclude1 = textinclude.find(ET_LANG, L"TEXTINCLUDE", WORD(1));
// Issue #301: Use TEXTINCLUDE 1 from the resource if available
p_textinclude1 = found.find(ET_LANG, L"TEXTINCLUDE", WORD(1));
if (!p_textinclude1)
p_textinclude1 = textinclude.find(ET_LANG, L"TEXTINCLUDE", WORD(1));

auto p_textinclude2 = found.find(ET_LANG, L"TEXTINCLUDE", WORD(2));
if (!p_textinclude2)
Expand All @@ -8791,6 +8865,57 @@ BOOL MMainWnd::DoWriteRC(LPCWSTR pszFileName, LPCWSTR pszResH, const EntrySet& f
if (!p_textinclude3)
p_textinclude3 = textinclude.find(ET_LANG, L"TEXTINCLUDE", WORD(3));

// Get header file name from TEXTINCLUDE 1
std::string textinclude1_a;
if (p_textinclude1)
textinclude1_a = p_textinclude1->to_string();
// Remove trailing NUL characters
while (!textinclude1_a.empty() && textinclude1_a.back() == '\0')
textinclude1_a.pop_back();
MAnsiToWide textinclude1_w(CP_UTF8, textinclude1_a.c_str());

// Issue #301: Check if custom header file exists at destination, offer to copy if not
// Note: "< " prefix indicates a write-protected/read-only file (Visual C++ convention)
// We skip these as they are typically system headers that shouldn't be copied
if (!textinclude1_a.empty() && textinclude1_a != "resource.h" &&
textinclude1_a.find("< ") == std::string::npos)
{
// Build destination path for header file
WCHAR szDestDir[MAX_PATH];
StringCchCopyW(szDestDir, _countof(szDestDir), pszFileName);
PathRemoveFileSpecW(szDestDir);

WCHAR szDestHeaderPath[MAX_PATH];
PathCombineW(szDestHeaderPath, szDestDir, textinclude1_w.c_str());

// Check if destination header file exists
if (!PathFileExistsW(szDestHeaderPath))
{
// Try to find source header file from original RC file location
WCHAR szSrcDir[MAX_PATH];
StringCchCopyW(szSrcDir, _countof(szSrcDir), m_szFile);
PathRemoveFileSpecW(szSrcDir);

WCHAR szSrcHeaderPath[MAX_PATH];
PathCombineW(szSrcHeaderPath, szSrcDir, textinclude1_w.c_str());

// If source header exists but destination doesn't, ask to copy
if (PathFileExistsW(szSrcHeaderPath))
{
WCHAR szMsg[MAX_PATH * 2];
StringCchPrintfW(szMsg, _countof(szMsg), LoadStringDx(IDS_COPYHEADERFILE), textinclude1_w.c_str());
if (MsgBoxDx(szMsg, MB_ICONQUESTION | MB_YESNO) == IDYES)
{
if (!CopyFileW(szSrcHeaderPath, szDestHeaderPath, FALSE))
{
// Copy failed, show error to user
ErrorBoxDx(IDS_CANNOTSAVE);
}
}
}
}
}

std::string textinclude2_a;
if (p_textinclude2)
textinclude2_a = p_textinclude2->to_string();
Expand All @@ -8817,9 +8942,20 @@ BOOL MMainWnd::DoWriteRC(LPCWSTR pszFileName, LPCWSTR pszResH, const EntrySet& f
file.WriteSzW(L"\r\n");
}

// Issue #301: Use header file name from TEXTINCLUDE 1
if (pszResH && pszResH[0])
{
file.WriteSzW(L"#include \"resource.h\"\r\n");
if (!textinclude1_a.empty())
{
// Use header file name from TEXTINCLUDE 1
file.WriteSzW(L"#include \"");
file.WriteSzW(textinclude1_w.c_str());
file.WriteSzW(L"\"\r\n");
}
else
{
file.WriteSzW(L"#include \"resource.h\"\r\n");
}
}

if (g_settings.bRedundantComments)
Expand Down Expand Up @@ -8865,9 +9001,20 @@ BOOL MMainWnd::DoWriteRC(LPCWSTR pszFileName, LPCWSTR pszResH, const EntrySet& f
file.WriteSzA("\r\n");
}

// Issue #301: Use header file name from TEXTINCLUDE 1
if (pszResH && pszResH[0])
{
file.WriteSzA("#include \"resource.h\"\r\n");
if (!textinclude1_a.empty())
{
// Use header file name from TEXTINCLUDE 1
file.WriteSzA("#include \"");
file.WriteSzA(textinclude1_a.c_str());
file.WriteSzA("\"\r\n");
}
else
{
file.WriteSzA("#include \"resource.h\"\r\n");
}
}

if (g_settings.bRedundantComments)
Expand Down
1 change: 1 addition & 0 deletions src/lang/de_DE.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1645,6 +1645,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// Generiert aus TEXTINCLUDE %u\r\n"
IDS_TEXTINCLUDEREADONLY, "Diese Datei ist durch TEXTINCLUDE 1 schreibgeschützt.\r\n\r\nMöchten Sie trotzdem in die Datei schreiben?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 enthält Ressourcenelemente, die nicht bearbeitet werden können.\r\n\r\nMöchten Sie die Elemente in TEXTINCLUDE 3 als bearbeitbare Elemente einschließen und TEXTINCLUDE 3 zurücksetzen?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/en_US.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1646,6 +1646,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// Generated from TEXTINCLUDE %u\r\n"
IDS_TEXTINCLUDEREADONLY, "This file is write protected by TEXTINCLUDE 1.\r\n\r\nDo you still want to write to the file?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 contains resource items that cannot be edited.\r\n\r\nDo you want to include the items in TEXTINCLUDE 3 as editable items and reset TEXTINCLUDE 3?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/es_ES.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1648,6 +1648,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// Generado a partir de TEXTINCLUDE %u\r\n"
IDS_TEXTINCLUDEREADONLY, "Este archivo está protegido contra escritura mediante TEXTINCLUDE 1.\r\n\r\n¿Aún desea escribir en el archivo?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 contiene elementos de recursos que no se pueden editar.\r\n\r\n¿Desea incluir los elementos en TEXTINCLUDE 3 como elementos editables y restablecer TEXTINCLUDE 3?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/fi_FI.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1645,6 +1645,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// Luotu tekstistä TEXTINCLUDE %u\r\n"
IDS_TEXTINCLUDEREADONLY, "Tämä tiedosto on kirjoitussuojattu tekstillä TEXTINCLUDE 1.\r\n\r\nHaluatko silti kirjoittaa tiedostoon?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 sisältää resurssikohteita, joita ei voi muokata.\r\n\r\nHaluatko sisällyttää TEXTINCLUDE 3:n kohteet muokattaviksi kohteiksi ja nollata TEXTINCLUDE 3:n?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/fr_FR.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1645,6 +1645,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// Généré à partir de TEXTINCLUDE %u\r\n"
IDS_TEXTINCLUDEREADONLY, "Ce fichier est protégé en écriture par TEXTINCLUDE 1.\r\n\r\nVoulez-vous toujours écrire dans le fichier ?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 contient des éléments de ressources qui ne peuvent pas être modifiés.\r\n\r\nVoulez-vous inclure les éléments dans TEXTINCLUDE 3 en tant qu'éléments modifiables et réinitialiser TEXTINCLUDE 3 ?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/id_ID.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1648,6 +1648,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// Dihasilkan dari TEXTINCLUDE %u\r\n"
IDS_TEXTINCLUDEREADONLY, "Berkas ini dilindungi dari penulisan oleh TEXTINCLUDE 1.\r\n\r\nApakah Anda masih ingin menulis ke berkas ini?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 berisi item sumber daya yang tidak dapat diedit.\r\n\r\nApakah Anda ingin menyertakan item dalam TEXTINCLUDE 3 sebagai item yang dapat diedit dan mengatur ulang TEXTINCLUDE 3?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/it_IT.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1646,6 +1646,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// Generato da TEXTINCLUDE %u\r\n"
IDS_TEXTINCLUDEREADONLY, "Questo file è protetto da scrittura da TEXTINCLUDE 1.\r\n\r\nVuoi ancora scrivere nel file?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 contiene elementi risorse che non possono essere modificati.\r\n\r\nVuoi includere gli elementi in TEXTINCLUDE 3 come elementi modificabili e reimpostare TEXTINCLUDE 3?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/ja_JP.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1649,6 +1649,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// Generated from TEXTINCLUDE %u\r\n"
IDS_TEXTINCLUDEREADONLY, "このファイルは TEXTINCLUDE 1 により書き込み禁止になっています。\r\n\r\nそれでもファイルに書き込みますか?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 に編集できないリソース項目が含まれています。TEXTINCLUDE 3 の項目を編集可能な項目として取り込んで TEXTINCLUDE 3 をリセットしますか?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/ko_KR.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1648,6 +1648,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// TEXTINCLUDE %u 에서 생성됨\r\n"
IDS_TEXTINCLUDEREADONLY, "이 파일은 TEXTINCLUDE 1 로 쓰기 보호되어 있습니다.\r\n\r\n그래도 파일에 쓰시겠습니까?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3에는 편집할 수 없는 리소스 항목이 포함되어 있습니다.\r\n\r\nTEXTINCLUDE 3의 항목을 편집 가능한 항목으로 포함하고 TEXTINCLUDE 3을 재설정하시겠습니까?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/pl_PL.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1645,6 +1645,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// Wygenerowano z TEXTINCLUDE %u\r\n"
IDS_TEXTINCLUDEREADONLY, "Ten plik jest chroniony przed zapisem za pomocą TEXTINCLUDE 1.\r\n\r\nCzy nadal chcesz zapisać coś w pliku?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 zawiera elementy zasobów, których nie można edytować.\r\n\r\nCzy chcesz uwzględnić elementy w TEXTINCLUDE 3 jako elementy edytowalne i zresetować TEXTINCLUDE 3?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/pt_BR.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1648,6 +1648,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// Gerado a partir de TEXTINCLUDE %u\r\n"
IDS_TEXTINCLUDEREADONLY, "Este ficheiro está protegido contra a escrita pelo TEXTINCLUDE 1. \r\n\r\nAinda pretende escrever no ficheiro?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 contém itens de recursos que não podem ser editados.\r\n\r\nVocê deseja incluir os itens no TEXTINCLUDE 3 como itens editáveis ​​e redefinir o TEXTINCLUDE 3?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/ru_RU.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1645,6 +1645,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// Сгенерировано из TEXTINCLUDE %u\r\n"
IDS_TEXTINCLUDEREADONLY, "Этот файл защищен от записи TEXTINCLUDE 1.\r\n\r\nВы все еще хотите записать в файл?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 содержит элементы ресурсов, которые нельзя редактировать.\r\n\r\nХотите включить элементы в TEXTINCLUDE 3 как редактируемые элементы и сбросить TEXTINCLUDE 3?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/tr_TR.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1645,6 +1645,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// TEXTINCLUDE %u'dan oluşturuldu\r\n"
IDS_TEXTINCLUDEREADONLY, "Bu dosya TEXTINCLUDE 1 tarafından yazmaya karşı korumalıdır.\r\n\r\nDosyaya hala yazmak istiyor musunuz?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 düzenlenemeyen kaynak öğeleri içeriyor.\r\n\r\nTEXTINCLUDE 3'teki öğeleri düzenlenebilir öğeler olarak eklemek ve TEXTINCLUDE 3'ü sıfırlamak istiyor musunuz?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/zh_CN.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1644,6 +1644,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// 从 TEXTINCLUDE %u 生成\r\n"
IDS_TEXTINCLUDEREADONLY, "该文件受 TEXTINCLUDE 1 写保护。\r\n\r\n您仍要写入该文件吗?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 包含无法编辑的资源项。\r\n\r\n是否要将 TEXTINCLUDE 3 中的项包含为可编辑项并重置 TEXTINCLUDE 3?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/lang/zh_TW.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1643,6 +1643,7 @@ STRINGTABLE
IDS_GENERATEDFROMTEXTINCLUDE, "// 從 TEXTINCLUDE %u 生成\r\n"
IDS_TEXTINCLUDEREADONLY, "該文件受 TEXTINCLUDE 1 寫入保護。 \r\n\r\n您仍要寫入該檔案嗎?"
IDS_INCLUDETEXTINCLUDE3, "TEXTINCLUDE 3 包含無法編輯的資源項。 \r\n\r\n是否要將 TEXTINCLUDE 3 中的項包含為可編輯項並重設 TEXTINCLUDE 3?"
IDS_COPYHEADERFILE, "The header file '%s' does not exist at the destination.\r\n\r\nDo you want to copy it?"
}

//////////////////////////////////////////////////////////////////////////////
1 change: 1 addition & 0 deletions src/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,7 @@
#define IDS_GENERATEDFROMTEXTINCLUDE 351
#define IDS_TEXTINCLUDEREADONLY 352
#define IDS_INCLUDETEXTINCLUDE3 353
#define IDS_COPYHEADERFILE 354

#define ID_NEW 100
#define ID_OPEN 101
Expand Down
1 change: 1 addition & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ add_subdirectory(cmdline)
add_subdirectory(ResTest)
add_subdirectory(ResTest2)
add_subdirectory(ToolbarTest)
add_subdirectory(TextInclude1Test)
6 changes: 6 additions & 0 deletions tests/TextInclude1Test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
add_executable(TextInclude1Test WIN32 TextInclude1Test.cpp TextInclude1Test_res.rc)
target_link_libraries(TextInclude1Test comctl32)

# do statically link
set_target_properties(TextInclude1Test PROPERTIES LINK_SEARCH_START_STATIC 1)
set_target_properties(TextInclude1Test PROPERTIES LINK_SEARCH_END_STATIC 1)
Loading