## CMakeLists.txt ## ## Copyright (C) 2006-2025 Christian Schenk ## ## This file is free software; the copyright holder gives ## unlimited permission to copy and/or distribute it, with or ## without modifications, as long as this notice is preserved. ############################################################################### ## CMake controls cmake_minimum_required(VERSION 3.12.0 FATAL_ERROR) set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(CMAKE_COLOR_MAKEFILE FALSE) #set(CMAKE_VERBOSE_MAKEFILE TRUE) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules") set(CMAKE_LINK_DEPENDS_NO_SHARED 1) if(APPLE) set(CMAKE_OSX_DEPLOYMENT_TARGET "10.12" CACHE STRING "The earliest version of MacOS X that MiKTeX will run on." ) #set(CMAKE_EXE_LINKER_FLAGS "-Wl,-no_weak_imports") endif() ############################################################################### ## CMake policies list(APPEND cmake_policies_new # CMP0071 ) foreach(p ${cmake_policies_new}) if(POLICY ${p}) cmake_policy(SET ${p} NEW) endif() endforeach() list(APPEND cmake_policies_old CMP0167 ) foreach(p ${cmake_policies_old}) if(POLICY ${p}) cmake_policy(SET ${p} OLD) endif() endforeach() ############################################################################### ## the name of the game set(MIKTEX_PRODUCT_NAME "MiKTeX") string(TOLOWER ${MIKTEX_PRODUCT_NAME} MIKTEX_PRODUCT_TAG) include(miktex-version.cmake) include(miktex-local-version.cmake OPTIONAL) if(MIKTEX_PATCH_VERSION EQUAL 0) set(miktex_project_version ${MIKTEX_MAJOR_VERSION}.${MIKTEX_MINOR_VERSION}) else() set(miktex_project_version ${MIKTEX_MAJOR_VERSION}.${MIKTEX_MINOR_VERSION}.${MIKTEX_PATCH_VERSION}) endif() project(${MIKTEX_PRODUCT_TAG} VERSION ${miktex_project_version} ) ############################################################################### ## global C/C++ options set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD_REQUIRED TRUE) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) ############################################################################### ## system type if(WIN32 AND NOT UNIX) set(MIKTEX_NATIVE_WINDOWS TRUE) else() set(MIKTEX_UNIX_ALIKE TRUE) endif() if(CMAKE_SYSTEM_NAME MATCHES "BSD/OS") set(system_name "openbsd") elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX") set(system_name "hpux") elseif(CMAKE_SYSTEM_NAME MATCHES "GNU/kFreeBSD") set(MIKTEX_FREEBSD TRUE) set(system_name "freebsd") elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") set(MIKTEX_FREEBSD TRUE) set(system_name "freebsd") elseif(CMAKE_SYSTEM_NAME MATCHES "SCO_SV") set(system_name "scosv") elseif(CMAKE_SYSTEM_NAME MATCHES "UNIX_SV") set(system_name "unixsv") elseif(CMAKE_SYSTEM_NAME MATCHES "CYGWIN_NT-.+") set(system_name "cygwin") elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") set(MIKTEX_LINUX TRUE) set(system_name "linux") else() string(TOLOWER "${CMAKE_SYSTEM_NAME}" system_name) endif() if(MIKTEX_NATIVE_WINDOWS) if(CMAKE_CL_64) set(system_cpu "x64") set(MIKTEX_MANIFEST_PROCESSOR_ARCHITECTURE "amd64") else() set(system_cpu "x86") set(MIKTEX_MANIFEST_PROCESSOR_ARCHITECTURE "x86") endif() elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i.86") set(system_cpu "x86") else() string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" system_cpu) endif() #set(MIKTEX_TARGET_SYSTEM_TAG "${system_cpu}-${system_name}") set(MIKTEX_TARGET_SYSTEM_TAG "${system_name}-${system_cpu}") if(MIKTEX_NATIVE_WINDOWS) set(MIKTEX_MIN_TARGET_SYSTEM_VERSION "6.1.7601") endif() set(MIKTEX_SHORTEST_TARGET_SYSTEM_TAG_WIN "win") set(MIKTEX_SHORTEST_TARGET_SYSTEM_TAG_UNX "unx") if(MIKTEX_NATIVE_WINDOWS) set(MIKTEX_SHORTEST_TARGET_SYSTEM_TAG ${MIKTEX_SHORTEST_TARGET_SYSTEM_TAG_WIN}) else() set(MIKTEX_SHORTEST_TARGET_SYSTEM_TAG ${MIKTEX_SHORTEST_TARGET_SYSTEM_TAG_UNX}) endif() ############################################################################### ## macOS: bundle vs Homebrew detection string(SUBSTRING ${CMAKE_INSTALL_PREFIX} 0 17 homebrew_cellar) if(homebrew_cellar STREQUAL "/usr/local/Cellar") set(MIKTEX_HOMEBREW TRUE) endif() if(APPLE AND NOT MIKTEX_HOMEBREW) set(MIKTEX_MACOS_BUNDLE TRUE) endif() ############################################################################### ## handle install prefix standards if(CMAKE_INSTALL_PREFIX STREQUAL "/usr") set(MIKTEX_SELF_CONTAINED_DEFAULT FALSE) elseif(CMAKE_INSTALL_PREFIX STREQUAL "/usr/local") set(MIKTEX_SELF_CONTAINED_DEFAULT FALSE) elseif(MIKTEX_HOMEBREW) set(MIKTEX_SELF_CONTAINED_DEFAULT FALSE) elseif(MIKTEX_UNIX_ALIKE AND NOT MIKTEX_MACOS_BUNDLE) set(MIKTEX_SELF_CONTAINED_DEFAULT TRUE) endif() ############################################################################### ## user options option( MIKTEX_SELF_CONTAINED "Build and install a self-contained MiKTeX distribution." ${MIKTEX_SELF_CONTAINED_DEFAULT} ) option( MIKTEX_CORE_AUTO_ADMIN "Turn on adminstrator mode for shared installations and elevated programs." FALSE ) option( MIKTEX_MPM_AUTO_ADMIN "Install packages for all users." FALSE ) option( MIKTEX_MPM_AUTO_INSTALL "Install missing packages automatically (on-the-fly)." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_APR "Use the system Apache Portable Runtime (APR) library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_APRUTIL "Use the system Apache Portable Runtime (APR-util) library." ${MIKTEX_UNIX_ALIKE} ) # we always depend on the system Boost development files set( USE_SYSTEM_BOOST TRUE ) option( USE_SYSTEM_BZIP2 "Use the system bzip2 compression library." ${MIKTEX_UNIX_ALIKE} ) if(MIKTEX_MACOS_BUNDLE) set(use_system_cairo_default FALSE) elseif(MIKTEX_UNIX_ALIKE) set(use_system_cairo_default TRUE) endif() option( USE_SYSTEM_CAIRO "Use the system Cairo 2D graphics library." ${use_system_cairo_default} ) option( USE_SYSTEM_CURL "Use the system libcurl URL transfer library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_EXPAT "Use the system Expat XML parser library." ${MIKTEX_UNIX_ALIKE} ) if(MIKTEX_MACOS_BUNDLE) set(use_system_fontconfig_default FALSE) elseif(MIKTEX_UNIX_ALIKE) set(use_system_fontconfig_default TRUE) endif() option( USE_SYSTEM_FMT "Use the system fmt library." FALSE ) option( USE_SYSTEM_FONTCONFIG "Use the system Fontconfig library." ${use_system_fontconfig_default} ) option( USE_SYSTEM_FREETYPE2 "Use the system FreeType2 font engine library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_FRIBIDI "Use the system GNU FriBiDi library." ${MIKTEX_UNIX_ALIKE} ) if(MIKTEX_MACOS_BUNDLE) set(use_system_gd_default FALSE) elseif(MIKTEX_UNIX_ALIKE) set(use_system_gd_default TRUE) endif() option( USE_SYSTEM_GD "Use the system GD graphics library." ${use_system_gd_default} ) option( USE_SYSTEM_GMP "Use the system GNU Multiple Precision Arithmetic library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_GRAPHITE2 "Use the system Graphite2 library." ${MIKTEX_UNIX_ALIKE} ) if(MIKTEX_HOMEBREW OR MIKTEX_MACOS_BUNDLE) set(use_system_harfbuzz_default FALSE) elseif(MIKTEX_UNIX_ALIKE) set(use_system_harfbuzz_default TRUE) endif() option( USE_SYSTEM_HARFBUZZ "Use the system Harfbuzz text shaping library." ${use_system_harfbuzz_default} ) if(MIKTEX_HOMEBREW OR MIKTEX_MACOS_BUNDLE) set(use_system_harfbuzz_icu_default FALSE) elseif(MIKTEX_UNIX_ALIKE) set(use_system_harfbuzz_icu_default TRUE) endif() option( USE_SYSTEM_HARFBUZZ_ICU "Use the system Harfbuzz (ICU) text shaping library." ${use_system_harfbuzz_icu_default} ) option( USE_SYSTEM_HUNSPELL "Use the system Hunspell spell checker library." ${MIKTEX_UNIX_ALIKE} ) # we always depend on the system ICU development files set( USE_SYSTEM_ICU TRUE ) option( USE_SYSTEM_JPEG "Use the system JPEG library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_LOG4CXX "Use the system Log4cxx logging framework library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_LZMA "Use the system LZMA compression library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_MPFI "Use the system Multiple Precision Floating-Point Interval Library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_MPFR "Use the system GNU Multiple Precision Floating-Point Reliably (MPFR) library." ${MIKTEX_UNIX_ALIKE} ) if(MIKTEX_HOMEBREW OR MIKTEX_MACOS_BUNDLE) set(use_system_mspack_default FALSE) elseif(MIKTEX_UNIX_ALIKE) set(use_system_mspack_default TRUE) endif() option( USE_SYSTEM_MSPACK "Use the system mspack compression library." ${use_system_mspack_default} ) option( USE_SYSTEM_OPENSSL_CRYPTO "Use the system OpenSSL/LibreSSL crypto library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_PIXMAN "Use the system Pixman pixel manipulation library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_PNG "Use the system PNG library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_POPPLER "Use the system Poppler PDF Rendering library." FALSE ) option( USE_SYSTEM_POPPLER_QT "Use the system Poppler PDF Rendring (Qt Wrapper) library." FALSE ) option( USE_SYSTEM_POPT "Use the system popt (command-line options parser) library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_URIPARSER "Use the system uriparser (URI parser) library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_ZLIB "Use the system zlib compression library." ${MIKTEX_UNIX_ALIKE} ) option( USE_SYSTEM_ZZIP "Use the system Zzip compression library." ${MIKTEX_UNIX_ALIKE} ) option( WITH_ASYMPTOTE "Build asymptote." ${MIKTEX_NATIVE_WINDOWS} ) option( WITH_BOOTSTRAPPING "Install files necessary for initializing a bare MiKTeX installation." ${MIKTEX_UNIX_ALIKE} ) option( WITH_CODE_SIGNING "Sign MiKTeX executables." FALSE ) option( WITH_PACKAGE_DB_SIGNING "MiKTeX package database files must be signed." TRUE ) option( WITH_LIBRESSL_CRYPTO "Use the LibreSSL crypto library supplied with MiKTeX." ${WIN32} ) option( WITH_TRAPMF "Build trapmf." FALSE ) option( WITH_TRIPTEX "Build triptex." FALSE ) option( WITH_UI_QT "Build Qt components." TRUE ) option( WITH_STANDALONE_SETUP "Build standalone setup programs." ${MIKTEX_NATIVE_WINDOWS} ) option( WITH_UI_MFC "Build MFC components." ${MSVC} ) option( WITH_COM "Build COM components." ${MSVC} ) option( WITH_MPC "Build mpc (MiKTeX Package Composer)." TRUE ) option( WITH_SYNCTEX "Enable SyncTeX extensions." TRUE ) option( WITH_LEGACY_WINDOWS_SUPPORT "Wether to support Windows 7/8." TRUE ) option( INSTALL_MIKTEX_HEADERS "Install the MiKTeX header files." FALSE ) option( INSTALL_STATIC_LIBRARIES "Install static libraries." FALSE ) option( WITH_CONTEXT_SUPPORT "Enable ConTeXt support." FALSE ) option( WITH_TPMS "Build package manifest files." ${WIN32} ) option( WITH_CONFIG_FILES "Build configuration files." ${WIN32} ) option( WITH_MIKTEX_DOC "Build miktex-doc package." ${WIN32} ) option( WITH_MIKTEX_API_DOC "Build API documentation." ${WIN32} ) option( WITH_SCRIPTS "Build script files." ${WIN32} ) option( WITH_MAN_PAGES "Build man pages." ${MIKTEX_UNIX_ALIKE} ) option( WITH_RUNGS "Create rungs, a symbolic link to the miktex-rungs executable." TRUE ) option( WITH_KPSEWHICH "Create kpsewhich, a symbolic link to the miktex-kpsewhich executable." TRUE ) option( WITH_MKTEXLSR "Create mktexlsr, a symbolic link to One MiKTeX Utility." TRUE ) option( WITH_TEXHASH "Create texhash, a symbolic link to One MiKTeX Utility." TRUE ) option( WITH_TEXLINKS "Create texlinks, a symbolic link to One MiKTeX Utility." TRUE ) option( WITH_TEXDOC "Create texdoc, a symbolic link to MiKTeX Help Utility." TRUE ) option( WITH_UPDMAP "Create updmap, a symbolic link to One MiKTeX Utility." TRUE ) if(WITH_ASYMPTOTE AND MIKTEX_NATIVE_WINDOWS) set(USE_SYSTEM_OPENGL TRUE) endif() set(QT_SERIES "6" CACHE STRING "The Qt series to be used.") ############################################################################### ## fixed values set(MIKTEX_HQ_BASE_URL_NO_SLASH "https://miktex.org") set(MIKTEX_HQ_BASE_URL "${MIKTEX_HQ_BASE_URL_NO_SLASH}/") set(MIKTEX_DOC_BASE_URL_NO_SLASH "https://docs.miktex.org") set(MIKTEX_DOC_BASE_URL "${MIKTEX_DOC_BASE_URL_NO_SLASH}/") set(MIKTEX_PREFIX "miktex-") set(MIKTEX_ADMIN_SUFFIX "_admin") set(MIKTEX_STANDALONE_SUFFIX "_standalone") ## autotools compatibility names set(PACKAGE_NAME ${MIKTEX_PRODUCT_NAME}) set(top_srcdir "${CMAKE_SOURCE_DIR}") if(MIKTEX_NATIVE_WINDOWS) set(MIKTEX_DEV_NULL "nul") else() set(MIKTEX_DEV_NULL "/dev/null") endif() if(MIKTEX_MACOS_BUNDLE) set(MIKTEX_CODESIGN_IDENTITY "Developer ID") endif() ############################################################################### ## version information string(TIMESTAMP MIKTEX_DATETIME_STR UTC) if(MIKTEX_MONTH_VERSION EQUAL 1) set(MIKTEX_MONTH_NAME_VERSION "January") elseif(MIKTEX_MONTH_VERSION EQUAL 2) set(MIKTEX_MONTH_NAME_VERSION "February") elseif(MIKTEX_MONTH_VERSION EQUAL 3) set(MIKTEX_MONTH_NAME_VERSION "March") elseif(MIKTEX_MONTH_VERSION EQUAL 4) set(MIKTEX_MONTH_NAME_VERSION "April") elseif(MIKTEX_MONTH_VERSION EQUAL 5) set(MIKTEX_MONTH_NAME_VERSION "May") elseif(MIKTEX_MONTH_VERSION EQUAL 6) set(MIKTEX_MONTH_NAME_VERSION "June") elseif(MIKTEX_MONTH_VERSION EQUAL 7) set(MIKTEX_MONTH_NAME_VERSION "July") elseif(MIKTEX_MONTH_VERSION EQUAL 8) set(MIKTEX_MONTH_NAME_VERSION "August") elseif(MIKTEX_MONTH_VERSION EQUAL 9) set(MIKTEX_MONTH_NAME_VERSION "September") elseif(MIKTEX_MONTH_VERSION EQUAL 10) set(MIKTEX_MONTH_NAME_VERSION "October") elseif(MIKTEX_MONTH_VERSION EQUAL 11) set(MIKTEX_MONTH_NAME_VERSION "November") elseif(MIKTEX_MONTH_VERSION EQUAL 12) set(MIKTEX_MONTH_NAME_VERSION "December") endif() if(MIKTEX_LINUX) set(MIKTEX_LINUX_DIST "ubuntu" CACHE STRING "The Linux distribution (ubuntu, debian, fedora, ...)." ) set(MIKTEX_LINUX_DIST_VERSION "16.04" CACHE STRING "The Linux distribution version (16.04, 9, 28, ...)." ) set(MIKTEX_LINUX_DIST_CODE_NAME "xenial" CACHE STRING "The Linux distribution code name (xenial, stretch, ...)." ) endif() ## the release state; one of: ## 0 (stable) ## 1 (next) ## 4 (debug) set(MIKTEX_RELEASE_STATE 0 CACHE STRING "The MiKTeX release state." ) ## sanity check if(MIKTEX_RELEASE_STATE EQUAL 0) elseif(MIKTEX_RELEASE_STATE EQUAL 1) elseif(MIKTEX_RELEASE_STATE EQUAL 4) else() message("${MIKTEX_RELEASE_STATE} is an unknown release state.") message("Falling back to release state 4 (debug).") set(MIKTEX_RELEASE_STATE 4 CACHE STRING "MiKTeX release state; one of 0 (stable), 1 (next), 4 (debug)." FORCE ) endif() find_package(Git) add_custom_target(gen-git-info COMMAND ${CMAKE_COMMAND} -D GIT_FOUND=${Git_FOUND} -D GIT_EXECUTABLE=${GIT_EXECUTABLE} -D SOURCE_DIR=${CMAKE_SOURCE_DIR} -D GITINFO_H_IN=${CMAKE_SOURCE_DIR}/include/miktex/GitInfo.h.in -D GITINFO_H=${CMAKE_BINARY_DIR}/include/miktex/GitInfo.h -P ${CMAKE_CURRENT_SOURCE_DIR}/gen-git-info.cmake ) set(MIKTEX_MAJOR_MINOR_STR "${MIKTEX_MAJOR_VERSION}.${MIKTEX_MINOR_VERSION}" ) set(MIKTEX_MAJOR_MINOR_PATCH_STR "${MIKTEX_MAJOR_VERSION}.${MIKTEX_MINOR_VERSION}.${MIKTEX_PATCH_VERSION}" ) set(MIKTEX_PACKAGES_MAJOR_MINOR_STR "${MIKTEX_PACKAGES_MAJOR_VERSION}.${MIKTEX_PACKAGES_MINOR_VERSION}" ) if(MIKTEX_NATIVE_WINDOWS) set(MIKTEX_COM_MAJOR_MINOR_STR "${MIKTEX_COM_MAJOR_VERSION}.${MIKTEX_COM_MINOR_VERSION}" ) set(MIKTEX_COM_MAJOR_MINOR_ID_STR "${MIKTEX_COM_MAJOR_VERSION}_${MIKTEX_COM_MINOR_VERSION}" ) math( EXPR MIKTEX_COM_MAJOR_MINOR_INT "(100 * ${MIKTEX_COM_MAJOR_VERSION}) + ${MIKTEX_COM_MINOR_VERSION}" ) endif() math( EXPR MIKTEX_MAJOR_MINOR_INT "(100 * ${MIKTEX_MAJOR_VERSION}) + ${MIKTEX_MINOR_VERSION}" ) math( EXPR MIKTEX_MAJOR_MINOR_PATCH_INT "(10000 * ${MIKTEX_MAJOR_VERSION}) + (100 * ${MIKTEX_MINOR_VERSION}) + ${MIKTEX_PATCH_VERSION}" ) if(MIKTEX_RELEASE_STATE EQUAL 0) if(MIKTEX_PATCH_VERSION EQUAL 0) set(default_miktex_display_version_str "${MIKTEX_MAJOR_MINOR_STR}") set(default_miktex_version_str "${MIKTEX_MAJOR_MINOR_STR}") else() set(default_miktex_display_version_str "${MIKTEX_MAJOR_MINOR_PATCH_STR}") set(default_miktex_version_str "${MIKTEX_MAJOR_MINOR_PATCH_STR}") endif() elseif(MIKTEX_RELEASE_STATE EQUAL 1) if(MIKTEX_PATCH_VERSION EQUAL 0) set(default_miktex_display_version_str "${MIKTEX_MAJOR_MINOR_STR} NEXT") set(default_miktex_version_str "${MIKTEX_MAJOR_MINOR_STR}-next") else() set(default_miktex_display_version_str "${MIKTEX_MAJOR_MINOR_PATCH_STR} NEXT") set(default_miktex_version_str "${MIKTEX_MAJOR_MINOR_PATCH_STR}-next") endif() elseif(MIKTEX_RELEASE_STATE EQUAL 4) if(MIKTEX_PATCH_VERSION EQUAL 0) set(default_miktex_display_version_str "${MIKTEX_MAJOR_MINOR_STR} debug") set(default_miktex_version_str "${MIKTEX_MAJOR_MINOR_STR}-debug") else() set(default_miktex_display_version_str "${MIKTEX_MAJOR_MINOR_PATCH_STR} debug") set(default_miktex_version_str "${MIKTEX_MAJOR_MINOR_PATCH_STR}-debug") endif() endif() set(MIKTEX_DISPLAY_VERSION_STR "${default_miktex_display_version_str}" CACHE STRING "The MiKTeX version presented to the user." FORCE ) set(MIKTEX_VERSION_STR "${default_miktex_version_str}" CACHE STRING "The MiKTeX version." FORCE ) if(MIKTEX_RELEASE_STATE EQUAL 1) set(MIKTEX_DEFAULT_PACKAGE_STREAM "next") else() set(MIKTEX_DEFAULT_PACKAGE_STREAM "stable") endif() set(MIKTEX_LEGACY_MAJOR_MINOR_STR "${MIKTEX_LEGACY_MAJOR_VERSION}.${MIKTEX_LEGACY_MINOR_VERSION}") ############################################################################### ## Localization set(MIKTEX_INTERNAL_LOCALE "en") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "af") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "ar") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "ca") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "cs") LIST(APPEND MIKTEX_TRANSLATION_LOCALES "de") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "es") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "fa") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "fo") LIST(APPEND MIKTEX_TRANSLATION_LOCALES "fr") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "it") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "ja") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "ko") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "nl") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "nn") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "pl") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "pt") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "ru") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "sk") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "sl") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "sr") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "tr") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "uk") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "vi") LIST(APPEND MIKTEX_TRANSLATION_LOCALES "zh_CN") #LIST(APPEND MIKTEX_TRANSLATION_LOCALES "zh_TW") set(MIKTEX_TRANSLATION_THRESHOLD 50) set(MIKTEX_TRANSLATION_PROGRESS__af 0) set(MIKTEX_TRANSLATION_PROGRESS__ar 0) set(MIKTEX_TRANSLATION_PROGRESS__ca 0) set(MIKTEX_TRANSLATION_PROGRESS__cs 0) set(MIKTEX_TRANSLATION_PROGRESS__de 51) set(MIKTEX_TRANSLATION_PROGRESS__es 0) set(MIKTEX_TRANSLATION_PROGRESS__fa 0) set(MIKTEX_TRANSLATION_PROGRESS__fo 0) set(MIKTEX_TRANSLATION_PROGRESS__fr 51) set(MIKTEX_TRANSLATION_PROGRESS__it 0) set(MIKTEX_TRANSLATION_PROGRESS__ja 0) set(MIKTEX_TRANSLATION_PROGRESS__ko 0) set(MIKTEX_TRANSLATION_PROGRESS__nl 0) set(MIKTEX_TRANSLATION_PROGRESS__nn 0) set(MIKTEX_TRANSLATION_PROGRESS__pl 0) set(MIKTEX_TRANSLATION_PROGRESS__pt 0) set(MIKTEX_TRANSLATION_PROGRESS__ru 0) set(MIKTEX_TRANSLATION_PROGRESS__sk 0) set(MIKTEX_TRANSLATION_PROGRESS__sl 0) set(MIKTEX_TRANSLATION_PROGRESS__sr 0) set(MIKTEX_TRANSLATION_PROGRESS__tr 0) set(MIKTEX_TRANSLATION_PROGRESS__uk 0) set(MIKTEX_TRANSLATION_PROGRESS__vi 0) set(MIKTEX_TRANSLATION_PROGRESS__zh_CN 51) set(MIKTEX_TRANSLATION_PROGRESS__zh_TW 0) foreach(l ${MIKTEX_TRANSLATION_LOCALES}) if(MIKTEX_TRANSLATION_PROGRESS__${l} GREATER_EQUAL MIKTEX_TRANSLATION_THRESHOLD) list(APPEND MIKTEX_TRANSLATION_DONE_LOCALES ${l}) endif() endforeach() ############################################################################### ## Endianess include(TestBigEndian) test_big_endian(MIKTEX_WORDS_BIGENDIAN) ############################################################################### ## CMake modules include(Admin/COM/guids.cmake) include(FindPackageHandleStandardArgs) include(GNUInstallDirs) include(AddLinkFlags) include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) include(CheckFunctionExists) include(CheckIncludeFileCXX) include(CheckIncludeFiles) include(CheckStructHasMember) include(CheckSymbolExists) include(CheckTypeSize) include(CheckVariableExists) include(ConfigNames) include(CreateDllWrapper) include(CreateWebApp) include(DefaultCharTypeIsUnsigned) include(DelayLoad) include(ExecutableNames) include(InstallPaths) include(GenerateExportHeader) include(LibraryNames) include(RuntimePaths) include(SetSharedLibraryVersion) include(SourcePaths) include(UseStaticCRT) include(IgnoreWarnings) ############################################################################### ## build sandbox set(MIKTEX_SANDBOX_SOURCE_DIR "${CMAKE_SOURCE_DIR}/sandbox") set(MIKTEX_SANDBOX_BINARY_DIR "${CMAKE_BINARY_DIR}/sandbox") set(MIKTEX_SANDBOX_USER_CONFIG_DIR "${MIKTEX_SANDBOX_BINARY_DIR}" CACHE PATH "MiKTeX user config root.") set(MIKTEX_SANDBOX_USER_DATA_DIR "${MIKTEX_SANDBOX_BINARY_DIR}" CACHE PATH "MiKTeX user data root.") set(MIKTEX_SANDBOX_USER_INSTALL_DIR "${MIKTEX_SANDBOX_BINARY_DIR}" CACHE PATH "MiKTeX user install root.") set(MIKTEX_SANDBOX_USER_ROOTS "" CACHE PATH "MiKTeX user roots") configure_file( sandbox/miktex/config/miktexstartup.ini.in ${MIKTEX_SANDBOX_BINARY_DIR}/miktex/config/miktexstartup.ini ) configure_file( sandbox/miktex/config/miktex.ini.in ${MIKTEX_SANDBOX_BINARY_DIR}/miktex/config/miktex.ini ) configure_file( Admin/ConfigFiles/win/log4cxx.win.xml ${MIKTEX_SANDBOX_BINARY_DIR}/miktex/config/win/log4cxx.win.xml COPYONLY ) configure_file( Admin/ConfigFiles/unx/log4cxx.unx.xml ${MIKTEX_SANDBOX_BINARY_DIR}/miktex/config/unx/log4cxx.unx.xml COPYONLY ) set(MIKTEX_AUTO_MAINTENANCE_LOCK "A6D646EE9FBF44D6A3E6C1A3A72FF7E3.lock") # disable maintenance tasks while building file(WRITE ${MIKTEX_SANDBOX_BINARY_DIR}/${MIKTEX_REL_MIKTEX_LOCK_DIR}/${MIKTEX_AUTO_MAINTENANCE_LOCK} "-1\npermanently-locked\n" ) set(outdir "${MIKTEX_SANDBOX_BINARY_DIR}/${MIKTEX_REL_MIKTEX_BIN_DIR}") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${outdir}") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${outdir}") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${outdir}") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${outdir}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${outdir}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${outdir}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${outdir}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${outdir}") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${outdir}") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${outdir}") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${outdir}") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${outdir}") ############################################################################### ## bootstrapping packages if(WITH_BOOTSTRAPPING) list(APPEND MIKTEX_BOOTSTRAPPING_PACKAGES miktex-config-${MIKTEX_LEGACY_MAJOR_MINOR_STR} miktex-dvips miktex-fontconfig miktex-misc tetex ) endif() ############################################################################### ## RPATH handling if (NOT CMAKE_INSTALL_RPATH) if(APPLE) set(CMAKE_MACOSX_RPATH TRUE) set(CMAKE_INSTALL_RPATH "@loader_path/../${CMAKE_INSTALL_LIBDIR}") else() set(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") endif() endif() ############################################################################### ## find/check stuff if(MIKTEX_NATIVE_WINDOWS) if(WITH_LEGACY_WINDOWS_SUPPORT) add_definitions( -DMIKTEX_SUPPORT_LEGACY_WINDOWS ) add_definitions( -DWINVER=0x0600 -D_WIN32_WINNT=0x0600 ) set(CMAKE_C_CREATE_WIN32_EXE /SUBSYSTEM:WINDOWS,6.00) set(CMAKE_C_CREATE_CONSOLE_EXE /SUBSYSTEM:CONSOLE,6.00) set(CMAKE_CXX_CREATE_WIN32_EXE /SUBSYSTEM:WINDOWS,6.00) set(CMAKE_CXX_CREATE_CONSOLE_EXE /SUBSYSTEM:CONSOLE,6.00) else() add_definitions( -DWINVER=0x0a00 -D_WIN32_WINNT=0x0a00 ) set(CMAKE_C_CREATE_WIN32_EXE /SUBSYSTEM:WINDOWS,10.00) set(CMAKE_C_CREATE_CONSOLE_EXE /SUBSYSTEM:CONSOLE,10.00) set(CMAKE_CXX_CREATE_WIN32_EXE /SUBSYSTEM:WINDOWS,10.00) set(CMAKE_CXX_CREATE_CONSOLE_EXE /SUBSYSTEM:CONSOLE,10.00) endif() endif() set(required_programs cat diff msgfmt msgmerge sed xgettext xsltproc ) if(WITH_MIKTEX_API_DOC) list(APPEND required_programs doxygen ) endif() if(WITH_MIKTEX_DOC) list(APPEND required_programs pandoc ) endif() if(WITH_UI_MFC) list(APPEND required_programs hhc makehm ) endif() if(MSVC) list(APPEND required_programs mc midl mt ) endif() if(WITH_BOOTSTRAPPING) list(APPEND required_programs curl ) endif() foreach(p ${required_programs}) string(TOUPPER "${p}" p_u) find_program(${p_u}_EXECUTABLE NAMES ${p}) if(NOT ${p_u}_EXECUTABLE) message(FATAL_ERROR "The program ${p} could not be found.") endif() endforeach() if(WITH_MIKTEX_DOC) if(MIKTEX_NATIVE_WINDOWS) set(fop_name fop.cmd) else() set(fop_name fop) endif() find_program(FOP_EXECUTABLE NAMES ${fop_name}) if(NOT FOP_EXECUTABLE) message(FATAL_ERROR "The program ${fop_name} could not be found.") endif() endif() find_package(BISON REQUIRED) find_package(FLEX REQUIRED) #not needed: find_package(ImageMagick REQUIRED) #not needed: find_package(PythonInterp REQUIRED) find_package(Threads REQUIRED) if(MIKTEX_MACOS_BUNDLE) find_library(CoreFoundation CoreFoundation) endif() if(WITH_UI_QT) set(required_qt_components Concurrent Core Gui LinguistTools PrintSupport Qml UiTools Widgets Xml ) if(QT_SERIES EQUAL 6) list(APPEND required_qt_components Core5Compat ) endif() if(QT_SERIES EQUAL 5) list(APPEND required_qt_components Script ScriptTools ) endif() if(MIKTEX_NATIVE_WINDOWS AND QT_SERIES EQUAL 5) list(APPEND required_qt_components WinExtras ) endif() if(MIKTEX_UNIX_ALIKE AND NOT MIKTEX_MACOS_BUNDLE) list(APPEND required_qt_components DBus ) endif() find_package(Qt${QT_SERIES} REQUIRED ${required_qt_components}) endif() if(USE_SYSTEM_APR) find_package(APR REQUIRED) endif() if(USE_SYSTEM_APRUTIL) find_package(APRUTIL REQUIRED) endif() if(USE_SYSTEM_BOOST) if(MIKTEX_NATIVE_WINDOWS) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_DEBUG_LIBS ON) set(Boost_USE_RELEASE_LIBS ON) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) endif() find_package(Boost REQUIRED locale) endif() if(USE_SYSTEM_BZIP2) find_package(BZip2 REQUIRED) endif() if(USE_SYSTEM_CAIRO) find_package(CAIRO REQUIRED) endif() if(USE_SYSTEM_CURL) find_package(CURL REQUIRED) endif() if(USE_SYSTEM_EXPAT) find_package(EXPAT REQUIRED) endif() if(USE_SYSTEM_FMT) find_package(FMT REQUIRED) endif() if(USE_SYSTEM_FONTCONFIG) find_package(FONTCONFIG REQUIRED) endif() if(USE_SYSTEM_FREETYPE2) find_package(Freetype REQUIRED) endif() if(USE_SYSTEM_FRIBIDI) find_package(FRIBIDI REQUIRED) endif() if(USE_SYSTEM_GD) find_package(GD REQUIRED) endif() if(USE_SYSTEM_GMP) find_package(GMP REQUIRED) endif() if(USE_SYSTEM_GRAPHITE2) find_package(GRAPHITE2 REQUIRED) endif() if(USE_SYSTEM_HARFBUZZ) find_package(HARFBUZZ REQUIRED) endif() if(USE_SYSTEM_HARFBUZZ_ICU) find_package(HARFBUZZ_ICU REQUIRED) endif() if(USE_SYSTEM_HUNSPELL) find_package(HUNSPELL REQUIRED) endif() if(USE_SYSTEM_ICU) find_package(ICU REQUIRED COMPONENTS i18n uc) endif() if(USE_SYSTEM_JPEG) find_package(JPEG REQUIRED) endif() if(USE_SYSTEM_LOG4CXX) find_package(LOG4CXX REQUIRED) endif() if(USE_SYSTEM_LZMA) find_package(LibLZMA REQUIRED) endif() if(USE_SYSTEM_MPFI) find_package(MPFI REQUIRED) endif() if(USE_SYSTEM_MPFR) find_package(MPFR REQUIRED) endif() if(USE_SYSTEM_MSPACK) find_package(MSPACK REQUIRED) endif() if(USE_SYSTEM_OPENGL) find_package(OpenGL REQUIRED) endif() if(USE_SYSTEM_OPENSSL_CRYPTO) find_package(OpenSSL REQUIRED) endif() if(USE_SYSTEM_PIXMAN) find_package(PIXMAN REQUIRED) endif() if(USE_SYSTEM_PNG) find_package(PNG REQUIRED) endif() if(USE_SYSTEM_POPT) find_package(POPT REQUIRED) endif() if(USE_SYSTEM_POPPLER) find_package(POPPLER REQUIRED) endif() if(USE_SYSTEM_POPPLER_QT AND WITH_UI_QT) find_package(POPPLER_QT${QT_SERIES} REQUIRED) endif() if(USE_SYSTEM_URIPARSER) find_package(URIPARSER REQUIRED) endif() if(USE_SYSTEM_ZLIB) find_package(ZLIB REQUIRED) endif() if(USE_SYSTEM_ZZIP) find_package(ZZIP REQUIRED) endif() if(MSVC) set(HAVE_PRAGMA_ONCE TRUE) endif() if(MIKTEX_NATIVE_WINDOWS AND MSVC) check_symbol_exists(alloca "malloc.h" HAVE_ALLOCA) else() check_function_exists(alloca HAVE_ALLOCA) endif() check_symbol_exists(ntohl arpa/inet.h NEED_ARPA_INET_H) check_function_exists(_mktemp_s HAVE__MKTEMP_S) check_function_exists(access HAVE_ACCESS) check_function_exists(arc4random_buf HAVE_ARC4RANDOM_BUF) check_function_exists(chdir HAVE_CHDIR) check_function_exists(chmod HAVE_CHMOD) check_function_exists(chown HAVE_CHOWN) check_function_exists(closedir HAVE_CLOSEDIR) check_function_exists(confstr HAVE_CONFSTR) check_function_exists(ctime HAVE_CTIME) check_function_exists(finite HAVE_FINITE) check_function_exists(fork HAVE_FORK) check_function_exists(fseeko64 HAVE_FSEEKO64) check_function_exists(fstatfs HAVE_FSTATFS) check_function_exists(fstatvfs HAVE_FSTATVFS) check_function_exists(ftello64 HAVE_FTELLO64) check_function_exists(ftime HAVE_FTIME) check_function_exists(futimes HAVE_FUTIMES) check_function_exists(getcwd HAVE_GETCWD) check_function_exists(getenv HAVE_GETENV) check_function_exists(geteuid HAVE_GETEUID) check_function_exists(getopt_long HAVE_GETOPT_LONG) check_function_exists(getpagesize HAVE_GETPAGESIZE) check_function_exists(getpid HAVE_GETPID) check_function_exists(getprogname HAVE_GETPROGNAME) check_function_exists(getrandom HAVE_GETRANDOM) check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) check_function_exists(index HAVE_INDEX) check_function_exists(link HAVE_LINK) check_function_exists(lrand48 HAVE_LRAND48) check_function_exists(lstat HAVE_LSTAT) check_function_exists(memcmp HAVE_MEMCMP) check_function_exists(memmove HAVE_MEMMOVE) check_function_exists(memset HAVE_MEMSET) check_function_exists(mkdir HAVE_MKDIR) check_function_exists(mkostemp HAVE_MKOSTEMP) check_function_exists(mkstemp HAVE_MKSTEMP) check_function_exists(mmap HAVE_MMAP) check_function_exists(open HAVE_OPEN) check_function_exists(opendir HAVE_OPENDIR) check_function_exists(pclose HAVE_PCLOSE) check_function_exists(popen HAVE_POPEN) check_function_exists(posix_fadvise HAVE_POSIX_FADVISE) check_function_exists(putenv HAVE_PUTENV) check_function_exists(rand HAVE_RAND) check_function_exists(rand_r HAVE_RAND_R) check_function_exists(random HAVE_RANDOM) check_function_exists(random_r HAVE_RANDOM_R) check_function_exists(readdir HAVE_READDIR) check_function_exists(readlink HAVE_READLINK) check_function_exists(reallocarray HAVE_REALLOCARRAY) check_function_exists(regexec HAVE_REGEXEC) check_function_exists(rindex HAVE_RINDEX) check_function_exists(rmdir HAVE_RMDIR) check_function_exists(sched_yield HAVE_SCHED_YIELD) check_function_exists(setenv HAVE_SETENV) check_function_exists(setreuid HAVE_SETREUID) check_function_exists(setuid HAVE_SETUID) check_function_exists(sigaction HAVE_SIGACTION) check_function_exists(spawnvp HAVE_SPAWNVP) check_function_exists(stat HAVE_STAT) check_function_exists(statvfs HAVE_STATVFS) check_function_exists(stpcpy HAVE_DECL_STPCPY) check_function_exists(strcasecmp HAVE_STRCASECMP) check_function_exists(strchr HAVE_STRCHR) check_function_exists(strdup HAVE_STRDUP) check_function_exists(strerror HAVE_STRERROR) check_function_exists(strlwr HAVE_STRLWR) check_function_exists(strnlen HAVE_STRNLEN) check_function_exists(strrchr HAVE_STRRCHR) check_function_exists(strtok_r HAVE_STRTOK_R) check_function_exists(strtol HAVE_STRTOL) check_function_exists(strtoll HAVE_STRTOLL) check_function_exists(uname HAVE_UNAME_SYSCALL) check_function_exists(unlink HAVE_UNLINK) check_function_exists(utime HAVE_UTIME) check_function_exists(vfork HAVE_VFORK) check_function_exists(vprintf HAVE_VPRINTF) check_function_exists(waitpid HAVE_WAITPID) if(WITH_UI_MFC) set(HAVE_AFXWIN_H "YES") endif() if(WITH_COM) set(HAVE_ATLBASE_H "YES") endif() check_include_files(alloca.h HAVE_ALLOCA_H) check_include_files(arpa/inet.h HAVE_ARPA_INET_H) check_include_files(assert.h HAVE_ASSERT_H) check_include_files(byteorder.h HAVE_BYTEORDER_H) check_include_files(dirent.h HAVE_DIRENT_H) check_include_files(errno.h HAVE_ERRNO_H) check_include_files(fcntl.h HAVE_FCNTL_H) check_include_files(float.h HAVE_FLOAT_H) check_include_files(intsave.h HAVE_INTSAFE_H) check_include_files(inttypes.h HAVE_INTTYPES_H) check_include_files(io.h HAVE_IO_H) check_include_files(libgen.h HAVE_LIBGEN_H) check_include_files(libintl.h HAVE_LIBINTL_H) check_include_files(limits.h HAVE_LIMITS_H) check_include_files(mcheck.h HAVE_MCHECK_H) check_include_files(memory.h HAVE_MEMORY_H) check_include_files(ndir.h HAVE_NDIR_H) check_include_files(netinet/in.h HAVE_NETINET_IN_H) check_include_files(stat.h HAVE_STAT_H) check_include_files(stdbool.h HAVE_STDBOOL_H) check_include_files(stdarg.h HAVE_STDARG_H) check_include_files(stddef.h HAVE_STDDEF_H) check_include_files(stdint.h HAVE_STDINT_H) check_include_files(stdlib.h HAVE_STDLIB_H) check_include_files(string.h HAVE_STRING_H) check_include_files(strings.h HAVE_STRINGS_H) check_include_files(sys/dir.h HAVE_SYS_DIR_H) check_include_files(sys/mman.h HAVE_SYS_MMAN_H) check_include_files(sys/mount.h HAVE_SYS_MOUNT_H) check_include_files(sys/ndir.h HAVE_SYS_NDIR_H) check_include_files(sys/param.h HAVE_SYS_PARAM_H) check_include_files(sys/stat.h HAVE_SYS_STAT_H) check_include_files(sys/statfs.h HAVE_SYS_STATFS_H) check_include_files(sys/statvfs.h HAVE_SYS_STATVFS_H) check_include_files(sys/time.h HAVE_SYS_TIME_H) check_include_files(sys/timeb.h HAVE_SYS_TIMEB_H) check_include_files(sys/types.h HAVE_SYS_TYPES_H) check_include_files(sys/utime.h HAVE_SYS_UTIME_H) check_include_files(sys/utsname.h HAVE_SYS_UTSNAME_H) check_include_files(sys/wait.h HAVE_SYS_WAIT_H) check_include_files(sys/vfs.h HAVE_SYS_VFS_H) check_include_files(unistd.h HAVE_UNISTD_H) check_include_files(utime.h HAVE_UTIME_H) check_include_files(sched.h HAVE_SCHED_H) check_struct_has_member("struct dirent" d_type dirent.h HAVE_STRUCT_DIRENT_D_TYPE) check_struct_has_member("struct stat" st_mtim sys/stat.h HAVE_STRUCT_STAT_ST_MTIM) check_struct_has_member("struct statfs" f_flags sys/statfs.h HAVE_STRUCT_STATFS_F_FLAGS) check_struct_has_member("struct statfs" f_fstypename sys/statfs.h HAVE_STRUCT_STATFS_F_FSTYPENAME) check_struct_has_member("struct statvfs" f_basetype sys/statvfs.h HAVE_STRUCT_STATVFS_F_BASETYPE) check_struct_has_member("struct statvfs" f_fstypename sys/statvfs.h HAVE_STRUCT_STATVFS_F_FSTYPENAME) check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF) check_variable_exists(timezone HAVE_TIMEZONE) check_type_size("long long" LONG_LONG) set(SIZEOF_LONG_LONG ${LONG_LONG}) check_type_size("int" SIZEOF_INT) check_type_size("long" SIZEOF_LONG) check_type_size("size_t" SIZEOF_SIZE_T) check_type_size("void*" SIZEOF_VOID_P) if(HAVE_LIMITS_H) set(STDC_HEADERS) endif() ############################################################################### ## set the build type ## ## the build type is derived from the MiKTeX release state; see ## miktex-version.cmake if(MIKTEX_RELEASE_STATE EQUAL 0) if(MIKTEX_NATIVE_WINDOWS) set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "The build type." FORCE) else() set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The build type." FORCE) endif() elseif(MIKTEX_RELEASE_STATE EQUAL 1) if(MIKTEX_NATIVE_WINDOWS) set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "The build type." FORCE) #add_definitions(-DMIKTEX_DEBUG) else() set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The build type." FORCE) endif() elseif(MIKTEX_RELEASE_STATE EQUAL 4) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "The build type." FORCE) add_definitions(-DMIKTEX_DEBUG) endif() mark_as_advanced(CMAKE_BUILD_TYPE) ############################################################################### ## add global definitions add_definitions( -DHAVE_CONFIG_H -DMIKTEX ) if(WITH_UI_QT) add_definitions( -DMIKTEX_QT ) endif() if(MIKTEX_NATIVE_WINDOWS) add_definitions( -DMIKTEX_WINDOWS ) if(MSVC) ## better bind to latest CRT/MFC DLLs if redistributing as private ## assemblies add_definitions( -D_BIND_TO_CURRENT_ATL_VERSION=1 -D_BIND_TO_CURRENT_CRT_VERSION=1 -D_BIND_TO_CURRENT_MFC_VERSION=1 ) endif() if(WITH_UI_MFC) add_definitions( -DMIKTEX_ATLMFC ) endif() ## use overloads for unsecure functions #add_definitions( # -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 #) elseif(MIKTEX_UNIX_ALIKE) add_definitions( -DMIKTEX_UNIX ) if(MIKTEX_MACOS_BUNDLE) add_definitions( -DMIKTEX_MACOS_BUNDLE ) endif() endif() ############################################################################### ## add global include directories include_directories(BEFORE ${CMAKE_BINARY_DIR}/include ${CMAKE_SOURCE_DIR}/include ) # TODO: interface library include_directories(BEFORE ${CMAKE_SOURCE_DIR}/${MIKTEX_REL_UI_DIR}/include ) ############################################################################### ## configure files file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} CMAKE_SOURCE_DIR_NATIVE) file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} CMAKE_BINARY_DIR_NATIVE) configure_file( include/miktex/Version.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/miktex/Version.h ) configure_file( include/miktex/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/include/miktex/config.h ) configure_file( Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile ) configure_file( BuildUtilities/docbook/catalog.in ${CMAKE_CURRENT_BINARY_DIR}/BuildUtilities/docbook/catalog ) configure_file( Admin/Scripts/makelocfile.cmd.in ${CMAKE_CURRENT_BINARY_DIR}/Admin/Scripts/makelocfile.cmd ) configure_file( Admin/Scripts/putj2000version.cmd.in ${CMAKE_CURRENT_BINARY_DIR}/Admin/Scripts/putj2000version.cmd ) ############################################################################### ## add/import 3rd party libs ## ## base libraries (on which other libraries depend on) must be defined early if(USE_SYSTEM_ZLIB) get_filename_component(suffix ${ZLIB_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::ZLIB SHARED IMPORTED) else() add_library(MiKTeX::Imported::ZLIB STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::ZLIB PROPERTIES IMPORTED_LOCATION "${ZLIB_LIBRARY}" INTERFACE_COMPILE_DEFINITIONS "HAVE_LIBZ=1;HAVE_ZLIB=1;HAVE_ZLIB_H=1;HAVE_ZLIB_COMPRESS2=1" INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_ZLIB_DIR}) endif() if(USE_SYSTEM_APR) get_filename_component(suffix ${APR_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::APR SHARED IMPORTED) else() add_library(MiKTeX::Imported::APR STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::APR PROPERTIES IMPORTED_LOCATION "${APR_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${APR_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_APR_DIR}) endif() if(USE_SYSTEM_APRUTIL) get_filename_component(suffix ${APRUTIL_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::APRUTIL SHARED IMPORTED) else() add_library(MiKTeX::Imported::APRUTIL STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::APRUTIL PROPERTIES IMPORTED_LOCATION "${APRUTIL_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${APRUTIL_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_APR_UTIL_DIR}) endif() if(USE_SYSTEM_BZIP2) get_filename_component(suffix ${BZIP2_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::BZIP2 SHARED IMPORTED) set(bzip2_dll_name MiKTeX::Imported::BZIP2) else() add_library(MiKTeX::Imported::BZIP2 STATIC IMPORTED) set(bzip2_lib_name MiKTeX::Imported::BZIP2) endif() set_target_properties(MiKTeX::Imported::BZIP2 PROPERTIES IMPORTED_LOCATION "${BZIP2_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${BZIP2_INCLUDE_DIR}" ) else() add_subdirectory(${MIKTEX_REL_BZIP2_DIR}) endif() if(MIKTEX_NATIVE_WINDOWS) add_subdirectory(${MIKTEX_REL_FREEGLUT_DIR}) endif() if(USE_SYSTEM_FREETYPE2) get_filename_component(suffix ${FREETYPE_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::FREETYPE2 SHARED IMPORTED) else() add_library(MiKTeX::Imported::FREETYPE2 STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::FREETYPE2 PROPERTIES IMPORTED_LOCATION "${FREETYPE_LIBRARY}" INTERFACE_COMPILE_DEFINITIONS "HAVE_FT2BUILD_H=1;HAVE_LIBFREETYPE=1" INTERFACE_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_FREETYPE2_DIR}) endif() if(USE_SYSTEM_PIXMAN) get_filename_component(suffix ${PIXMAN_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::PIXMAN SHARED IMPORTED) else() add_library(MiKTeX::Imported::PIXMAN STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::PIXMAN PROPERTIES IMPORTED_LOCATION "${PIXMAN_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${PIXMAN_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_PIXMAN_DIR}) endif() if(USE_SYSTEM_PNG) get_filename_component(suffix ${PNG_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::PNG SHARED IMPORTED) else() add_library(MiKTeX::Imported::PNG STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::PNG PROPERTIES IMPORTED_LOCATION "${PNG_LIBRARY}" INTERFACE_COMPILE_DEFINITIONS HAVE_LIBPNG=1 INTERFACE_INCLUDE_DIRECTORIES "${PNG_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES MiKTeX::Imported::ZLIB ) else() add_subdirectory(${MIKTEX_REL_PNG_DIR}) endif() if(USE_SYSTEM_CAIRO) get_filename_component(suffix ${CAIRO_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::CAIRO SHARED IMPORTED) else() add_library(MiKTeX::Imported::CAIRO STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::CAIRO PROPERTIES IMPORTED_LOCATION "${CAIRO_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${CAIRO_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "MiKTeX::Imported::FREETYPE2;MiKTeX::Imported::PIXMAN;MiKTeX::Imported::PNG;MiKTeX::Imported::ZLIB;Threads::Threads" ) else() add_subdirectory(${MIKTEX_REL_CAIRO_DIR}) endif() if(USE_SYSTEM_CURL) get_filename_component(suffix ${CURL_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::CURL SHARED IMPORTED) else() add_library(MiKTeX::Imported::CURL STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::CURL PROPERTIES IMPORTED_LOCATION "${CURL_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_CURL_DIR}) endif() if(USE_SYSTEM_EXPAT) get_filename_component(suffix ${EXPAT_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::EXPAT SHARED IMPORTED) else() add_library(MiKTeX::Imported::EXPAT STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::EXPAT PROPERTIES IMPORTED_LOCATION "${EXPAT_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${EXPAT_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_EXPAT_DIR}) endif() if(USE_SYSTEM_FMT) get_filename_component(suffix ${FMT_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::FMT SHARED IMPORTED) else() add_library(MiKTeX::Imported::FMT STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::FMT PROPERTIES IMPORTED_LOCATION "${FMT_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${FMT_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_FMT_DIR}) endif() if(USE_SYSTEM_FONTCONFIG) get_filename_component(suffix ${FONTCONFIG_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::FONTCONFIG SHARED IMPORTED) else() add_library(MiKTeX::Imported::FONTCONFIG STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::FONTCONFIG PROPERTIES IMPORTED_LOCATION "${FONTCONFIG_LIBRARY}" INTERFACE_COMPILE_DEFINITIONS HAVE_LIBFONTCONFIG=1 INTERFACE_INCLUDE_DIRECTORIES "${FONTCONFIG_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_FONTCONFIG_DIR}) endif() if(USE_SYSTEM_FRIBIDI) get_filename_component(suffix ${FRIBIDI_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::FRIBIDI SHARED IMPORTED) else() add_library(MiKTeX::Imported::FRIBIDI STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::FRIBIDI PROPERTIES IMPORTED_LOCATION "${FRIBIDI_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${FRIBIDI_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_FRIBIDI_DIR}) endif() if(USE_SYSTEM_GLM) get_filename_component(suffix ${GLM_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::GLM SHARED IMPORTED) else() add_library(MiKTeX::Imported::GLM STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::GLM PROPERTIES IMPORTED_LOCATION "${GLM_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${GLM_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_GLM_DIR}) endif() if(USE_SYSTEM_JPEG) get_filename_component(suffix ${JPEG_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::JPEG SHARED IMPORTED) else() add_library(MiKTeX::Imported::JPEG STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::JPEG PROPERTIES IMPORTED_LOCATION "${JPEG_LIBRARY}" INTERFACE_COMPILE_DEFINITIONS HAVE_LIBJPEG=1 INTERFACE_INCLUDE_DIRECTORIES "${JPEG_INCLUDE_DIR}" ) else() add_subdirectory(${MIKTEX_REL_JPEG_DIR}) endif() if(USE_SYSTEM_GD) get_filename_component(suffix ${GD_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::GD SHARED IMPORTED) else() add_library(MiKTeX::Imported::GD STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::GD PROPERTIES IMPORTED_LOCATION "${GD_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${GD_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_GD_DIR}) endif() if(USE_SYSTEM_GMP) get_filename_component(suffix ${GMP_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::GMP SHARED IMPORTED) else() add_library(MiKTeX::Imported::GMP STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::GMP PROPERTIES IMPORTED_LOCATION "${GMP_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_GMP_DIR}) endif() if(USE_SYSTEM_GRAPHITE2) get_filename_component(suffix ${GRAPHITE2_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::GRAPHITE2 SHARED IMPORTED) else() add_library(MiKTeX::Imported::GRAPHITE2 STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::GRAPHITE2 PROPERTIES IMPORTED_LOCATION "${GRAPHITE2_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${GRAPHITE2_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_GRAPHITE2_DIR}) endif() if(USE_SYSTEM_HARFBUZZ) get_filename_component(suffix ${HARFBUZZ_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::HARFBUZZ SHARED IMPORTED) else() add_library(MiKTeX::Imported::HARFBUZZ STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::HARFBUZZ PROPERTIES IMPORTED_LOCATION "${HARFBUZZ_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${HARFBUZZ_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_HARFBUZZ_DIR}) endif() if(USE_SYSTEM_HARFBUZZ_ICU) get_filename_component(suffix ${HARFBUZZ_ICU_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::HARFBUZZ_ICU SHARED IMPORTED) else() add_library(MiKTeX::Imported::HARFBUZZ_ICU STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::HARFBUZZ_ICU PROPERTIES IMPORTED_LOCATION "${HARFBUZZ_ICU_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${HARFBUZZ_ICU_INCLUDE_DIRS}" ) else() #add_subdirectory(${MIKTEX_REL_HARFBUZZ_DIR}) endif() if(USE_SYSTEM_HUNSPELL) get_filename_component(suffix ${HUNSPELL_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::HUNSPELL SHARED IMPORTED) else() add_library(MiKTeX::Imported::HUNSPELL STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::HUNSPELL PROPERTIES IMPORTED_LOCATION "${HUNSPELL_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${HUNSPELL_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_HUNSPELL_DIR}) endif() if(USE_SYSTEM_LOG4CXX) get_filename_component(suffix ${LOG4CXX_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::LOG4CXX SHARED IMPORTED) else() add_library(MiKTeX::Imported::LOG4CXX STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::LOG4CXX PROPERTIES IMPORTED_LOCATION "${LOG4CXX_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${LOG4CXX_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_LOG4CXX_DIR}) endif() if(USE_SYSTEM_LZMA) get_filename_component(suffix ${LIBLZMA_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::LZMA SHARED IMPORTED) else() add_library(MiKTeX::Imported::LZMA STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::LZMA PROPERTIES IMPORTED_LOCATION "${LIBLZMA_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${LIBLZMA_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_XZ_DIR}) endif() if(USE_SYSTEM_MPFR) get_filename_component(suffix ${MPFR_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::MPFR SHARED IMPORTED) else() add_library(MiKTeX::Imported::MPFR STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::MPFR PROPERTIES IMPORTED_LOCATION "${MPFR_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${MPFR_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_MPFR_DIR}) endif() if(USE_SYSTEM_MPFI) get_filename_component(suffix ${MPFI_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::MPFI SHARED IMPORTED) else() add_library(MiKTeX::Imported::MPFI STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::MPFI PROPERTIES IMPORTED_LOCATION "${MPFI_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${MPFI_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_MPFI_DIR}) endif() if(USE_SYSTEM_MSPACK) get_filename_component(suffix ${MSPACK_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::MSPACK SHARED IMPORTED) else() add_library(MiKTeX::Imported::MSPACK STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::MSPACK PROPERTIES IMPORTED_LOCATION "${MSPACK_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${MSPACK_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_MSPACK_DIR}) endif() if(USE_SYSTEM_OPENGL) get_filename_component(suffix ${OPENGL_gl_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::OPENGL SHARED IMPORTED) else() add_library(MiKTeX::Imported::OPENGL STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::OPENGL PROPERTIES IMPORTED_LOCATION "${OPENGL_gl_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}" ) get_filename_component(suffix ${OPENGL_glu_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::GLU SHARED IMPORTED) else() add_library(MiKTeX::Imported::GLU STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::GLU PROPERTIES IMPORTED_LOCATION "${OPENGL_glu_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}" ) endif() if(USE_SYSTEM_OPENSSL_CRYPTO) get_filename_component(suffix ${OPENSSL_CRYPTO_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::OPENSSL::CRYPTO SHARED IMPORTED) else() add_library(MiKTeX::Imported::OPENSSL::CRYPTO STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::OPENSSL::CRYPTO PROPERTIES IMPORTED_LOCATION "${OPENSSL_CRYPTO_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}" ) elseif(WITH_LIBRESSL_CRYPTO) add_subdirectory(${MIKTEX_REL_LIBRESSL_DIR}) set(openssl_crypto_dll_name ${libressl_crypto_dll_name}) set(openssl_crypto_lib_name ${libressl_crypto_lib_name}) endif() if(USE_SYSTEM_POPPLER) get_filename_component(suffix ${POPPLER_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::POPPLER SHARED IMPORTED) else() add_library(MiKTeX::Imported::POPPLER STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::POPPLER PROPERTIES IMPORTED_LOCATION "${POPPLER_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${POPPLER_INCLUDE_DIRS}" ) if(POPPLER_VERSION VERSION_LESS 0.59.0) message(FATAL_ERROR "libpoppler >=0.59.0 is required.") else() set_target_properties(MiKTeX::Imported::POPPLER PROPERTIES INTERFACE_COMPILE_DEFINITIONS MIKTEX_POPPLER_59=1 ) endif() else() add_subdirectory(${MIKTEX_REL_POPPLER_DIR}) endif() if(USE_SYSTEM_POPPLER_QT AND WITH_UI_QT) get_filename_component(suffix ${POPPLER_QT${QT_SERIES}_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::POPPLER_QT SHARED IMPORTED) else() add_library(MiKTeX::Imported::POPPLER_QT STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::POPPLER_QT PROPERTIES IMPORTED_LOCATION "${POPPLER_QT${QT_SERIES}_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${POPPLER_QT${QT_SERIES}_INCLUDE_DIRS}" ) else() #add_subdirectory(${MIKTEX_REL_POPPLER_DIR}) endif() if(USE_SYSTEM_POPT) get_filename_component(suffix ${POPT_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::POPT SHARED IMPORTED) else() add_library(MiKTeX::Imported::POPT STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::POPT PROPERTIES IMPORTED_LOCATION "${POPT_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${POPT_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_POPT_DIR}) endif() if(USE_SYSTEM_URIPARSER) get_filename_component(suffix ${URIPARSER_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::URIPARSER SHARED IMPORTED) else() add_library(MiKTeX::Imported::URIPARSER STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::URIPARSER PROPERTIES IMPORTED_LOCATION "${URIPARSER_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${URIPARSER_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_URIPARSER_DIR}) endif() if(USE_SYSTEM_ZZIP) get_filename_component(suffix ${ZZIP_LIBRARY} EXT) if (suffix STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) add_library(MiKTeX::Imported::ZZIP SHARED IMPORTED) else() add_library(MiKTeX::Imported::ZZIP STATIC IMPORTED) endif() set_target_properties(MiKTeX::Imported::ZZIP PROPERTIES IMPORTED_LOCATION "${ZZIP_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${ZZIP_INCLUDE_DIRS}" ) else() add_subdirectory(${MIKTEX_REL_ZZIP_DIR}) endif() ############################################################################### ## add the MiKTeX components enable_testing() add_subdirectory(${MIKTEX_REL_APP_DIR}) add_subdirectory(${MIKTEX_REL_AUTOSP_DIR}) add_subdirectory(${MIKTEX_REL_AXOHELP_DIR}) add_subdirectory(${MIKTEX_REL_BIBARTS_DIR}) add_subdirectory(${MIKTEX_REL_BIBTEXX_DIR}) add_subdirectory(${MIKTEX_REL_BIBTEX_DIR}) add_subdirectory(${MIKTEX_REL_BUILD_TOOLS_ETC_DIR}) add_subdirectory(${MIKTEX_REL_C4P_DIR}) add_subdirectory(${MIKTEX_REL_CFG_DIR}) add_subdirectory(${MIKTEX_REL_CHKTEX_DIR}) add_subdirectory(${MIKTEX_REL_CJKUTILS_DIR}) add_subdirectory(${MIKTEX_REL_CONFIGLIB_DIR}) add_subdirectory(${MIKTEX_REL_CONFIG_DIR}) add_subdirectory(${MIKTEX_REL_CORE_DIR}) add_subdirectory(${MIKTEX_REL_CWEB_DIR}) add_subdirectory(${MIKTEX_REL_DEFAULTS_DIR}) add_subdirectory(${MIKTEX_REL_DEVNAG_DIR}) add_subdirectory(${MIKTEX_REL_DOC_DIR}) add_subdirectory(${MIKTEX_REL_DVICOPY_DIR}) add_subdirectory(${MIKTEX_REL_DVIPDFMX_DIR}) add_subdirectory(${MIKTEX_REL_DVIPNG_DIR}) add_subdirectory(${MIKTEX_REL_DVIPS_DIR}) add_subdirectory(${MIKTEX_REL_DVISVGM_DIR}) add_subdirectory(${MIKTEX_REL_EGL_REGISTRY_DIR}) add_subdirectory(${MIKTEX_REL_EPSTOPDF_DIR}) add_subdirectory(${MIKTEX_REL_ETEX_DIR}) add_subdirectory(${MIKTEX_REL_EXTRACTOR_DIR}) add_subdirectory(${MIKTEX_REL_FINDTEXMF_DIR}) add_subdirectory(${MIKTEX_REL_FRIBIDIXETEX_DIR}) add_subdirectory(${MIKTEX_REL_GREGORIO_DIR}) add_subdirectory(${MIKTEX_REL_GSF2PK_DIR}) add_subdirectory(${MIKTEX_REL_HITEX_DIR}) add_subdirectory(${MIKTEX_REL_INIPOOL_DIR}) add_subdirectory(${MIKTEX_REL_INITEXMF_DIR}) add_subdirectory(${MIKTEX_REL_KPSEMU_DIR}) add_subdirectory(${MIKTEX_REL_KPSEWHICH_DIR}) add_subdirectory(${MIKTEX_REL_LCDF_TYPETOOLS_DIR}) add_subdirectory(${MIKTEX_REL_LACHECK_DIR}) add_subdirectory(${MIKTEX_REL_LOC_DIR}) add_subdirectory(${MIKTEX_REL_LUATEX_DIR}) add_subdirectory(${MIKTEX_REL_LUA53_DIR}) add_subdirectory(${MIKTEX_REL_M_TX_DIR}) add_subdirectory(${MIKTEX_REL_MAKEINDEX_DIR}) add_subdirectory(${MIKTEX_REL_MAKEX_DIR}) add_subdirectory(${MIKTEX_REL_MD5WALK_DIR}) add_subdirectory(${MIKTEX_REL_MD5_DIR}) add_subdirectory(${MIKTEX_REL_MFWARE_DIR}) add_subdirectory(${MIKTEX_REL_MF_DIR}) add_subdirectory(${MIKTEX_REL_MIKTEXSETUP_DIR}) add_subdirectory(${MIKTEX_REL_MIKTEX_DIR}) add_subdirectory(${MIKTEX_REL_MPMLIB_DIR}) add_subdirectory(${MIKTEX_REL_MPM_DIR}) add_subdirectory(${MIKTEX_REL_MP_DIR}) add_subdirectory(${MIKTEX_REL_MTHELP_DIR}) add_subdirectory(${MIKTEX_REL_NLOHMANN_JSON_DIR}) add_subdirectory(${MIKTEX_REL_OMEGAWARE_DIR}) add_subdirectory(${MIKTEX_REL_OPENGL_REGISTRY_DIR}) add_subdirectory(${MIKTEX_REL_OTPS_DIR}) add_subdirectory(${MIKTEX_REL_PADOUT_DIR}) add_subdirectory(${MIKTEX_REL_PATGEN_DIR}) add_subdirectory(${MIKTEX_REL_PDFTEX_DIR}) add_subdirectory(${MIKTEX_REL_PMX_DIR}) add_subdirectory(${MIKTEX_REL_POPT_WRAPPER_DIR}) add_subdirectory(${MIKTEX_REL_PPLIB_DIR}) add_subdirectory(${MIKTEX_REL_PROGRAMS_ETC_DIR}) add_subdirectory(${MIKTEX_REL_PS2PK_DIR}) add_subdirectory(${MIKTEX_REL_PSUTILS_DIR}) add_subdirectory(${MIKTEX_REL_PTEXENC_DIR}) add_subdirectory(${MIKTEX_REL_RES_DIR}) add_subdirectory(${MIKTEX_REL_SETUPLIB_DIR}) add_subdirectory(${MIKTEX_REL_SYNCTEX_CLI_DIR}) add_subdirectory(${MIKTEX_REL_TDSUTIL_DIR}) add_subdirectory(${MIKTEX_REL_TECKIT_DIR}) add_subdirectory(${MIKTEX_REL_TEX4HT_DIR}) add_subdirectory(${MIKTEX_REL_TEXIFY_DIR}) add_subdirectory(${MIKTEX_REL_TEXJP_DIR}) add_subdirectory(${MIKTEX_REL_TEXMF_DIR}) add_subdirectory(${MIKTEX_REL_TEXWARE_DIR}) add_subdirectory(${MIKTEX_REL_TEX_DIR}) add_subdirectory(${MIKTEX_REL_TEX_ETC_DIR}) add_subdirectory(${MIKTEX_REL_TIE_DIR}) add_subdirectory(${MIKTEX_REL_TOUCH_DIR}) add_subdirectory(${MIKTEX_REL_TRACE_DIR}) add_subdirectory(${MIKTEX_REL_TTF2PK2_DIR}) add_subdirectory(${MIKTEX_REL_UPMENDEX_DIR}) add_subdirectory(${MIKTEX_REL_UTIL_DIR}) add_subdirectory(${MIKTEX_REL_W2CEMU_DIR}) add_subdirectory(${MIKTEX_REL_WEB2C_DIR}) add_subdirectory(${MIKTEX_REL_WEB_DIR}) add_subdirectory(${MIKTEX_REL_XETEX_DIR}) add_subdirectory(${MIKTEX_REL_XINDY_DIR}) add_subdirectory(${MIKTEX_REL_XML2PMX_DIR}) add_subdirectory(${MIKTEX_REL_XPDF_DIR}) if(WITH_ASYMPTOTE) add_subdirectory(${MIKTEX_REL_ASYMPTOTE_DIR}) endif() if(WITH_CONFIG_FILES) add_subdirectory(${MIKTEX_REL_CONFIGFILES_DIR}) endif() if(WITH_TPMS) add_subdirectory(${MIKTEX_REL_TPM_DIR}) endif() if(WITH_UI_QT) add_subdirectory(${MIKTEX_REL_TEXWORKS_DIR}) add_subdirectory(${MIKTEX_REL_UI_QT_DIR}) endif() if(WITH_UI_MFC) add_subdirectory(${MIKTEX_REL_SETUP_MFC_DIR}) add_subdirectory(${MIKTEX_REL_YAP_MFC_DIR}) endif() if(WITH_MPC) add_subdirectory(${MIKTEX_REL_MPC_DIR}) endif() if(WITH_COM) add_subdirectory(Libraries/MiKTeX/Core/COM/test) add_subdirectory(Libraries/MiKTeX/PackageManager/COM/test) endif() if(MIKTEX_NATIVE_WINDOWS) add_subdirectory(${MIKTEX_REL_ARCTRL_WIN_DIR}) add_subdirectory(${MIKTEX_REL_DIB_DIR}) add_subdirectory(${MIKTEX_REL_DVI_DIR}) add_subdirectory(${MIKTEX_REL_MTPRINT_DIR}) add_subdirectory(${MIKTEX_REL_UNXEMU_DIR}) add_subdirectory(${MIKTEX_REL_UTF8WRAP_DIR}) endif() if(MIKTEX_NATIVE_WINDOWS) add_subdirectory(${MIKTEX_REL_LUAJIT_DIR}) endif() if(NOT HAVE_GETOPT_LONG) add_subdirectory(${MIKTEX_REL_GETOPT_DIR}) endif() if(NOT HAVE_REGEXEC) add_subdirectory(${MIKTEX_REL_REGEX_DIR}) endif() if(WITH_UI_QT) add_subdirectory(${MIKTEX_REL_CONSOLE_QT_DIR}) endif() ############################################################################### ## API documentation if(WITH_MIKTEX_API_DOC) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/Documentation/API/html/index.html COMMAND ${DOXYGEN_EXECUTABLE} DEPENDS Doxyfile WORKING_DIRECTORY ${CMAKE_BINARY_DIR} VERBATIM ) add_custom_target(gen-api-doc-html ALL DEPENDS ${CMAKE_BINARY_DIR}/Documentation/API/html/index.html ) set_property(TARGET gen-api-doc-html PROPERTY FOLDER ${MIKTEX_CURRENT_FOLDER}) install( DIRECTORY ${CMAKE_BINARY_DIR}/Documentation/API/html/ DESTINATION ${MIKTEX_DOC_DESTINATION_DIR}/api/html ) endif() ############################################################################### ## configure Qt plugins (macOS) if(MIKTEX_MACOS_BUNDLE) file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf" "[Paths]\nPlugins = ../PlugIns\n" ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/qt.conf" DESTINATION "${MIKTEX_BINARY_DESTINATION_DIR}" ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/qt.conf" DESTINATION "${MIKTEX_INTERNAL_BINARY_DESTINATION_DIR}" ) endif() ############################################################################### ## bootstrapping if(WITH_BOOTSTRAPPING) if(DEFINED ENV{MIKTEX_REPOSITORY}) set(default_repository $ENV{MIKTEX_REPOSITORY}) else() set(default_repository "https://ctan.org/tex-archive/systems/win32/miktex/tm/packages/") endif() set(MIKTEX_DEFAULT_REPOSITORY ${default_repository} CACHE STRING "MiKTeX package repository" ) if(MIKTEX_RELEASE_STATE EQUAL 1) set(remote_repository "${MIKTEX_DEFAULT_REPOSITORY}next/" ) else() set(remote_repository "${MIKTEX_DEFAULT_REPOSITORY}" ) endif() list(APPEND bootstrapping_files miktex-zzdb1-${MIKTEX_PACKAGES_MAJOR_MINOR_STR}.tar.lzma ) list(APPEND bootstrapping_files miktex-zzdb3-${MIKTEX_PACKAGES_MAJOR_MINOR_STR}.tar.lzma ) foreach(p ${MIKTEX_BOOTSTRAPPING_PACKAGES}) list(APPEND bootstrapping_files ${p}.tar.lzma ) endforeach() foreach(f ${bootstrapping_files}) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${f} COMMAND ${CURL_EXECUTABLE} -o ${CMAKE_CURRENT_BINARY_DIR}/${f} -fsSL ${remote_repository}${f} ) list(APPEND generated_bootstrapping_files ${CMAKE_CURRENT_BINARY_DIR}/${f}) endforeach() add_custom_target(gen-bootstrapping-files ALL DEPENDS ${generated_bootstrapping_files} ) install( FILES ${generated_bootstrapping_files} DESTINATION ${MIKTEX_BOOTSTRAPPING_DESTINATION_DIR} ) endif() ############################################################################### ## packaging find_program(RPMBUILD_EXECUTABLE NAMES rpmbuild) if(RPMBUILD_EXECUTABLE) list(APPEND CPACK_GENERATOR RPM) endif() if(UNIX AND NOT APPLE AND NOT RPMBUILD_EXECUTABLE) list(APPEND CPACK_GENERATOR DEB) endif() if(MIKTEX_MACOS_BUNDLE) set(CPACK_GENERATOR DragNDrop) endif() configure_file( "${CMAKE_SOURCE_DIR}/Packaging/cpack-config.cmake.in" "${CMAKE_BINARY_DIR}/Packaging/cpack-config.cmake" @ONLY ) set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_BINARY_DIR}/Packaging/cpack-config.cmake" ) set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/Packaging/package-description.txt" ) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MiKTeX: a scalable TeX distribution" ) set(CPACK_PACKAGE_CONTACT "Christian Schenk " ) set(CPACK_PACKAGE_VENDOR "MiKTeX.org" ) # TODO configure_file( "${CMAKE_SOURCE_DIR}/COPYING.md" "${CMAKE_BINARY_DIR}/COPYING.txt" ) set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/COPYING.txt" ) set(CPACK_PACKAGE_FILE_NAME "miktex-${MIKTEX_VERSION_STR}-${MIKTEX_TARGET_SYSTEM_TAG}" ) set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") set(CPACK_DEBIAN_PACKAGE_RELEASE "${MIKTEX_LINUX_DIST_CODE_NAME}${MIKTEX_PACKAGE_REVISION}") set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "${MIKTEX_HQ_BASE_URL_NO_SLASH}") find_program(DPKG_SHLIBDEPS_EXECUTABLE NAMES dpkg-shlibdeps) set(debian_install_dependencies "debconf (>= 0.2.17)") set(debian_runtime_dependencies "fontconfig") if(DPKG_SHLIBDEPS_EXECUTABLE) set(CPACK_DEBIAN_PACKAGE_DEPENDS "${debian_install_dependencies}, ${debian_runtime_dependencies}") set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS TRUE) else() set(CPACK_DEBIAN_PACKAGE_DEPENDS "${debian_install_dependencies}, ${debian_runtime_dependencies}, libbz2-1.0, libc6 (>= 2.14), libcairo2 (>= 1.2.4), libcurl3-gnutls (>= 7.16.2), libexpat1 (>= 2.0.1), libfontconfig1 (>= 2.11), libfreetype6 (>= 2.3.9), libfribidi0 (>= 0.19.2), libgcc1 (>= 1:4.0), libgd3 (>= 2.1.0~alpha~), libgmp10, libgraphite2-3 (>= 1.2.2), libharfbuzz-icu0 (>= 0.9.9), libharfbuzz0b (>= 1.4.1), libicu57 (>= 57.1-1~), libjpeg62-turbo (>= 1.3.1), liblog4cxx10v5, liblzma5 (>= 5.1.1alpha+20120614), libmpfr4 (>= 3.1.3), libmspack0 (>= 0.4), libpixman-1-0 (>= 0.10.0), libpng16-16 (>= 1.6.2-1), libpoppler57 (>= 0.38.0), libpopt0 (>= 1.14), libssl1.0.2 (>= 1.0.2d), libstdc++6 (>= 6), liburiparser1 (>= 0.6.0), libzzip-0-13 (>= 0.13.56), zlib1g (>= 1:1.1.4)" ) endif() set(CPACK_DEBIAN_PACKAGE_SECTION "tex" ) #configure_file( # "${CMAKE_SOURCE_DIR}/Packaging/deb/config.in" # "${CMAKE_BINARY_DIR}/Packaging/deb/config" #) #list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA # "${CMAKE_BINARY_DIR}/Packaging/deb/config" #) #configure_file( # "${CMAKE_SOURCE_DIR}/Packaging/deb/postinst.in" # "${CMAKE_BINARY_DIR}/Packaging/deb/postinst" #) #list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA # "${CMAKE_BINARY_DIR}/Packaging/deb/postinst" #) configure_file( "${CMAKE_SOURCE_DIR}/Packaging/deb/prerm.in" "${CMAKE_BINARY_DIR}/Packaging/deb/prerm" ) list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_BINARY_DIR}/Packaging/deb/prerm" ) #configure_file( # "${CMAKE_SOURCE_DIR}/Packaging/deb/templates.in" # "${CMAKE_BINARY_DIR}/Packaging/deb/templates" #) #list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA # "${CMAKE_BINARY_DIR}/Packaging/deb/templates" #) set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") set(CPACK_RPM_PACKAGE_RELEASE ${MIKTEX_PACKAGE_REVISION}) if(MIKTEX_LINUX_DIST STREQUAL "rockylinux") set(CPACK_RPM_PACKAGE_RELEASE_DIST ".el${MIKTEX_LINUX_DIST_VERSION}") elseif(MIKTEX_LINUX_DIST STREQUAL "fedora") set(CPACK_RPM_PACKAGE_RELEASE_DIST ".fc${MIKTEX_LINUX_DIST_VERSION}") elseif(MIKTEX_LINUX_DIST STREQUAL "opensuse") if(MIKTEX_LINUX_DIST_VERSION MATCHES "([0-9]+)\\.([0-9]+)") math( EXPR MIKTEX_LINUX_DIST_VERSION_INT "(10 * ${CMAKE_MATCH_1}) + ${CMAKE_MATCH_2}" ) else() math( EXPR MIKTEX_LINUX_DIST_VERSION_INT "10 * ${MIKTEX_LINUX_DIST_VERSION}" ) endif() set(CPACK_RPM_PACKAGE_RELEASE_DIST ".lp${MIKTEX_LINUX_DIST_VERSION_INT}") endif() set(CPACK_RPM_PACKAGE_URL "${MIKTEX_HQ_BASE_URL_NO_SLASH}") set(CPACK_RPM_PACKAGE_AUTOREQ 1) configure_file( "${CMAKE_SOURCE_DIR}/Packaging/rpm/post-install.sh.in" "${CMAKE_BINARY_DIR}/Packaging/rpm/post-install.sh" ) set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_BINARY_DIR}/Packaging/rpm/post-install.sh" ) configure_file( "${CMAKE_SOURCE_DIR}/Packaging/rpm/pre-uninstall.sh.in" "${CMAKE_BINARY_DIR}/Packaging/rpm/pre-uninstall.sh" ) set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${CMAKE_BINARY_DIR}/Packaging/rpm/pre-uninstall.sh" ) set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/usr/libexec" "/usr/share/applications" "/usr/share/man" "/usr/share/man/man1" "/usr/share/man/man5" "/usr/share/pixmaps" ) set(CPACK_STRIP_SYMBOLS TRUE) include(CPack) if(MIKTEX_MACOS_BUNDLE AND WITH_CODE_SIGNING) add_custom_target(signed-package COMMAND "${CMAKE_CPACK_COMMAND}" --config "${CMAKE_BINARY_DIR}/CPackConfig.cmake" COMMAND codesign -s "${MIKTEX_CODESIGN_IDENTITY}" *.dmg ) endif() ############################################################################### ## uninstall (see CMAKE FAQ) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY ) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake )