2017-04-06 07:07:40 +08:00
cmake_minimum_required ( VERSION 3.8 )
project ( libxml2 C )
option ( INSTALL_HEADERS "Install public header files" ON )
2018-04-04 06:59:54 +08:00
set ( CMAKE_SHARED_LIBRARY_PREFIX )
set ( CMAKE_STATIC_LIBRARY_PREFIX )
2017-04-06 07:07:40 +08:00
find_package ( ZLIB REQUIRED )
find_package ( LibLZMA REQUIRED )
2018-04-04 06:59:54 +08:00
find_package ( unofficial-iconv REQUIRED )
2017-04-06 07:07:40 +08:00
2018-04-04 06:59:54 +08:00
file ( GLOB SOURCES *.c )
list ( FILTER SOURCES EXCLUDE REGEX "/(run|test|trio)[^/]*$" )
list ( FILTER SOURCES EXCLUDE REGEX "xml(lint|catalog).c$" )
2017-04-06 07:07:40 +08:00
# Generate xmlexports with fixed definition of LIBXML_STATIC
file ( READ include/libxml/xmlexports.h XMLEXPORTS_H )
if ( BUILD_SHARED_LIBS )
string ( REPLACE "!defined(LIBXML_STATIC)" "1" XMLEXPORTS_H "${XMLEXPORTS_H}" )
else ( )
string ( REPLACE "!defined(LIBXML_STATIC)" "0" XMLEXPORTS_H "${XMLEXPORTS_H}" )
endif ( )
file ( WRITE ${ CMAKE_CURRENT_BINARY_DIR } /xmlexports.h "${XMLEXPORTS_H}" )
2018-04-04 06:59:54 +08:00
if ( CMAKE_SYSTEM_NAME STREQUAL "Windows" )
configure_file ( include/win32config.h config.h COPYONLY )
elseif ( CMAKE_SYSTEM_NAME STREQUAL "Darwin" )
configure_file ( "${PORT_DIR}/config.osx.h" config.h COPYONLY )
elseif ( CMAKE_SYSTEM_NAME STREQUAL "Linux" )
configure_file ( "${PORT_DIR}/config.linux.h" config.h COPYONLY )
else ( )
message ( FATAL_ERROR "No config.h checked in for the target platform. Please run ./configure for libxml2 and add the resulting config.h into this port." )
endif ( )
2017-04-06 07:07:40 +08:00
add_library ( libxml2 ${ SOURCES } )
if ( INSTALL_HEADERS )
2018-04-04 06:59:54 +08:00
file ( GLOB PUBLIC_HEADERS include/libxml/*.h )
list ( FILTER PUBLIC_HEADERS EXCLUDE REGEX "xmlexports\\.h$" )
list ( APPEND PUBLIC_HEADERS ${ CMAKE_CURRENT_BINARY_DIR } /xmlexports.h )
2017-04-06 07:07:40 +08:00
set_target_properties ( libxml2 PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADERS}" )
endif ( )
2018-04-04 06:59:54 +08:00
target_include_directories ( libxml2 PRIVATE ${ CMAKE_CURRENT_BINARY_DIR } include ${ LIBLZMA_INCLUDE_DIRS } )
2017-04-06 07:07:40 +08:00
target_link_libraries ( libxml2 PRIVATE
2018-04-04 06:59:54 +08:00
u n o f f i c i a l : : i c o n v : : l i b c h a r s e t u n o f f i c i a l : : i c o n v : : l i b i c o n v
2017-04-06 07:07:40 +08:00
Z L I B : : Z L I B
$ { L I B L Z M A _ L I B R A R I E S }
)
2018-04-04 06:59:54 +08:00
if ( CMAKE_SYSTEM_NAME STREQUAL "Windows" )
target_include_directories ( libxml2 PRIVATE win32/vc10 )
2018-03-12 14:41:51 +08:00
target_link_libraries ( libxml2 PRIVATE
w s o c k 3 2 . l i b
w s 2 _ 3 2 . l i b
)
target_compile_definitions ( libxml2 PRIVATE
- D H A V E _ W I N 3 2 _ T H R E A D S
)
endif ( )
2017-04-06 07:07:40 +08:00
target_compile_definitions ( libxml2 PRIVATE
- D _ C R T _ S E C U R E _ N O _ D E P R E C A T E
- D _ C R T _ N O N S T D C _ N O _ D E P R E C A T E
- D _ R E E N T R A N T
- D N O L I B T O O L
- D H A V E _ Z L I B _ H
- D H A V E _ L Z M A _ H
)
if ( NOT BUILD_SHARED_LIBS )
target_compile_definitions ( libxml2 PRIVATE -DLIBXML_STATIC )
endif ( )
set ( TARGET_INSTALL_OPTIONS )
if ( INSTALL_HEADERS )
set ( TARGET_INSTALL_OPTIONS PUBLIC_HEADER DESTINATION include/libxml )
endif ( )
install ( TARGETS libxml2
R U N T I M E D E S T I N A T I O N b i n
L I B R A R Y D E S T I N A T I O N l i b
A R C H I V E D E S T I N A T I O N l i b
$ { T A R G E T _ I N S T A L L _ O P T I O N S }
)