# Distributed under the original FontForge BSD 3-clause license #[=======================================================================[.rst: FontForgeConfigure ------------------ Sets up the required state to generate the config header for FontForge. This could do with a lot of cleanup, especially in simplifying how some of these defines work. There are multiple definitions that are not covered by the config header, but which are used throughout FontForge. Defines that are not included, because they are obsolete, include: _NO_LIBCAIRO There are other defines where it is not clear if they should be configured, or if they are defined locally in source only: BIGICONS, CHUNKDEBUG, DEBUG, DEBUG_FREEHAND, ESCAPE_LIBXML_STRINGS, FF_OVERLAP_VERBOSE, FF_RELATIONAL_GEOM, FLAG, GLYPH_DATA_DEBUG, HANYANG, KNIFE_CONTINUOUS, KOREAN, MEMORY_MASK, MyMemory, NEED_WIDE_CHAR, OPTIMIZE_TTF_INSTRS, THIRDS_IN_WIDTH, UsingPThreads, _COMPOSITE_BROKEN, _DEBUGCRASHFONTFORGE, _WACOM_DRV_BROKEN #]=======================================================================] function(_set_negated outval inval) if(${inval}) set(${outval} 0 PARENT_SCOPE) else() set(${outval} 1 PARENT_SCOPE) endif() endfunction() function(fontforge_generate_config template destination) include(CheckSymbolExists) include(CheckIncludeFile) include(TestBigEndian) # Platform specific checks test_big_endian(WORDS_BIGENDIAN) if(APPLE) set(_CursorsMustBe16x16 1) set(__Mac 1) elseif(CYGWIN) set(__CygWin 1) set(_ModKeysAutoRepeat 1) endif() # Header checks check_include_file(execinfo.h HAVE_EXECINFO_H) check_include_file(ieeefp.h HAVE_IEEEFP_H) # Function checks include(CheckFunctionExists) include(CMakePushCheckState) cmake_push_check_state(RESET) set(CMAKE_REQUIRED_INCLUDES stdlib.h) check_function_exists(realpath HAVE_REALPATH) cmake_pop_check_state() # These are hard requirements/unsupported, should get rid of these set(HAVE_LIBINTL_H 1) # Configurable settings set(FONTFORGE_CONFIG_SHOW_RAW_POINTS ${ENABLE_DEBUG_RAW_POINTS}) set(FONTFORGE_CONFIG_TILEPATH ${ENABLE_TILE_PATH}) set(FONTFORGE_CONFIG_WRITE_PFM ${ENABLE_WRITE_PFM}) if(REAL_TYPE STREQUAL "double") set(FONTFORGE_CONFIG_USE_DOUBLE 1) endif() if(ENABLE_FREETYPE_DEBUGGER) # this is a file path set(FREETYPE_HAS_DEBUGGER 1) endif() # Configurable features _set_negated(_NO_XKB "${X11_Xkb_FOUND}") _set_negated(_NO_XINPUT "${X11_Xi_FOUND}") if(NOT ENABLE_GUI OR NOT ENABLE_X11) set(X_DISPLAY_MISSING 1) endif() if(ENABLE_GUI AND NOT ENABLE_X11) set(FONTFORGE_CAN_USE_GDK 1) endif() set(FONTFORGE_CAN_USE_WOFF2 ${ENABLE_WOFF2_RESULT}) _set_negated(_NO_FFSCRIPT "${ENABLE_NATIVE_SCRIPTING}") _set_negated(_NO_LIBJPEG "${ENABLE_LIBJPEG_RESULT}") _set_negated(_NO_LIBPNG "${ENABLE_LIBPNG_RESULT}") _set_negated(_NO_LIBSPIRO "${ENABLE_LIBSPIRO_RESULT}") _set_negated(_NO_LIBTIFF "${ENABLE_LIBTIFF_RESULT}") _set_negated(_NO_LIBUNGIF "${ENABLE_LIBGIF_RESULT}") _set_negated(_NO_PYTHON "${ENABLE_PYTHON_SCRIPTING_RESULT}") _set_negated(_NO_LIBREADLINE "${ENABLE_LIBREADLINE_RESULT}") if(ENABLE_LIBSPIRO_RESULT) set(_LIBSPIRO_FUN ${Libspiro_FEATURE_LEVEL}) endif() configure_file(${template} ${destination} ESCAPE_QUOTES @ONLY) endfunction() function(_get_git_version) if(NOT DEFINED FONTFORGE_GIT_VERSION) find_package(Git) if(Git_FOUND) execute_process( COMMAND "${GIT_EXECUTABLE}" "log" "--pretty=format:%H" "-n" "1" WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" RESULT_VARIABLE GIT_RETVAL OUTPUT_VARIABLE GIT_OUTPUT ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) if(${GIT_RETVAL} EQUAL 0) set(_git_version "${GIT_OUTPUT}") endif() endif() set(FONTFORGE_GIT_VERSION "${_git_version}" CACHE INTERNAL "Git revision that FontForge was built off") endif() endfunction() function(_get_modtime) if(NOT DEFINED FONTFORGE_MODTIME) set(_modtime "0") if(${CMAKE_VERSION} VERSION_LESS "3.6.0") # so unfortunate if(DEFINED ENV{SOURCE_DATE_EPOCH} AND "$ENV{SOURCE_DATE_EPOCH}" MATCHES "^[0-9]+$") set(_modtime "$ENV{SOURCE_DATE_EPOCH}") else() execute_process( COMMAND "date" "+%s" RESULT_VARIABLE DATE_RETVAL OUTPUT_VARIABLE DATE_OUTPUT ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) if(${DATE_RETVAL} EQUAL 0 AND "${DATE_OUTPUT}" MATCHES "^[0-9]+$") set(_modtime "${DATE_OUTPUT}") endif() endif() else() string(TIMESTAMP _modtime "%s") endif() set(FONTFORGE_MODTIME "${_modtime}" CACHE INTERNAL "Unix epoch of when the build was initially configured") endif() endfunction() function(_get_modtime_str _modtime) if(NOT DEFINED FONTFORGE_MODTIME_STR) if(${CMAKE_VERSION} VERSION_LESS "3.6.0") execute_process( COMMAND "date" "-u" "--date=@${_modtime}" "+%Y-%m-%d %H:%M UTC" RESULT_VARIABLE DATE_RETVAL OUTPUT_VARIABLE DATE_OUTPUT ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) if(${DATE_RETVAL} EQUAL 0) set(_modtime_str "${DATE_OUTPUT}") endif() else() string(TIMESTAMP _modtime_str "%Y-%m-%d %H:%M UTC" UTC) endif() set(FONTFORGE_MODTIME_STR "${_modtime_str}" CACHE INTERNAL "Human readable string of when the build was initially configured") endif() endfunction() function(fontforge_generate_version_extras template destination) _get_git_version() _get_modtime() _get_modtime_str(${FONTFORGE_MODTIME}) configure_file(${template} ${destination} ESCAPE_QUOTES @ONLY) endfunction()