106 lines
4.3 KiB
Diff
106 lines
4.3 KiB
Diff
Index: CMake/Source/cmFileCommand.cxx
|
|
===================================================================
|
|
RCS file: /cvsroot/CMake/CMake/Source/cmFileCommand.cxx,v
|
|
retrieving revision 1.75
|
|
retrieving revision 1.76
|
|
diff -u -r1.75 -r1.76
|
|
--- CMake/Source/cmFileCommand.cxx 12 Mar 2007 18:15:25 -0000 1.75
|
|
+++ CMake/Source/cmFileCommand.cxx 10 Apr 2007 15:22:15 -0000 1.76
|
|
@@ -1184,6 +1184,9 @@
|
|
}
|
|
}
|
|
|
|
+ // Choose a default for shared library permissions.
|
|
+ bool install_so_no_exe = this->Makefile->IsOn("CMAKE_INSTALL_SO_NO_EXE");
|
|
+
|
|
// If file permissions were not specified set default permissions
|
|
// for this target type.
|
|
if(!use_given_permissions_file && !use_source_permissions)
|
|
@@ -1192,15 +1195,16 @@
|
|
{
|
|
case cmTarget::SHARED_LIBRARY:
|
|
case cmTarget::MODULE_LIBRARY:
|
|
-#if defined(__linux__)
|
|
- // Use read/write permissions.
|
|
- permissions_file = 0;
|
|
- permissions_file |= mode_owner_read;
|
|
- permissions_file |= mode_owner_write;
|
|
- permissions_file |= mode_group_read;
|
|
- permissions_file |= mode_world_read;
|
|
- break;
|
|
-#endif
|
|
+ if(install_so_no_exe)
|
|
+ {
|
|
+ // Use read/write permissions.
|
|
+ permissions_file = 0;
|
|
+ permissions_file |= mode_owner_read;
|
|
+ permissions_file |= mode_owner_write;
|
|
+ permissions_file |= mode_group_read;
|
|
+ permissions_file |= mode_world_read;
|
|
+ break;
|
|
+ }
|
|
case cmTarget::EXECUTABLE:
|
|
case cmTarget::INSTALL_PROGRAMS:
|
|
// Use read/write/executable permissions.
|
|
Index: CMake/Source/cmLocalGenerator.cxx
|
|
===================================================================
|
|
RCS file: /cvsroot/CMake/CMake/Source/cmLocalGenerator.cxx,v
|
|
retrieving revision 1.207
|
|
retrieving revision 1.208
|
|
diff -u -r1.207 -r1.208
|
|
--- CMake/Source/cmLocalGenerator.cxx 30 Mar 2007 14:53:02 -0000 1.207
|
|
+++ CMake/Source/cmLocalGenerator.cxx 10 Apr 2007 15:22:15 -0000 1.208
|
|
@@ -393,6 +393,18 @@
|
|
"ENDIF(NOT CMAKE_INSTALL_COMPONENT)\n"
|
|
"\n";
|
|
|
|
+ // Copy user-specified install options to the install code.
|
|
+ if(const char* so_no_exe =
|
|
+ this->Makefile->GetDefinition("CMAKE_INSTALL_SO_NO_EXE"))
|
|
+ {
|
|
+ fout <<
|
|
+ "# Install shared libraries without execute permission?\n"
|
|
+ "IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)\n"
|
|
+ " SET(CMAKE_INSTALL_SO_NO_EXE \"" << so_no_exe << "\")\n"
|
|
+ "ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)\n"
|
|
+ "\n";
|
|
+ }
|
|
+
|
|
// Ask each install generator to write its code.
|
|
std::vector<cmInstallGenerator*> const& installers =
|
|
this->Makefile->GetInstallGenerators();
|
|
--- CMake/Modules/Platform/Linux.cmake 13 Oct 2006 14:52:01 -0000 1.8.2.2
|
|
+++ CMake/Modules/Platform/Linux.cmake 7 May 2007 22:17:32 -0000 1.14
|
|
@@ -18,4 +20,31 @@
|
|
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)
|
|
+ # 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(EXISTS "/etc/debian_version")
|
|
+ SET(CMAKE_INSTALL_SO_NO_EXE 1 CACHE INTERNAL
|
|
+ "Install .so files without execute permission.")
|
|
+ ELSE(EXISTS "/etc/debian_version")
|
|
+ SET(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL
|
|
+ "Install .so files without execute permission.")
|
|
+ ENDIF(EXISTS "/etc/debian_version")
|
|
+ENDIF(DEFINED CMAKE_INSTALL_SO_NO_EXE)
|
|
+
|
|
INCLUDE(Platform/UnixPaths)
|