diff --git a/cmake-2.4.6-soexe.patch b/cmake-2.4.6-soexe.patch new file mode 100644 index 0000000..057c03c --- /dev/null +++ b/cmake-2.4.6-soexe.patch @@ -0,0 +1,121 @@ +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 const& installers = + this->Makefile->GetInstallGenerators(); +Index: CMake/Modules/Platform/Linux.cmake +=================================================================== +RCS file: /cvsroot/CMake/CMake/Modules/Platform/Linux.cmake,v +retrieving revision 1.11 +retrieving revision 1.12 +diff -u -r1.11 -r1.12 +--- CMake/Modules/Platform/Linux.cmake 15 Sep 2006 18:08:39 -0000 1.11 ++++ CMake/Modules/Platform/Linux.cmake 10 Apr 2007 15:22:15 -0000 1.12 +@@ -18,4 +18,41 @@ + 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) diff --git a/cmake.spec b/cmake.spec index 28c8b16..60a0386 100644 --- a/cmake.spec +++ b/cmake.spec @@ -1,6 +1,6 @@ Name: cmake -Version: 2.4.5 -Release: 2%{?dist} +Version: 2.4.6 +Release: 3%{?dist} Summary: Cross-platform make system Group: Development/Tools @@ -8,11 +8,14 @@ License: BSD URL: http://www.cmake.org Source0: http://www.cmake.org/files/v2.4/cmake-%{version}.tar.gz Source1: cmake-init-fedora +Source2: macros.cmake Patch0: cmake-2.4.2-fedora.patch Patch1: cmake-2.4.5-xmlrpc.patch +Patch2: cmake-2.4.6-soexe.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: ncurses-devel, libX11-devel BuildRequires: curl-devel, expat-devel, xmlrpc-c-devel, zlib-devel +Requires: rpm %description @@ -28,6 +31,7 @@ generation, code generation, and template instantiation. %setup -q %patch -p1 -b .fedora %patch1 -p1 -b .xmlrpc +%patch2 -p1 -b .soexe %build @@ -36,7 +40,7 @@ export CXXFLAGS="$RPM_OPT_FLAGS" ./bootstrap --init=%SOURCE1 --prefix=%{_prefix} --datadir=/share/%{name} \ --docdir=/share/doc/%{name}-%{version} --mandir=/share/man \ --system-libs -make %{?_smp_mflags} +make VERBOSE=1 %{?_smp_mflags} %install @@ -46,6 +50,9 @@ find $RPM_BUILD_ROOT/%{_datadir}/%{name}/Modules -type f | xargs chmod -x mkdir -p $RPM_BUILD_ROOT%{_datadir}/emacs/site-lisp cp -a Example $RPM_BUILD_ROOT%{_datadir}/doc/%{name}-%{version}/ install -m 0644 Docs/cmake-mode.el $RPM_BUILD_ROOT%{_datadir}/emacs/site-lisp/ +# RPM macros +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/rpm +install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/rpm/ %clean @@ -54,6 +61,7 @@ rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) +%config(noreplace) %{_sysconfdir}/rpm/macros.cmake %{_datadir}/doc/%{name}-%{version}/ %{_bindir}/ccmake %{_bindir}/cmake @@ -65,13 +73,22 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Mon Apr 16 2007 Orion Poplawski - 2.4.6-3 +- Apply patch from upstream CVS to fix .so install permissions (bug #235673) + +* Fri Apr 06 2007 Orion Poplawski - 2.4.6-2 +- Add rpm macros + +* Thu Jan 11 2007 Orion Poplawski - 2.4.6-1 +- Update to 2.4.6 + * Mon Dec 18 2006 Orion Poplawski - 2.4.5-2 - Use system libraries (bootstrap --system-libs) * Tue Dec 5 2006 Orion Poplawski - 2.4.5-1 - Update to 2.4.5 -* Mon Nov 27 2006 Orion Poplawski - 2.4.4-1 +* Tue Nov 21 2006 Orion Poplawski - 2.4.4-1 - Update to 2.4.4 * Tue Oct 31 2006 Orion Poplawski - 2.4.3-4 diff --git a/macros.cmake b/macros.cmake new file mode 100644 index 0000000..6e06ad0 --- /dev/null +++ b/macros.cmake @@ -0,0 +1,16 @@ +# +# Macros for cmake +# +%_cmake_lib_suffix64 -DLIB_SUFFIX=64 +%__cmake %{_bindir}/cmake + +%cmake \ + CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ + CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \ + FFLAGS="${FFLAGS:-%optflags}" ; export FFLAGS ; \ + %__cmake \\\ +%if "%{?_lib}" == "lib64" \ + %{?_cmake_lib_suffix64} \\\ +%endif \ + -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \\\ + -DBUILD_SHARED_LIBS:BOOL=ON