Allows support for cross-compiling both static and shared libs. Tested using [MXE](mxe.cc) with: `{i686-w64-mingw32,x86_64-w64-mingw32}.{static,shared}` Closes #188pull/192/head
parent
78f0221c04
commit
c362ee66b7
@ -0,0 +1,98 @@ |
||||
# Minimal CMake build for library, header, and *.pc - mostly to |
||||
# simplify cross-compilation |
||||
|
||||
# Keeping in sync with autotools |
||||
# - review changes to `LIBOBJS` in `Makefile.in` and add the |
||||
# corresponding source files to `SOURCES` below |
||||
# - run `./config.h.cmake.in.gen` and add new platform checks[1] |
||||
# or third-party dependencies using `find_package`[2] or |
||||
# `FindPkgConfig`[3] |
||||
# - ensure new cflags/libs are added to `pkg-config` below |
||||
# |
||||
#[1] https://cmake.org/Wiki/CMake:How_To_Write_Platform_Checks |
||||
#[2] https://cmake.org/cmake/help/latest/command/find_package.html |
||||
#[3] https://cmake.org/cmake/help/latest/module/FindPkgConfig.html |
||||
|
||||
cmake_minimum_required(VERSION 3.1) |
||||
project(mxml C) |
||||
|
||||
set(VERSION_MAJOR 2) |
||||
set(VERSION_MINOR 11) |
||||
set(SO_VERSION 1) |
||||
set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}") |
||||
set(VERSION_H "Mini-XML v${VERSION_MAJOR}.${VERSION_MINOR}") |
||||
|
||||
option(ENABLE_THREADS "Enable multi-threading support" ON) |
||||
if(ENABLE_THREADS) |
||||
set(CMAKE_THREAD_PREFER_PTHREAD ON) |
||||
find_package(Threads REQUIRED) |
||||
set(HAVE_PTHREAD_H ON) |
||||
endif() |
||||
|
||||
find_package(ZLIB) |
||||
if(ZLIB_FOUND) |
||||
set(HAVE_ZLIB_H ON) |
||||
endif() |
||||
|
||||
include(CheckFunctionExists) |
||||
check_function_exists(snprintf HAVE_SNPRINTF) |
||||
check_function_exists(vasprintf HAVE_VASPRINTF) |
||||
check_function_exists(vsnprintf HAVE_VSNPRINTF) |
||||
check_function_exists(strdup HAVE_STRDUP) |
||||
check_function_exists(strlcat HAVE_STRLCAT) |
||||
check_function_exists(strlcpy HAVE_STRLCPY) |
||||
|
||||
include(CheckTypeSize) |
||||
check_type_size("long long" LONG_LONG) |
||||
|
||||
include_directories("${PROJECT_SOURCE_DIR}") |
||||
include_directories("${CMAKE_CURRENT_BINARY_DIR}") |
||||
include_directories("${ZLIB_INCLUDE_DIRS}") |
||||
|
||||
set(SOURCES mxml-attr.c |
||||
mxml-entity.c |
||||
mxml-file.c |
||||
mxml-get.c |
||||
mxml-index.c |
||||
mxml-node.c |
||||
mxml-search.c |
||||
mxml-set.c |
||||
mxml-private.c |
||||
mxml-string.c |
||||
) |
||||
|
||||
add_library(mxml ${SOURCES}) |
||||
set_target_properties(mxml PROPERTIES |
||||
SOVERSION ${SO_VERSION}) |
||||
|
||||
if(WIN32 AND BUILD_SHARED_LIBS) |
||||
set(PC_LIB_NAME mxml-${SO_VERSION}) |
||||
set_target_properties(mxml PROPERTIES |
||||
OUTPUT_NAME ${PC_LIB_NAME}) |
||||
else() |
||||
set(PC_LIB_NAME mxml) |
||||
endif() |
||||
|
||||
if(ENABLE_THREADS) |
||||
target_link_libraries(mxml Threads::Threads) |
||||
endif() |
||||
target_link_libraries(mxml ZLIB::ZLIB) |
||||
|
||||
# pkg-config variables |
||||
set(prefix ${CMAKE_INSTALL_PREFIX}) |
||||
set(exec_prefix "\$\{prefix\}") |
||||
set(libdir "\$\{exec_prefix\}/lib") |
||||
set(includedir "\$\{prefix\}/include") |
||||
set(PC_LIBS "-L\$\{libdir\} -l${PC_LIB_NAME} ${ZLIB_LIBRARIES}") |
||||
set(PTHREAD_LIBS ${CMAKE_THREAD_LIBS_INIT}) |
||||
set(PC_CFLAGS "-I\$\{includedir\} ${CMAKE_C_FLAGS} -I${ZLIB_INCLUDE_DIRS}") |
||||
set(PTHREAD_FLAGS "") |
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mxml.pc.in ${CMAKE_CURRENT_BINARY_DIR}/mxml.pc) |
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) |
||||
|
||||
install(FILES "mxml.h" DESTINATION include) |
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mxml.pc" DESTINATION lib/pkgconfig) |
||||
install(TARGETS mxml |
||||
DESTINATION lib |
||||
RUNTIME DESTINATION bin) |
@ -0,0 +1,109 @@ |
||||
/* |
||||
* Configuration file for Mini-XML, a small XML file parsing library. |
||||
* |
||||
* Copyright 2003-2017 by Michael R Sweet. |
||||
* |
||||
* These coded instructions, statements, and computer programs are the |
||||
* property of Michael R Sweet and are protected by Federal copyright |
||||
* law. Distribution and use rights are outlined in the file "COPYING" |
||||
* which should have been included with this file. If this file is |
||||
* missing or damaged, see the license at: |
||||
* |
||||
* https://michaelrsweet.github.io/mxml |
||||
*/ |
||||
|
||||
/* |
||||
* Include necessary headers... |
||||
*/ |
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
#include <stdarg.h> |
||||
#include <ctype.h> |
||||
|
||||
|
||||
/* |
||||
* Version number... |
||||
*/ |
||||
|
||||
#define MXML_VERSION "@VERSION_H@" |
||||
|
||||
|
||||
/* |
||||
* Inline function support... |
||||
*/ |
||||
|
||||
#define inline |
||||
|
||||
|
||||
/* |
||||
* Long long support... |
||||
*/ |
||||
|
||||
#cmakedefine HAVE_LONG_LONG |
||||
|
||||
|
||||
/* |
||||
* Do we have <zlib.h>? |
||||
*/ |
||||
|
||||
#cmakedefine HAVE_ZLIB_H |
||||
|
||||
|
||||
/* |
||||
* Do we have the *printf() functions? |
||||
*/ |
||||
|
||||
#cmakedefine HAVE_SNPRINTF |
||||
#cmakedefine HAVE_VASPRINTF |
||||
#cmakedefine HAVE_VSNPRINTF |
||||
|
||||
|
||||
/* |
||||
* Do we have the strXXX() functions? |
||||
*/ |
||||
|
||||
#cmakedefine HAVE_STRDUP |
||||
#cmakedefine HAVE_STRLCAT |
||||
#cmakedefine HAVE_STRLCPY |
||||
|
||||
|
||||
/* |
||||
* Do we have threading support? |
||||
*/ |
||||
|
||||
#cmakedefine HAVE_PTHREAD_H |
||||
|
||||
|
||||
/* |
||||
* Define prototypes for string functions as needed... |
||||
*/ |
||||
|
||||
# ifndef HAVE_STRDUP |
||||
extern char *_mxml_strdup(const char *); |
||||
# define strdup _mxml_strdup |
||||
# endif /* !HAVE_STRDUP */ |
||||
|
||||
# ifndef HAVE_STRLCAT |
||||
extern size_t _mxml_strlcat(char *, const char *, size_t); |
||||
# define strlcat _mxml_strlcat |
||||
# endif /* !HAVE_STRLCAT */ |
||||
|
||||
# ifndef HAVE_STRLCPY |
||||
extern size_t _mxml_strlcpy(char *, const char *, size_t); |
||||
# define strlcpy _mxml_strlcpy |
||||
# endif /* !HAVE_STRLCPY */ |
||||
|
||||
extern char *_mxml_strdupf(const char *, ...); |
||||
extern char *_mxml_vstrdupf(const char *, va_list); |
||||
|
||||
# ifndef HAVE_SNPRINTF |
||||
extern int _mxml_snprintf(char *, size_t, const char *, ...); |
||||
# define snprintf _mxml_snprintf |
||||
# endif /* !HAVE_SNPRINTF */ |
||||
|
||||
# ifndef HAVE_VSNPRINTF |
||||
extern int _mxml_vsnprintf(char *, size_t, const char *, va_list); |
||||
# define vsnprintf _mxml_vsnprintf |
||||
# endif /* !HAVE_VSNPRINTF */ |
@ -0,0 +1,3 @@ |
||||
#! /bin/sh |
||||
sed 's,\(.*MXML_VERSION[^"]*\).*,\1"@VERSION_H@",' config.h.in | \ |
||||
sed 's,#undef,#cmakedefine,g' > config.h.cmake.in |
Loading…
Reference in new issue