summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt131
1 files changed, 131 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..3f8602d
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,131 @@
+# CMake configuration for pkgconf
+#
+# Caution: this assumes you don't set CMAKE_BUILD_TYPE
+#
+# FIXME: this isn't a native cmake approach, it's just a straight translation
+# of configure.ac + Makefile.am, barely good enough to work on Linux, Mac, and Windows.
+
+# Require recent cmake, but not so recent that Ubuntu 16.04 users have to upgrade.
+CMAKE_MINIMUM_REQUIRED(VERSION 3.5.1 FATAL_ERROR)
+
+PROJECT(pkgconf C)
+
+SET(PACKAGE_BUGREPORT http://github.com/pkgconf/pkgconf/issues)
+SET(PACKAGE_NAME pkgconf)
+SET(PACKAGE_VERSION 1.3.7)
+SET(LIBPKGCONF_VERSION "3.0.0")
+SET(LIBPKGCONF_SOVERSION 3)
+
+#-------- GNU directory variables ---------
+
+SET(abs_top_srcdir ${pkgconf_SOURCE_DIR})
+SET(prefix ${CMAKE_INSTALL_PREFIX})
+SET(exec_prefix ${prefix})
+SET(datarootdir ${prefix}/share)
+SET(datadir ${datarootdir})
+SET(libdir ${prefix}/lib)
+SET(includedir ${prefix}/include)
+
+#-------- User-settable options ---------
+
+# FIXME: this is overridden in get_default_pkgconfig_path() on windows, but not in test_env.sh.in?!
+SET(pkg_config_dir "${libdir}/pkgconfig:${datadir}/pkgconfig" CACHE STRING "specify the places where pc files will be found")
+SET(PKGCONFIGDIR "${pkg_config_dir}")
+SET(pkg_default_dir "${PKGCONFIGDIR}") # c'mon, make up your mind
+
+SET(system_libdir "${libdir}" CACHE STRING "specify the system library directory (default LIBDIR)")
+SET(SYSTEM_LIBDIR "${system_libdir}")
+
+SET(system_includedir "${includedir}" CACHE STRING "specify the system include directory (default INCLUDEDIR)")
+SET(SYSTEM_INCLUDEDIR "${system_includedir}")
+
+#-------- Probe system ---------
+
+INCLUDE (CheckIncludeFiles)
+CHECK_INCLUDE_FILES(sys/stat.h HAVE_SYS_STAT_H)
+INCLUDE (CheckFunctionExists)
+CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY)
+CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT)
+CHECK_FUNCTION_EXISTS(strndup HAVE_STRNDUP)
+CHECK_FUNCTION_EXISTS(cygwin_conv_path HAVE_CYGWIN_CONV_PATH)
+
+#-------- Generate source files ---------
+
+CONFIGURE_FILE(libpkgconf/config.h.cmake.in libpkgconf/config.h @ONLY)
+
+#-------- Configure common compiler options --------
+
+IF (WIN32)
+ # Make warnings fatal... but ignore C4996: 'strdup' two different ways
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX /wd4996")
+ # Ignore warning C4996: 'strncpy'
+ ADD_DEFINITIONS("-D_CRT_SECURE_NO_WARNINGS=1")
+ELSE()
+ INCLUDE(CheckCCompilerFlag)
+ CHECK_C_COMPILER_FLAG("-Wall" COMPILER_HAS_WALL)
+ IF (COMPILER_HAS_WALL)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
+ ENDIF()
+ CHECK_C_COMPILER_FLAG("-Wextra" COMPILER_HAS_WEXTRA)
+ IF (COMPILER_HAS_WEXTRA)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra")
+ ENDIF()
+ CHECK_C_COMPILER_FLAG("-Wformat=2" COMPILER_HAS_WFORMAT)
+ IF (COMPILER_HAS_WFORMAT)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat=2")
+ ENDIF()
+ CHECK_C_COMPILER_FLAG("-std=gnu99" COMPILER_HAS_STD_GNU99)
+ CHECK_C_COMPILER_FLAG("-std=c99" COMPILER_HAS_STD_C99)
+ IF (COMPILER_HAS_STD_GNU99)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
+ ELSEIF (COMPILER_HAS_STD_C99)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
+ ENDIF()
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -g")
+ENDIF()
+
+INCLUDE_DIRECTORIES(${pkgconf_SOURCE_DIR} ${pkgconf_BINARY_DIR})
+ADD_DEFINITIONS(-DPKG_DEFAULT_PATH=\"${pkg_default_dir}\")
+ADD_DEFINITIONS(-DSYSTEM_INCLUDEDIR=\"${system_includedir}\")
+ADD_DEFINITIONS(-DSYSTEM_LIBDIR=\"${system_libdir}\")
+
+#-------- Build and install library --------
+
+# Place shared libraries in same place as binary, for ease of setting PATH in test_env.sh
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${pkgconf_BINARY_DIR})
+ADD_SUBDIRECTORY(libpkgconf)
+
+#-------- Build and install executable --------
+
+INCLUDE_DIRECTORIES(${libpkgconf_BINARY_DIR})
+ADD_EXECUTABLE(pkgconf main.c getopt_long.c renderer-msvc.c)
+TARGET_LINK_LIBRARIES(pkgconf libpkgconf)
+INSTALL(TARGETS pkgconf DESTINATION bin)
+
+#-------- Tests ---------
+
+ENABLE_TESTING()
+
+# Handy that these files need configuring; cygwin atf doesn't like windows line endings, and NEWLINE_STYLE helps.
+FOREACH(file Kyuafile tests/Kyuafile tests/test_env.sh)
+ CONFIGURE_FILE(${file}.in ${file} @ONLY NEWLINE_STYLE UNIX)
+ENDFOREACH()
+
+SET(test_scripts
+ tests/basic
+ tests/builtins
+ tests/conflicts
+ tests/framework
+ tests/parser
+ tests/provides
+ tests/regress
+ tests/requires
+ tests/sysroot
+ tests/version
+ )
+# Handy that these files need configuring; cygwin atf doesn't like windows line endings, and NEWLINE_STYLE helps.
+FOREACH(file ${test_scripts})
+ CONFIGURE_FILE(${file}.sh ${file} @ONLY NEWLINE_STYLE UNIX)
+ENDFOREACH()
+
+ADD_TEST(kyua kyua --config=none test)