Browse Source

Use ConfigurePaths to determine install locations

Matthias Vogelgesang 10 years ago
parent
commit
7d5e4f01d2
3 changed files with 103 additions and 95 deletions
  1. 5 8
      CMakeLists.txt
  2. 90 0
      common/cmake/ConfigurePaths.cmake
  3. 8 87
      src/CMakeLists.txt

+ 5 - 8
CMakeLists.txt

@@ -13,12 +13,10 @@ set(UFO_DESCRIPTION_SUMMARY "UFO good filters")
 
 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/common/cmake")
 
-# --- Options -----------------------------------------------------------------
-option(WITH_PROFILING "Enable profiling" OFF)
-if (WITH_PROFILING)
-    add_definitions("-pg")
-    set(CMAKE_C_FLAGS "-pg")
-endif ()
+include(ConfigurePaths)
+configure_paths(UFO)
+set(UFO_PLUGINDIR "${UFO_LIBDIR}/ufo")
+set(UFO_KERNELDIR "${UFO_DATADIR}/ufo")
 
 # --- Find packages and libraries ---------------------------------------------
 find_package(OpenCL REQUIRED)
@@ -30,8 +28,7 @@ pkg_check_modules(UFO ufo>=0.2 REQUIRED)
 include_directories(
     ${GLIB2_INCLUDE_DIRS}
     ${OPENCL_INCLUDE_DIRS}
-    ${UFO_INCLUDE_DIRS}
-    )
+    ${UFO_INCLUDE_DIRS})
 
 add_definitions("-std=c99 -Wall -fPIC")
 add_definitions(-DG_LOG_DOMAIN="Ufo")

+ 90 - 0
common/cmake/ConfigurePaths.cmake

@@ -0,0 +1,90 @@
+# - pre-configured paths for CMake
+#
+# Usage:
+#   configure_paths(<PREFIX>)
+#
+# 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 <matthias.vogelgesang@gmail.com>
+#
+# 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:

+ 8 - 87
src/CMakeLists.txt

@@ -36,10 +36,6 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR})
 
 get_property(LIB64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
 
-set(LIB_INSTALL_DIR "lib${LIB_SUFFIX}/ufo")
-set(shared_objects "")
-set(documented_types "")
-set(all_targets)
 
 foreach(_src ${ufofilter_SRCS})
     # find plugin suffix
@@ -54,12 +50,10 @@ foreach(_src ${ufofilter_SRCS})
     option(${target_option} "Build filter ${task}" ON)
 
     if (${target_option})
-        set(documented_types "${documented_types}\nufo_${_misc}_task_get_type")
         set(_misc "${_misc}_misc_SRCS")
 
         string(REPLACE "-" "" _targetname ${task})
         set(target "ufofilter${_targetname}")
-        set(shared_objects "${shared_objects} -l${target}")
 
         # build single shared library per filter
         if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
@@ -69,100 +63,27 @@ foreach(_src ${ufofilter_SRCS})
         endif()
 
         target_link_libraries(${target} ${ufofilter_LIBS})
-        list(APPEND all_targets ${target})
         
         install(TARGETS ${target}
-            ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
-            LIBRARY DESTINATION ${LIB_INSTALL_DIR})
+                ARCHIVE DESTINATION ${UFO_PLUGINDIR}
+                LIBRARY DESTINATION ${UFO_PLUGINDIR})
     endif()
 endforeach()
 
-# copy kernels into $LIB_INSTALL_DIR
+# copy kernels
 foreach(_kernel ${ufofilter_KERNELS})
     configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${_kernel}
-        ${CMAKE_CURRENT_BINARY_DIR}/${_kernel})
+                   ${CMAKE_CURRENT_BINARY_DIR}/${_kernel})
 
     install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${_kernel}
-        DESTINATION ${LIB_INSTALL_DIR})
+            DESTINATION ${UFO_KERNELDIR})
 endforeach()
 
-#copy aux headers into $LIB_INSTALL_DIR
+#copy aux headers into the kernel dir
 foreach(_header ${ufofilter_HEADERS})
     configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${_header}
-            ${CMAKE_CURRENT_BINARY_DIR}/${_header})
+                   ${CMAKE_CURRENT_BINARY_DIR}/${_header})
 		        
     install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${_header}
-        DESTINATION ${LIB_INSTALL_DIR})
+            DESTINATION ${UFO_KERNELDIR})
 endforeach()
-
-
-# --- Build filter reference ---------------------------------------------------
-pkg_check_modules(GTK_DOC gtk-doc)
-if(GTK_DOC_FOUND)
-    option(WITH_GTK_DOC "Build filter documentation" ON)
-    if (WITH_GTK_DOC)
-        get_directory_property(_current_include_dirs INCLUDE_DIRECTORIES)
-
-        set(GTK_DOC_CFLAGS)
-        foreach(_incl ${_current_include_dirs})
-            set(GTK_DOC_CFLAGS "-I${_incl} ${GTK_DOC_CFLAGS}")
-        endforeach()
-
-        set(GTK_DOC_LDFLAGS)
-        foreach(_lib ${ufofilter_LIBS})
-            # check if we have an absolute library path
-            if (NOT ${_lib} MATCHES "^[/]")
-                set(GTK_DOC_LDFLAGS "-l${_lib} ${GTK_DOC_LDFLAGS}")
-            endif()
-        endforeach()
-
-        find_program(GTK_DOC_SCAN gtkdoc-scan REQUIRED)
-        find_program(GTK_DOC_SCANGOBJ gtkdoc-scangobj REQUIRED)
-        find_program(GTK_DOC_MKDB gtkdoc-mkdb REQUIRED)
-        find_program(GTK_DOC_MKHTML gtkdoc-mkhtml REQUIRED)
-
-        set(doc_base "${CMAKE_CURRENT_BINARY_DIR}/../docs")
-        set(doc_out "${doc_base}/reference")
-
-        set(_xml_doc_input)
-
-        foreach (_src ${ufofilter_SRCS})
-            string(REPLACE ".c" ".xml" _xml_doc ${_src})
-            list(APPEND _xml_doc_input "<xi:include href=\"xml/${_xml_doc}\"/>")
-        endforeach()
-
-        string(REPLACE ";" "\n" _xml_doc_input ${_xml_doc_input})
-        configure_file("${CMAKE_CURRENT_SOURCE_DIR}/UfoFilters-docs.xml.in" "${doc_out}/UfoFilters-docs.xml")
-        configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scangobj.sh.in" "${doc_out}/scangobj.sh")
-        configure_file("${CMAKE_CURRENT_SOURCE_DIR}/UfoFilters.types.in" "${doc_out}/UfoFilters.types")
-
-        add_custom_command(OUTPUT ${doc_out}/UfoFilters-decl.txt
-            COMMAND ${GTK_DOC_SCAN}
-                    --module=UfoFilters
-                    --source-dir=${CMAKE_CURRENT_SOURCE_DIR}/../src
-                    DEPENDS ${ufofilter_SRCS}
-            WORKING_DIRECTORY ${doc_out})
-
-        add_custom_command(OUTPUT ${doc_out}/UfoFilters.args
-            COMMAND sh scangobj.sh
-            DEPENDS ${ufofilter_SRCS} ${doc_out}/UfoFilters-decl.txt ${all_targets}
-            WORKING_DIRECTORY ${doc_out})
-
-        add_custom_command(OUTPUT ${doc_out}/sgml.stamp
-            COMMAND ${GTK_DOC_MKDB}
-                    --module=UfoFilters
-                    --source-dir=${CMAKE_CURRENT_SOURCE_DIR}
-                    --output-format=xml
-            DEPENDS ${ufofilter_SRCS} ${doc_out}/UfoFilters.args
-            WORKING_DIRECTORY ${doc_out})
-
-        add_custom_command(OUTPUT ${doc_base}/html.stamp
-            COMMAND ${GTK_DOC_MKHTML}
-                    UfoFilters
-                    ${doc_out}/UfoFilters-docs.xml
-            DEPENDS ${doc_out}/sgml.stamp
-            WORKING_DIRECTORY ${doc_out})
-
-        add_custom_target(reference ALL DEPENDS ${doc_base}/html.stamp)
-    endif()
-endif(GTK_DOC_FOUND)