2020-04-21 01:53:12 +03:00
cmake_minimum_required ( VERSION 3.14 )
2020-07-12 19:42:49 +03:00
project ( libxml2 C )
2020-04-21 01:53:12 +03:00
include ( CheckCSourceCompiles )
include ( CheckFunctionExists )
include ( CheckIncludeFiles )
include ( CheckLibraryExists )
include ( CheckStructHasMember )
include ( CheckSymbolExists )
include ( CMakePackageConfigHelpers )
include ( GNUInstallDirs )
set ( LIBXML_MAJOR_VERSION 2 )
set ( LIBXML_MINOR_VERSION 9 )
set ( LIBXML_MICRO_VERSION 10 )
set ( VERSION "${LIBXML_MAJOR_VERSION}.${LIBXML_MINOR_VERSION}.${LIBXML_MICRO_VERSION}" )
set ( LIBXML_VERSION ${ LIBXML_MAJOR_VERSION } 0 ${ LIBXML_MINOR_VERSION } 0 ${ LIBXML_MICRO_VERSION } )
set ( LIBXML_VERSION_STRING "${LIBXML_VERSION}" )
set ( LIBXML_VERSION_EXTRA "" )
set ( LIBXML_VERSION_NUMBER ${ LIBXML_VERSION } )
find_package ( Iconv )
find_package ( ICU )
find_package ( LibLZMA )
find_package ( Python COMPONENTS Interpreter Development )
find_package ( Threads )
find_package ( ZLIB )
option ( BUILD_SHARED_LIBS "Build shared libraries" ON )
set ( LIBXML2_WITH_AUTOMATA ON )
option ( LIBXML2_WITH_C14N "Add the Canonicalization support" ON )
option ( LIBXML2_WITH_CATALOG "Add the Catalog support" ON )
option ( LIBXML2_WITH_DEBUG "Add the debugging module" ON )
option ( LIBXML2_WITH_DOCB "Add Docbook SGML support" ON )
set ( LIBXML2_WITH_EXPR ON )
option ( LIBXML2_WITH_FTP "Add the FTP support" ON )
option ( LIBXML2_WITH_HTML "Add the HTML support" ON )
option ( LIBXML2_WITH_HTTP "Add the HTTP support" ON )
if ( Iconv_FOUND )
option ( LIBXML2_WITH_ICONV "Add ICONV support" ON )
else ( )
set ( LIBXML2_WITH_ICONV OFF )
endif ( )
if ( ICU_FOUND )
option ( LIBXML2_WITH_ICU "Add ICU support" OFF )
else ( )
set ( LIBXML2_WITH_ICU OFF )
endif ( )
option ( LIBXML2_WITH_ISO8859X "Add ISO8859X support if no iconv" ON )
option ( LIBXML2_WITH_LEGACY "Add deprecated APIs for compatibility" ON )
if ( LIBLZMA_FOUND )
option ( LIBXML2_WITH_LZMA "Use liblzma" ON )
else ( )
set ( LIBXML2_WITH_LZMA OFF )
endif ( )
option ( LIBXML2_WITH_MEM_DEBUG "Add the memory debugging module" OFF )
option ( LIBXML2_WITH_MODULES "Add the dynamic modules support" ON )
option ( LIBXML2_WITH_OUTPUT "Add the serialization support" ON )
option ( LIBXML2_WITH_PATTERN "Add the xmlPattern selection interface" ON )
option ( LIBXML2_WITH_PROGRAMS "Build programs" ON )
option ( LIBXML2_WITH_PUSH "Add the PUSH parser interfaces" ON )
if ( Python_FOUND AND ( Python_VERSION_MAJOR LESS 3 OR NOT WIN32 ) )
option ( LIBXML2_WITH_PYTHON "Build Python bindings" ON )
set ( LIBXML2_PYTHON_INSTALL_DIR ${ Python_SITEARCH } CACHE PATH "Python bindings install directory" )
else ( )
set ( LIBXML2_WITH_PYTHON OFF )
endif ( )
option ( LIBXML2_WITH_READER "Add the xmlReader parsing interface" ON )
option ( LIBXML2_WITH_REGEXPS "Add Regular Expressions support" ON )
option ( LIBXML2_WITH_RUN_DEBUG "Add the runtime debugging module" OFF )
option ( LIBXML2_WITH_SAX1 "Add the older SAX1 interface" ON )
option ( LIBXML2_WITH_SCHEMAS "Add Relax-NG and Schemas support" ON )
option ( LIBXML2_WITH_SCHEMATRON "Add Schematron support" ON )
option ( LIBXML2_WITH_TESTS "Build tests" ON )
if ( Threads_FOUND )
option ( LIBXML2_WITH_THREADS "Add multithread support" ON )
else ( )
set ( LIBXML2_WITH_THREADS OFF )
endif ( )
option ( LIBXML2_WITH_THREAD_ALLOC "Add per-thread memory" OFF )
option ( LIBXML2_WITH_TREE "Add the DOM like tree manipulation APIs" ON )
set ( LIBXML2_WITH_TRIO OFF )
set ( LIBXML2_WITH_UNICODE ON )
option ( LIBXML2_WITH_VALID "Add the DTD validation support" ON )
option ( LIBXML2_WITH_WRITER "Add the xmlWriter saving interface" ON )
option ( LIBXML2_WITH_XINCLUDE "Add the XInclude support" ON )
option ( LIBXML2_WITH_XPATH "Add the XPATH support" ON )
option ( LIBXML2_WITH_XPTR "Add the XPointer support" ON )
if ( ZLIB_FOUND )
option ( LIBXML2_WITH_ZLIB "Use libz" ON )
else ( )
set ( LIBXML2_WITH_ZLIB OFF )
endif ( )
2020-06-04 18:37:21 +03:00
set ( LIBXML2_XMLCONF_WORKING_DIR ${ CMAKE_CURRENT_BINARY_DIR } CACHE PATH "Working directory for XML Conformance Test Suite" )
2020-04-21 01:53:12 +03:00
foreach ( VARIABLE IN ITEMS WITH_AUTOMATA WITH_C14N WITH_CATALOG WITH_DEBUG WITH_DOCB WITH_EXPR WITH_FTP WITH_HTML WITH_HTTP WITH_ICONV WITH_ICU WITH_ISO8859X WITH_LEGACY WITH_LZMA WITH_MEM_DEBUG WITH_MODULES WITH_OUTPUT WITH_PATTERN WITH_PUSH WITH_READER WITH_REGEXPS WITH_RUN_DEBUG WITH_SAX1 WITH_SCHEMAS WITH_SCHEMATRON WITH_THREADS WITH_THREAD_ALLOC WITH_TREE WITH_TRIO WITH_UNICODE WITH_VALID WITH_WRITER WITH_XINCLUDE WITH_XPATH WITH_XPTR WITH_ZLIB )
if ( LIBXML2_ ${ VARIABLE } )
set ( ${ VARIABLE } 1 )
else ( )
set ( ${ VARIABLE } 0 )
endif ( )
endforeach ( )
set ( MODULE_EXTENSION "${CMAKE_SHARED_LIBRARY_SUFFIX}" )
set ( PACKAGE "libxml2" )
set ( PACKAGE_BUGREPORT "xml@gnome.org" )
set ( PACKAGE_NAME "libxml2" )
set ( PACKAGE_STRING "libxml2 ${VERSION}" )
set ( PACKAGE_TARNAME "libxml2" )
set ( PACKAGE_URL "http://www.xmlsoft.org/" )
set ( PACKAGE_VERSION ${ VERSION } )
if ( LIBLZMA_FOUND )
list ( APPEND CMAKE_REQUIRED_LIBRARIES LibLZMA::LibLZMA )
endif ( )
if ( Threads_FOUND )
list ( APPEND CMAKE_REQUIRED_LIBRARIES Threads::Threads )
endif ( )
if ( ZLIB_FOUND )
list ( APPEND CMAKE_REQUIRED_LIBRARIES ZLIB::ZLIB )
endif ( )
if ( MSVC )
configure_file ( include/win32config.h config.h COPYONLY )
else ( )
2020-06-07 17:06:17 +03:00
check_c_source_compiles ( "
v o i d __attribute__ ( ( destructor ) )
f ( void ) { }
i n t main ( void ) { r e t u r n 0 ; }
" A T T R I B U T E _ D E S T R U C T O R )
2020-04-21 01:53:12 +03:00
check_c_source_compiles ( "
#include <netdb.h>
i n t main ( ) { ( v o i d ) gethostbyname ( ( const char* ) \"\"); return 0; }
" G E T H O S T B Y N A M E _ A R G _ C A S T _ C O N S T )
if ( NOT GETHOSTBYNAME_ARG_CAST_CONST )
2020-06-07 17:06:17 +03:00
set ( GETHOSTBYNAME_ARG_CAST "(char *)" )
2020-04-21 01:53:12 +03:00
else ( )
set ( GETHOSTBYNAME_ARG_CAST "/**/" )
endif ( )
check_include_files ( arpa/inet.h HAVE_ARPA_INET_H )
check_include_files ( arpa/nameser.h HAVE_ARPA_NAMESER_H )
check_struct_has_member ( "struct sockaddr_storage" ss_family "sys/socket.h;sys/types.h" HAVE_SS_FAMILY )
check_struct_has_member ( "struct sockaddr_storage" __ss_family "sys/socket.h;sys/types.h" HAVE_BROKEN_SS_FAMILY )
if ( HAVE_BROKEN_SS_FAMILY )
set ( ss_family __ss_family )
endif ( )
check_function_exists ( class HAVE_CLASS )
check_include_files ( ctype.h HAVE_CTYPE_H )
check_include_files ( dirent.h HAVE_DIRENT_H )
check_include_files ( dlfcn.h HAVE_DLFCN_H )
check_library_exists ( dl dlopen "" HAVE_DLOPEN )
check_include_files ( dl.h HAVE_DL_H )
check_include_files ( errno.h HAVE_ERRNO_H )
check_include_files ( fcntl.h HAVE_FCNTL_H )
check_function_exists ( finite HAVE_FINITE )
check_include_files ( float.h HAVE_FLOAT_H )
check_function_exists ( fpclass HAVE_FPCLASS )
check_function_exists ( fprintf HAVE_FPRINTF )
check_function_exists ( fp_class HAVE_FP_CLASS )
check_function_exists ( ftime HAVE_FTIME )
check_function_exists ( getaddrinfo HAVE_GETADDRINFO )
check_function_exists ( gettimeofday HAVE_GETTIMEOFDAY )
check_include_files ( inttypes.h HAVE_INTTYPES_H )
check_function_exists ( isascii HAVE_ISASCII )
check_function_exists ( isinf HAVE_ISINF )
check_function_exists ( isnan HAVE_ISNAN )
check_function_exists ( isnand HAVE_ISNAND )
check_library_exists ( history append_history "" HAVE_LIBHISTORY )
check_library_exists ( lzma lzma_code "" HAVE_LIBLZMA )
check_library_exists ( pthread pthread_join "" HAVE_LIBPTHREAD )
check_library_exists ( readline readline "" HAVE_LIBREADLINE )
check_library_exists ( z gzread "" HAVE_LIBZ )
check_include_files ( limits.h HAVE_LIMITS_H )
check_function_exists ( localtime HAVE_LOCALTIME )
check_include_files ( lzma.h HAVE_LZMA_H )
check_include_files ( malloc.h HAVE_MALLOC_H )
check_include_files ( math.h HAVE_MATH_H )
check_include_files ( memory.h HAVE_MEMORY_H )
check_function_exists ( mmap HAVE_MMAP )
check_function_exists ( munmap HAVE_MUNMAP )
check_symbol_exists ( DIR ndir.h HAVE_NDIR_H )
check_include_files ( netdb.h HAVE_NETDB_H )
check_include_files ( netinet/in.h HAVE_NETINET_IN_H )
check_include_files ( poll.h HAVE_POLL_H )
check_function_exists ( printf HAVE_PRINTF )
check_include_files ( pthread.h HAVE_PTHREAD_H )
check_function_exists ( putenv HAVE_PUTENV )
check_function_exists ( rand HAVE_RAND )
check_function_exists ( rand_r HAVE_RAND_R )
check_include_files ( resolv.h HAVE_RESOLV_H )
check_library_exists ( dld shl_load "" HAVE_SHLLOAD )
check_function_exists ( signal HAVE_SIGNAL )
check_include_files ( signal.h HAVE_SIGNAL_H )
check_function_exists ( snprintf HAVE_SNPRINTF )
check_function_exists ( sprintf HAVE_SPRINTF )
check_function_exists ( srand HAVE_SRAND )
check_function_exists ( sscanf HAVE_SSCANF )
check_function_exists ( stat HAVE_STAT )
check_include_files ( stdarg.h HAVE_STDARG_H )
check_include_files ( stdint.h HAVE_STDINT_H )
check_include_files ( stdlib.h HAVE_STDLIB_H )
check_function_exists ( strftime HAVE_STRFTIME )
check_include_files ( strings.h HAVE_STRINGS_H )
check_include_files ( string.h HAVE_STRING_H )
check_symbol_exists ( DIR sys/dir.h HAVE_SYS_DIR_H )
check_include_files ( sys/mman.h HAVE_SYS_MMAN_H )
check_symbol_exists ( DIR sys/ndir.h HAVE_SYS_NDIR_H )
check_include_files ( sys/select.h HAVE_SYS_SELECT_H )
check_include_files ( sys/socket.h HAVE_SYS_SOCKET_H )
check_include_files ( sys/stat.h HAVE_SYS_STAT_H )
check_include_files ( sys/timeb.h HAVE_SYS_TIMEB_H )
check_include_files ( sys/time.h HAVE_SYS_TIME_H )
check_include_files ( sys/types.h HAVE_SYS_TYPES_H )
check_function_exists ( time HAVE_TIME )
check_include_files ( time.h HAVE_TIME_H )
check_include_files ( unistd.h HAVE_UNISTD_H )
check_function_exists ( va_copy HAVE_VA_COPY )
check_function_exists ( vfprintf HAVE_VFPRINTF )
check_function_exists ( vsnprintf HAVE_VSNPRINTF )
check_function_exists ( vsprintf HAVE_VSPRINTF )
check_function_exists ( __va_copy HAVE___VA_COPY )
check_c_source_compiles ( "
#include <stdlib.h>
#include <iconv.h>
e x t e r n
#ifdef __cplusplus
\ " C \ "
#endif
#if defined(__STDC__) || defined(__cplusplus)
s i z e _ t iconv ( iconv_t cd, char** inbuf, size_t* inbytesleft, char** outbuf, size_t* outbytesleft ) ;
#else
s i z e _ t iconv ( ) ;
#endif
i n t main ( ) { r e t u r n 0 ; }
" I C O N V _ C O N S T _ T E S T )
if ( NOT ICONV_CONST_TEST )
set ( ICONV_CONST "const" )
endif ( )
2020-06-07 17:06:17 +03:00
set ( LT_OBJDIR ".libs/" )
2020-04-21 01:53:12 +03:00
check_c_source_compiles ( "
#include <sys/socket.h>
#include <sys/types.h>
i n t main ( ) { ( v o i d ) send ( 1, ( const char* ) \"\", 1, 1 ) ; r e t u r n 0 ; }
" S E N D _ A R G 2 _ C A S T _ C O N S T )
if ( NOT SEND_ARG2_CAST_CONST )
2020-06-07 17:06:17 +03:00
set ( SEND_ARG2_CAST "(char *)" )
2020-04-21 01:53:12 +03:00
else ( )
set ( SEND_ARG2_CAST "/**/" )
endif ( )
2020-06-07 17:06:17 +03:00
check_include_files ( "float.h;stdarg.h;stdlib.h;string.h" STDC_HEADERS )
2020-04-21 01:53:12 +03:00
check_c_source_compiles ( "
#include <stdarg.h>
v o i d a ( va_list* ap ) { } ;
i n t main ( ) { v a _ l i s t a p 1 , a p 2 ; a ( &ap1 ) ; a p 2 = ( v a _ l i s t ) a p 1 ; r e t u r n 0 ; }
" V A _ L I S T _ I S _ A R R A Y _ T E S T )
if ( VA_LIST_IS_ARRAY_TEST )
set ( VA_LIST_IS_ARRAY FALSE )
else ( )
set ( VA_LIST_IS_ARRAY TRUE )
endif ( )
check_c_source_compiles ( "
#include <stddef.h>
#include <sys/socket.h>
#include <sys/types.h>
i n t main ( ) { ( v o i d ) getsockopt ( 1, 1, 1, NULL, ( socklen_t* ) NULL ) ; r e t u r n 0 ; }
" X M L _ S O C K L E N _ T _ S O C K L E N _ T )
if ( XML_SOCKLEN_T_SOCKLEN_T )
set ( XML_SOCKLEN_T socklen_t )
else ( )
check_c_source_compiles ( "
#include <stddef.h>
#include <sys/socket.h>
#include <sys/types.h>
i n t main ( ) { ( v o i d ) getsockopt ( 1, 1, 1, NULL, ( size_t* ) NULL ) ; r e t u r n 0 ; }
" X M L _ S O C K L E N _ T _ S I Z E _ T )
if ( XML_SOCKLEN_T_SIZE_T )
set ( XML_SOCKLEN_T size_t )
else ( )
check_c_source_compiles ( "
#include <stddef.h>
#include <sys/socket.h>
#include <sys/types.h>
i n t main ( ) { ( v o i d ) getsockopt ( 1, 1, 1, NULL, ( int* ) NULL ) ; r e t u r n 0 ; }
" X M L _ S O C K L E N _ T _ I N T )
set ( XML_SOCKLEN_T int )
endif ( )
endif ( )
configure_file ( config.h.cmake.in config.h )
endif ( )
2020-04-21 22:04:23 +03:00
set (
L I B X M L 2 _ H D R S
i n c l u d e / l i b x m l / c 1 4 n . h
i n c l u d e / l i b x m l / c a t a l o g . h
i n c l u d e / l i b x m l / c h v a l i d . h
i n c l u d e / l i b x m l / d e b u g X M L . h
i n c l u d e / l i b x m l / d i c t . h
i n c l u d e / l i b x m l / D O C B p a r s e r . h
i n c l u d e / l i b x m l / e n c o d i n g . h
i n c l u d e / l i b x m l / e n t i t i e s . h
i n c l u d e / l i b x m l / g l o b a l s . h
i n c l u d e / l i b x m l / h a s h . h
i n c l u d e / l i b x m l / H T M L p a r s e r . h
i n c l u d e / l i b x m l / H T M L t r e e . h
i n c l u d e / l i b x m l / l i s t . h
i n c l u d e / l i b x m l / n a n o f t p . h
i n c l u d e / l i b x m l / n a n o h t t p . h
i n c l u d e / l i b x m l / p a r s e r . h
i n c l u d e / l i b x m l / p a r s e r I n t e r n a l s . h
i n c l u d e / l i b x m l / p a t t e r n . h
i n c l u d e / l i b x m l / r e l a x n g . h
i n c l u d e / l i b x m l / S A X . h
i n c l u d e / l i b x m l / S A X 2 . h
i n c l u d e / l i b x m l / s c h e m a s I n t e r n a l s . h
i n c l u d e / l i b x m l / s c h e m a t r o n . h
i n c l u d e / l i b x m l / t h r e a d s . h
i n c l u d e / l i b x m l / t r e e . h
i n c l u d e / l i b x m l / u r i . h
i n c l u d e / l i b x m l / v a l i d . h
i n c l u d e / l i b x m l / x i n c l u d e . h
i n c l u d e / l i b x m l / x l i n k . h
i n c l u d e / l i b x m l / x m l I O . h
i n c l u d e / l i b x m l / x m l a u t o m a t a . h
i n c l u d e / l i b x m l / x m l e r r o r . h
i n c l u d e / l i b x m l / x m l e x p o r t s . h
i n c l u d e / l i b x m l / x m l m e m o r y . h
i n c l u d e / l i b x m l / x m l m o d u l e . h
i n c l u d e / l i b x m l / x m l r e a d e r . h
i n c l u d e / l i b x m l / x m l r e g e x p . h
i n c l u d e / l i b x m l / x m l s a v e . h
i n c l u d e / l i b x m l / x m l s c h e m a s . h
i n c l u d e / l i b x m l / x m l s c h e m a s t y p e s . h
i n c l u d e / l i b x m l / x m l s t r i n g . h
i n c l u d e / l i b x m l / x m l u n i c o d e . h
i n c l u d e / l i b x m l / x m l w r i t e r . h
i n c l u d e / l i b x m l / x p a t h . h
i n c l u d e / l i b x m l / x p a t h I n t e r n a l s . h
i n c l u d e / l i b x m l / x p o i n t e r . h
)
2020-04-21 01:53:12 +03:00
set (
2020-04-21 22:04:23 +03:00
L I B X M L 2 _ S R C S
2020-04-21 01:53:12 +03:00
b u f . c
c 1 4 n . c
c a t a l o g . c
c h v a l i d . c
d e b u g X M L . c
d i c t . c
e n c o d i n g . c
e n t i t i e s . c
e r r o r . c
g l o b a l s . c
h a s h . c
H T M L p a r s e r . c
H T M L t r e e . c
l e g a c y . c
l i s t . c
n a n o f t p . c
n a n o h t t p . c
p a r s e r . c
p a r s e r I n t e r n a l s . c
p a t t e r n . c
r e l a x n g . c
S A X . c
S A X 2 . c
s c h e m a t r o n . c
t h r e a d s . c
t r e e . c
u r i . c
v a l i d . c
x i n c l u d e . c
x l i n k . c
x m l I O . c
x m l m e m o r y . c
x m l m o d u l e . c
x m l r e a d e r . c
x m l r e g e x p . c
x m l s a v e . c
x m l s c h e m a s . c
x m l s c h e m a s t y p e s . c
x m l s t r i n g . c
x m l u n i c o d e . c
x m l w r i t e r . c
x p a t h . c
x p o i n t e r . c
x z l i b . c
)
if ( WIN32 )
2020-04-21 22:04:23 +03:00
list ( APPEND LIBXML2_SRCS win32/libxml2.rc )
2020-04-21 01:53:12 +03:00
file (
W R I T E
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / r c V e r s i o n . h
" #define LIBXML_MAJOR_VERSION ${LIBXML_MAJOR_VERSION}\n"
" #define LIBXML_MINOR_VERSION ${LIBXML_MINOR_VERSION}\n"
" #define LIBXML_MICRO_VERSION ${LIBXML_MICRO_VERSION}\n"
2020-06-07 17:06:17 +03:00
" #define LIBXML_DOTTED_VERSION \"${VERSION}\"\n"
2020-04-21 01:53:12 +03:00
)
endif ( )
if ( LIBXML2_WITH_SAX1 )
2020-04-21 22:04:23 +03:00
list ( APPEND LIBXML2_SRCS DOCBparser.c )
2020-04-21 01:53:12 +03:00
endif ( )
if ( LIBXML2_WITH_TRIO )
2020-04-21 22:04:23 +03:00
list ( APPEND LIBXML2_SRCS trio.c triostr.c )
2020-04-21 01:53:12 +03:00
endif ( )
2020-04-21 22:04:23 +03:00
add_library ( LibXml2 ${ LIBXML2_HDRS } ${ LIBXML2_SRCS } )
2020-04-21 01:53:12 +03:00
2020-06-07 17:06:17 +03:00
if ( LIBXML2_WITH_THREADS )
target_compile_definitions ( LibXml2 PRIVATE _REENTRANT )
if ( WIN32 )
target_compile_definitions ( LibXml2 PRIVATE HAVE_WIN32_THREADS )
endif ( )
endif ( )
2020-04-21 01:53:12 +03:00
target_include_directories (
L i b X m l 2
P U B L I C
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } >
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / i n c l u d e >
$ < I N S T A L L _ I N T E R F A C E : $ < I N S T A L L _ P R E F I X > / $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } / l i b x m l 2 >
)
if ( HAVE_DLOPEN )
target_link_libraries ( LibXml2 PRIVATE dl )
endif ( )
if ( HAVE_SHLLOAD )
target_link_libraries ( LibXml2 PRIVATE dld )
endif ( )
if ( UNIX )
target_link_libraries ( LibXml2 PRIVATE m )
endif ( )
if ( WIN32 )
target_link_libraries ( LibXml2 PRIVATE ws2_32 )
endif ( )
if ( LIBXML2_WITH_ICONV )
target_link_libraries ( LibXml2 PUBLIC Iconv::Iconv )
endif ( )
if ( LIBXML2_WITH_ICU )
target_link_libraries ( LibXml2 PRIVATE ICU::i18n )
endif ( )
if ( LIBXML2_WITH_LZMA )
target_link_libraries ( LibXml2 PRIVATE LibLZMA::LibLZMA )
endif ( )
if ( LIBXML2_WITH_THREADS )
target_link_libraries ( LibXml2 PRIVATE Threads::Threads )
endif ( )
if ( LIBXML2_WITH_ZLIB )
target_link_libraries ( LibXml2 PRIVATE ZLIB::ZLIB )
endif ( )
set_target_properties (
L i b X m l 2
P R O P E R T I E S
I M P O R T _ P R E F I X l i b
O U T P U T _ N A M E x m l 2
P O S I T I O N _ I N D E P E N D E N T _ C O D E O N
P R E F I X l i b
V E R S I O N $ { V E R S I O N }
)
if ( WIN32 )
if ( BUILD_SHARED_LIBS )
set_target_properties (
L i b X m l 2
P R O P E R T I E S
D E B U G _ P O S T F I X d
)
else ( )
set_target_properties (
L i b X m l 2
P R O P E R T I E S
D E B U G _ P O S T F I X s d
M I N S I Z E R E L _ P O S T F I X s
R E L E A S E _ P O S T F I X s
R E L W I T H D E B I N F O _ P O S T F I X s
)
endif ( )
endif ( )
2020-04-21 22:04:23 +03:00
install ( FILES ${ LIBXML2_HDRS } DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } /libxml2/libxml COMPONENT development )
2020-04-21 01:53:12 +03:00
install (
T A R G E T S L i b X m l 2
E X P O R T L i b X m l 2
A R C H I V E D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R } C O M P O N E N T d e v e l o p m e n t
L I B R A R Y D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R } C O M P O N E N T r u n t i m e N A M E L I N K _ S K I P
R U N T I M E D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ B I N D I R } C O M P O N E N T r u n t i m e
)
if ( BUILD_SHARED_LIBS )
install (
T A R G E T S L i b X m l 2
E X P O R T L i b X m l 2
L I B R A R Y D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R } C O M P O N E N T d e v e l o p m e n t N A M E L I N K _ O N L Y
)
endif ( )
if ( MSVC AND BUILD_SHARED_LIBS )
install ( FILES $< TARGET_PDB_FILE:LibXml2 > DESTINATION ${ CMAKE_INSTALL_BINDIR } CONFIGURATIONS Debug RelWithDebInfo COMPONENT debug )
endif ( )
if ( LIBXML2_WITH_PROGRAMS )
set (
P R O G R A M S
x m l c a t a l o g
x m l l i n t
)
foreach ( PROGRAM ${ PROGRAMS } )
add_executable ( ${ PROGRAM } ${ PROGRAM } .c )
target_link_libraries ( ${ PROGRAM } LibXml2 )
if ( HAVE_LIBHISTORY )
target_link_libraries ( ${ PROGRAM } history )
endif ( )
if ( HAVE_LIBREADLINE )
target_link_libraries ( ${ PROGRAM } readline )
endif ( )
install ( TARGETS ${ PROGRAM } RUNTIME DESTINATION ${ CMAKE_INSTALL_BINDIR } COMPONENT programs )
endforeach ( )
endif ( )
if ( LIBXML2_WITH_TESTS )
2020-06-04 01:16:15 +03:00
enable_testing ( )
2020-04-21 01:53:12 +03:00
set (
T E S T S
r u n x m l c o n f
r u n s u i t e
t e s t a p i
t e s t A u t o m a t a
t e s t C 1 4 N
t e s t c h a r
t e s t d i c t
t e s t H T M L
t e s t M o d u l e
t e s t l i m i t s
t e s t R e a d e r
t e s t r e c u r s e
t e s t R e g e x p
t e s t R e l a x
t e s t S A X
t e s t S c h e m a s
t e s t U R I
t e s t X P a t h
)
foreach ( TEST ${ TESTS } )
add_executable ( ${ TEST } ${ TEST } .c )
target_link_libraries ( ${ TEST } LibXml2 )
endforeach ( )
2020-06-04 18:37:21 +03:00
if ( EXISTS ${ LIBXML2_XMLCONF_WORKING_DIR } /xmlconf/xmlconf.xml )
add_test ( NAME runxmlconf COMMAND runxmlconf WORKING_DIRECTORY ${ LIBXML2_XMLCONF_WORKING_DIR } )
endif ( )
if ( NOT WIN32 )
add_test ( NAME testapi COMMAND testapi )
2020-06-04 15:45:48 +03:00
endif ( )
add_test ( NAME testchar COMMAND testchar )
add_test ( NAME testdict COMMAND testdict )
add_test ( NAME testrecurse COMMAND testrecurse WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR } )
2020-04-21 01:53:12 +03:00
if ( Threads_FOUND )
set (
T E S T S _ T H R E A D S
r u n t e s t
t e s t T h r e a d s
)
foreach ( TEST ${ TESTS_THREADS } )
add_executable ( ${ TEST } ${ TEST } .c )
2020-06-07 17:06:17 +03:00
if ( WIN32 )
target_compile_definitions ( ${ TEST } PRIVATE HAVE_WIN32_THREADS )
endif ( )
2020-04-21 01:53:12 +03:00
target_link_libraries ( ${ TEST } LibXml2 Threads::Threads )
endforeach ( )
2020-06-04 12:58:04 +03:00
add_test ( NAME runtest COMMAND runtest --out ${ CMAKE_CURRENT_BINARY_DIR } WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR } )
add_test ( NAME testThreads COMMAND testThreads WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR } )
2020-04-21 01:53:12 +03:00
endif ( )
endif ( )
if ( LIBXML2_WITH_PYTHON )
execute_process (
C O M M A N D
$ { P y t h o n _ E X E C U T A B L E }
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / p y t h o n / g e n e r a t o r . p y
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / d o c / l i b x m l 2 - a p i . x m l
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / p y t h o n / l i b x m l 2 - p y t h o n - a p i . x m l
2020-06-04 18:37:21 +03:00
W O R K I N G _ D I R E C T O R Y
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R }
2020-04-21 01:53:12 +03:00
)
file ( READ python/libxml.py LIBXML_PY )
file ( WRITE ${ CMAKE_CURRENT_BINARY_DIR } /libxml2.py.in "${LIBXML_PY}" )
file ( READ ${ CMAKE_CURRENT_BINARY_DIR } /libxml2class.py LIBXML2CLASS_PY )
file ( APPEND ${ CMAKE_CURRENT_BINARY_DIR } /libxml2.py.in "${LIBXML2CLASS_PY}" )
configure_file ( ${ CMAKE_CURRENT_BINARY_DIR } /libxml2.py.in libxml2.py COPYONLY )
add_library (
L i b X m l 2 M o d
l i b x m l 2 - p y . c
l i b x m l 2 - p y . h
p y t h o n / l i b x m l . c
p y t h o n / l i b x m l _ w r a p . h
p y t h o n / t y p e s . c
)
target_include_directories (
L i b X m l 2 M o d
P U B L I C
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / p y t h o n >
)
target_link_libraries ( LibXml2Mod LibXml2 Python::Python )
set_target_properties (
L i b X m l 2 M o d
P R O P E R T I E S
I M P O R T _ P R E F I X l i b
O U T P U T _ N A M E x m l 2 m o d
P R E F I X l i b
V E R S I O N $ { V E R S I O N }
)
install (
T A R G E T S L i b X m l 2 M o d
A R C H I V E D E S T I N A T I O N $ { L I B X M L 2 _ P Y T H O N _ I N S T A L L _ D I R } C O M P O N E N T d e v e l o p m e n t
L I B R A R Y D E S T I N A T I O N $ { L I B X M L 2 _ P Y T H O N _ I N S T A L L _ D I R } C O M P O N E N T r u n t i m e N A M E L I N K _ S K I P
R U N T I M E D E S T I N A T I O N $ { L I B X M L 2 _ P Y T H O N _ I N S T A L L _ D I R } C O M P O N E N T r u n t i m e
)
if ( BUILD_SHARED_LIBS )
install (
T A R G E T S L i b X m l 2 M o d
L I B R A R Y D E S T I N A T I O N $ { L I B X M L 2 _ P Y T H O N _ I N S T A L L _ D I R } C O M P O N E N T d e v e l o p m e n t N A M E L I N K _ O N L Y
)
endif ( )
if ( MSVC AND BUILD_SHARED_LIBS )
install ( FILES $< TARGET_PDB_FILE:LibXml2Mod > DESTINATION ${ LIBXML2_PYTHON_INSTALL_DIR } CONFIGURATIONS Debug RelWithDebInfo COMPONENT debug )
endif ( )
install ( FILES python/drv_libxml2.py DESTINATION ${ LIBXML2_PYTHON_INSTALL_DIR } COMPONENT runtime )
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /libxml2.py DESTINATION ${ LIBXML2_PYTHON_INSTALL_DIR } COMPONENT runtime )
endif ( )
install ( FILES libxml.3 DESTINATION ${ CMAKE_INSTALL_MANDIR } /man3 COMPONENT documentation )
install ( FILES doc/xmlcatalog.1 DESTINATION ${ CMAKE_INSTALL_MANDIR } /man1 COMPONENT documentation )
install ( FILES doc/xmllint.1 DESTINATION ${ CMAKE_INSTALL_MANDIR } /man1 COMPONENT documentation )
install ( DIRECTORY doc/ DESTINATION ${ CMAKE_INSTALL_DATADIR } /doc/libxml2 COMPONENT documentation PATTERN Makefile.* EXCLUDE )
configure_package_config_file (
l i b x m l 2 - c o n f i g . c m a k e . c m a k e . i n l i b x m l 2 - c o n f i g . c m a k e
I N S T A L L _ D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R } / c m a k e / l i b x m l 2 - $ { V E R S I O N }
)
install (
F I L E S $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l i b x m l 2 - c o n f i g . c m a k e
D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R } / c m a k e / l i b x m l 2 - $ { V E R S I O N }
C O M P O N E N T d e v e l o p m e n t
)
write_basic_package_version_file (
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l i b x m l 2 - c o n f i g - v e r s i o n . c m a k e
V E R S I O N $ { V E R S I O N }
C O M P A T I B I L I T Y E x a c t V e r s i o n
)
install (
F I L E S $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l i b x m l 2 - c o n f i g - v e r s i o n . c m a k e
D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R } / c m a k e / l i b x m l 2 - $ { V E R S I O N }
C O M P O N E N T d e v e l o p m e n t
)
install (
E X P O R T L i b X m l 2
D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R } / c m a k e / l i b x m l 2 - $ { V E R S I O N }
N A M E S P A C E L i b X m l 2 : :
F I L E l i b x m l 2 - e x p o r t . c m a k e
C O M P O N E N T d e v e l o p m e n t
)
configure_file ( include/libxml/xmlversion.h.in libxml/xmlversion.h )
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /libxml/xmlversion.h DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } /libxml2/libxml COMPONENT development )
2020-04-21 22:16:07 +03:00
if ( MSVC )
configure_file ( include/libxml/xmlwin32version.h.in libxml/xmlwin32version.h )
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /libxml/xmlwin32version.h DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } /libxml2/libxml COMPONENT development )
endif ( )
2020-04-21 01:53:12 +03:00
if ( LIBXML2_WITH_PYTHON )
set ( prefix "${CMAKE_INSTALL_PREFIX}" )
configure_file ( python/setup.py.in setup.py @ONLY )
endif ( )
set ( CPACK_COMPONENT_DEVELOPMENT_DEPENDS runtime )
set ( CPACK_COMPONENT_PROGRAMS_DEPENDS runtime )
set ( CPACK_DEB_COMPONENT_INSTALL ON )
set ( CPACK_DEBIAN_DEVELOPMENT_PACKAGE_DEPENDS "${PACKAGE_TARNAME}" )
set ( CPACK_DEBIAN_DEVELOPMENT_PACKAGE_NAME "${PACKAGE_TARNAME}-dev" )
set ( CPACK_DEBIAN_DEVELOPMENT_PACKAGE_SECTION "libdevel" )
set ( CPACK_DEBIAN_PACKAGE_HOMEPAGE ${ PACKAGE_URL } )
set ( CPACK_DEBIAN_PACKAGE_NAME ${ PACKAGE_TARNAME } )
set ( CPACK_DEBIAN_PACKAGE_SECTION "devel" )
set ( CPACK_DEBIAN_PROGRAMS_PACKAGE_DEPENDS "${PACKAGE_TARNAME}" )
set ( CPACK_DEBIAN_PROGRAMS_PACKAGE_NAME "${PACKAGE_TARNAME}-utils" )
set ( CPACK_DEBIAN_PROGRAMS_PACKAGE_SECTION "utils" )
set ( CPACK_DEBIAN_RUNTIME_PACKAGE_NAME ${ PACKAGE_TARNAME } )
set ( CPACK_DEBIAN_RUNTIME_PACKAGE_RECOMMENDS "${PACKAGE_TARNAME}-utils" )
set ( CPACK_DEBIAN_RUNTIME_PACKAGE_SECTION "libs" )
set ( CPACK_NSIS_PACKAGE_NAME ${ PACKAGE_STRING } )
set ( CPACK_NSIS_URL_INFO_ABOUT ${ PACKAGE_URL } )
set ( CPACK_PACKAGE_CONTACT ${ PACKAGE_BUGREPORT } )
set ( CPACK_PACKAGE_DISPLAY_NAME ${ PACKAGE_STRING } )
set ( CPACK_PACKAGE_INSTALL_DIRECTORY "${PACKAGE_TARNAME}-${PACKAGE_VERSION}" )
set ( CPACK_PACKAGE_NAME ${ PACKAGE_TARNAME } )
set ( CPACK_PACKAGE_VERSION ${ PACKAGE_VERSION } )
set ( CPACK_PACKAGE_VERSION_MAJOR ${ LIBXML_MAJOR_VERSION } )
set ( CPACK_PACKAGE_VERSION_MINOR ${ LIBXML_MINOR_VERSION } )
set ( CPACK_PACKAGE_VERSION_PATCH ${ LIBXML_MICRO_VERSION } )
set ( CPACK_RESOURCE_FILE_LICENSE ${ CMAKE_CURRENT_SOURCE_DIR } /Copyright )
set ( CPACK_RPM_COMPONENT_INSTALL ON )
set ( CPACK_RPM_development_PACKAGE_NAME "${PACKAGE_NAME}-devel" )
set ( CPACK_RPM_development_PACKAGE_REQUIRES "${PACKAGE_NAME}" )
set ( CPACK_RPM_PACKAGE_GROUP "Development/Libraries" )
set ( CPACK_RPM_PACKAGE_NAME ${ PACKAGE_TARNAME } )
set ( CPACK_RPM_PACKAGE_URL ${ PACKAGE_URL } )
set ( CPACK_RPM_programs_PACKAGE_NAME "${PACKAGE_NAME}-utils" )
set ( CPACK_RPM_programs_PACKAGE_REQUIRES "${PACKAGE_NAME}" )
set ( CPACK_RPM_runtime_PACKAGE_NAME "${PACKAGE_NAME}" )
set ( CPACK_RPM_runtime_PACKAGE_SUGGESTS "${PACKAGE_NAME}-utils" )
include ( CPack )