Add CMake infrastructure, including CTest support. Open points: pkgconfig file not yet built. installation not tested. Problems generating html pages. distribution tarball not checked for unwanted/missing content. --HG-- branch : HEAD
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..51b8bb0 --- /dev/null +++ b/CMakeLists.txt
@@ -0,0 +1,92 @@ +# $NiH$ + +PROJECT(libzip C) + +INCLUDE(CheckFunctionExists) +INCLUDE(CheckIncludeFiles) +INCLUDE(CheckSymbolExists) + +SET(PACKAGE "libzip") +SET(PACKAGE_NAME ${PACKAGE}) +SET(PACKAGE_VERSION_MAJOR "0") +SET(PACKAGE_VERSION_MINOR "7") +SET(PACKAGE_VERSION_PATCH "1") +SET(VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}.${PACKAGE_VERSION_PATCH}") +SET(PACKAGE_VERSION ${VERSION}) +SET(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") + +ADD_SUBDIRECTORY(lib) +ADD_SUBDIRECTORY(man) +ADD_SUBDIRECTORY(src) +ADD_SUBDIRECTORY(regress) + +# Checks + +CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO) +CHECK_FUNCTION_EXISTS(MoveFileEx HAVE_MOVEFILEEX) +CHECK_FUNCTION_EXISTS(mkstemp HAVE_MKSTEMP) +CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H) + +INCLUDE(FindZLIB) +CHECK_SYMBOL_EXISTS(ZEXPORT zlib.h HAVE_ZEXPORT) +IF(NOT HAVE_ZEXPORT) + MESSAGE(FATAL_ERROR "-- ZLIB version too old, please install at least v1.1.2") +ENDIF(NOT HAVE_ZEXPORT) + +# Targets + +# XXX: pkgconfig file + +# installation + +# XXX: pkgconfig file + +# packaging + +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "library for manipulating zip archives") +SET(CPACK_PACKAGE_VENDOR "Dieter Baron <dillo@giga.or.at> and Thomas Klausner <tk@giga.or.at>") +SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README") +# XXX: provide a license file +#SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") +SET(CPACK_PACKAGE_VERSION_MAJOR ${PACKAGE_VERSION_MAJOR}) +SET(CPACK_PACKAGE_VERSION_MINOR ${PACKAGE_VERSION_MINOR}) +SET(CPACK_PACKAGE_VERSION_PATCH ${PACKAGE_VERSION_PATCH}) +SET(CPACK_SOURCE_PACKAGE_FILE_NAME ${PACKAGE_NAME}-${PACKAGE_VERSION}) +SET(CPACK_GENERATOR "TGZ") +SET(CPACK_SOURCE_GENERATOR "TGZ") +SET(CPACK_SOURCE_IGNORE_FILES + ".a$" + ".cmake$" + ".o$" + ".so$" + "/.deps/" + "/.libs/" + "/CMakeFiles/" + "/CVS/" + "/autom4te.cache/" + "/build" + "/broken" + "/docs/" + "AdditionalInfo.txt$" + "CMakeCache.txt$" + "Makefile$" + "\\\\.sh$" + "_CPack_" + "config.h$" + "config.log$" + "config.status$" + "dccsend$" + "dccserver$" + "html$" + "install_manifest.txt$" + "stamp-h1$" + "tar.bz2" + "tar.gz" + "~$" +) +SET(CPACK_SOURCE_STRIP_FILES "") +INCLUDE(CPack) + +# write out config file +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake-config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/config.h)
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt new file mode 100644 index 0000000..feb4935 --- /dev/null +++ b/lib/CMakeLists.txt
@@ -0,0 +1,127 @@ +INCLUDE(CheckFunctionExists) + +INSTALL(FILES zip.h DESTINATION include) + +# from http://www.cmake.org/Wiki/CMakeMacroLibtoolFile +MACRO(GET_TARGET_PROPERTY_WITH_DEFAULT _variable _target _property _default_value) + + GET_TARGET_PROPERTY (${_variable} ${_target} ${_property}) + IF (${_variable} STREQUAL NOTFOUND) + SET (${_variable} ${_default_value}) + ENDIF (${_variable} STREQUAL NOTFOUND) + +ENDMACRO (GET_TARGET_PROPERTY_WITH_DEFAULT) + +MACRO(CREATE_LIBTOOL_FILE _target _install_DIR) + GET_TARGET_PROPERTY(_target_location ${_target} LOCATION) + GET_TARGET_PROPERTY_WITH_DEFAULT(_target_static_lib ${_target} STATIC_LIB "") + GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dependency_libs ${_target} LT_DEPENDENCY_LIBS "") + GET_TARGET_PROPERTY_WITH_DEFAULT(_target_current ${_target} LT_VERSION_CURRENT 0) + GET_TARGET_PROPERTY_WITH_DEFAULT(_target_age ${_target} LT_VERSION_AGE 0) + GET_TARGET_PROPERTY_WITH_DEFAULT(_target_revision ${_target} LT_VERSION_REVISION 0) + GET_TARGET_PROPERTY_WITH_DEFAULT(_target_installed ${_target} LT_INSTALLED yes) + GET_TARGET_PROPERTY_WITH_DEFAULT(_target_shouldnotlink ${_target} LT_SHOULDNOTLINK yes) + GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dlopen ${_target} LT_DLOPEN "") + GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dlpreopen ${_target} LT_DLPREOPEN "") + GET_FILENAME_COMPONENT(_laname ${_target_location} NAME_WE) + GET_FILENAME_COMPONENT(_soname ${_target_location} NAME) + SET(_laname ${_laname}.la) + FILE(WRITE ${_laname} "# ${_laname} - a libtool library file, generated by cmake \n") + FILE(APPEND ${_laname} "# The name that we can dlopen(3).\n") + FILE(APPEND ${_laname} "dlname='${_soname}'\n") + FILE(APPEND ${_laname} "# Names of this library\n") + FILE(APPEND ${_laname} "library_names='${_soname}.${_target_current}.${_target_age}.${_target_revision} ${_soname}.${_target_current} ${_soname}'\n") + FILE(APPEND ${_laname} "# The name of the static archive\n") + FILE(APPEND ${_laname} "old_library='${_target_static_lib}'\n") + FILE(APPEND ${_laname} "# Libraries that this one depends upon.\n") + FILE(APPEND ${_laname} "dependency_libs='${_target_dependency_libs}'\n") + FILE(APPEND ${_laname} "# Version information.\n") + FILE(APPEND ${_laname} "current=${_target_current}\n") + FILE(APPEND ${_laname} "age=${_target_age}\n") + FILE(APPEND ${_laname} "revision=${_target_revision}\n") + FILE(APPEND ${_laname} "# Is this an already installed library?\n") + FILE(APPEND ${_laname} "installed=${_target_installed}\n") + FILE(APPEND ${_laname} "# Should we warn about portability when linking against -modules?\n") + FILE(APPEND ${_laname} "shouldnotlink=${_target_shouldnotlink}\n") + FILE(APPEND ${_laname} "# Files to dlopen/dlpreopen\n") + FILE(APPEND ${_laname} "dlopen='${_target_dlopen}'\n") + FILE(APPEND ${_laname} "dlpreopen='${_target_dlpreopen}'\n") + FILE(APPEND ${_laname} "# Directory that this library needs to be installed in:\n") + FILE(APPEND ${_laname} "libdir='${CMAKE_INSTALL_PREFIX}${_install_DIR}'\n") + INSTALL( FILES ${_laname} ${_soname} + DESTINATION ${CMAKE_INSTALL_PREFIX}${_install_DIR}) +ENDMACRO(CREATE_LIBTOOL_FILE) + +SET(LIBZIP_SOURCES + zip_add.c + zip_add_dir.c + zip_close.c + zip_delete.c + zip_dirent.c + zip_entry_free.c + zip_entry_new.c + ${CMAKE_CURRENT_BINARY_DIR}/zip_err_str.c + zip_error.c + zip_error_clear.c + zip_error_get.c + zip_error_get_sys_type.c + zip_error_strerror.c + zip_error_to_str.c + zip_fclose.c + zip_file_error_clear.c + zip_file_error_get.c + zip_file_get_offset.c + zip_file_strerror.c + zip_fopen.c + zip_fopen_index.c + zip_fread.c + zip_free.c + zip_get_archive_comment.c + zip_get_file_comment.c + zip_get_num_files.c + zip_get_name.c + zip_memdup.c + zip_name_locate.c + zip_new.c + zip_open.c + zip_rename.c + zip_replace.c + zip_set_archive_comment.c + zip_set_file_comment.c + zip_source_buffer.c + zip_source_file.c + zip_source_filep.c + zip_source_free.c + zip_source_function.c + zip_source_zip.c + zip_set_name.c + zip_stat.c + zip_stat_index.c + zip_stat_init.c + zip_strerror.c + zip_unchange.c + zip_unchange_all.c + zip_unchange_archive.c + zip_unchange_data.c +) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/..) + +# XXX: distribute instead? +ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zip_err_str.c + COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/make_zip_err_str.sh + ${CMAKE_CURRENT_SOURCE_DIR}/zip.h + ${CMAKE_CURRENT_BINARY_DIR}/zip_err_str.c + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/zip.h + ${CMAKE_CURRENT_SOURCE_DIR}/make_zip_err_str.sh +) +CHECK_FUNCTION_EXISTS(mkstemp HAVE_MKSTEMP) +IF(NOT HAVE_MKSTEMP) + SET(LIBZIP_EXTRA_FILES mkstemp.c) +ENDIF(NOT HAVE_MKSTEMP) + +ADD_LIBRARY(zip SHARED ${LIBZIP_SOURCES} ${LIBZIP_EXTRA_FILES}) +SET_TARGET_PROPERTIES(zip PROPERTIES VERSION 1.0 SOVERSION 1 ) +CREATE_LIBTOOL_FILE(zip lib) +TARGET_LINK_LIBRARIES(zip z)
diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt new file mode 100644 index 0000000..8de246d --- /dev/null +++ b/man/CMakeLists.txt
@@ -0,0 +1,97 @@ +SET(MDOC3_PAGES + libzip.mdoc + zip_add.mdoc + zip_add_dir.mdoc + zip_close.mdoc + zip_delete.mdoc + zip_error_clear.mdoc + zip_error_get.mdoc + zip_error_get_sys_type.mdoc + zip_error_to_str.mdoc + zip_errors.mdoc + zip_fclose.mdoc + zip_file_strerror.mdoc + zip_fopen.mdoc + zip_fread.mdoc + zip_get_archive_comment.mdoc + zip_get_file_comment.mdoc + zip_get_name.mdoc + zip_get_num_files.mdoc + zip_name_locate.mdoc + zip_open.mdoc + zip_rename.mdoc + zip_set_archive_comment.mdoc + zip_set_file_comment.mdoc + zip_source_buffer.mdoc + zip_source_file.mdoc + zip_source_filep.mdoc + zip_source_free.mdoc + zip_source_function.mdoc + zip_source_zip.mdoc + zip_stat.mdoc + zip_stat_init.mdoc + zip_unchange.mdoc + zip_unchange_all.mdoc + zip_unchange_archive.mdoc +) +SET(MDOC1_PAGES + zipcmp.mdoc + zipmerge.mdoc +) +SET(MDOC_PAGES ${MDOC1_PAGES} ${MDOC3_PAGES}) +STRING(REGEX REPLACE .mdoc "" MAN1_PAGES "${MDOC1_PAGES}") +STRING(REGEX REPLACE .mdoc "" MAN3_PAGES "${MDOC3_PAGES}") +SET(MAN_PAGES ${MAN1_PAGES} ${MAN3_PAGES}) + +IF(CMAKE_SYSTEM_NAME MATCHES BSD) + SET(MANFMT mdoc) +ELSE(CMAKE_SYSTEM_NAME MATCHES BSD) + SET(MANFMT man) +ENDif(CMAKE_SYSTEM_NAME MATCHES BSD) + +# installation + +SET(MAN_PATH man) + +FOREACH(MAN_PAGE ${MAN1_PAGES}) + INSTALL(FILES ${MAN_PAGE}.${MANFMT} DESTINATION ${MAN_PATH}/man1 + RENAME ${MAN_PAGE}.1) +ENDFOREACH(MAN_PAGE ${PROGRAMS}) +FOREACH(MAN_PAGE ${MAN3_PAGES}) + INSTALL(FILES ${MAN_PAGE}.${MANFMT} DESTINATION ${MAN_PATH}/man3 + RENAME ${MAN_PAGE}.3) +ENDFOREACH(MAN_PAGE ${PROGRAMS}) + +# custom targets + +FOREACH(MAN ${MAN_PAGES}) + ADD_CUSTOM_TARGET(${MAN}.man + DEPENDS ${MAN}.mdoc + COMMAND mdoc2man ${CMAKE_CURRENT_SOURCE_DIR}/${MAN}.mdoc > ${MAN}.new + COMMAND diff -I NiH ${MAN}.new ${CMAKE_CURRENT_SOURCE_DIR}/${MAN}.man || mv ${MAN}.new ${CMAKE_CURRENT_SOURCE_DIR}/${MAN}.man + COMMAND rm -f ${MAN}.new + COMMENT Updating man page ${MAN}.man + ) + ADD_CUSTOM_TARGET(${MAN}.html + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${MAN}.mdoc + COMMAND nroff -mdoc2html ${CMAKE_CURRENT_SOURCE_DIR}/${MAN}.mdoc | sed -e "s,../html[0-9]/,," > ${MAN}.html + COMMENT Updating HTML page ${MAN}.html + ) +ENDFOREACH(MAN) + +STRING(REGEX REPLACE .mdoc .man MANDEPEND "${MDOC_PAGES}") +ADD_CUSTOM_TARGET(update-man + DEPENDS ${MANDEPEND}) + +STRING(REGEX REPLACE .mdoc .html HTMLDEPEND "${MDOC_PAGES}") +ADD_CUSTOM_TARGET(update-html + DEPENDS ${HTMLDEPEND}) + +# XXX: strange error: +#[ 94%] zipcmp.html +#[ 97%] Built target zipcmp.html +#[ 97%] zipmerge.html +#[100%] Built target zipmerge.html +#make: don't know how to make zipcmp.html. Stop + +# XXX: why are all the man pages rebuilt on a second 'make update-html'?
diff --git a/regress/CMakeLists.txt b/regress/CMakeLists.txt new file mode 100644 index 0000000..0a589f3 --- /dev/null +++ b/regress/CMakeLists.txt
@@ -0,0 +1,27 @@ +# $NiH$ + +ENABLE_TESTING() + +SET(TEST_PROGRAMS + add_from_buffer + add_from_file + add_from_filep + encrypt + fread + get_comment + name_locate + open + set_comment_all + set_comment_localonly + set_comment_removeglobal + set_comment_revert +) + +SET(ENV{srcdir} ${CMAKE_CURRENT_SOURCE_DIR}) +FOREACH(PROGRAM ${TEST_PROGRAMS}) + ADD_EXECUTABLE(${PROGRAM} ${PROGRAM}.c) + TARGET_LINK_LIBRARIES(${PROGRAM} zip) + ADD_TEST(${PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/runtest ${CMAKE_CURRENT_SOURCE_DIR}/${PROGRAM}) +ENDFOREACH(PROGRAM ${TEST_PROGRAMS}) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../lib)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..c5b76a4 --- /dev/null +++ b/src/CMakeLists.txt
@@ -0,0 +1,10 @@ +# $NiH$ + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../lib + ${CMAKE_CURRENT_BINARY_DIR}/..) + +ADD_EXECUTABLE(zipcmp zipcmp.c) +TARGET_LINK_LIBRARIES(zipcmp zip) + +ADD_EXECUTABLE(zipmerge zipmerge.c) +TARGET_LINK_LIBRARIES(zipmerge zip)