From 137f03b9a34fb39e5321524ab11fa31276458476 Mon Sep 17 00:00:00 2001 From: Matthias Vogelgesang Date: Tue, 29 Oct 2013 09:05:51 +0100 Subject: Use ConfigurePaths to get installation paths The advantage is twofold: 1) we have a clear separation between setting up the paths and actually using them, 2) the interface is very likely as configure scripts and makes integration into build system a bit easier. --- CMakeLists.txt | 5 ++- bin/gui/CMakeLists.txt | 7 +++- bin/gui/config.h.in | 2 +- bin/tools/CMakeLists.txt | 4 +- cmake/ConfigurePaths.cmake | 90 +++++++++++++++++++++++++++++++++++++++++++ plugins/dexela/CMakeLists.txt | 2 +- plugins/mock/CMakeLists.txt | 2 +- plugins/pco/CMakeLists.txt | 2 +- plugins/pf/CMakeLists.txt | 2 +- plugins/pylon/CMakeLists.txt | 2 +- plugins/ufo/CMakeLists.txt | 2 +- plugins/xkit/CMakeLists.txt | 2 +- src/CMakeLists.txt | 28 +++++--------- src/config.h.in | 2 - src/libuca.pc.in | 17 ++++---- 15 files changed, 127 insertions(+), 42 deletions(-) create mode 100644 cmake/ConfigurePaths.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 25c07e3..6c5ede2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,11 +66,14 @@ macro(create_enums prefix template_prefix header_list) endmacro() #}}} #{{{ Configure +include(ConfigurePaths) +configure_paths(UCA) + +set(UCA_PLUGINDIR "${UCA_LIBDIR}/uca") set(LIB_INSTALL_DIR "lib${LIB_SUFFIX}") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/package.sh.in ${CMAKE_CURRENT_BINARY_DIR}/package.sh) - #}}} #{{{ Common dependencies find_package(PkgConfig) diff --git a/bin/gui/CMakeLists.txt b/bin/gui/CMakeLists.txt index bb5a8f4..a75b5b1 100644 --- a/bin/gui/CMakeLists.txt +++ b/bin/gui/CMakeLists.txt @@ -1,5 +1,8 @@ cmake_minimum_required(VERSION 2.6) +#{{{ Variables +set(UCA_GLADEDIR "${UCA_DATADIR}/libuca") +#}}} #{{{ Configure find_package(PkgConfig) @@ -32,9 +35,9 @@ if (GTK2_FOUND) ${GTHREAD2_LIBRARIES}) install(TARGETS ${BINARY} - RUNTIME DESTINATION bin) + RUNTIME DESTINATION ${UCA_BINDIR}) install(FILES control.glade - DESTINATION share/libuca) + DESTINATION ${UCA_GLADEDIR}) endif() #}}} diff --git a/bin/gui/config.h.in b/bin/gui/config.h.in index e7de9c6..566a405 100644 --- a/bin/gui/config.h.in +++ b/bin/gui/config.h.in @@ -1 +1 @@ -#define CONTROL_GLADE_PATH "${CMAKE_INSTALL_PREFIX}/share/libuca/control.glade" +#define CONTROL_GLADE_PATH "${UCA_GLADE_DIR}/control.glade" diff --git a/bin/tools/CMakeLists.txt b/bin/tools/CMakeLists.txt index 285b2d7..964b1f9 100644 --- a/bin/tools/CMakeLists.txt +++ b/bin/tools/CMakeLists.txt @@ -32,8 +32,8 @@ target_link_libraries(uca-grab ringbuffer ${libs}) add_executable(uca-benchmark benchmark.c common.c) target_link_libraries(uca-benchmark ${libs}) +#}}} install(TARGETS uca-benchmark uca-grab uca-gen-doc - RUNTIME DESTINATION bin) -#}}} + RUNTIME DESTINATION ${UCA_BINDIR}) #}}} diff --git a/cmake/ConfigurePaths.cmake b/cmake/ConfigurePaths.cmake new file mode 100644 index 0000000..df9c03c --- /dev/null +++ b/cmake/ConfigurePaths.cmake @@ -0,0 +1,90 @@ +# - pre-configured paths for CMake +# +# Usage: +# configure_paths() +# +# Checks if configure-like prefix and installation paths were passed by the user +# and sets up corresponding variables for use in install() commands and to fill +# out .pc files: +# +# PREFIX_PREFIX defaults to ... CMAKE_INSTALL_PREFIX +# PREFIX_EPREFIX PREFIX_PREFIX +# PREFIX_SBINDIR PREFIX_EPREFIX/sbin +# PREFIX_SYSCONFDIR PREFIX_PREFIX/etc +# PREFIX_LOCALSTATEDIR PREFIX_PREFIX/var +# PREFIX_BINDIR PREFIX_EPREFIX/bin +# PREFIX_LIBDIR PREFIX_EPREFIX/lib +# PREFIX_INCLUDEDIR PREFIX_PREFIX/include +# PREFIX_PKGCONFIGDIR PREFIX_LIBDIR/pkgconfig +# PREFIX_TYPELIBDIR PREFIX_LIBDIR/girepository-1.0 +# PREFIX_DATAROOTDIR PREFIX_PREFIX/share +# PREFIX_DATADIR PREFIX_DATAROOTDIR +# PREFIX_INFODIR PREFIX_DATAROOTDIR/info +# PREFIX_MANDIR PREFIX_DATAROOTDIR/man +# PREFIX_LOCALEDIR PREFIX_DATAROOTDIR/locale +# PREFIX_GIRDIR PREFIX_DATAROOTDIR/gir-1.0 + +# Copyright (C) 2013 Matthias Vogelgesang +# +# Redistribution and use, with or without modification, are permitted +# provided that the following conditions are met: +# +# 1. Redistributions must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# 2. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +if(__configure_paths) + return() +endif() + +set(__configure_paths YES) + +macro(_set_var _prefix _var _user _override _description) + set(_name "${_prefix}_${_var}") + + set("${_name}" "${_user}") + + if("${_name}" STREQUAL "") + set("${_name}" "${_override}") + endif() + + set(${_name} "${${_name}}" CACHE PATH "${_description}") + mark_as_advanced(${_name}) +endmacro() + +function(configure_paths _prefix) + _set_var("${_prefix}" "PREFIX" "${PREFIX}" "${CMAKE_INSTALL_PREFIX}" "install architecture-independent files in PREFIX") + _set_var("${_prefix}" "EPREFIX" "${EXEC_PREFIX}" "${${_prefix}_PREFIX}" "install architecture-dependent files in EPREFIX") + + _set_var("${_prefix}" "SBINDIR" "${SBINDIR}" "${${_prefix}_EPREFIX}/sbin" "system admin executabls") + _set_var("${_prefix}" "SYSCONFDIR" "${SYSCONFDIR}" "${${_prefix}_PREFIX}/etc" "read-only single-machine data") + _set_var("${_prefix}" "LOCALSTATEDIR" "${LOCALSTATEDIR}" "${${_prefix}_PREFIX}/var" "modifiable single-machine data") + _set_var("${_prefix}" "BINDIR" "${BINDIR}" "${${_prefix}_EPREFIX}/bin" "user executables") + _set_var("${_prefix}" "LIBDIR" "${LIBDIR}" "${${_prefix}_EPREFIX}/lib" "object code libraries") + _set_var("${_prefix}" "INCLUDEDIR" "${INCLUDEDIR}" "${${_prefix}_PREFIX}/include" "C header files") + _set_var("${_prefix}" "PKGCONFIGDIR" "${PKGCONFIGDIR}" "${${_prefix}_LIBDIR}/pkgconfig" "pkg-config files") + _set_var("${_prefix}" "TYPELIBDIR" "${TYPELIBDIR}" "${${_prefix}_LIBDIR}/girepository-1.0" "GObject run-time introspection data") + _set_var("${_prefix}" "DATAROOTDIR" "${DATAROOTDIR}" "${${_prefix}_PREFIX}/share" "read-only arch.-independent data root") + _set_var("${_prefix}" "DATADIR" "${DATADIR}" "${${_prefix}_DATAROOTDIR}" "read-only architecture-independent data") + _set_var("${_prefix}" "INFODIR" "${INFODIR}" "${${_prefix}_DATAROOTDIR}/info" "info documentation") + _set_var("${_prefix}" "MANDIR" "${MANDIR}" "${${_prefix}_DATAROOTDIR}/man" "man documentation") + _set_var("${_prefix}" "LOCALEDIR" "${LOCALEDIR}" "${${_prefix}_DATAROOTDIR}/locale" "locale-dependent data") + _set_var("${_prefix}" "GIRDIR" "${GIRDIR}" "${${_prefix}_DATAROOTDIR}/gir-1.0" "GObject introspection data") +endfunction() + +# vim: tw=0: diff --git a/plugins/dexela/CMakeLists.txt b/plugins/dexela/CMakeLists.txt index 9079565..d497f7d 100644 --- a/plugins/dexela/CMakeLists.txt +++ b/plugins/dexela/CMakeLists.txt @@ -24,6 +24,6 @@ if (DEXELA_FOUND) target_link_libraries(ucadexela ${UCA_DEPS} ${DEXELA_LIBRARIES}) install(TARGETS ucadexela - LIBRARY DESTINATION ${LIB_INSTALL_DIR}/uca + LIBRARY DESTINATION ${UCA_PLUGINDIR} COMPONENT ${UCA_CAMERA_NAME}) endif() diff --git a/plugins/mock/CMakeLists.txt b/plugins/mock/CMakeLists.txt index bf6ed29..3dac582 100644 --- a/plugins/mock/CMakeLists.txt +++ b/plugins/mock/CMakeLists.txt @@ -18,5 +18,5 @@ target_link_libraries(ucamock ${UCA_DEPS}) install(TARGETS ucamock - LIBRARY DESTINATION ${LIB_INSTALL_DIR}/uca + LIBRARY DESTINATION ${UCA_PLUGINDIR} COMPONENT ${UCA_CAMERA_NAME}) diff --git a/plugins/pco/CMakeLists.txt b/plugins/pco/CMakeLists.txt index 7e10320..ea28c2f 100644 --- a/plugins/pco/CMakeLists.txt +++ b/plugins/pco/CMakeLists.txt @@ -35,6 +35,6 @@ if (PCO_FOUND AND CLSERME4_FOUND AND FGLIB5_FOUND) ${FGLIB5_LIBRARY}) install(TARGETS ucapco - LIBRARY DESTINATION ${LIB_INSTALL_DIR}/uca + LIBRARY DESTINATION ${UCA_PLUGINDIR} COMPONENT ${UCA_CAMERA_NAME}) endif() diff --git a/plugins/pf/CMakeLists.txt b/plugins/pf/CMakeLists.txt index 766f557..a384ae8 100644 --- a/plugins/pf/CMakeLists.txt +++ b/plugins/pf/CMakeLists.txt @@ -28,6 +28,6 @@ if (PF_FOUND AND CLSERME4_FOUND AND FGLIB5_FOUND) ${FGLIB5_LIBRARY}) install(TARGETS ucapf - LIBRARY DESTINATION ${LIB_INSTALL_DIR}/uca + LIBRARY DESTINATION ${UCA_PLUGINDIR} COMPONENT ${UCA_CAMERA_NAME}) endif() diff --git a/plugins/pylon/CMakeLists.txt b/plugins/pylon/CMakeLists.txt index 7b67167..0e9088d 100644 --- a/plugins/pylon/CMakeLists.txt +++ b/plugins/pylon/CMakeLists.txt @@ -18,6 +18,6 @@ if (PYLON_FOUND) ${LIBPYLONCAM_LIBRARIES}) install(TARGETS ucapylon - LIBRARY DESTINATION ${LIB_INSTALL_DIR}/uca + LIBRARY DESTINATION ${UCA_PLUGINDIR} COMPONENT ${UCA_CAMERA_NAME}) endif() diff --git a/plugins/ufo/CMakeLists.txt b/plugins/ufo/CMakeLists.txt index b85504a..b3372d4 100644 --- a/plugins/ufo/CMakeLists.txt +++ b/plugins/ufo/CMakeLists.txt @@ -22,6 +22,6 @@ if (IPE_FOUND) ${IPE_LIBRARIES}) install(TARGETS ucaufo - LIBRARY DESTINATION ${LIB_INSTALL_DIR}/uca + LIBRARY DESTINATION ${UCA_PLUGINDIR} COMPONENT ${UCA_CAMERA_NAME}) endif() diff --git a/plugins/xkit/CMakeLists.txt b/plugins/xkit/CMakeLists.txt index 209ef34..b82881e 100644 --- a/plugins/xkit/CMakeLists.txt +++ b/plugins/xkit/CMakeLists.txt @@ -27,6 +27,6 @@ if (XKIT_INCLUDE_DIR AND XKIT_LIBRARIES) ${XKIT_LIBRARIES}) install(TARGETS ucaxkit - LIBRARY DESTINATION ${LIB_INSTALL_DIR}/uca + LIBRARY DESTINATION ${UCA_PLUGINDIR} COMPONENT ${UCA_CAMERA_NAME}) endif () diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6872015..066649b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,15 +16,9 @@ create_enums(uca-enums ${uca_HDRS}) #}}} #{{{ Variables -set(prefix ${CMAKE_INSTALL_PREFIX}) if (CI_INSTALL_PREFIX) - set(prefix ${CI_INSTALL_PREFIX}) + set(UCA_PREFIX "${CI_INSTALL_PREFIX}") endif() - -set(exec_prefix "\${prefix}") -set(libdir ${prefix}/${LIB_INSTALL_DIR}) -set(includedir "\${prefix}/include") -set(VERSION ${UCA_VERSION_STRING}) #}}} #{{{ Configure find_program(INTROSPECTION_SCANNER "g-ir-scanner") @@ -37,7 +31,6 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/libuca.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libuca.pc" @ONLY IMMEDIATE) #}}} #{{{ Target - include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) @@ -168,32 +161,31 @@ if(GTK_DOC_FOUND) add_custom_target(reference ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html.stamp) - install(FILES ${reference_files} DESTINATION share/gtk-doc/html/uca) + install(FILES ${reference_files} + DESTINATION ${UCA_DATADIR}/gtk-doc/html/uca) endif() endif() - - -# --- Install target ---------------------------------------------------------- - +#}}} +#{{{ Installation install(TARGETS uca - LIBRARY DESTINATION ${LIB_INSTALL_DIR} + LIBRARY DESTINATION ${UCA_LIBDIR} COMPONENT libraries) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libuca.pc - DESTINATION ${LIB_INSTALL_DIR}/pkgconfig + DESTINATION ${UCA_PKGCONFIGDIR} COMPONENT libraries) install(FILES ${uca_HDRS} - DESTINATION include/uca + DESTINATION ${UCA_INCLUDEDIR} COMPONENT headers) if(WITH_GIR) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${GIR_XML} - DESTINATION share/gir-1.0 + DESTINATION ${UCA_GIRDIR} COMPONENT libraries) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${GIR_TYPELIB} - DESTINATION ${LIB_INSTALL_DIR}/girepository-1.0 + DESTINATION ${UCA_TYPELIBDIR} COMPONENT libraries) endif() #}}} diff --git a/src/config.h.in b/src/config.h.in index ec1fb62..28f4ffb 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -4,6 +4,4 @@ #cmakedefine HAVE_UFO_CAMERA #cmakedefine HAVE_PYLON_CAMERA #cmakedefine HAVE_DEXELA_CL - #cmakedefine HAVE_MOCK_CAMERA -#define CONTROL_GLADE_PATH "${CMAKE_INSTALL_PREFIX}/share/libuca/control.glade" diff --git a/src/libuca.pc.in b/src/libuca.pc.in index 3ca4dbe..14a9361 100644 --- a/src/libuca.pc.in +++ b/src/libuca.pc.in @@ -1,14 +1,13 @@ -# Package Information for pkg-config - -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir_old=@includedir@/uca -includedir_new=@includedir@ +prefix=@UCA_PREFIX@ +exec_prefix=@UCA_EPREFIX@ +libdir=@UCA_LIBDIR@ +includedir=@UCA_INCLUDEDIR@ +girdir=@UCA_GIRDIR@ +typelibdir=@UCA_TYPELIBDIR@ Name: libuca Description: @UCA_DESCRIPTION@ -Version: @VERSION@ +Version: @UCA_VERSION_STRING@ Libs: -L${libdir} -luca -Cflags: -I${includedir_old} -I${includedir_new} +Cflags: -I${includedir} Requires: glib-2.0 gobject-2.0 -- cgit v1.2.3