aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-04-05 16:07:40 -0700
committerRobert Schumacher <roschuma@microsoft.com>2017-04-05 16:07:40 -0700
commit4143dc0c2b219371b0461d4588c2faae2be1c600 (patch)
tree9fb5c89faa31293f235267505d053ab2a772d4b5
parentfe81139bc0fbac219fa41f0b3103b1ed43aca37d (diff)
downloadvcpkg-4143dc0c2b219371b0461d4588c2faae2be1c600.tar.gz
vcpkg-4143dc0c2b219371b0461d4588c2faae2be1c600.zip
[libxml2] Switch build to CMake for better triplet support. Add liblzma dependency.
-rw-r--r--ports/libxml2/0001-Fix-makefile.patch60
-rw-r--r--ports/libxml2/CMakeLists.txt110
-rw-r--r--ports/libxml2/CONTROL4
-rw-r--r--ports/libxml2/portfile.cmake149
4 files changed, 118 insertions, 205 deletions
diff --git a/ports/libxml2/0001-Fix-makefile.patch b/ports/libxml2/0001-Fix-makefile.patch
deleted file mode 100644
index 0e6c774dd..000000000
--- a/ports/libxml2/0001-Fix-makefile.patch
+++ /dev/null
@@ -1,60 +0,0 @@
----
- win32/Makefile.msvc | 22 ++++++++++++----------
- 1 file changed, 12 insertions(+), 10 deletions(-)
-
-diff --git a/win32/Makefile.msvc b/win32/Makefile.msvc
-index d16c1a2..de9e22e 100644
---- a/win32/Makefile.msvc
-+++ b/win32/Makefile.msvc
-@@ -28,11 +28,11 @@ XML_A = $(XML_BASENAME)_a.lib
- XML_A_DLL = $(XML_BASENAME)_a_dll.lib
-
- # Place where we let the compiler put its output.
--BINDIR = bin.msvc
--XML_INTDIR = int.msvc
--XML_INTDIR_A = int.a.msvc
--XML_INTDIR_A_DLL = int.a.dll.msvc
--UTILS_INTDIR = int.utils.msvc
-+BINDIR = $(OUTDIR)\bin.msvc
-+XML_INTDIR = $(OUTDIR)\int.msvc
-+XML_INTDIR_A = $(OUTDIR)\int.a.msvc
-+XML_INTDIR_A_DLL = $(OUTDIR)\int.a.dll.msvc
-+UTILS_INTDIR = $(OUTDIR)\int.utils.msvc
-
- # The preprocessor and its options.
- CPP = cl.exe /EP
-@@ -72,16 +72,18 @@ LIBS =
- LIBS = $(LIBS) wsock32.lib ws2_32.lib
- !endif
- !if "$(WITH_ICONV)" == "1"
--LIBS = $(LIBS) iconv.lib
-+LIBS = $(LIBS) libiconv.lib libcharset.lib
- !endif
- !if "$(WITH_ICU)" == "1"
- LIBS = $(LIBS) icu.lib
- !endif
- !if "$(WITH_ZLIB)" == "1"
--# could be named differently zdll or zlib
--# LIBS = $(LIBS) zdll.lib
-+!if "$(DEBUG)" == "1"
-+LIBS = $(LIBS) zlibd.lib
-+!else
- LIBS = $(LIBS) zlib.lib
- !endif
-+!endif
- !if "$(WITH_LZMA)" == "1"
- LIBS = $(LIBS) liblzma.lib
- !endif
-@@ -101,10 +103,10 @@ ARFLAGS = /nologo
- CFLAGS = $(CFLAGS) /D "_DEBUG" /Od /Z7
- LDFLAGS = $(LDFLAGS) /DEBUG
- !else
- CFLAGS = $(CFLAGS) /D "NDEBUG" /O2
- # commented out as this break VC10 c.f. 634846
- # LDFLAGS = $(LDFLAGS) /OPT:NOWIN98
--LDFLAGS = $(LDFLAGS)
-+LDFLAGS = $(LDFLAGS) /DEBUG /OPT:REF /OPT:ICF
- !endif
-
- # Libxml object files.
---
diff --git a/ports/libxml2/CMakeLists.txt b/ports/libxml2/CMakeLists.txt
new file mode 100644
index 000000000..02cccd6c7
--- /dev/null
+++ b/ports/libxml2/CMakeLists.txt
@@ -0,0 +1,110 @@
+cmake_minimum_required(VERSION 3.8)
+project(libxml2 C)
+
+option(INSTALL_HEADERS "Install public header files" ON)
+
+find_package(ZLIB REQUIRED)
+find_package(LibLZMA REQUIRED)
+find_library(ICONV NAMES libiconv)
+find_library(ICONV_CHARSET NAMES libcharset)
+
+set(SOURCES
+ buf.c
+ c14n.c
+ catalog.c
+ chvalid.c
+ debugXML.c
+ dict.c
+ DOCBparser.c
+ encoding.c
+ entities.c
+ error.c
+ globals.c
+ hash.c
+ HTMLparser.c
+ HTMLtree.c
+ legacy.c
+ list.c
+ nanoftp.c
+ nanohttp.c
+ parser.c
+ parserInternals.c
+ pattern.c
+ relaxng.c
+ SAX.c
+ SAX2.c
+ schematron.c
+ threads.c
+ tree.c
+ uri.c
+ valid.c
+ xinclude.c
+ xlink.c
+ xmlIO.c
+ xmlmemory.c
+ xmlreader.c
+ xmlregexp.c
+ xmlmodule.c
+ xmlsave.c
+ xmlschemas.c
+ xmlschemastypes.c
+ xmlstring.c
+ xmlunicode.c
+ xmlwriter.c
+ xpath.c
+ xpointer.c
+ xzlib.c
+)
+
+# 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}")
+
+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)
+
+configure_file(include/win32config.h config.h COPYONLY)
+
+add_library(libxml2 ${SOURCES})
+if(INSTALL_HEADERS)
+ set_target_properties(libxml2 PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADERS}")
+endif()
+target_include_directories(libxml2 PRIVATE ${CMAKE_CURRENT_BINARY_DIR} win32/vc10 include ${LIBLZMA_INCLUDE_DIRS})
+target_link_libraries(libxml2 PRIVATE
+ ZLIB::ZLIB
+ ${LIBLZMA_LIBRARIES}
+ ${ICONV}
+ ${ICONV_CHARSET}
+ wsock32.lib
+ ws2_32.lib
+)
+target_compile_definitions(libxml2 PRIVATE
+ -D_CRT_SECURE_NO_DEPRECATE
+ -D_CRT_NONSTDC_NO_DEPRECATE
+ -D_REENTRANT
+ -DNOLIBTOOL
+ -DHAVE_WIN32_THREADS
+ -DHAVE_ZLIB_H
+ -DHAVE_LZMA_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
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+ ${TARGET_INSTALL_OPTIONS}
+)
diff --git a/ports/libxml2/CONTROL b/ports/libxml2/CONTROL
index 538060dae..9f1564226 100644
--- a/ports/libxml2/CONTROL
+++ b/ports/libxml2/CONTROL
@@ -1,4 +1,4 @@
Source: libxml2
-Version: 2.9.4
+Version: 2.9.4-1
Description: Libxml2 is the XML C parser and toolkit developed for the Gnome project (but usable outside of the Gnome platform)
-Build-Depends: zlib, libiconv
+Build-Depends: zlib, libiconv, liblzma
diff --git a/ports/libxml2/portfile.cmake b/ports/libxml2/portfile.cmake
index bb4e043b3..de98368c9 100644
--- a/ports/libxml2/portfile.cmake
+++ b/ports/libxml2/portfile.cmake
@@ -15,152 +15,15 @@ vcpkg_download_distfile(ARCHIVE
)
vcpkg_extract_source_archive(${ARCHIVE})
-find_program(NMAKE nmake)
+file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
-vcpkg_apply_patches(
- SOURCE_PATH ${SOURCE_PATH}/
- PATCHES ${CMAKE_CURRENT_LIST_DIR}/0001-Fix-makefile.patch
+vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ PREFER_NINJA
+ OPTIONS_DEBUG -DINSTALL_HEADERS=OFF
)
-set(SCRIPTS_DIR ${SOURCE_PATH}/win32)
-
-set(CONFIGURE_COMMAND_TEMPLATE cscript configure.js
- zlib=yes
- cruntime=@CRUNTIME@
- debug=@DEBUGMODE@
- prefix=@INSTALL_DIR@
- include=@INCLUDE_DIR@
- lib=@LIB_DIR@
- bindir=@INSTALL_BIN_DIR@
-)
-
-
-#
-# Release
-#
-
-message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
-
-if(VCPKG_CRT_LINKAGE STREQUAL dynamic)
- set(CRUNTIME /MD)
-else()
- set(CRUNTIME /MT)
-endif()
-set(DEBUGMODE no)
-set(LIB_DIR ${CURRENT_INSTALLED_DIR}/lib)
-set(INCLUDE_DIR ${CURRENT_INSTALLED_DIR}/include)
-set(INSTALL_DIR ${CURRENT_PACKAGES_DIR})
-set(INSTALL_BIN_DIR "$(PREFIX)/tools")
-file(TO_NATIVE_PATH "${LIB_DIR}" LIB_DIR)
-file(TO_NATIVE_PATH "${INCLUDE_DIR}" INCLUDE_DIR)
-file(TO_NATIVE_PATH "${INSTALL_DIR}" INSTALL_DIR)
-file(TO_NATIVE_PATH "${INSTALL_BIN_DIR}" INSTALL_BIN_DIR)
-string(CONFIGURE "${CONFIGURE_COMMAND_TEMPLATE}" CONFIGURE_COMMAND)
-vcpkg_execute_required_process(
- COMMAND ${CONFIGURE_COMMAND}
- WORKING_DIRECTORY ${SCRIPTS_DIR}
- LOGNAME config-${TARGET_TRIPLET}-rel
-)
-# Handle build output directory
-file(TO_NATIVE_PATH "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" OUTDIR)
-file(MAKE_DIRECTORY "${OUTDIR}")
-message(STATUS "Configuring ${TARGET_TRIPLET}-rel done")
-
-message(STATUS "Building ${TARGET_TRIPLET}-rel")
-vcpkg_execute_required_process(
- COMMAND ${NMAKE} /f Makefile.msvc rebuild OUTDIR=${OUTDIR}
- WORKING_DIRECTORY ${SCRIPTS_DIR}
- LOGNAME build-${TARGET_TRIPLET}-rel
-)
-message(STATUS "Building ${TARGET_TRIPLET}-rel done")
-
-message(STATUS "Installing ${TARGET_TRIPLET}-rel")
-vcpkg_execute_required_process(
- COMMAND ${NMAKE} /f Makefile.msvc install OUTDIR=${OUTDIR}
- WORKING_DIRECTORY ${SCRIPTS_DIR}
- LOGNAME install-${TARGET_TRIPLET}-rel
-)
-message(STATUS "Installing ${TARGET_TRIPLET}-rel done")
-
-
-#
-# Debug
-#
-
-message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
-
-if(VCPKG_CRT_LINKAGE STREQUAL dynamic)
- set(CRUNTIME /MDd)
-else()
- set(CRUNTIME /MTd)
-endif()
-set(DEBUGMODE yes)
-set(LIB_DIR ${CURRENT_INSTALLED_DIR}/debug/lib)
-set(INSTALL_DIR ${CURRENT_PACKAGES_DIR}/debug)
-file(TO_NATIVE_PATH "${LIB_DIR}" LIB_DIR)
-file(TO_NATIVE_PATH "${INSTALL_DIR}" INSTALL_DIR)
-string(CONFIGURE "${CONFIGURE_COMMAND_TEMPLATE}" CONFIGURE_COMMAND)
-
-vcpkg_execute_required_process(
- COMMAND ${CONFIGURE_COMMAND}
- WORKING_DIRECTORY ${SCRIPTS_DIR}
- LOGNAME config-${TARGET_TRIPLET}-dbg
-)
-# Handle build output directory
-file(TO_NATIVE_PATH "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg" OUTDIR)
-file(MAKE_DIRECTORY "${OUTDIR}")
-message(STATUS "Configuring ${TARGET_TRIPLET}-dbg done")
-
-message(STATUS "Building ${TARGET_TRIPLET}-dbg")
-vcpkg_execute_required_process(
- COMMAND ${NMAKE} /f Makefile.msvc rebuild OUTDIR=${OUTDIR}
- WORKING_DIRECTORY ${SCRIPTS_DIR}
- LOGNAME build-${TARGET_TRIPLET}-dbg
-)
-message(STATUS "Building ${TARGET_TRIPLET}-dbg done")
-
-message(STATUS "Installing ${TARGET_TRIPLET}-dbg")
-vcpkg_execute_required_process(
- COMMAND ${NMAKE} /f Makefile.msvc install OUTDIR=${OUTDIR}
- WORKING_DIRECTORY ${SCRIPTS_DIR}
- LOGNAME install-${TARGET_TRIPLET}-dbg
-)
-message(STATUS "Installing ${TARGET_TRIPLET}-dbg done")
-
-#
-# Cleanup
-#
-
-# You have to define LIBXML_STATIC or not, depending on how you link
-file(READ ${CURRENT_PACKAGES_DIR}/include/libxml2/libxml/xmlexports.h XMLEXPORTS_H)
-if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
- string(REPLACE "!defined(LIBXML_STATIC)" "0" XMLEXPORTS_H "${XMLEXPORTS_H}")
-else()
- string(REPLACE "!defined(LIBXML_STATIC)" "1" XMLEXPORTS_H "${XMLEXPORTS_H}")
-endif()
-file(WRITE ${CURRENT_PACKAGES_DIR}/include/libxml2/libxml/xmlexports.h "${XMLEXPORTS_H}")
-
-# Remove tools and debug include directories
-file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/tools)
-file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/tools)
-file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
-
-# Move includes to the expected directory
-file(RENAME ${CURRENT_PACKAGES_DIR}/include/libxml2/libxml ${CURRENT_PACKAGES_DIR}/include/libxml)
-file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/libxml2)
-
-# The makefile builds both static and dynamic libraries, so remove the ones we don't want
-if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
- file(REMOVE ${CURRENT_PACKAGES_DIR}/lib/libxml2_a.lib ${CURRENT_PACKAGES_DIR}/lib/libxml2_a_dll.lib)
- file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/lib/libxml2_a.lib ${CURRENT_PACKAGES_DIR}/debug/lib/libxml2_a_dll.lib)
-else()
- file(REMOVE ${CURRENT_PACKAGES_DIR}/lib/libxml2.lib ${CURRENT_PACKAGES_DIR}/lib/libxml2_a_dll.lib)
- file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/lib/libxml2.lib ${CURRENT_PACKAGES_DIR}/debug/lib/libxml2_a_dll.lib)
- file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/debug/bin)
- # Rename the libs to match the dynamic lib names
- file(RENAME ${CURRENT_PACKAGES_DIR}/lib/libxml2_a.lib ${CURRENT_PACKAGES_DIR}/lib/libxml2.lib)
- file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/libxml2_a.lib ${CURRENT_PACKAGES_DIR}/debug/lib/libxml2.lib)
-endif()
+vcpkg_install_cmake()
# Handle copyright
file(COPY ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/libxml2)