tidy-html5/CMakeLists.txt

276 lines
10 KiB
CMake
Raw Normal View History

2015-04-02 11:17:14 +00:00
# CMakeLists.txt - 20150402 - 20150130 - 20140801 - for github htacg/tidy-html5
# Prepare for changing the name to 'tidy'
cmake_minimum_required (VERSION 2.8.8)
2014-08-03 18:08:57 +00:00
2015-04-02 11:17:14 +00:00
set(LIB_NAME tidy5)
project (${LIB_NAME})
2014-08-03 18:08:57 +00:00
2015-01-29 17:25:57 +00:00
# ### NOTE: *** Adjust version.txt when required ***
# read 'version' file into a variable (stripping any newlines or spaces)
file(READ version.txt versionFile)
if (NOT versionFile)
message(FATAL_ERROR "Unable to determine libtidy version. version.txt file is missing.")
endif()
string(STRIP "${versionFile}" LIBTIDY_VERSION)
2015-01-29 17:25:57 +00:00
string(REPLACE "." ";" VERSION_LIST ${LIBTIDY_VERSION})
list(GET VERSION_LIST 0 TIDY_MAJOR_VERSION)
list(GET VERSION_LIST 1 TIDY_MINOR_VERSION)
list(GET VERSION_LIST 2 TIDY_POINT_VERSION)
2014-08-03 18:08:57 +00:00
# Allow developer to select is Dynamic or static library built
set( LIB_TYPE STATIC ) # set default static
2015-01-28 16:15:44 +00:00
option( BUILD_SHARED_LIB "Set ON to build Shared (DLL) Library" OFF )
option( BUILD_TAB2SPACE "Set ON to build utility app, tab2space" OFF )
option( BUILD_SAMPLE_CODE "Set ON to build the sample code" OFF )
if (NOT MAN_INSTALL_DIR)
set(MAN_INSTALL_DIR share/man/man1)
endif ()
2014-08-03 18:08:57 +00:00
if(CMAKE_COMPILER_IS_GNUCXX)
set( WARNING_FLAGS -Wall )
endif(CMAKE_COMPILER_IS_GNUCXX)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set( WARNING_FLAGS "-Wall -Wno-overloaded-virtual" )
endif()
if(WIN32 AND MSVC)
# turn off various warnings
set(WARNING_FLAGS "${WARNING_FLAGS} /wd4996")
# C4090: 'function' : different 'const' qualifiers
2014-08-06 10:09:13 +00:00
# C4244: '=' : conversion from '__int64' to 'uint', possible loss of data
# C4267: 'function' : conversion from 'size_t' to 'uint', possible loss of data
2014-08-03 18:08:57 +00:00
# foreach(warning 4244 4251 4267 4275 4290 4786 4305)
2014-08-06 10:09:13 +00:00
foreach(warning 4090 4244 4267)
2014-08-03 18:08:57 +00:00
set(WARNING_FLAGS "${WARNING_FLAGS} /wd${warning}")
endforeach()
set( MSVC_FLAGS "-DNOMINMAX -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -D__CRT_NONSTDC_NO_WARNINGS" )
# if (${MSVC_VERSION} EQUAL 1600)
# set( MSVC_LD_FLAGS "/FORCE:MULTIPLE" )
# endif (${MSVC_VERSION} EQUAL 1600)
2015-01-20 17:09:01 +00:00
# set( NOMINMAX 1 )
# to distinguish between debug and release lib in windows
set( CMAKE_DEBUG_POSTFIX "d" ) # little effect in unix
2014-08-03 18:08:57 +00:00
else()
2014-08-06 10:09:13 +00:00
# add any gcc flags
2014-08-03 18:08:57 +00:00
endif()
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS} ${MSVC_FLAGS} -D_REENTRANT" )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS} ${MSVC_FLAGS} -D_REENTRANT" )
set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MSVC_LD_FLAGS}" )
add_definitions ( -DHAVE_CONFIG_H )
add_definitions ( -DSUPPORT_UTF16_ENCODINGS=1 )
add_definitions ( -DSUPPORT_ASIAN_ENCODINGS=1 )
add_definitions ( -DSUPPORT_ACCESSIBILITY_CHECKS=1 )
2015-01-29 17:25:57 +00:00
add_definitions ( -DLIBTIDY_VERSION="${LIBTIDY_VERSION}" )
2014-08-03 18:08:57 +00:00
# Issue #188 - Support user items in platform.h
if (TIDY_CONFIG_FILE)
add_definitions( -DTIDY_CONFIG_FILE="${TIDY_CONFIG_FILE}" )
endif ()
if (TIDY_USER_CONFIG_FILE)
add_definitions( -DTIDY_USER_CONFIG_FILE="${TIDY_USER_CONFIG_FILE}" )
endif ()
if (SUPPORT_GETPWNAM)
add_definitions( -DSUPPORT_GETPWNAM=1 )
endif ()
2014-08-03 18:08:57 +00:00
if(BUILD_SHARED_LIB)
set(LIB_TYPE SHARED)
2015-01-29 17:25:57 +00:00
message("*** Building DLL library ${LIB_TYPE}, version ${LIBTIDY_VERSION}")
2014-08-03 18:08:57 +00:00
else(BUILD_SHARED_LIB)
2015-01-29 17:25:57 +00:00
message("*** Building static library ${LIB_TYPE}, version ${LIBTIDY_VERSION}")
2014-08-03 18:08:57 +00:00
endif(BUILD_SHARED_LIB)
include_directories ( "${PROJECT_SOURCE_DIR}/include" "${PROJECT_SOURCE_DIR}/src" )
##############################################################################
### tidy library
# file locations
set ( SRCDIR src )
set ( INCDIR include )
# file lists
set ( CFILES
${SRCDIR}/access.c ${SRCDIR}/attrs.c ${SRCDIR}/istack.c
${SRCDIR}/parser.c ${SRCDIR}/tags.c ${SRCDIR}/entities.c
${SRCDIR}/lexer.c ${SRCDIR}/pprint.c ${SRCDIR}/charsets.c ${SRCDIR}/clean.c
${SRCDIR}/localize.c ${SRCDIR}/config.c ${SRCDIR}/alloc.c
${SRCDIR}/attrask.c ${SRCDIR}/attrdict.c ${SRCDIR}/attrget.c
${SRCDIR}/buffio.c ${SRCDIR}/fileio.c ${SRCDIR}/streamio.c
${SRCDIR}/tagask.c ${SRCDIR}/tmbstr.c ${SRCDIR}/utf8.c
${SRCDIR}/tidylib.c ${SRCDIR}/mappedio.c ${SRCDIR}/gdoc.c )
set ( HFILES
${INCDIR}/platform.h ${INCDIR}/tidy.h ${INCDIR}/tidyenum.h
${INCDIR}/buffio.h )
set ( LIBHFILES
${SRCDIR}/access.h ${SRCDIR}/attrs.h ${SRCDIR}/attrdict.h ${SRCDIR}/charsets.h
${SRCDIR}/clean.h ${SRCDIR}/config.h ${SRCDIR}/entities.h
${SRCDIR}/fileio.h ${SRCDIR}/forward.h ${SRCDIR}/lexer.h
${SRCDIR}/mappedio.h ${SRCDIR}/message.h ${SRCDIR}/parser.h
${SRCDIR}/pprint.h ${SRCDIR}/streamio.h ${SRCDIR}/tags.h
${SRCDIR}/tmbstr.h ${SRCDIR}/utf8.h ${SRCDIR}/tidy-int.h
${SRCDIR}/version.h ${SRCDIR}/gdoc.h )
if (MSVC)
list(APPEND CFILES ${SRCDIR}/sprtf.c)
list(APPEND LIBHFILES ${SRCDIR}/sprtf.h)
endif ()
2015-01-24 12:14:12 +00:00
set(name lib-tidy)
2014-08-03 18:08:57 +00:00
add_library ( ${name} ${LIB_TYPE} ${CFILES} ${HFILES} ${LIBHFILES} )
set_target_properties( ${name} PROPERTIES
2015-04-02 11:17:14 +00:00
OUTPUT_NAME ${LIB_NAME}
)
set_target_properties( ${name} PROPERTIES
VERSION ${LIBTIDY_VERSION}
SOVERSION ${TIDY_MAJOR_VERSION} )
2015-01-28 16:15:44 +00:00
if (BUILD_SHARED_LIB)
set_target_properties( ${name} PROPERTIES
COMPILE_FLAGS "-DBUILD_SHARED_LIB"
)
set_target_properties( ${name} PROPERTIES
COMPILE_FLAGS "-DBUILDING_SHARED_LIB"
)
endif ()
2015-01-24 12:14:12 +00:00
list ( APPEND add_LIBS ${name} )
2014-08-06 10:09:13 +00:00
install(TARGETS ${name}
RUNTIME DESTINATION bin
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)
2014-08-06 12:36:33 +00:00
install( FILES ${HFILES} DESTINATION include )
2014-08-03 18:08:57 +00:00
##########################################################
### main executable
2015-04-02 11:17:14 +00:00
set(name ${LIB_NAME})
2014-08-03 18:08:57 +00:00
set ( BINDIR console )
add_executable( ${name} ${BINDIR}/tidy.c )
target_link_libraries( ${name} ${add_LIBS} )
if (MSVC)
set_target_properties( ${name} PROPERTIES DEBUG_POSTFIX d )
endif ()
2015-01-28 16:15:44 +00:00
if (BUILD_SHARED_LIB)
set_target_properties( ${name} PROPERTIES
COMPILE_FLAGS "-DBUILD_SHARED_LIB"
)
endif ()
2014-08-06 10:09:13 +00:00
install (TARGETS ${name} DESTINATION bin)
2014-08-03 18:08:57 +00:00
2015-01-28 16:15:44 +00:00
if (BUILD_TAB2SPACE)
set(name tab2space)
add_executable( ${name} ${BINDIR}/tab2space.c )
if (MSVC)
set_target_properties( ${name} PROPERTIES DEBUG_POSTFIX d )
endif ()
# no INSTALL of this 'local' tool
2014-08-03 18:08:57 +00:00
endif ()
if (BUILD_SAMPLE_CODE)
set(name test71)
set(dir console)
add_executable( ${name} ${dir}/${name}.cxx )
if (MSVC)
set_target_properties( ${name} PROPERTIES DEBUG_POSTFIX d )
endif ()
target_link_libraries( ${name} ${add_LIBS} )
# no INSTALL of this 'local' sample
endif ()
2015-03-07 22:08:39 +00:00
#==========================================================
# Create man pages
#==========================================================
if (UNIX)
find_program( XSLTPROC_FOUND xsltproc )
if (XSLTPROC_FOUND)
2015-04-02 11:17:14 +00:00
## NOTE: man name must match exe ie currently `${LIB_NAME}.1` not `tidy.1`
2015-03-07 22:11:51 +00:00
## also could use `manpath` command output to determine target install path
2015-03-08 11:35:41 +00:00
message(STATUS "*** Generating man ***")
2015-04-02 11:17:14 +00:00
set(TIDY_MANFILE ${LIB_NAME}.1)
2015-03-07 22:08:39 +00:00
set(TIDY1XSL ../documentation/tidy1.xsl)
set(TIDYHELP ${CMAKE_BINARY_DIR}/tidy-help.xml)
2015-03-08 11:35:41 +00:00
set(TIDYCONFIG ${CMAKE_BINARY_DIR}/tidy-config.xml)
2015-04-02 11:17:14 +00:00
add_custom_target(man ALL DEPENDS "${CMAKE_BINARY_DIR}/${LIB_NAME}")
2015-03-08 05:39:46 +00:00
2015-03-07 22:08:39 +00:00
# run built EXE to generate xml output
add_custom_command(
2015-03-08 05:39:46 +00:00
TARGET man
2015-04-02 11:17:14 +00:00
COMMAND ${CMAKE_BINARY_DIR}/${LIB_NAME} -xml-help > ${TIDYHELP}
2015-03-07 22:08:39 +00:00
COMMENT "Generate ${TIDYHELP}"
VERBATIM
2015-03-08 05:39:46 +00:00
)
2015-03-08 07:39:48 +00:00
# run built EXE to generate more xml output
add_custom_command(
TARGET man
2015-04-02 11:17:14 +00:00
COMMAND ${CMAKE_BINARY_DIR}/${LIB_NAME} -xml-config > ${TIDYCONFIG}
2015-03-08 11:35:41 +00:00
COMMENT "Generate ${TIDYCONFIG}"
2015-03-08 07:39:48 +00:00
VERBATIM
)
2015-03-07 22:08:39 +00:00
# run xsltproc to generate the install files..
add_custom_command(
TARGET man
2015-03-08 05:39:46 +00:00
DEPENDS ${TIDYHELP}
COMMAND xsltproc ARGS ${TIDY1XSL} ${TIDYHELP} > ${CMAKE_BINARY_DIR}/${TIDY_MANFILE}
2015-03-08 05:39:46 +00:00
COMMENT "Generate ${TIDY_MANFILE}"
2015-03-07 22:08:39 +00:00
VERBATIM
)
2015-03-08 05:39:46 +00:00
install(FILES ${CMAKE_BINARY_DIR}/${TIDY_MANFILE} DESTINATION ${MAN_INSTALL_DIR})
2015-03-07 22:08:39 +00:00
endif ()
endif ()
##########################################################
### Create MSI,EXE, DMG, DEB/RPM
### TODO: Check each of these builds
##########################################################
set(BITNESS 32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(BITNESS 64)
endif()
if (WIN32)
# MSI - this needs WiX Tooset installed and a path to candle.exe
# EXE - this needs NSIS tools to be in path
2015-03-20 12:56:20 +00:00
set(CPACK_GENERATOR "NSIS;WIX;ZIP")
set(CPACK_SOURCE_GENERATOR "ZIP")
set(CPACK_WIX_UPGRADE_GUID "D809598A-B513-4752-B268-0BAC403B00E4")
elseif ( ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" )
set(CPACK_GENERATOR "PackageMake")
set(CPACK_SOURCE_GENERATOR "TGZ")
else ()
set(CPACK_GENERATOR "DEB;RPM")
set(CPACK_SOURCE_GENERATOR "TGZ")
endif ()
2015-04-02 11:17:14 +00:00
set(CPACK_PACKAGE_NAME "${LIB_NAME}")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${LIB_NAME} - HTML syntax checker")
set(CPACK_PACKAGE_VENDOR "HTML Tidy Advocacy Community Group")
set(CPACK_PACKAGE_CONTACT "maintainer@htacg.org")
set(CPACK_PACKAGE_VERSION ${LIBTIDY_VERSION})
set(CPACK_PACKAGE_VERSION_MAJOR "${TIDY_MAJOR_VERSION}")
set(CPACK_PACKAGE_VERSION_MINOR "${TIDY_MINOR_VERSION}")
set(CPACK_PACKAGE_VERSION_PATCH "${TIDY_POINT_VERSION}")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.html")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt")
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.html")
set(CPACK_RESOURCE_FILE_WELCOME "${CMAKE_SOURCE_DIR}/README.html")
## debian config
set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT})
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://www.html-tidy.org/")
#set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc")
set(CPACK_DEBIAN_PACKAGE_SECTION "Libraries")
set(CPACK_SOURCE_IGNORE_FILES "${CMAKE_SOURCE_DIR}/test/;${CMAKE_SOURCE_DIR}/build/;${CMAKE_SOURCE_DIR}/.git/")
if (NOT WIN32 AND NOT APPLE)
2015-04-02 11:17:14 +00:00
set( CPACK_PACKAGE_FILE_NAME "${LIB_NAME}-${CPACK_PACKAGE_VERSION}-${BITNESS}bit" )
endif ()
include(CPack)
2015-01-24 12:14:12 +00:00
# eof