feat(cmake): various updates

* recursive file including
* with xapian
* use iconv
* feature summary
This commit is contained in:
shenleban tongying 2023-04-18 00:43:15 -04:00 committed by xiaoyifang
parent 5c5db459b5
commit 747ebf3a82
5 changed files with 140 additions and 387 deletions

View file

@ -1,30 +1,18 @@
cmake_minimum_required(VERSION 3.23) cmake_minimum_required(VERSION 3.25) # ubuntu 23.04 Fedora 36
# Experimental Cmake build only supposed to be used by dev # Experimental Cmake build only supposed to be used by dev
# Qt6.4+ only # Qt6.4+ only
# LINUX, APPLE and MSVC are used to detect system
option(WITH_FFMPEG_PLAYER "Enable support for FFMPEG player" ON) option(WITH_FFMPEG_PLAYER "Enable support for FFMPEG player" ON)
option(WITH_EPWING_SUPPORT "Enable epwing support" ON) option(WITH_EPWING_SUPPORT "Enable epwing support" ON)
# Remove this once cmake 5.25 becomes minimum version option(WITH_XAPIAN "enable Xapian support" ON)
if(UNIX AND NOT APPLE)
set(LINUX TRUE)
endif()
if (APPLE) include(FeatureSummary)
if(WITH_EPWING_SUPPORT)
add_subdirectory(thirdparty/eb)
endif()
include_directories(/usr/local/include /opt/homebrew/include)
endif ()
project(goldendict project(goldendict
VERSION 22.11.20 VERSION 22.11.20
LANGUAGES CXX C) LANGUAGES CXX C)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON) set(CMAKE_AUTORCC ON)
@ -32,12 +20,18 @@ set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (APPLE)
if (WITH_EPWING_SUPPORT)
add_subdirectory(thirdparty/eb)
endif ()
include_directories(/usr/local/include /opt/homebrew/include)
endif ()
#### Importing Libraries #### Importing Libraries
find_package(Qt6 REQUIRED COMPONENTS find_package(Qt6 REQUIRED COMPONENTS
Concurrent Concurrent
Core5Compat Core5Compat
Help
LinguistTools LinguistTools
Multimedia Multimedia
WebEngineWidgets WebEngineWidgets
@ -47,6 +41,7 @@ find_package(Qt6 REQUIRED COMPONENTS
TextToSpeech TextToSpeech
) )
if (APPLE) if (APPLE)
find_library(CARBON_LIBRARY Carbon REQUIRED) find_library(CARBON_LIBRARY Carbon REQUIRED)
endif () endif ()
@ -55,10 +50,14 @@ if (UNIX)
# Provided by Cmake # Provided by Cmake
find_package(ZLIB REQUIRED) find_package(ZLIB REQUIRED)
find_package(BZip2 REQUIRED) find_package(BZip2 REQUIRED)
find_package(Iconv REQUIRED)
if (WITH_XAPIAN)
find_package(Xapian REQUIRED) # https://github.com/xapian/xapian/tree/master/xapian-core/cmake
endif ()
# PkgConfig only packages # PkgConfig only packages
find_package (PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules (PKGCONFIG_DEPS IMPORTED_TARGET pkg_check_modules(PKGCONFIG_DEPS IMPORTED_TARGET
hunspell hunspell
lzo2 lzo2
opencc opencc
@ -77,17 +76,17 @@ if (UNIX)
endif () endif ()
endif () endif ()
if(LINUX) if (LINUX)
find_package(X11 REQUIRED) find_package(X11 REQUIRED)
pkg_check_modules (LIBXTST IMPORTED_TARGET xtst) pkg_check_modules(LIBXTST IMPORTED_TARGET xtst)
if(WITH_EPWING_SUPPORT) if (WITH_EPWING_SUPPORT)
add_subdirectory(thirdparty/eb EXCLUDE_FROM_ALL) add_subdirectory(thirdparty/eb EXCLUDE_FROM_ALL)
endif() endif ()
# add_library(libeb SHARED IMPORTED) # add_library(libeb SHARED IMPORTED)
# set_target_properties(libeb PROPERTIES IMPORTED_LOCATION /usr/lib/libeb.so) # set_target_properties(libeb PROPERTIES IMPORTED_LOCATION /usr/lib/libeb.so)
# set_target_properties(libeb PROPERTIES INCLUDE_DIRECTORIES /usr/include/) # set_target_properties(libeb PROPERTIES INCLUDE_DIRECTORIES /usr/include/)
endif() endif ()
#### Compile time files and preprocessor flags #### Compile time files and preprocessor flags
@ -102,352 +101,44 @@ execute_process(
string(TIMESTAMP date_for_version_file) # note: this variable is cached for every run, but for user installation, this doesn't matter much string(TIMESTAMP date_for_version_file) # note: this variable is cached for every run, but for user installation, this doesn't matter much
configure_file(version.txt.in ${CMAKE_SOURCE_DIR}/version.txt) configure_file(version.txt.in ${CMAKE_SOURCE_DIR}/version.txt)
# hack -> this string will be compared with another string, thus having surrounding " "
add_compile_definitions(PROGRAM_VERSION="${PROJECT_VERSION}")
add_compile_definitions(CMAKE_USED_HACK) # temporal hack to avoid breaking qmake build
add_compile_definitions(
MAKE_ZIM_SUPPORT
MAKE_QTMULTIMEDIA_PLAYER
MAKE_CHINESE_CONVERSION_SUPPORT
)
if (WITH_FFMPEG_PLAYER)
add_compile_definitions(MAKE_FFMPEG_PLAYER)
endif ()
if(LINUX)
add_compile_definitions(HAVE_X11)
endif()
if(MSVC)
add_compile_definitions(NO_EPWING_SUPPORT
__WIN32)
endif()
#### Sources Files #### Sources Files
set(QRC_RESOURCES
flags.qrc
resources.qrc
scripts.qrc
src/stylesheets/css.qrc
)
# auto discovery of ui files https://cmake.org/cmake/help/v3.26/prop_tgt/AUTOUIC_SEARCH_PATHS.html # auto discovery of ui files https://cmake.org/cmake/help/v3.26/prop_tgt/AUTOUIC_SEARCH_PATHS.html
set(CMAKE_AUTOUIC_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/src/ui/") set(CMAKE_AUTOUIC_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/src/ui/")
if(WITH_EPWING_SUPPORT) # https://cmake.org/cmake/help/latest/command/file.html#filesystem
set(EPWING_SUPPORT_SRC # ! Using GLOB_RECURSE is not recommended by cmake's documentation
epwing.cc # CONFIGURE_DEPENDS will trigger file tree recheck in every rebuilds.
epwing.hh file(GLOB_RECURSE ALL_SOURCE_FILES CONFIGURE_DEPENDS src/*.cc src/*.hh src/*.c)
epwing_book.cc
epwing_book.hh
epwing_charmap.cc
epwing_charmap.hh
)
else()
add_compile_definitions(NO_EPWING_SUPPORT)
endif()
if (APPLE) if (APPLE)
set(MAC_SRC file(GLOB_RECURSE MACOS_SOURCE_FILES CONFIGURE_DEPENDS src/macos/*.mm)
machotkeywrapper.mm
macmouseover.hh
macmouseover.mm
src/platform/gd_clipboard.cpp
src/platform/gd_clipboard.h
)
endif () endif ()
set(QSINGLEAPP_SOURCE_FILES
if(WITH_FFMPEG_PLAYER)
set(FFMPEG_SUPPORT_SRC
ffmpegaudio.cc
ffmpegaudio.hh
ffmpegaudioplayer.hh
)
endif()
set(PROJECT_SOURCES
${MAC_SRC}
${QRC_RESOURCES}
${EPWING_SUPPORT_SRC}
${FFMPEG_SUPPORT_SRC}
aard.cc
aard.hh
about.cc
about.hh
ankiconnector.cpp
ankiconnector.h
article_inspect.cpp
article_inspect.h
article_maker.cc
article_maker.hh
article_netmgr.cc
article_netmgr.hh
articlewebpage.cpp
articlewebpage.h
articlewebview.cc
articlewebview.hh
atomic_rename.cc
atomic_rename.hh
audiolink.cc
audiolink.hh
audiooutput.cpp
audiooutput.h
audioplayerfactory.cc
audioplayerfactory.hh
audioplayerinterface.hh
base/globalregex.cc
base/globalregex.hh
belarusiantranslit.cc
belarusiantranslit.hh
bgl.cc
bgl.hh
bgl_babylon.cc
bgl_babylon.hh
btreeidx.cc
btreeidx.hh
chinese.cc
chinese.hh
chineseconversion.cc
chineseconversion.hh
chunkedstorage.cc
chunkedstorage.hh
config.cc
config.hh
country.cc
country.hh
decompress.cc
decompress.hh
delegate.cc
delegate.hh
dictdfiles.cc
dictdfiles.hh
dictheadwords.cc
dictheadwords.hh
dictinfo.cc
dictinfo.hh
dictionary.cc
dictionary.hh
dictionarybar.cc
dictionarybar.hh
dictserver.cc
dictserver.hh
dictspanewidget.hh
dictzip.c
dictzip.h
dsl.cc
dsl.hh
dsl_details.cc
dsl_details.hh
editdictionaries.cc
editdictionaries.hh
ex.hh
externalaudioplayer.cc
externalaudioplayer.hh
externalviewer.cc
externalviewer.hh
favoritespanewidget.cc
favoritespanewidget.hh
file.cc
file.hh
filetype.cc
filetype.hh
fixx11h.h
folding.cc
folding.hh
forvo.cc
forvo.hh
fsencoding.cc
fsencoding.hh
ftshelpers.cc
ftshelpers.hh
fulltextsearch.cc
fulltextsearch.hh
gddebug.cc
gddebug.hh
german.cc
german.hh
gestures.cc
gestures.hh
globalbroadcaster.cpp
globalbroadcaster.h
gls.cc
gls.hh
greektranslit.cc
greektranslit.hh
groupcombobox.cc
groupcombobox.hh
groups.cc
groups.hh
groups_widgets.cc
groups_widgets.hh
headwordsmodel.cpp
headwordsmodel.h
history.cc
history.hh
historypanewidget.cc
historypanewidget.hh
hotkeywrapper.cc
hotkeywrapper.hh
htmlescape.cc
htmlescape.hh
hunspell.cc
hunspell.hh
iconv.cc
iconv.hh
iframeschemehandler.cpp
iframeschemehandler.h
inc_case_folding.hh
inc_diacritic_folding.hh
indexedzip.cc
indexedzip.hh
initializing.cc
initializing.hh
instances.cc
instances.hh
keyboardstate.cc
keyboardstate.hh
langcoder.cc
langcoder.hh
language.cc
language.hh
loaddictionaries.cc
loaddictionaries.hh
lsa.cc
lsa.hh
main.cc
mainstatusbar.cc
mainstatusbar.hh
maintabwidget.cc
maintabwidget.hh
mainwindow.cc
mainwindow.hh
mdictparser.cc
mdictparser.hh
mdx.cc
mdx.hh
mediawiki.cc
mediawiki.hh
mruqmenu.cc
mruqmenu.hh
multimediaaudioplayer.cc
multimediaaudioplayer.hh
mutex.cc
mutex.hh
orderandprops.cc
orderandprops.hh
parsecmdline.cc
parsecmdline.hh
preferences.cc
preferences.hh
programs.cc
programs.hh
resourceschemehandler.cpp
resourceschemehandler.h
ripemd.cc
ripemd.hh
romaji.cc
romaji.hh
russiantranslit.cc
russiantranslit.hh
scanflag.cc
scanflag.hh
scanpopup.cc
scanpopup.hh
sdict.cc
sdict.hh
searchpanewidget.hh
slob.cc
slob.hh
sounddir.cc
sounddir.hh
sources.cc
sources.hh
splitfile.cc
splitfile.hh
sptr.hh
stardict.cc
stardict.hh
stylescombobox.cc
stylescombobox.hh
termination.cc
termination.hh
thirdparty/qtsingleapplication/src/qtlocalpeer.cpp thirdparty/qtsingleapplication/src/qtlocalpeer.cpp
thirdparty/qtsingleapplication/src/qtlocalpeer.h thirdparty/qtsingleapplication/src/qtlocalpeer.h
thirdparty/qtsingleapplication/src/qtsingleapplication.cpp thirdparty/qtsingleapplication/src/qtsingleapplication.cpp
thirdparty/qtsingleapplication/src/qtsingleapplication.h thirdparty/qtsingleapplication/src/qtsingleapplication.h
thirdparty/qtsingleapplication/src/qtsinglecoreapplication.cpp thirdparty/qtsingleapplication/src/qtsinglecoreapplication.cpp
thirdparty/qtsingleapplication/src/qtsinglecoreapplication.h thirdparty/qtsingleapplication/src/qtsinglecoreapplication.h
tiff.cc
tiff.hh
translatebox.cc
translatebox.hh
transliteration.cc
transliteration.hh
ufile.cc
ufile.hh
utf8.cc
utf8.hh
utils.cc
utils.hh
voiceengines.cc
voiceengines.hh
webmultimediadownload.cc
webmultimediadownload.hh
website.cc
website.hh
weburlrequestinterceptor.cpp
weburlrequestinterceptor.h
wildcard.cc
wildcard.hh
wordfinder.cc
wordfinder.hh
wordlist.cc
wordlist.hh
wstring.hh
wstring_qt.cc
wstring_qt.hh
xdxf.cc
xdxf.hh
xdxf2html.cc
xdxf2html.hh
zim.cc
zim.hh
zipfile.cc
zipfile.hh
zipsounds.cc
zipsounds.hh
src/dict/lingualibre.cpp src/dict/lingualibre.h
src/ui/articleview.cpp src/ui/articleview.h
src/ui/ftssearchpanel.cpp src/ui/ftssearchpanel.h
src/ui/searchpanel.cpp src/ui/searchpanel.h
speechclient.hh
speechclient.cc
texttospeechsource.cc
texttospeechsource.hh
) )
qt_add_executable(${CMAKE_PROJECT_NAME} qt_add_executable(${CMAKE_PROJECT_NAME}
MANUAL_FINALIZATION MANUAL_FINALIZATION
${PROJECT_SOURCES}) icons/flags.qrc
resources.qrc
src/scripts/scripts.qrc
src/stylesheets/css.qrc
${ALL_SOURCE_FILES}
${MACOS_SOURCE_FILES}
${QSINGLEAPP_SOURCE_FILES})
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
${PROJECT_SOURCE_DIR}/thirdparty/qtsingleapplication/src
${PROJECT_SOURCE_DIR}/src/)
if(MSVC) ### Common parts amount all platforms
add_compile_definitions(INCLUDE_LIBRARY_PATH)
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
${CMAKE_SOURCE_DIR}/winlibs/include/
)
set_property(TARGET ${CMAKE_PROJECT_NAME} PROPERTY # hack -> this string will be compared with another string, thus having surrounding " "
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL") add_compile_definitions(PROGRAM_VERSION="${PROJECT_VERSION}")
endif()
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
Qt6::Xml Qt6::Xml
@ -460,13 +151,86 @@ target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
Qt6::TextToSpeech Qt6::TextToSpeech
) )
if(APPLE) target_compile_definitions(${CMAKE_PROJECT_NAME} PUBLIC
if(WITH_EPWING_SUPPORT) CMAKE_USED_HACK # temporal hack to avoid breaking qmake build
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE eb) USE_ICONV
endif() MAKE_ZIM_SUPPORT
endif() MAKE_QTMULTIMEDIA_PLAYER
MAKE_CHINESE_CONVERSION_SUPPORT)
if(UNIX) target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
${PROJECT_SOURCE_DIR}/thirdparty/qtsingleapplication/src
${PROJECT_SOURCE_DIR}/src/
${PROJECT_SOURCE_DIR}/src/common
${PROJECT_SOURCE_DIR}/src/dict
${PROJECT_SOURCE_DIR}/src/ui)
if (WITH_FFMPEG_PLAYER)
target_compile_definitions(${CMAKE_PROJECT_NAME} PUBLIC MAKE_FFMPEG_PLAYER)
if (UNIX)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE PkgConfig::FFMPEG)
endif ()
endif ()
if (NOT WITH_EPWING_SUPPORT)
target_compile_definitions(${CMAKE_PROJECT_NAME} PUBLIC NO_EPWING_SUPPORT)
endif ()
if (WITH_XAPIAN)
target_compile_definitions(${CMAKE_PROJECT_NAME} PUBLIC USE_XAPIAN)
if (UNIX)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${XAPIAN_LIBRARIES})
endif ()
endif ()
### Parts where different platforms disagree
if (LINUX)
target_compile_definitions(${CMAKE_PROJECT_NAME} PUBLIC HAVE_X11)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE X11 PkgConfig::LIBXTST)
if (WITH_EPWING_SUPPORT)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE eb)
endif ()
endif ()
if (MSVC)
target_compile_definitions(${CMAKE_PROJECT_NAME} PUBLIC
__WIN32
NO_EPWING_SUPPORT
INCLUDE_LIBRARY_PATH
)
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
${CMAKE_SOURCE_DIR}/winlibs/include/
)
set_property(TARGET ${CMAKE_PROJECT_NAME} PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
file(GLOB WINLIBS_FILES "${CMAKE_SOURCE_DIR}/winlibs/lib/msvc/*.lib")
foreach (A_WIN_LIB ${WINLIBS_FILES})
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${A_WIN_LIB})
endforeach ()
endif ()
if (APPLE)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${CARBON_LIBRARY})
if (WITH_EPWING_SUPPORT)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE eb)
endif ()
endif ()
if (UNIX)
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
${PROJECT_SOURCE_DIR}/thirdparty) ${PROJECT_SOURCE_DIR}/thirdparty)
@ -475,33 +239,8 @@ if(UNIX)
PkgConfig::PKGCONFIG_DEPS PkgConfig::PKGCONFIG_DEPS
BZip2::BZip2 BZip2::BZip2
ZLIB::ZLIB #hidden requirement of dsl_details.cc and more? ZLIB::ZLIB #hidden requirement of dsl_details.cc and more?
Iconv::Iconv
) )
endif()
if(MSVC)
file(GLOB WINLIBS_FILES "${CMAKE_SOURCE_DIR}/winlibs/lib/msvc/*.lib")
foreach(A_WIN_LIB ${WINLIBS_FILES})
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${A_WIN_LIB})
endforeach()
endif()
if(LINUX)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE X11 PkgConfig::LIBXTST)
if(WITH_EPWING_SUPPORT)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE eb )
endif()
endif ()
if(APPLE)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${CARBON_LIBRARY})
endif()
if (WITH_FFMPEG_PLAYER)
if (APPLE OR LINUX)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE PkgConfig::FFMPEG)
endif ()
endif () endif ()
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
@ -516,7 +255,6 @@ install(TARGETS ${CMAKE_PROJECT_NAME}
BUNDLE DESTINATION . BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
# include all *ts files under locale # include all *ts files under locale
file(GLOB TRANS_FILES "locale/*.ts") file(GLOB TRANS_FILES "locale/*.ts")
@ -537,13 +275,15 @@ if (LINUX)
install(FILES ${CMAKE_SOURCE_DIR}/redist/icons/goldendict.png DESTINATION share/pixmaps) install(FILES ${CMAKE_SOURCE_DIR}/redist/icons/goldendict.png DESTINATION share/pixmaps)
install(FILES ${qm_files} DESTINATION share/goldendict/locale) install(FILES ${qm_files} DESTINATION share/goldendict/locale)
endif() endif ()
# Copy .dlls to output dir # Copy .dlls to output dir
if(MSVC) if (MSVC)
file(GLOB DLL_FILES LIST_DIRECTORIES false "${CMAKE_SOURCE_DIR}/winlibs/lib/msvc/*.dll") file(GLOB DLL_FILES LIST_DIRECTORIES false "${CMAKE_SOURCE_DIR}/winlibs/lib/msvc/*.dll")
foreach(A_DLL_FILE ${DLL_FILES}) foreach (A_DLL_FILE ${DLL_FILES})
get_filename_component(TEMP_VAR_HOLDING_DLL_FILENAME ${A_DLL_FILE} NAME) get_filename_component(TEMP_VAR_HOLDING_DLL_FILENAME ${A_DLL_FILE} NAME)
configure_file("${A_DLL_FILE}" "${CMAKE_BINARY_DIR}/${TEMP_VAR_HOLDING_DLL_FILENAME}" COPYONLY) configure_file("${A_DLL_FILE}" "${CMAKE_BINARY_DIR}/${TEMP_VAR_HOLDING_DLL_FILENAME}" COPYONLY)
endforeach() endforeach ()
endif() endif ()
feature_summary(WHAT ALL DESCRIPTION "Build configuration:")

View file

@ -1,3 +1,5 @@
#ifdef __APPLE__
#include "gd_clipboard.hh" #include "gd_clipboard.hh"
#include <QGuiApplication> #include <QGuiApplication>
@ -34,3 +36,5 @@ void gd_clipboard::stop() {
void gd_clipboard::start() { void gd_clipboard::start() {
m_monitoringTimer.start(1000); // 1s m_monitoringTimer.start(1000); // 1s
} }
#endif

View file

@ -1,3 +1,4 @@
#ifdef __APPLE__
#pragma once #pragma once
#include <QClipboard> #include <QClipboard>
@ -36,3 +37,4 @@ signals:
void changed(QClipboard::Mode mode); void changed(QClipboard::Mode mode);
}; };
#endif

View file

@ -1,3 +1,5 @@
#ifdef __APPLE__
#ifndef __MACMOUSEOVER_HH_INCLUDED__ #ifndef __MACMOUSEOVER_HH_INCLUDED__
#define __MACMOUSEOVER_HH_INCLUDED__ #define __MACMOUSEOVER_HH_INCLUDED__
@ -63,3 +65,4 @@ private:
#endif #endif
#endif

View file

@ -62,6 +62,10 @@ About::About( QWidget * parent, std::vector< sptr< Dictionary::Class > > * dicto
+" NO_EPWING_SUPPORT" +" NO_EPWING_SUPPORT"
#endif #endif
#ifdef USE_ICONV
+" USE_ICONV"
#endif
#ifdef MAKE_CHINESE_CONVERSION_SUPPORT #ifdef MAKE_CHINESE_CONVERSION_SUPPORT
+" MAKE_CHINESE_CONVERSION_SUPPORT" +" MAKE_CHINESE_CONVERSION_SUPPORT"
#endif #endif