cmake_minimum_required(VERSION 2.8)
include(CheckFunctionExists)
include(CheckLibraryExists)
include(CheckIncludeFiles)
include(CheckCSourceCompiles)
project(pg_systat C)
set(PROJECT_VERSION_MAJOR 1)
set(PROJECT_VERSION_MINOR 0)
set(PROJECT_VERSION_PATCH 0)
set(PROJECT_VERSION
${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
set(CMAKE_C_FLAGS "-Wall")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
execute_process(
COMMAND uname -m
OUTPUT_VARIABLE ARCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
message("-- arch - ${ARCH}")
# Get PostgreSQL include and library directories.
execute_process(
COMMAND pg_config --includedir
OUTPUT_VARIABLE PGINCLUDEDIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
message("-- pg_config --includedir - ${PGINCLUDEDIR}")
if(PGINCLUDEDIR)
set(PGINCLUDE "-I${PGINCLUDEDIR}")
endif(PGINCLUDEDIR)
execute_process(
COMMAND pg_config --libdir
OUTPUT_VARIABLE PGLIBDIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
message("-- pg_config --libdir - ${PGLIBDIR}")
# Check for include files.
check_include_files("stdlib.h;stdarg.h;string.h" STDC_HEADERS)
check_include_files("string.h" HAVE_STRING_H)
check_include_files("unistd.h" HAVE_UNISTD_H)
# Check for library functions.
check_function_exists(getopt HAVE_GETOPT)
check_function_exists(snprintf HAVE_SNPRINTF)
check_function_exists(strchr HAVE_STRCHR)
# Set appropriate compile flags.
set_source_files_properties(
dbblk.c
dbconfl.c
dbfs.c
dbtup.c
dbxact.c
engine.c
index.c
indexio.c
main.c
pg.c
sprompt.c
tableanalyze.c
tableioheap.c
tableioidx.c
tableiotidx.c
tableiotoast.c
tablescan.c
tabletup.c
tablevac.c
vacuum.c
PROPERTIES COMPILE_FLAGS "${PGINCLUDE}"
)
add_executable(
${PROJECT_NAME}
dbblk.c
dbconfl.c
dbfs.c
dbtup.c
dbxact.c
engine.c
index.c
indexio.c
main.c
pg.c
sprompt.c
tableanalyze.c
tableioheap.c
tableioidx.c
tableiotidx.c
tableiotoast.c
tablescan.c
tabletup.c
tablevac.c
vacuum.c
)
# Determine appropriate linker flags.
find_library(LIBPQ pq PATHS ${PGLIBDIR})
if(LIBPQ)
target_link_libraries(${PROJECT_NAME} ${LIBPQ})
endif(LIBPQ)
find_library(LIBM m)
if(LIBM)
target_link_libraries(${PROJECT_NAME} ${LIBM})
endif(LIBM)
find_library(LIBTINFO tinfo)
if(LIBTINFO)
target_link_libraries(${PROJECT_NAME} ${LIBTINFO})
endif(LIBTINFO)
find_library(LIBCURSES curses)
if(LIBCURSES)
target_link_libraries(${PROJECT_NAME} ${LIBCURSES})
else(LIBCURSES)
find_library(LIBNCURSES ncurses)
if(LIBNCURSES)
target_link_libraries(${PROJECT_NAME} ${LIBNCURSES})
endif(LIBNCURSES)
endif(LIBCURSES)
find_library(LIBBSD bsd)
if(LIBBSD)
target_link_libraries(${PROJECT_NAME} ${LIBBSD})
endif(LIBBSD)
execute_process(
COMMAND rst2man.py ${CMAKE_SOURCE_DIR}/pg_systat.1.rst
OUTPUT_FILE ${CMAKE_BINARY_DIR}/pg_systat.1
)
install(
PROGRAMS
${CMAKE_BINARY_DIR}/${PROJECT_NAME}
DESTINATION "bin"
)
install(
FILES
${CMAKE_BINARY_DIR}/pg_systat.1
DESTINATION "share/man/man1"
)
# CPack rules for creating distribution files.
include(InstallRequiredSystemLibraries)
set(CPACK_SOURCE_GENERATOR "TBZ2;TXZ;ZIP")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "pg_systat is 'systat' for PostgreSQL")
set(CPACK_PACKAGE_VENDOR "pg_systat")
set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
set(
CPACK_SOURCE_IGNORE_FILES
"\\\\.bz2\\$;\\\\.gz\\$;\\\\.xz\\$;\\\\.Z\\$;\\\\.zip\\$"
)
set(
CPACK_SOURCE_IGNORE_FILES
"${CPACK_SOURCE_IGNORE_FILES};/CMakeCache\\\\.txt\\$"
)
set(
CPACK_SOURCE_IGNORE_FILES
"${CPACK_SOURCE_IGNORE_FILES};/CMakeFiles/"
)
set(
CPACK_SOURCE_IGNORE_FILES
"${CPACK_SOURCE_IGNORE_FILES};/cmake_install\\\\.cmake\\$"
)
set(
CPACK_SOURCE_IGNORE_FILES
"${CPACK_SOURCE_IGNORE_FILES};/CPackConfig\\\\.cmake\\$"
)
set(
CPACK_SOURCE_IGNORE_FILES
"${CPACK_SOURCE_IGNORE_FILES};/\\\\.gitignore\\$"
)
set(
CPACK_SOURCE_IGNORE_FILES
"${CPACK_SOURCE_IGNORE_FILES};/\\\\_CPack\\\\_Packages/"
)
set(
CPACK_SOURCE_IGNORE_FILES
"${CPACK_SOURCE_IGNORE_FILES};/CPackSourceConfig\\\\.cmake\\$"
)
set(
CPACK_SOURCE_IGNORE_FILES
"${CPACK_SOURCE_IGNORE_FILES};/Makefile\\$"
)
include(CPack)
set(OUTPUT "${PROJECT_VERSION}")
add_custom_target(appimage
COMMAND cp -aL ${CMAKE_SOURCE_DIR}/AppRun AppDir
COMMAND cp -aL ${CMAKE_SOURCE_DIR}/pg_systat.desktop AppDir
COMMAND cp -aL ${CMAKE_SOURCE_DIR}/pg_systat.png AppDir
COMMAND mkdir -p AppDir/usr/share/metainfo
COMMAND cp -aL ${CMAKE_SOURCE_DIR}/pg_systat.appdata.xml AppDir/usr/share/metainfo
COMMAND mkdir -p AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libpq.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libtinfo.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libncurses.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libbsd.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libssl.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libcrypto.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libgssapi_krb5.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libkrb5.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libk5crypto.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libkrb5support.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libkeyutils.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND cp -aL
`ldd pg_systat | grep libselinux.so | cut -d \" \" -f 3` AppDir/usr/lib
COMMAND VERSION=${PROJECT_VERSION} appimagetool-${ARCH}.AppImage AppDir
)