Przeglądaj źródła

CPack try to please SUSE 64 bits and install lib in lib64 and not lib.

Eric NOULARD 14 lat temu
rodzic
commit
a201028626

+ 9 - 1
Tests/CPackComponentsForAll/CMakeLists.txt

@@ -10,6 +10,14 @@
 cmake_minimum_required(VERSION 2.8.3.20101130 FATAL_ERROR)
 project(CPackComponentsForAll)
 
+set(LIBDEST "lib")
+include(${CMAKE_SOURCE_DIR}/SystemSpecificInformations.cmake)
+if(DISTRO_ID MATCHES "SUSE")
+   if("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
+     set(LIBDEST "lib64")
+   endif("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
+endif(DISTRO_ID MATCHES "SUSE")
+
 # Create the mylib library
 add_library(mylib mylib.cpp)
 
@@ -27,7 +35,7 @@ target_link_libraries(mylibapp2 mylib)
 # be used to create the installation components.
 install(TARGETS mylib
   ARCHIVE
-  DESTINATION lib
+  DESTINATION ${LIBDEST}
   COMPONENT libraries)
 install(TARGETS mylibapp
   RUNTIME

+ 164 - 0
Tests/CPackComponentsForAll/SystemSpecificInformations.cmake

@@ -0,0 +1,164 @@
+
+# define a set of string with may-be useful readable name
+# this file is meant to be included in a CMakeLists.txt
+# not as a standalone CMake script
+set(SPECIFIC_COMPILER_NAME "")
+set(SPECIFIC_SYSTEM_VERSION_NAME "")
+set(SPECIFIC_SYSTEM_PREFERED_CPACK_GENERATOR "")
+
+# In the WIN32 case try to guess a "readable system name"
+if(WIN32)
+  set(SPECIFIC_SYSTEM_PREFERED_PACKAGE "NSIS")
+  # information taken from
+  # http://www.codeguru.com/cpp/w-p/system/systeminformation/article.php/c8973/
+  # Win9x series
+  if(CMAKE_SYSTEM_VERSION MATCHES "4.0")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "Win95")
+  endif(CMAKE_SYSTEM_VERSION MATCHES "4.0")
+  if(CMAKE_SYSTEM_VERSION MATCHES "4.10")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "Win98")
+  endif(CMAKE_SYSTEM_VERSION MATCHES "4.10")
+  if(CMAKE_SYSTEM_VERSION MATCHES "4.90")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "WinME")
+  endif(CMAKE_SYSTEM_VERSION MATCHES "4.90")
+
+  # WinNTyyy series
+  if(CMAKE_SYSTEM_VERSION MATCHES "3.0")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "WinNT351")
+  endif(CMAKE_SYSTEM_VERSION MATCHES "3.0")
+  if(CMAKE_SYSTEM_VERSION MATCHES "4.1")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "WinNT4")
+  endif(CMAKE_SYSTEM_VERSION MATCHES "4.1")
+
+  # Win2000/XP series
+  if(CMAKE_SYSTEM_VERSION MATCHES "5.0")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "Win2000")
+  endif(CMAKE_SYSTEM_VERSION MATCHES "5.0")
+  if(CMAKE_SYSTEM_VERSION MATCHES "5.1")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "WinXP")
+  endif(CMAKE_SYSTEM_VERSION MATCHES "5.1")
+  if(CMAKE_SYSTEM_VERSION MATCHES "5.2")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "Win2003")
+  endif(CMAKE_SYSTEM_VERSION MATCHES "5.2")
+
+  # WinVista/7 series
+  if(CMAKE_SYSTEM_VERSION MATCHES "6.0")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "WinVISTA")
+  endif(CMAKE_SYSTEM_VERSION MATCHES "6.0")
+  if(CMAKE_SYSTEM_VERSION MATCHES "6.1")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "Win7")
+  endif(CMAKE_SYSTEM_VERSION MATCHES "6.1")
+
+  # Compilers
+  # taken from http://predef.sourceforge.net/precomp.html#sec34
+  if(MSVC)
+    set(SPECIFIC_COMPILER_NAME "MSVC-Unknown-${MSVC_VERSION}")
+    if(MSVC_VERSION EQUAL 1200)
+      set(SPECIFIC_COMPILER_NAME "MSVC-6.0")
+    endif(MSVC_VERSION EQUAL 1200)
+    if(MSVC_VERSION EQUAL 1300)
+      set(SPECIFIC_COMPILER_NAME "MSVC-7.0")
+    endif(MSVC_VERSION EQUAL 1300)
+    if(MSVC_VERSION EQUAL 1310)
+      set(SPECIFIC_COMPILER_NAME "MSVC-7.1-2003") #Visual Studio 2003
+    endif(MSVC_VERSION EQUAL 1310)
+    if(MSVC_VERSION EQUAL 1400)
+      set(SPECIFIC_COMPILER_NAME "MSVC-8.0-2005") #Visual Studio 2005
+    endif(MSVC_VERSION EQUAL 1400)
+    if(MSVC_VERSION EQUAL 1500)
+      set(SPECIFIC_COMPILER_NAME "MSVC-9.0-2008") #Visual Studio 2008
+    endif(MSVC_VERSION EQUAL 1500)
+    if(MSVC_VERSION EQUAL 1600)
+      set(SPECIFIC_COMPILER_NAME "MSVC-10.0-2010") #Visual Studio 2010
+    endif(MSVC_VERSION EQUAL 1600)
+  endif(MSVC)
+  if(MINGW)
+    set(SPECIFIC_COMPILER_NAME "MinGW")
+  endif(MINGW)
+  if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "${SPECIFIC_SYSTEM_VERSION_NAME}-x86_64")
+  endif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
+endif(WIN32)
+
+# In the Linux case try to guess the distro name/type
+# using either lsb_release program or fallback
+# to the content of the /etc/issue file
+if(UNIX)
+  if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+    set(SPECIFIC_SYSTEM_VERSION_NAME "${CMAKE_SYSTEM_NAME}")
+    set(SPECIFIC_SYSTEM_PREFERED_CPACK_GENERATOR "TGZ")
+    find_program(LSB_RELEASE_EXECUTABLE lsb_release)
+    if(LSB_RELEASE_EXECUTABLEF)
+      execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -i
+                      OUTPUT_VARIABLE _TMP_LSB_RELEASE_OUTPUT
+                      ERROR_QUIET
+                      OUTPUT_STRIP_TRAILING_WHITESPACE)
+      string(REGEX MATCH "Distributor ID:(.*)" DISTRO_ID ${_TMP_LSB_RELEASE_OUTPUT})
+      string(STRIP "${CMAKE_MATCH_1}" DISTRO_ID)
+      # replace potential space with underscore
+      string(REPLACE " " "_" DISTRO_ID "${DISTRO_ID}")
+      execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -r
+                      OUTPUT_VARIABLE _TMP_LSB_RELEASE_OUTPUT
+                      ERROR_QUIET
+                      OUTPUT_STRIP_TRAILING_WHITESPACE)
+      string(REGEX MATCH "Release:(.*)" DISTRO_RELEASE ${_TMP_LSB_RELEASE_OUTPUT})
+      string(STRIP "${CMAKE_MATCH_1}" DISTRO_RELEASE)
+      execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -c
+                      OUTPUT_VARIABLE _TMP_LSB_RELEASE_OUTPUT
+                      ERROR_QUIET
+                      OUTPUT_STRIP_TRAILING_WHITESPACE)
+      string(REGEX MATCH "Codename:(.*)" DISTRO_CODENAME ${_TMP_LSB_RELEASE_OUTPUT})
+      string(STRIP "${CMAKE_MATCH_1}" DISTRO_CODENAME)
+    elseif (EXISTS "/etc/issue")
+      set(LINUX_NAME "")
+      file(READ "/etc/issue" LINUX_ISSUE)
+      # Fedora case
+      if(LINUX_ISSUE MATCHES "Fedora")
+        string(REGEX MATCH "release ([0-9]+)" FEDORA "${LINUX_ISSUE}")
+        set(DISTRO_ID "Fedora")
+        set(DISTRO_RELEASE "${CMAKE_MATCH_1}")
+        # FIXME can we find that in /etc/issue
+        set(DISTRO_CODENAME "")
+      endif(LINUX_ISSUE MATCHES "Fedora")
+      # Ubuntu case
+      if(LINUX_ISSUE MATCHES "Ubuntu")
+        string(REGEX MATCH "buntu ([0-9]+\\.[0-9]+)" UBUNTU "${LINUX_ISSUE}")
+        set(DISTRO_ID "Ubuntu")
+        set(DISTRO_RELEASE "${CMAKE_MATCH_1}")
+        # FIXME can we find that in /etc/issue
+        set(DISTRO_CODENAME "")
+      endif(LINUX_ISSUE MATCHES "Ubuntu")
+      # Debian case
+      if(LINUX_ISSUE MATCHES "Debian")
+        string(REGEX MATCH "Debian .*ux ([0-9]+\\.[0-9]+)"
+               DEBIAN "${LINUX_ISSUE}")
+        set(DISTRO_ID "Debian")
+        set(DISTRO_RELEASE "${CMAKE_MATCH_1}")
+        set(DISTRO_CODENAME "")
+      endif(LINUX_ISSUE MATCHES "Debian")
+      # Open SuSE case
+      if(LINUX_ISSUE MATCHES "SUSE")
+        string(REGEX MATCH "SUSE ([0-9]+\\.[0-9]+)" SUSE "${LINUX_ISSUE}")
+        set(DISTRO_ID "SUSE")
+        set(DISTRO_RELEASE "${CMAKE_MATCH_1}")
+        set(DISTRO_CODENAME "")
+      endif(LINUX_ISSUE MATCHES "SUSE")
+      # Mandriva case
+      # TODO
+    endif(LSB_RELEASE_EXECUTABLEF)
+    # Now mangle some names
+    set(LINUX_NAME "${DISTRO_ID}_${DISTRO_RELEASE}")
+    if(DISTRO_ID MATCHES "Fedora|Mandriva|SUSE|OpenSUSE")
+      set(SPECIFIC_SYSTEM_PREFERED_CPACK_GENERATOR "RPM")
+    endif(DISTRO_ID MATCHES "Fedora|Mandriva|SUSE|OpenSUSE")
+    if(DISTRO_ID MATCHES "Debian|Ubuntu")
+      set(SPECIFIC_SYSTEM_PREFERED_CPACK_GENERATOR "DEB")
+    endif(DISTRO_ID MATCHES "Debian|Ubuntu")
+    if(LINUX_NAME)
+      set(SPECIFIC_SYSTEM_VERSION_NAME "${CMAKE_SYSTEM_NAME}-${LINUX_NAME}")
+    endif(LINUX_NAME)
+  endif(CMAKE_SYSTEM_NAME MATCHES "Linux")
+  set(SPECIFIC_SYSTEM_VERSION_NAME
+     "${SPECIFIC_SYSTEM_VERSION_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
+  set(SPECIFIC_COMPILER_NAME "")
+endif(UNIX)