diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..8adb0a9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.5) + +set(HAS_TOPLEVEL_CMAKELISTS TRUE) + +add_subdirectory(libinsane) + +include("${CMAKE_SOURCE_DIR}/libinsane-gobject/cmake/FindGLib.cmake") + +if(GLIB2_FOUND) +add_subdirectory(libinsane-gobject) +endif(GLIB2_FOUND) diff --git a/libinsane-gobject/CMakeLists.txt b/libinsane-gobject/CMakeLists.txt index eedc5d2..3ed85c8 100644 --- a/libinsane-gobject/CMakeLists.txt +++ b/libinsane-gobject/CMakeLists.txt @@ -3,7 +3,7 @@ project(Libinsane-gobject) cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -pedantic -Wunused -g -ggdb -O2") set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -pedantic -Wunused -g -ggdb -O2") @@ -83,7 +83,12 @@ add_custom_command( ## Build libinsane_gobject itself add_library(insane_gobject SHARED ${INSANE_GOBJECT_SRCS}) -target_link_libraries(insane_gobject insane ${GLIB2_LIBRARIES}) +if(NOT HAS_TOPLEVEL_CMAKELISTS) + target_link_libraries(insane_gobject insane ${GLIB2_LIBRARIES}) +else() + # XXX: Statically linked for now until CMake restructuring is done. + target_link_libraries(insane_gobject libinsane_static ${GLIB2_LIBRARIES}) +endif() target_include_directories(insane_gobject PUBLIC include generated) install(TARGETS insane_gobject @@ -113,12 +118,19 @@ set(Libinsane_0_1_gir "libinsane-gobject") set(Libinsane_0_1_gir_INCLUDES GObject-2.0) get_directory_property(_tmp_includes INCLUDE_DIRECTORIES) _list_prefix(_includes _tmp_includes "-I") -set(Libinsane_0_1_gir_CFLAGS - ${_includes} - -L${CMAKE_BINARY_DIR} - -L${CMAKE_CURRENT_SOURCE_DIR}/../libinsane/build - -linsane -) + +# XXX: Only do this workaround if we don't have a top-level CMakeLists.txt +if(NOT HAS_TOPLEVEL_CMAKELISTS) + set(Libinsane_0_1_gir_CFLAGS + ${_includes} + -L${CMAKE_BINARY_DIR} + -L${CMAKE_CURRENT_SOURCE_DIR}/../libinsane/build + -linsane + ) +else() + set(Libinsane_0_1_gir_CFLAGS ${_includes}) +endif() + set(Libinsane_0_1_gir_LIBS insane_gobject) _list_prefix(_abs_introspection_files introspection_files "${CMAKE_CURRENT_SOURCE_DIR}/") set(Libinsane_0_1_gir_FILES ${_abs_introspection_files}) @@ -141,12 +153,16 @@ file( COPY ${CMAKE_CURRENT_SOURCE_DIR}/doc/gtkdocentities.ent DESTINATION ${CMAKE_BINARY_DIR}/libinsane_gobject/xml ) -# WORKAROUND(JFlesch): -# gtk-doc seems to accept only one LDPATH ? -file( - COPY ${CMAKE_CURRENT_SOURCE_DIR}/../libinsane/build/libinsane.so - DESTINATION ${CMAKE_BINARY_DIR} -) + +# XXX: Only do this workaround if we don't have a top-level CMakeLists.txt +if(NOT HAS_TOPLEVEL_CMAKELISTS) + # WORKAROUND(JFlesch): + # gtk-doc seems to accept only one LDPATH ? + file( + COPY ${CMAKE_CURRENT_SOURCE_DIR}/../libinsane/build/libinsane.so + DESTINATION ${CMAKE_BINARY_DIR} + ) +endif() gtk_doc_add_module( libinsane_gobject diff --git a/libinsane/CMakeLists.txt b/libinsane/CMakeLists.txt index daaed9e..791562c 100644 --- a/libinsane/CMakeLists.txt +++ b/libinsane/CMakeLists.txt @@ -4,7 +4,7 @@ project(Libinsane) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) include(GNUInstallDirs) @@ -138,28 +138,34 @@ endif() # libinsane tests -enable_testing() - -find_program(MEMORYCHECK_COMMAND valgrind) -set(MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes" "--leak-check=full" "--error-exitcode=10") -set(ENV{CTEST_OUTPUT_ON_FAILURE} "1") -MESSAGE(STATUS "Valgrind: ${MEMORYCHECK_COMMAND} ${MEMORYCHECK_COMMAND_OPTIONS}") - -foreach(test ${LIBINSANE_TESTS}) - add_executable(tests_${test} ${LIBINSANE_SRCS} tests/main.c tests/tests_${test}.c) - target_include_directories(tests_${test} PUBLIC include ${LIBINSANE_INCLUDES}) - target_link_libraries(tests_${test} ${LIBINSANE_LIBS} -lcunit) - add_test( - NAME tests_${test} - COMMAND ${CMAKE_BINARY_DIR}/tests_${test} - ) -endforeach(test) -foreach(test ${LIBINSANE_VALGRIND_TESTS}) - add_executable(tests_${test} ${LIBINSANE_SRCS} tests/main.c tests/tests_${test}.c) - target_include_directories(tests_${test} PUBLIC include ${LIBINSANE_INCLUDES}) - target_link_libraries(tests_${test} ${LIBINSANE_LIBS} -lcunit) - add_test( - NAME tests_${test} - COMMAND ${MEMORYCHECK_COMMAND} ${MEMORYCHECK_COMMAND_OPTIONS} -- ${CMAKE_BINARY_DIR}/tests_${test} - ) -endforeach(test) +find_package(PkgConfig) +pkg_check_modules(CUNIT "cunit") +if(CUNIT_FOUND) + enable_testing() + + find_program(MEMORYCHECK_COMMAND valgrind) + set(MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes" "--leak-check=full" "--error-exitcode=10") + set(ENV{CTEST_OUTPUT_ON_FAILURE} "1") + MESSAGE(STATUS "Valgrind: ${MEMORYCHECK_COMMAND} ${MEMORYCHECK_COMMAND_OPTIONS}") + + foreach(test ${LIBINSANE_TESTS}) + add_executable(tests_${test} ${LIBINSANE_SRCS} tests/main.c tests/tests_${test}.c) + target_include_directories(tests_${test} PUBLIC include ${LIBINSANE_INCLUDES}) + target_compile_options(tests_${test} PUBLIC ${CUNIT_CFLAGS}) + target_link_libraries(tests_${test} ${LIBINSANE_LIBS} ${CUNIT_LDFLAGS}) + add_test( + NAME tests_${test} + COMMAND ${CMAKE_BINARY_DIR}/tests_${test} + ) + endforeach(test) + foreach(test ${LIBINSANE_VALGRIND_TESTS}) + add_executable(tests_${test} ${LIBINSANE_SRCS} tests/main.c tests/tests_${test}.c) + target_include_directories(tests_${test} PUBLIC include ${LIBINSANE_INCLUDES}) + target_compile_options(tests_${test} PUBLIC ${CUNIT_CFLAGS}) + target_link_libraries(tests_${test} ${LIBINSANE_LIBS} ${CUNIT_LDFLAGS}) + add_test( + NAME tests_${test} + COMMAND ${MEMORYCHECK_COMMAND} ${MEMORYCHECK_COMMAND_OPTIONS} -- ${CMAKE_BINARY_DIR}/tests_${test} + ) + endforeach(test) +endif(CUNIT_FOUND)