diff --git a/CMakeLists.txt b/CMakeLists.txt index 87f8feec..7ec059bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ include(MiscUtils) # Compilation options option(BUILD_SHARED_LIBS "Build shared library, disable for building the static library (default: ON)" ON) +option(LIBLCF_WITH_INI "INI parsing support (inih, required when building EasyRPG Player, default: ON)" ON) option(LIBLCF_WITH_ICU "ICU encoding handling (when disabled only windows-1252 is supported, default: ON)" ON) option(LIBLCF_WITH_XML "XML reading support (expat, default: ON)" ON) option(LIBLCF_UPDATE_MIMEDB "Whether to run update-mime-database after install (default: ON)" ON) @@ -30,7 +31,6 @@ set(LCF_SOURCES src/dbarray.cpp src/dbstring_struct.cpp src/encoder.cpp - src/inireader.cpp src/ldb_equipment.cpp src/ldb_eventcommand.cpp src/ldb_parameters.cpp @@ -202,7 +202,6 @@ set(LCF_HEADERS src/lcf/encoder.h src/lcf/enum_tags.h src/lcf/flag_set.h - src/lcf/inireader.h src/lcf/ldb/reader.h src/lcf/lmt/reader.h src/lcf/lmu/reader.h @@ -294,6 +293,17 @@ set(LCF_HEADERS src/lcf/third_party/string_view.h ) +set(LCF_SUPPORT_INI 0) +if(LIBLCF_WITH_INI) + list(APPEND LCF_SOURCES + src/inireader.cpp + ) + list(APPEND LCF_HEADERS + src/lcf/inireader.h + ) + set(LCF_SUPPORT_INI 1) +endif() + add_library(lcf ${LCF_SOURCES} ${LCF_HEADERS}) # IDE source grouping @@ -344,8 +354,12 @@ set_property(TARGET lcf PROPERTY WINDOWS_EXPORT_ALL_SYMBOLS ON) set_property(TARGET lcf PROPERTY EXPORT_NAME liblcf) # inih -find_package(inih REQUIRED) -target_link_libraries(lcf inih::inih) +if (LCF_SUPPORT_INI) + find_package(inih REQUIRED) + target_link_libraries(lcf inih::inih) +else() + message(STATUS "inih is disabled. This component is required when building EasyRPG Player.") +endif () # icu set(LCF_SUPPORT_ICU 0) diff --git a/Makefile.am b/Makefile.am index 6d74635c..7f0d4953 100644 --- a/Makefile.am +++ b/Makefile.am @@ -48,7 +48,6 @@ liblcf_la_SOURCES = \ src/dbarray.cpp \ src/dbstring_struct.cpp \ src/encoder.cpp \ - src/inireader.cpp \ src/ldb_equipment.cpp \ src/ldb_eventcommand.cpp \ src/ldb_parameters.cpp \ @@ -219,7 +218,6 @@ lcfinclude_HEADERS = \ src/lcf/encoder.h \ src/lcf/enum_tags.h \ src/lcf/flag_set.h \ - src/lcf/inireader.h \ src/lcf/log_handler.h \ src/lcf/reader_lcf.h \ src/lcf/reader_util.h \ @@ -231,6 +229,11 @@ lcfinclude_HEADERS = \ src/lcf/writer_lcf.h \ src/lcf/writer_xml.h +if SUPPORT_INI +liblcf_la_SOURCES += src/inireader.cpp +lcfinclude_HEADERS += src/lcf/inireader.h +endif + lcfldbinclude_HEADERS = \ src/lcf/ldb/reader.h \ src/generated/lcf/ldb/chunks.h diff --git a/README.md b/README.md index bc035968..5cba66b7 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,9 @@ Documentation is available at the documentation wiki: https://wiki.easyrpg.org ## Requirements -- [inih] for INI file reading. (required) +- [inih] for INI file reading. (required when building EasyRPG Player) - [Expat] for XML reading support. -- [ICU] for character encoding detection and conversion (recommended). +- [ICU] for character encoding detection and conversion (recommended). When disabled only Windows-1252 is supported. ## Source code diff --git a/builds/cmake/liblcf-config.cmake.in b/builds/cmake/liblcf-config.cmake.in index 729f0173..00c55759 100644 --- a/builds/cmake/liblcf-config.cmake.in +++ b/builds/cmake/liblcf-config.cmake.in @@ -5,7 +5,9 @@ include(CMakeFindDependencyMacro) # Required to find our installed Findinih.cmake list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") -find_dependency(inih REQUIRED) +if(@LCF_SUPPORT_INI@) + find_dependency(inih REQUIRED) +endif() if(@LCF_SUPPORT_ICU@ EQUAL 1) find_dependency(ICU COMPONENTS i18n uc data REQUIRED) diff --git a/builds/config.h.in b/builds/config.h.in index d3cedbb6..b8b6bcb9 100644 --- a/builds/config.h.in +++ b/builds/config.h.in @@ -5,3 +5,6 @@ /* Enable XML reading support (expat) */ #define LCF_SUPPORT_XML @LCF_SUPPORT_XML@ + +/* Enable INI reading support (INIH) */ +#define LCF_SUPPORT_INI @LCF_SUPPORT_INI@ diff --git a/configure.ac b/configure.ac index ed25ed4b..b5f87cc6 100644 --- a/configure.ac +++ b/configure.ac @@ -21,8 +21,6 @@ LT_INIT([win32-dll]) AM_CONDITIONAL(CROSS_COMPILING,[test "x$cross_compiling" = "xyes"]) # Checks for libraries. -AX_PKG_CHECK_MODULES([INIH],[],[inih],[]) - AC_SUBST([LCF_SUPPORT_ICU],[0]) AC_ARG_ENABLE([icu],[AS_HELP_STRING([--disable-icu],[Disable ICU encoding handling (only windows-1252 supported) [default=no]])]) AS_IF([test "x$enable_icu" != "xno"],[ @@ -36,6 +34,13 @@ AS_IF([test "x$enable_xml" != "xno"],[ ]) AM_CONDITIONAL(SUPPORT_XML,[test $LCF_SUPPORT_XML == 1]) +AC_SUBST([LCF_SUPPORT_INI],[0]) +AC_ARG_ENABLE([ini],[AS_HELP_STRING([--disable-ini],[Disable INI reading support (inih) [default=no]])]) +AS_IF([test "x$enable_ini" != "xno"],[ + AX_PKG_CHECK_MODULES([INIH],[],[inih],[LCF_SUPPORT_INI=1]) +]) +AM_CONDITIONAL(SUPPORT_INI,[test $LCF_SUPPORT_INI == 1]) + # Tools AC_ARG_ENABLE([tools],[AS_HELP_STRING([--disable-tools],[Do not build and install the tools [default=no]])]) AM_CONDITIONAL(ENABLE_TOOLS,[test "x$enable_tools" != "xno"]) diff --git a/src/reader_util.cpp b/src/reader_util.cpp index a1ce23d0..8718d22c 100644 --- a/src/reader_util.cpp +++ b/src/reader_util.cpp @@ -207,6 +207,7 @@ std::vector ReaderUtil::DetectEncodings(StringView string) { } std::string ReaderUtil::GetEncoding(StringView ini_file) { +#if LCF_SUPPORT_INI INIReader ini(ToString(ini_file)); if (ini.ParseError() != -1) { std::string encoding = ini.Get("EasyRPG", "Encoding", std::string()); @@ -214,10 +215,14 @@ std::string ReaderUtil::GetEncoding(StringView ini_file) { return ReaderUtil::CodepageToEncoding(atoi(encoding.c_str())); } } +#else + Log::Warning("Could not get encoding from ini file, disabled in this liblcf build."); +#endif return {}; } std::string ReaderUtil::GetEncoding(std::istream& filestream) { +#if LCF_SUPPORT_INI INIReader ini(filestream); if (ini.ParseError() != -1) { std::string encoding = ini.Get("EasyRPG", "Encoding", std::string()); @@ -225,6 +230,9 @@ std::string ReaderUtil::GetEncoding(std::istream& filestream) { return ReaderUtil::CodepageToEncoding(atoi(encoding.c_str())); } } +#else + Log::Warning("Could not get encoding from ini file, disabled in this liblcf build."); +#endif return {}; } diff --git a/tools/lcf2xml.cpp b/tools/lcf2xml.cpp index af798de2..e3caf091 100644 --- a/tools/lcf2xml.cpp +++ b/tools/lcf2xml.cpp @@ -60,7 +60,7 @@ int main(int argc, char** argv) std::cerr << "Usage: " << argv[0] << "[--2k] [--2k3] file1 [... fileN]" << std::endl; std::cerr << "\t--2k: Treat files as RPG 2000" << std::endl; std::cerr << "\t--2k3: Treat files as RPG 2003 (default)" << std::endl; - std::cerr << "\t--encoding N: Use encoding N as the file encoding" << std::endl; + std::cerr << "\t--encoding N: Use encoding N as the file encoding" << std::endl; return 1; }