summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2007-04-10 15:22:15 (GMT)
committerBrad King <brad.king@kitware.com>2007-04-10 15:22:15 (GMT)
commita017333d9a7c58e573a4a0ba98fed62909832445 (patch)
treee4257bc206bb3be7cedca940960d120b89003792 /Modules
parent8b0c61c322f939f2d718e71c5c796df9d58c6cc2 (diff)
downloadCMake-a017333d9a7c58e573a4a0ba98fed62909832445.zip
CMake-a017333d9a7c58e573a4a0ba98fed62909832445.tar.gz
CMake-a017333d9a7c58e573a4a0ba98fed62909832445.tar.bz2
ENH: Added option CMAKE_INSTALL_SO_NO_EXE on linux to choose whether the default permissions for shared libraries include the executable bit. This is necessary to support the conflicting policies of Debian and Fedora. These changes address bug#4805.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/Platform/Linux.cmake37
1 files changed, 37 insertions, 0 deletions
diff --git a/Modules/Platform/Linux.cmake b/Modules/Platform/Linux.cmake
index 498e491..1831866 100644
--- a/Modules/Platform/Linux.cmake
+++ b/Modules/Platform/Linux.cmake
@@ -18,4 +18,41 @@ FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE)
SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-Bdynamic")
ENDFOREACH(type)
+# Debian policy requires that shared libraries be installed without
+# executable permission. Fedora policy requires that shared libraries
+# be installed with the executable permission. Since the native tools
+# create shared libraries with execute permission in the first place a
+# reasonable policy seems to be to install with execute permission by
+# default. In order to support debian packages we provide an option
+# here. The option default is based on the current distribution, but
+# packagers can set it explicitly on the command line.
+IF(DEFINED CMAKE_INSTALL_SO_NO_EXE)
+ # Store the decision variable in the cache. This preserves any
+ # setting the user provides on the command line.
+ SET(CMAKE_INSTALL_SO_NO_EXE "${CMAKE_INSTALL_SO_NO_EXE}" CACHE INTERNAL
+ "Install .so files without execute permission.")
+ELSE(DEFINED CMAKE_INSTALL_SO_NO_EXE)
+ # Detect the linux distribution.
+ SET(CMAKE_LINUX_DISTRO)
+ IF(EXISTS "/proc/version")
+ FILE(READ "/proc/version" CMAKE_LINUX_DISTRO)
+ ENDIF(EXISTS "/proc/version")
+
+ # List the distributions that require shared libraries to not have
+ # execute permission.
+ SET(CMAKE_INSTALL_SO_NO_EXE_DISTRO "(Debian|Ubuntu)")
+
+ # Store the decision variable as an internal cache entry to avoid
+ # checking the platform every time. This option is advanced enough
+ # that only package maintainers should need to adjust it. They are
+ # capable of providing a setting on the command line.
+ IF("${CMAKE_LINUX_DISTRO}" MATCHES "${CMAKE_INSTALL_SO_NO_EXE_DISTRO}")
+ SET(CMAKE_INSTALL_SO_NO_EXE 1 CACHE INTERNAL
+ "Install .so files without execute permission.")
+ ELSE("${CMAKE_LINUX_DISTRO}" MATCHES "${CMAKE_INSTALL_SO_NO_EXE_DISTRO}")
+ SET(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL
+ "Install .so files without execute permission.")
+ ENDIF("${CMAKE_LINUX_DISTRO}" MATCHES "${CMAKE_INSTALL_SO_NO_EXE_DISTRO}")
+ENDIF(DEFINED CMAKE_INSTALL_SO_NO_EXE)
+
INCLUDE(Platform/UnixPaths)