@@ -72,8 +72,19 @@ string(REGEX REPLACE "^#define BROTLI_VERSION 0x([0-9a-fA-F]+)$" "\\1" _brotli_v
72
72
hex_to_dec("${_brotli_version_hex} " _brotli_version)
73
73
math (EXPR BROTLI_VERSION_MAJOR "${_brotli_version} >> 24" )
74
74
math (EXPR BROTLI_VERSION_MINOR "(${_brotli_version} >> 12) & 4095" )
75
- math (EXPR BROTLI_VERSION_REVISION "${_brotli_version} & 4095" )
76
- mark_as_advanced (BROTLI_VERSION_MAJOR BROTLI_VERSION_MINOR BROTLI_VERSION_REVISION)
75
+ math (EXPR BROTLI_VERSION_PATCH "${_brotli_version} & 4095" )
76
+ set (BROTLI_VERSION "${BROTLI_VERSION_MAJOR} .${BROTLI_VERSION_MINOR} .${BROTLI_VERSION_PATCH} " )
77
+ mark_as_advanced (BROTLI_VERSION BROTLI_VERSION_MAJOR BROTLI_VERSION_MINOR BROTLI_VERSION_PATCH)
78
+
79
+ # ABI Version information
80
+ file (STRINGS "c/common/version.h" _brotli_abi_info_line REGEX "^#define BROTLI_ABI_VERSION (0x[0-9a-fA-F]+)$" )
81
+ string (REGEX REPLACE "^#define BROTLI_ABI_VERSION 0x([0-9a-fA-F]+)$" "\\ 1" _brotli_abi_info_hex "${_brotli_abi_info_line} " )
82
+ hex_to_dec("${_brotli_abi_info_hex} " _brotli_abi_info)
83
+ math (EXPR BROTLI_ABI_CURRENT "${_brotli_abi_info} >> 24" )
84
+ math (EXPR BROTLI_ABI_REVISION "(${_brotli_abi_info} >> 12) & 4095" )
85
+ math (EXPR BROTLI_ABI_AGE "${_brotli_abi_info} & 4095" )
86
+ math (EXPR BROTLI_ABI_COMPATIBILITY "${BROTLI_ABI_CURRENT} - ${BROTLI_ABI_AGE} " )
87
+ mark_as_advanced (BROTLI_ABI_CURRENT BROTLI_ABI_REVISION BROTLI_ABI_AGE BROTLI_ABI_COMPATIBILITY)
77
88
78
89
if (ENABLE_SANITIZER)
79
90
set (CMAKE_C_FLAGS " ${CMAKE_C_FLAGS} -fsanitize=${ENABLE_SANITIZER} " )
@@ -125,39 +136,24 @@ elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
125
136
add_definitions (-DOS_MACOSX)
126
137
endif ()
127
138
128
- set (BROTLICOMMON_SOURCES
129
- c/common/dictionary.c)
130
- set (BROTLIDEC_SOURCES
131
- c/dec/bit_reader.c
132
- c/dec/decode.c
133
- c/dec/huffman.c
134
- c/dec/state.c)
135
- set (BROTLIENC_SOURCES
136
- c/enc/backward_references.c
137
- c/enc/backward_references_hq.c
138
- c/enc/bit_cost.c
139
- c/enc/block_splitter.c
140
- c/enc/brotli_bit_stream.c
141
- c/enc/cluster.c
142
- c/enc/compress_fragment.c
143
- c/enc/compress_fragment_two_pass.c
144
- c/enc/dictionary_hash.c
145
- c/enc/encode.c
146
- c/enc/entropy_encode.c
147
- c/enc/histogram.c
148
- c/enc/literal_cost.c
149
- c/enc/memory.c
150
- c/enc/metablock.c
151
- c/enc/static_dict.c
152
- c/enc/utf8_util.c)
153
-
154
- add_library (brotlicommon SHARED ${BROTLICOMMON_SOURCES} )
155
- add_library (brotlidec SHARED ${BROTLIDEC_SOURCES} )
156
- add_library (brotlienc SHARED ${BROTLIENC_SOURCES} )
157
-
158
- add_library (brotlicommon-static STATIC ${BROTLICOMMON_SOURCES} )
159
- add_library (brotlidec-static STATIC ${BROTLIDEC_SOURCES} )
160
- add_library (brotlienc-static STATIC ${BROTLIENC_SOURCES} )
139
+ function (transform_sources_list INPUT_FILE OUTPUT_FILE)
140
+ file (READ ${INPUT_FILE} TEXT)
141
+ string (REGEX REPLACE "\\\\\n " "~continuation~" TEXT ${TEXT} )
142
+ string (REGEX REPLACE "([a-zA-Z_][a-zA-Z0-9_]*)[\t ]*=[\t ]*([^\n ]*)" "SET(\\ 1 \\ 2)" TEXT ${TEXT} )
143
+ string (REPLACE "~continuation~" "\n " TEXT ${TEXT} )
144
+ file (WRITE ${OUTPUT_FILE} ${TEXT} )
145
+ endfunction ()
146
+
147
+ transform_sources_list("scripts/sources.lst" "${CMAKE_CURRENT_BINARY_DIR} /sources.lst.cmake" )
148
+ include ("${CMAKE_CURRENT_BINARY_DIR} /sources.lst.cmake" )
149
+
150
+ add_library (brotlicommon SHARED ${BROTLI_COMMON_C} )
151
+ add_library (brotlidec SHARED ${BROTLI_DEC_C} )
152
+ add_library (brotlienc SHARED ${BROTLI_ENC_C} )
153
+
154
+ add_library (brotlicommon-static STATIC ${BROTLI_COMMON_C} )
155
+ add_library (brotlidec-static STATIC ${BROTLI_DEC_C} )
156
+ add_library (brotlienc-static STATIC ${BROTLI_ENC_C} )
161
157
162
158
# Older CMake versions does not understand INCLUDE_DIRECTORIES property.
163
159
include_directories (${BROTLI_INCLUDE_DIRS} )
@@ -172,8 +168,8 @@ foreach(lib brotlicommon brotlidec brotlienc brotlicommon-static brotlidec-stati
172
168
target_link_libraries (${lib} ${LIBM_LIBRARY} )
173
169
set_property (TARGET ${lib} APPEND PROPERTY INCLUDE_DIRECTORIES ${BROTLI_INCLUDE_DIRS} )
174
170
set_target_properties (${lib} PROPERTIES
175
- SOVERSION "${BROTLI_VERSION_MAJOR } .${BROTLI_VERSION_MINOR } .${BROTLI_VERSION_REVISION } "
176
- VERSION "${BROTLI_VERSION_MAJOR} . ${BROTLI_VERSION_MINOR} . ${BROTLI_VERSION_REVISION } "
171
+ VERSION "${BROTLI_ABI_COMPATIBILITY } .${BROTLI_ABI_AGE } .${BROTLI_ABI_REVISION } "
172
+ SOVERSION "${BROTLI_ABI_COMPATIBILITY } "
177
173
POSITION_INDEPENDENT_CODE TRUE )
178
174
set_property (TARGET ${lib} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${BROTLI_INCLUDE_DIRS} " )
179
175
endforeach ()
@@ -196,7 +192,7 @@ if(BROTLI_PARENT_DIRECTORY)
196
192
endif ()
197
193
198
194
# Build the brotli executable
199
- add_executable (brotli c/tools/brotli.c )
195
+ add_executable (brotli ${BROTLI_CLI_C} )
200
196
target_link_libraries (brotli ${BROTLI_LIBRARIES_STATIC} )
201
197
202
198
# Installation
@@ -287,9 +283,7 @@ if(NOT BROTLI_DISABLE_TESTS)
287
283
endforeach ()
288
284
endif ()
289
285
290
- # Generate a pkg-config file
291
-
292
- include (CMakeParseArguments)
286
+ # Generate a pkg-config files
293
287
294
288
function (generate_pkg_config_path outvar path )
295
289
string (LENGTH "${path} " path_length)
@@ -334,103 +328,29 @@ function(generate_pkg_config_path outvar path)
334
328
set ("${outvar} " "${${outvar} }" PARENT_SCOPE)
335
329
endfunction (generate_pkg_config_path)
336
330
337
- function (generate_pkg_config output_file)
338
- set (options )
339
- set (oneValueArgs NAME DESCRIPTION URL VERSION PREFIX LIBDIR INCLUDEDIR)
340
- set (multiValueArgs DEPENDS_PRIVATE CFLAGS LIBRARIES)
341
- cmake_parse_arguments (GEN_PKG "${options} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
342
- unset (options )
343
- unset (oneValueArgs)
344
- unset (multiValueArgs)
345
-
346
- if (NOT GEN_PKG_PREFIX)
347
- set (GEN_PKG_PREFIX "${CMAKE_INSTALL_PREFIX} " )
348
- endif ()
331
+ function (transform_pc_file INPUT_FILE OUTPUT_FILE VERSION )
332
+ file (READ ${INPUT_FILE} TEXT)
349
333
350
- if (NOT GEN_PKG_LIBDIR)
351
- set (GEN_PKG_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR} " )
352
- endif ()
353
- generate_pkg_config_path(GEN_PKG_LIBDIR "${GEN_PKG_LIBDIR} "
354
- prefix "${GEN_PKG_PREFIX} " )
334
+ set (PREFIX "${CMAKE_INSTALL_PREFIX} " )
335
+ string (REGEX REPLACE "@prefix@" "${PREFIX} " TEXT ${TEXT} )
336
+ string (REGEX REPLACE "@exec_prefix@" "${PREFIX} " TEXT ${TEXT} )
355
337
356
- if (NOT GEN_PKG_INCLUDEDIR)
357
- set (GEN_PKG_INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR} " )
358
- endif ()
359
- generate_pkg_config_path(GEN_PKG_INCLUDEDIR "${GEN_PKG_INCLUDEDIR} "
360
- prefix "${GEN_PKG_PREFIX} " )
338
+ generate_pkg_config_path(LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR} " prefix "${PREFIX} " )
339
+ string (REGEX REPLACE "@libdir@" "${LIBDIR} " TEXT ${TEXT} )
361
340
362
- file (WRITE "${output_file} " "prefix=${GEN_PKG_PREFIX} \n " )
363
- file (APPEND "${output_file} " "libdir=${GEN_PKG_LIBDIR} \n " )
364
- file (APPEND "${output_file} " "includedir=${GEN_PKG_INCLUDEDIR} \n " )
365
- file (APPEND "${output_file} " "\n " )
341
+ generate_pkg_config_path(INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR} " prefix "${PREFIX} " )
342
+ string (REGEX REPLACE "@includedir@" "${INCLUDEDIR} " TEXT ${TEXT} )
366
343
367
- if (GEN_PKG_NAME)
368
- file (APPEND "${output_file} " "Name: ${GEN_PKG_NAME} \n " )
369
- else ()
370
- file (APPEND "${output_file} " "Name: ${CMAKE_PROJECT_NAME} \n " )
371
- endif ()
344
+ string (REGEX REPLACE "@PACKAGE_VERSION@" "${VERSION} " TEXT ${TEXT} )
372
345
373
- if (GEN_PKG_DESCRIPTION)
374
- file (APPEND "${output_file} " "Description: ${GEN_PKG_DESCRIPTION} \n " )
375
- endif ()
346
+ file (WRITE ${OUTPUT_FILE} ${TEXT} )
347
+ endfunction ()
376
348
377
- if (GEN_PKG_URL)
378
- file (APPEND "${output_file} " "URL: ${GEN_PKG_URL} \n " )
379
- endif ()
349
+ transform_pc_file("scripts/libbrotlicommon.pc.in" "${CMAKE_CURRENT_BINARY_DIR} /libbrotlicommon.pc" "${BROTLI_VERSION} " )
380
350
381
- if (GEN_PKG_VERSION)
382
- file (APPEND "${output_file} " "Version: ${GEN_PKG_VERSION} \n " )
383
- endif ()
384
-
385
- if (GEN_PKG_DEPENDS_PRIVATE)
386
- file (APPEND "${output_file} " "Requires.private:" )
387
- foreach (lib ${GEN_PKG_DEPENDS_PRIVATE} )
388
- file (APPEND "${output_file} " " ${lib} " )
389
- endforeach ()
390
- file (APPEND "${output_file} " "\n " )
391
- endif ()
392
-
393
- if (GEN_PKG_LIBRARIES)
394
- set (libs)
351
+ transform_pc_file("scripts/libbrotlidec.pc.in" "${CMAKE_CURRENT_BINARY_DIR} /libbrotlidec.pc" "${BROTLI_VERSION} " )
395
352
396
- file (APPEND "${output_file} " "Libs: -L\$ {libdir}" )
397
- foreach (lib ${GEN_PKG_LIBRARIES} )
398
- file (APPEND "${output_file} " " -l${lib} " )
399
- endforeach ()
400
- file (APPEND "${output_file} " "\n " )
401
- endif ()
402
-
403
- file (APPEND "${output_file} " "Cflags: -I\$ {includedir}" )
404
- if (GEN_PKG_CFLAGS)
405
- foreach (cflag ${GEN_PKG_CFLAGS} )
406
- file (APPEND "${output_file} " " ${cflag} " )
407
- endforeach ()
408
- endif ()
409
- file (APPEND "${output_file} " "\n " )
410
- endfunction (generate_pkg_config)
411
-
412
- generate_pkg_config ("${CMAKE_CURRENT_BINARY_DIR} /libbrotlicommon.pc"
413
- NAME libbrotlicommon
414
- DESCRIPTION "Shared data used by libbrotlienc and libbrotlidec libraries"
415
- URL "https://github.com/google/brotli"
416
- VERSION "${BROTLI_VERSION_MAJOR} .${BROTLI_VERSION_MINOR} .${BROTLI_VERSION_REVISION} "
417
- LIBRARIES brotlicommon)
418
-
419
- generate_pkg_config ("${CMAKE_CURRENT_BINARY_DIR} /libbrotlidec.pc"
420
- NAME libbrotlidec
421
- DESCRIPTION "Brotli decoder library"
422
- VERSION "${BROTLI_VERSION_MAJOR} .${BROTLI_VERSION_MINOR} .${BROTLI_VERSION_REVISION} "
423
- URL "https://github.com/google/brotli"
424
- DEPENDS_PRIVATE libbrotlicommon
425
- LIBRARIES brotlidec)
426
-
427
- generate_pkg_config ("${CMAKE_CURRENT_BINARY_DIR} /libbrotlienc.pc"
428
- NAME libbrotlienc
429
- DESCRIPTION "Brotli encoder library"
430
- VERSION "${BROTLI_VERSION_MAJOR} .${BROTLI_VERSION_MINOR} .${BROTLI_VERSION_REVISION} "
431
- URL "https://github.com/google/brotli"
432
- DEPENDS_PRIVATE libbrotlicommon
433
- LIBRARIES brotlienc)
353
+ transform_pc_file("scripts/libbrotlienc.pc.in" "${CMAKE_CURRENT_BINARY_DIR} /libbrotlienc.pc" "${BROTLI_VERSION} " )
434
354
435
355
if (NOT BROTLI_BUNDLED_MODE)
436
356
install (FILES "${CMAKE_CURRENT_BINARY_DIR} /libbrotlicommon.pc"
0 commit comments