Browse Source

Add document build

pull/1329/merge
wener 8 years ago
committed by Max Lv
parent
commit
88ef344262
3 changed files with 115 additions and 5 deletions
  1. 1
      CMakeLists.txt
  2. 85
      doc/CMakeLists.txt
  3. 34
      src/CMakeLists.txt

1
CMakeLists.txt

@ -128,4 +128,5 @@ target_link_libraries(ipset-shared cork-shared bloom-shared)
set_target_properties(bloom-shared PROPERTIES OUTPUT_NAME bloom)
add_subdirectory(src)
add_subdirectory(doc)

85
doc/CMakeLists.txt

@ -0,0 +1,85 @@
find_program(XMLTO_EXECUTABLE NAMES xmlto)
find_program(ASCIIDOC_EXECUTABLE NAMES asciidoc asciidoc.py)
# Opt-in doc build option
if (XMLTO_EXECUTABLE-NOTFOUND OR ASCIIDOC_EXECUTABLE-NOTFOUND)
option(WITH_DOC_MAN "Build manpage doc" OFF)
else ()
option(WITH_DOC_MAN "Build manpage doc" ON)
endif ()
if (ASCIIDOC_EXECUTABLE-NOTFOUND)
option(WITH_DOC_HTML "Build html doc" OFF)
else ()
option(WITH_DOC_HTML "Build html doc" ON)
endif ()
# NOTE For brew user, we have to setup this env var. see `brew info asciidoc'
set(XMLTO_ENV)
set(XMLTO_CATALOG_DIR_MACOS /usr/local/etc/xml/catalog)
if (EXISTS ${XMLTO_CATALOG_DIR_MACOS})
set(XMLTO_ENV XML_CATALOG_FILES=${XMLTO_CATALOG_DIR_MACOS})
message(STATUS "Detect xmlto catalog dir ${XMLTO_CATALOG_DIR_MACOS}")
endif ()
set(CMAKE_MANPAGE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/man)
set(DOC_DIR ${CMAKE_SOURCE_DIR}/doc)
set(XMLTO_OPTS -m ${DOC_DIR}/manpage-normal.xsl -m ${DOC_DIR}/manpage-bold-literal.xsl man)
set(ASCIIDOC_XML_OPTS -b docbook -d manpage -f ${DOC_DIR}/asciidoc.conf -aversion=${PROJECT_VERSION})
set(ASCIIDOC_HTML_OPTS -b html4 -d article -f ${DOC_DIR}/asciidoc.conf -aversion=${PROJECT_VERSION})
set(MAN_NAMES ss-local.1 ss-manager.1 ss-nat.1 ss-redir.1 ss-server.1 ss-tunnel.1 shadowsocks-libev.8)
set(MAN_FILES)
set(HTML_FILES)
foreach (manfile IN LISTS MAN_NAMES)
string(REGEX REPLACE \\.. .xml xmlfile ${manfile})
string(REGEX REPLACE \\.. .asciidoc docfile ${manfile})
string(REGEX REPLACE \\.. .html htmlfile ${manfile})
set(docfile ${DOC_DIR}/${docfile})
add_custom_command(OUTPUT ${manfile}
COMMAND ${ASCIIDOC_EXECUTABLE} ${ASCIIDOC_XML_OPTS} -o ${xmlfile} ${docfile}
COMMAND ${CMAKE_COMMAND} -E env ${XMLTO_ENV} ${XMLTO_EXECUTABLE} ${XMLTO_OPTS} ${xmlfile}
# After we built the manpage, the xmlfile is nolongger needed
COMMAND ${CMAKE_COMMAND} -E remove ${xmlfile}
DEPENDS ${docfile}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/man
COMMENT "Building manpage ${manfile}"
VERBATIM)
list(APPEND MAN_FILES ${manfile})
add_custom_command(OUTPUT ${htmlfile}
COMMAND ${ASCIIDOC_EXECUTABLE} ${ASCIIDOC_HTML_OPTS} -o ${htmlfile} ${docfile}
DEPENDS ${docfile}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/html
COMMENT "Building htmlfile ${htmlfile}"
VERBATIM)
list(APPEND HTML_FILES ${htmlfile})
endforeach ()
add_custom_target(doc-man ALL DEPENDS ${MAN_FILES})
add_custom_target(doc-html ALL DEPENDS ${HTML_FILES})
if (NOT WITH_DOC_MAN)
set_target_properties(doc-man PROPERTIES EXCLUDE_FROM_ALL TRUE)
endif ()
if (NOT WITH_DOC_HTML)
set_target_properties(doc-html PROPERTIES EXCLUDE_FROM_ALL TRUE)
endif ()
# This is required for custom command
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/man)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/html)
install(DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
DESTINATION man
FILES_MATCHING PATTERN "*.[18]")
install(DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
DESTINATION html
FILES_MATCHING PATTERN "*.html")

34
src/CMakeLists.txt

@ -97,13 +97,33 @@ find_library(LIBEV_SHARED ev)
find_library(LIBUDNS_SHARED udns)
find_library(LIBPCRE_SHARED pcre)
list(APPEND DEPS bloom m ${LIBEV} ${LIBUDNS} ${LIBPCRE} ${LIBSODIUM} ${LIBMBEDTLS} ${LIBMBEDCRYPTO})
list(APPEND DEPS_SHARED bloom-shared m ${LIBEV_SHARED} ${LIBUDNS_SHARED} ${LIBPCRE_SHARED} ${LIBSODIUM_SHARED}
${LIBMBEDTLS_SHARED} ${LIBMBEDCRYPTO_SHARED})
# Dependencies we need for static and shared
list(APPEND DEPS
m
bloom
${LIBEV}
${LIBUDNS}
${LIBPCRE}
${LIBSODIUM}
${LIBMBEDTLS}
${LIBMBEDCRYPTO}
)
list(APPEND DEPS_SHARED
m
bloom-shared
${LIBEV_SHARED}
${LIBUDNS_SHARED}
${LIBPCRE_SHARED}
${LIBSODIUM_SHARED}
${LIBMBEDTLS_SHARED}
${LIBMBEDCRYPTO_SHARED}
)
find_package (Threads)
# Add our targets
# ------------------------------------------------------------------
# Static
# By default we use normal name for static, all shared targets will add a `-shared' suffix
add_executable(ss-server ${SS_SERVER_SOURCE})
add_executable(ss-tunnel ${SS_TUNNEL_SOURCE})
add_executable(ss-manager ${SS_MANAGER_SOURCE})
@ -132,6 +152,9 @@ target_link_libraries(shadowsocks-libev cork ipset ${DEPS})
# ------------------------------------------------------------------
# Shared
# Shared target will have a `-shared' suffix
# All shared dependency also have `-shared' suffix
# For shared binary, we still use the same name as static, without `-shared', but will output to shared directory
add_executable(ss-server-shared ${SS_SERVER_SOURCE})
add_executable(ss-tunnel-shared ${SS_TUNNEL_SOURCE})
add_executable(ss-manager-shared ${SS_MANAGER_SOURCE})
@ -172,7 +195,8 @@ set_target_properties(shadowsocks-libev-shared PROPERTIES OUTPUT_NAME shadowsock
target_compile_definitions(shadowsocks-libev-shared PUBLIC -DMODULE_LOCAL)
target_link_libraries(shadowsocks-libev-shared cork-shared ipset-shared ${DEPS_SHARED})
# ------------------------------------------------------------------
# Misc
install(DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
DESTINATION bin
FILES_MATCHING PATTERN "ss-*")

Loading…
Cancel
Save