Pillow

Форк
0
/
fribidi.cmake 
116 строк · 3.7 Кб
1
cmake_minimum_required(VERSION 3.12)
2

3
project(fribidi)
4

5

6
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
7

8
include_directories(lib)
9

10
function(extract_regex_1 var text regex)
11
	string(REGEX MATCH ${regex} _ ${text})
12
	set(${var} "${CMAKE_MATCH_1}" PARENT_SCOPE)
13
endfunction()
14

15

16
function(fribidi_conf)
17
	file(READ configure.ac FRIBIDI_CONF)
18
	extract_regex_1(FRIBIDI_MAJOR_VERSION     "${FRIBIDI_CONF}" "\\(fribidi_major_version, ([0-9]+)\\)")
19
	extract_regex_1(FRIBIDI_MINOR_VERSION     "${FRIBIDI_CONF}" "\\(fribidi_minor_version, ([0-9]+)\\)")
20
	extract_regex_1(FRIBIDI_MICRO_VERSION     "${FRIBIDI_CONF}" "\\(fribidi_micro_version, ([0-9]+)\\)")
21
	extract_regex_1(FRIBIDI_INTERFACE_VERSION "${FRIBIDI_CONF}" "\\(fribidi_interface_version, ([0-9]+)\\)")
22
	extract_regex_1(FRIBIDI_INTERFACE_AGE     "${FRIBIDI_CONF}" "\\(fribidi_interface_age, ([0-9]+)\\)")
23
	extract_regex_1(FRIBIDI_BINARY_AGE        "${FRIBIDI_CONF}" "\\(fribidi_binary_age, ([0-9]+)\\)")
24
	set(FRIBIDI_VERSION "${FRIBIDI_MAJOR_VERSION}.${FRIBIDI_MINOR_VERSION}.${FRIBIDI_MICRO_VERSION}")
25
	set(PACKAGE "fribidi")
26
	set(PACKAGE_NAME "GNU FriBidi")
27
	set(PACKAGE_BUGREPORT "https://github.com/fribidi/fribidi/issues/new")
28
	set(SIZEOF_INT 4)
29
	set(FRIBIDI_MSVC_BUILD_PLACEHOLDER "#define FRIBIDI_BUILT_WITH_MSVC")
30
	message("Detected ${PACKAGE_NAME} version ${FRIBIDI_VERSION}")
31
	configure_file(lib/fribidi-config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/lib/fribidi-config.h @ONLY)
32
endfunction()
33
fribidi_conf()
34

35

36
option(ARCH "Target architecture")
37
if(${ARCH} STREQUAL ARM64)
38
    set(GEN FALSE)
39
else()
40
    set(GEN TRUE)
41
endif()
42
message("Generate tab.i files: " ${GEN})
43

44
function(prepend var prefix)
45
	set(out "")
46
	foreach(f ${ARGN})
47
		list(APPEND out "${prefix}${f}")
48
	endforeach()
49
	set(${var} "${out}" PARENT_SCOPE)
50
endfunction()
51

52
macro(fribidi_definitions _TGT)
53
	target_compile_definitions(${_TGT} PUBLIC
54
		HAVE_MEMSET
55
		HAVE_MEMMOVE
56
		HAVE_STRDUP
57
		HAVE_STDLIB_H=1
58
		HAVE_STRING_H=1
59
		HAVE_MEMORY_H=1
60
		#HAVE_STRINGS_H
61
		#HAVE_SYS_TIMES_H
62
		STDC_HEADERS=1
63
		HAVE_STRINGIZE=1)
64
endmacro()
65

66
function(fribidi_gen _NAME _OUTNAME _PARAM)
67
	set(_OUT ${CMAKE_CURRENT_SOURCE_DIR}/lib/${_OUTNAME})
68
	if(GEN)
69
        prepend(_DEP "${CMAKE_CURRENT_SOURCE_DIR}/gen.tab/" ${ARGN})
70
        add_executable(gen-${_NAME}
71
            gen.tab/gen-${_NAME}.c
72
            gen.tab/packtab.c)
73
        fribidi_definitions(gen-${_NAME})
74
        target_compile_definitions(gen-${_NAME}
75
            PUBLIC DONT_HAVE_FRIBIDI_CONFIG_H)
76
        add_custom_command(
77
            COMMAND gen-${_NAME} ${_PARAM} ${_DEP} > ${_OUT}
78
            DEPENDS ${_DEP}
79
            OUTPUT ${_OUT})
80
    endif(GEN)
81
	list(APPEND FRIBIDI_SOURCES_GENERATED "${_OUT}")
82
	set(FRIBIDI_SOURCES_GENERATED ${FRIBIDI_SOURCES_GENERATED} PARENT_SCOPE)
83
endfunction()
84

85
fribidi_gen(unicode-version fribidi-unicode-version.h ""
86
	unidata/ReadMe.txt unidata/BidiMirroring.txt)
87

88

89
macro(fribidi_tab _NAME)
90
	fribidi_gen(${_NAME}-tab ${_NAME}.tab.i 2 ${ARGN})
91
	if(GEN)
92
        target_sources(gen-${_NAME}-tab
93
            PRIVATE lib/fribidi-unicode-version.h)
94
	endif(GEN)
95
endmacro()
96

97
fribidi_tab(bidi-type unidata/UnicodeData.txt)
98
fribidi_tab(joining-type unidata/UnicodeData.txt unidata/ArabicShaping.txt)
99
fribidi_tab(arabic-shaping unidata/UnicodeData.txt)
100
fribidi_tab(mirroring unidata/BidiMirroring.txt)
101
fribidi_tab(brackets unidata/BidiBrackets.txt unidata/UnicodeData.txt)
102
fribidi_tab(brackets-type unidata/BidiBrackets.txt)
103

104
add_custom_target(fribidi-gen DEPENDS ${FRIBIDI_SOURCES_GENERATED})
105

106

107
file(GLOB FRIBIDI_SOURCES lib/*.c)
108
file(GLOB FRIBIDI_HEADERS lib/*.h)
109

110
add_library(fribidi SHARED
111
    ${FRIBIDI_SOURCES}
112
    ${FRIBIDI_HEADERS}
113
    ${FRIBIDI_SOURCES_GENERATED})
114
fribidi_definitions(fribidi)
115
target_compile_definitions(fribidi
116
    PUBLIC "-DFRIBIDI_BUILD")
117

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.