# Zipios -- a small C++ library that provides easy access to .zip files. # Copyright (C) 2000-2007 Thomas Sondergaard # Copyright (c) 2015-2022 Made to Order Software Corp. All Rights Reserved # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA cmake_minimum_required(VERSION 3.10.2) project(zipios_project) option(RUN_TESTS "Enable CTest support and turn on the 'test' make target." OFF) if(${RUN_TESTS}) enable_testing() endif() # See `dev/version` set( ZIPIOS_VERSION_MAJOR 2 ) set( ZIPIOS_VERSION_MINOR 3 ) set( ZIPIOS_VERSION_PATCH 2 ) set( ZIPIOS_VERSION_BUILD 0 ) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) if(MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS") add_definitions(-DZIPIOS_WINDOWS) else() if(BORLAND) message(FATAL_ERROR "Borland compiler not supported!") endif() # SUNOS is not set by cmake string(REGEX MATCH "SunOS" SUNOS ${CMAKE_SYSTEM_NAME}) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fwrapv -fPIC" ) set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Werror -Wall -Wextra -Wunused-parameter") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3" ) # if(CYGWIN) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++17") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") endif() set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0 -fdiagnostics-show-option -Werror -Wall -Wextra -pedantic -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Winit-self -Wlogical-op -Wmissing-include-dirs -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=4 -Wundef -Wno-unused -Wunused-variable -Wno-variadic-macros -Wno-parentheses -Wno-unknown-pragmas -Wwrite-strings -Wswitch -Wunused-parameter -Wfloat-equal -Wold-style-cast -Wnoexcept") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") endif() option(BUILD_SHARED_LIBS "Build the ${PROJECT_NAME} libraries shared." ON) if(BUILD_SHARED_LIBS) set(ZIPIOS_LIBRARY_TYPE SHARED) else(BUILD_SHARED_LIBS) set(ZIPIOS_LIBRARY_TYPE STATIC) endif(BUILD_SHARED_LIBS) option(BUILD_DOCUMENTATION "Build the ${PROJECT_NAME} documentation." ON) # To generate coverage, use -D_COVERAGE=ON # and -DCMAKE_BUILD_TYPE=Debug option(${PROJECT_NAME}_COVERAGE "Turn on coverage for ${PROJECT_NAME}." OFF) if(${${PROJECT_NAME}_COVERAGE}) if(MSVC) message(FATAL_ERROR "Coverage is not available on this platform (yet).") endif() message("*** COVERAGE TURNED ON ***") find_program(COV gcov) if(${COV} STREQUAL "COV-NOTFOUND") message(FATAL_ERROR "Coverage requested, but gcov not installed!") endif() if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug") message(FATAL_ERROR "Coverage requested, but Debug is not turned on! (i.e. -DCMAKE_BUILD_TYPE=Debug)") endif() # set(COV_C_FLAGS "-fprofile-arcs -ftest-coverage") set(COV_CXX_FLAGS "-fprofile-arcs -ftest-coverage") set(COV_SHARED_LINKER_FLAGS "-fprofile-arcs -ftest-coverage") set(COV_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage") # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COV_C_FLAGS}" ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COV_CXX_FLAGS}" ) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${COV_SHARED_LINKER_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${COV_EXE_LINKER_FLAGS}" ) endif() # # Default install locations, override cache variables to change. # include(GNUInstallDirs) set(BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Location to install binaries relative to the install prefix." ) set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Location to install headers relative to the install prefix." ) set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Location to install libraries relative to the install prefix." ) set(DATA_INSTALL_DIR ${CMAKE_INSTALL_DATADIR} CACHE PATH "Location to install data files relative to the install prefix." ) #set(CMAKE_MODULES_INSTALL_DIR ${CMAKE_INSTALL_CMAKEMODULESDIR} CACHE PATH "Location to install data files relative to the install prefix." ) find_package(ZLIB REQUIRED) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zipios/zipios-config.hpp.in ${CMAKE_CURRENT_BINARY_DIR}/zipios/zipios-config.hpp ) # Generate the RPM package specification file set(PACKAGE "libzipios") configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/contrib/zipios.spec.in ${CMAKE_CURRENT_BINARY_DIR}/contrib/zipios.spec ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/contrib/zipios.metainfo.xml.in ${CMAKE_CURRENT_BINARY_DIR}/contrib/zipios.metainfo.xml ) include_directories( ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ) add_subdirectory(cmake) add_subdirectory(src ) #add_subdirectory(tools) add_subdirectory(tests) add_subdirectory(doc ) install( DIRECTORY zipios DESTINATION ${INCLUDE_INSTALL_DIR} PATTERN "*.in" EXCLUDE ) install( FILES ${CMAKE_BINARY_DIR}/zipios/zipios-config.hpp DESTINATION ${INCLUDE_INSTALL_DIR}/zipios ) if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") install( FILES ${CMAKE_CURRENT_BINARY_DIR}/contrib/zipios.metainfo.xml DESTINATION ${DATA_INSTALL_DIR}/metainfo ) endif() # todo: how do we determine the correct destination? # (i.e. 3.x is now out and 2.8 will probably fail for those users) #install( DIRECTORY cmake/ # DESTINATION ${CMAKE_MODULES_INSTALL_DIR} #) add_custom_target(zipios_code_analysis # Make sure we have an output folder COMMAND mkdir -p ${PROJECT_BINARY_DIR}/analysis # Count the number of TODO, XXX, TBD, FIXME, and \todo COMMAND echo "TODO -- output ${PROJECT_BINARY_DIR}/analysis/todo.txt" COMMAND sh dev/todo.sh "${PROJECT_BINARY_DIR}/analysis" # Search for files with "invalid" (unwanted really) spaces COMMAND echo "Spaces -- output ${PROJECT_BINARY_DIR}/analysis/spaces.txt" COMMAND sh dev/spaces.sh "${PROJECT_BINARY_DIR}/analysis" # Boost inspect tool that reports various problems in the source # Note: I use `... || true` because inspect attempts an SVN check which # obviously is going to fail here COMMAND echo "inspect -- output ${PROJECT_BINARY_DIR}/analysis/inspect.html" COMMAND inspect -tab -crlf -end -path_name -ascii -minmax -assert_macro -deprecated_macro -unnamed -copyright >"${PROJECT_BINARY_DIR}/analysis/inspect.html" || true # All of these are expected to work on source code so make sure we are # in the source code top directory WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} ) ## ## To pack the source ## set(CPACK_PACKAGE_NAME "zipios") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Zipios is a small C++ library for reading and writing zip files.") set(CPACK_PACKAGE_VENDOR "Made to Order Software Corporation") set(CPACK_PACKAGE_CONTACT "alexis@m2osw.com") set(CPACK_RESOURCE_FILE_LICENSE "${zipios_project_SOURCE_DIR}/COPYING") set(CPACK_SOURCE_GENERATOR "TGZ") set(CPACK_SOURCE_IGNORE_FILES "/CVS/;/work-files/;/.git/;.swp$;.*~;cscope.*;/tmp/;BUILD;Build") set(CPACK_PACKAGE_VERSION "${ZIPIOS_VERSION_MAJOR}.${ZIPIOS_VERSION_MINOR}.${ZIPIOS_VERSION_PATCH}") set(CPACK_PACKAGE_VERSION_MAJOR "${ZIPIOS_VERSION_MAJOR}") set(CPACK_PACKAGE_VERSION_MINOR "${ZIPIOS_VERSION_MINOR}") set(CPACK_PACKAGE_VERSION_PATCH "${ZIPIOS_VERSION_PATCH}") set(CPACK_SOURCE_PACKAGE_FILE_NAME "zipios-${ZIPIOS_VERSION_MAJOR}.${ZIPIOS_VERSION_MINOR}.${ZIPIOS_VERSION_PATCH}") include(CPack) # Local Variables: # indent-tabs-mode: nil # tab-width: 4 # End: # vim: ts=4 sw=4 et nocindent