cmake_minimum_required (VERSION 3.10) project(zzipbins VERSION "0.13.80" LANGUAGES C) include ( GNUInstallDirs ) include ( FindPkgConfig ) # options ######################################################## option(BUILD_SHARED_LIBS "Build a shared library" ON) option(BUILD_TESTS "Build test programs" OFF) option(MSVC_STATIC_RUNTIME "Build with static runtime libs (/MT)" ON) option(ZZIP_HTMLSITE "Generate site html pages from docs" OFF) option(ZZIP_HTMPAGES "Generate html manpages from sources" OFF) if(UNIX OR MINGW) option(ZZIP_MANPAGES "Generate man3 manpages from sources" ON) else() option(ZZIP_MANPAGES "Generate man3 manpages from sources" OFF) endif() # Zlib library needed find_package ( ZLIB REQUIRED ) # pkg_search_module ( ZZIP zzip ) find_package(PythonInterp 3.5 REQUIRED) find_package(UnixCommands REQUIRED) # bash cp mv rm gzip tar find_program(XMLTO xmlto) set(EXEEXT ${CMAKE_EXECUTABLE_SUFFIX}) set(README ${CMAKE_SOURCE_DIR}/README) set(topdir ${CMAKE_SOURCE_DIR}) set(srcdir ${CMAKE_CURRENT_SOURCE_DIR}) set(outdir ${CMAKE_CURRENT_BINARY_DIR}) set(PY ${PYTHON_EXECUTABLE}) set(mandir ${CMAKE_INSTALL_FULL_MANDIR}) set(docdir ${CMAKE_INSTALL_FULL_DOCDIR}) set(bins ${CMAKE_SOURCE_DIR}/bins) set(SDLs ${CMAKE_SOURCE_DIR}/SDL) # targets ######################################################## set(doc_FILES README.MSVC6 README.SDL COPYING.MPL COPYING.LIB COPYING.ZLIB zziplib.html zzipmmapped.html zzipfseeko.html) set(htm_FILES zzip-index.htm zzip-zip.htm zzip-file.htm zzip-sdl-rwops.htm zzip-extio.htm zzip-xor.htm zzip-crypt.htm zzip-cryptoid.htm zzip-api.htm zzip-basics.htm zzip-extras.htm zzip-parse.htm 64on32.htm future.htm fseeko.htm mmapped.htm memdisk.htm configs.htm sfx-make.htm developer.htm download.htm history.htm referentials.htm faq.htm copying.htm notes.htm functions.htm zip-php.htm) set(htm_md_FILES zzip-index.htm.md zzip-zip.htm.md zzip-file.htm.md zzip-sdl-rwops.htm.md zzip-extio.htm.md zzip-xor.htm.md zzip-crypt.htm.md zzip-cryptoid.htm.md zzip-api.htm.md zzip-basics.htm.md zzip-extras.htm.md zzip-parse.htm.md 64on32.htm.md future.htm.md fseeko.htm.md mmapped.htm.md memdisk.htm.md configs.htm.md sfx-make.htm.md developer.htm.md download.htm.md history.htm.md referentials.htm.md faq.htm.md copying.htm.md notes.htm.md functions.htm.md zip-php.htm.md) set(bins_FILES ${bins}/zzdir.c ${bins}/zzcat.c ${bins}/zzobfuscated.c ${bins}/zziptest.c ${bins}/zzxordir.c ${bins}/zzxorcat.c ${bins}/zzxorcopy.c ) set(SDLs_FILES ${SDLs}/SDL_rwops_zzcat.c ${SDLs}/SDL_rwops_zzip.c ${SDLs}/SDL_rwops_zzip.h ) set(zzipdoc_FILES zzipmakedocs.py zzipdoc/__init__.py zzipdoc/commentmarkup.py zzipdoc/match.py zzipdoc/dbk2htm.py zzipdoc/htm2dbk.py zzipdoc/functionheader.py zzipdoc/options.py zzipdoc/functionlisthtmlpage.py zzipdoc/textfileheader.py zzipdoc/functionlistreference.py zzipdoc/textfile.py zzipdoc/functionprototype.py zzipdoc/htmldocument.py zzipdoc/docbookdocument.py) add_custom_command(OUTPUT changes.htm COMMAND ${BASH} -c "E=changes.htm \ ; echo '
' > $E ; cat ${topdir}/ChangeLog \ | sed -e 's,\\&,\\&\\;,g' \ -e 's,<,\\<\\;,g' -e 's,>,\\>\\;,g' \ -e '/^[A-Z].*[12][09][09][09]/s,\\(.*\\),&,' \ -e '/^[0-9]/s,\\(.*\\),&,' >> $E ; echo '' >>$E" DEPENDS ${topdir}/ChangeLog VERBATIM) add_custom_command(OUTPUT site/site.html COMMAND ${BASH} -c "test -d ${outdir}/site || mkdir -p ${outdir}/site" COMMAND ${CP} ${srcdir}/body.htm ${outdir}/site/site.htm COMMAND ${CP} ${outdir}/changes.htm ${outdir}/site/changes.htm # COMMAND ${CP} "${htm_FILES}" ${outdir}/site/ COMMAND ${BASH} -c "cp -v ${srcdir}/*.md ${outdir}/site/" COMMAND ${BASH} -c "cp -v ${srcdir}/*.css ${outdir}/site/" COMMAND ${BASH} -c "cd ${outdir}/site; for i in *.md; do ${PYTHON} ${srcdir}/zzipdoctool/md2dbk.py $i --htm > `basename $i .md`; done" COMMAND ${BASH} -c "cd ${outdir}/site && ${BASH} ${srcdir}/mksite.sh --VERSION=${PROJECT_VERSION} --xml --print site.htm" DEPENDS ${htm_md_FILES} changes.htm ${srcdir}/zzipdoctool/md2dbk.py VERBATIM) add_custom_target(site DEPENDS site/site.html) add_custom_command(OUTPUT zzip.xml COMMAND ${PY} ${srcdir}/zzipdoc/htm2dbk.py ${htm_FILES} zziplib.xml -o ${outdir}/zzip.xml DEPENDS zziplib.xml ${htm_FILES} WORKING_DIRECTORY ${srcdir} VERBATIM) add_custom_target(dbk DEPENDS zzip.xml) if(XMLTO) add_custom_command(OUTPUT zzip.html COMMAND ${XMLTO} html-nochunks zzip.xml DEPENDS zzip.xml VERBATIM) add_custom_command(OUTPUT zzip.pdf COMMAND ${XMLTO} pdf zzip.xml DEPENDS zzip.xml VERBATIM) add_custom_target(pdf DEPENDS zzip.pdf) endif() string(REPLACE ";" " " all_bins_FILES "${bins_FILES}") string(REPLACE ";" " " all_SDLs_FILES "${SDLs_FILES}") add_custom_command(OUTPUT htmlsite.tar COMMAND ${BASH} -c "ls -l ${CMAKE_CURRENT_BINARY_DIR}/site/site.html" COMMAND ${BASH} -c "cd ${outdir} && cp zziplib.html zzipmmapped.html zzipfseeko.html site/" COMMAND ${BASH} -c "cd ${srcdir} && cp README.* COPYING.* ${outdir}/site/" COMMAND ${BASH} -c "cd ${topdir} && cp ChangeLog ${outdir}/site/" COMMAND ${BASH} -c "cd ${topdir} && cp ${all_bins_FILES} ${outdir}/site/" COMMAND ${BASH} -c "cd ${topdir} && cp ${all_SDLs_FILES} ${outdir}/site/" COMMAND ${BASH} -c "cd site && ln -s zzip-index.html index.html" COMMAND ${BASH} -c "tar cf htmlsite.tar site/*.*" COMMAND ${BASH} -c "ls -l `pwd`/htmlsite.tar || true" # DEPENDS site/site.html zziplib.html zzipmmapped.html zzipfseeko.html DEPENDS site/site.html zziplib_xml zzipmmapped_xml zzipfseeko_xml VERBATIM) if(ZZIP_HTMLSITE) add_custom_target(htmlsite ALL DEPENDS htmlsite.tar COMMAND ${BASH} -c "ls -l htmlsite.tar") else() add_custom_target(htmlsite DEPENDS htmlsite.tar COMMAND ${BASH} -c "ls -l htmlsite.tar") endif() #### set(docinfo --package=zziplib --release=${PROJECT_VERSION}) file(GLOB zzip_sources "${topdir}/zzip/*.c") add_custom_command(OUTPUT zziplib.xml COMMAND ${PY} ${srcdir}/zzipmakedocs.py ${zzip_sources} ${docinfo} --onlymainheader=zzip/lib.h --output=zziplib COMMAND ${MV} zziplib.docbook zziplib.xml DEPENDS libzzip BYPRODUCTS zziplib.html VERBATIM) add_custom_target(zziplib_xml DEPENDS zziplib.xml) # prevent race codition add_custom_command(OUTPUT zzipmmapped.xml COMMAND ${PY} ${srcdir}/zzipmakedocs.py ${zzip_sources} ${docinfo} --onlymainheader=zzip/mmapped.h --output=zzipmmapped COMMAND ${MV} zzipmmapped.docbook zzipmmapped.xml DEPENDS libzzipmmapped BYPRODUCTS zzipmmapped.html VERBATIM) add_custom_target(zzipmmapped_xml DEPENDS zzipmmapped.xml) # prevent race codition add_custom_command(OUTPUT zzipfseeko.xml COMMAND ${PY} ${srcdir}/zzipmakedocs.py ${zzip_sources} ${docinfo} --onlymainheader=zzip/fseeko.h --output=zzipfseeko COMMAND ${MV} zzipfseeko.docbook zzipfseeko.xml DEPENDS libzzipfseeko BYPRODUCTS zzipfseeko.html VERBATIM) add_custom_target(zzipfseeko_xml DEPENDS zzipfseeko.xml) # prevent race codition add_custom_command(OUTPUT manpages.tar COMMAND ${BASH} -c "test -d man3 && rm -rf man3; mkdir man3" COMMAND ${PY} ${srcdir}/zzipdoctool/dbk2man.py -o man3 man zziplib.xml $<$