From 7c8af64b36f83dec969f27e930a24423b9e3e704 Mon Sep 17 00:00:00 2001 From: Greg Hellings Date: Tue, 9 Dec 2014 14:15:31 -0600 Subject: [PATCH] Moving to CMake 1) Easier for maintainer to troubleshoot [same person maintains upstream] 2) Gives us the benefit of setting SOVERSION for dependent packages 3) Added -python package 4) Split out -utilities --- install_swig_destdir.diff | 16 ++++ standard_cmake_args.diff | 159 ++++++++++++++++++++++++++++++++++++++ sword.spec | 112 ++++++++++++++++++++++----- 3 files changed, 267 insertions(+), 20 deletions(-) create mode 100644 install_swig_destdir.diff create mode 100644 standard_cmake_args.diff diff --git a/install_swig_destdir.diff b/install_swig_destdir.diff new file mode 100644 index 0000000..3df94f0 --- /dev/null +++ b/install_swig_destdir.diff @@ -0,0 +1,16 @@ +diff --git a/bindings/swig/python/CMakeLists.txt b/bindings/swig/python/CMakeLists.txt +index b661654..f608d50 100644 +--- a/bindings/swig/python/CMakeLists.txt ++++ b/bindings/swig/python/CMakeLists.txt +@@ -45,9 +45,9 @@ ADD_CUSTOM_TARGET(swordswig ALL + + # Allow user installation to custom directory + IF(SWORD_PYTHON_INSTALL_DIR) +- SET(SETUP_ARGS "--home=${SWORD_PYTHON_INSTALL_DIR}") ++ SET(SETUP_ARGS "--home=${SWORD_PYTHON_INSTALL_DIR} --root \$ENV{DESTDIR}") + ELSE(SWORD_PYTHON_INSTALL_DIR) +- SET(SETUP_ARGS "--home=${CMAKE_INSTALL_PREFIX}") ++ SET(SETUP_ARGS "--root \$ENV{DESTDIR}") + ENDIF(SWORD_PYTHON_INSTALL_DIR) + CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/install.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/install.cmake") diff --git a/standard_cmake_args.diff b/standard_cmake_args.diff new file mode 100644 index 0000000..215f4d5 --- /dev/null +++ b/standard_cmake_args.diff @@ -0,0 +1,159 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 785e14b..d945a2a 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -119,10 +119,10 @@ ENDIF(LIBSWORD_LIBRARY_TYPE MATCHES ".*Static.*" OR NOT LIBSWORD_LIBRARY_TYPE) + ################################################################################################ + # Some random user settings + # +- +-IF(NOT SWORD_GLOBAL_CONF_DIR STREQUAL "") +- ADD_DEFINITIONS(-DGLOBCONFPATH="${SWORD_GLOBAL_CONF_DIR}/sword.conf") +-ENDIF(NOT SWORD_GLOBAL_CONF_DIR STREQUAL "") ++ADD_DEFINITIONS(-DGLOBCONFPATH="${SYSCONF_INSTALL_DIR}/sword.conf") ++SET(CONFFILE "[Install] ++DataPath=${SHARE_INSTALL_PREFIX}/sword") ++FILE(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sword.conf" "${CONFFILE}") + + + ############################################################################################### +diff --git a/cmake/install.cmake b/cmake/install.cmake +index fd79545..f71f6a0 100644 +--- a/cmake/install.cmake ++++ b/cmake/install.cmake +@@ -3,34 +3,39 @@ + # + MESSAGE(STATUS "\n-- CONFIGURING INSTALLATION DESTINATIONS") + # Configuration files, of course +-SET(prefix "${PREFIX}") +-SET(exec_prefix "${PREFIX}") +-SET(libdir "${LIBDIR}") +-SET(includedir "${INCLUDEDIR}") + + # Install the library + IF(BUILDING_SHARED) + INSTALL(TARGETS sword +- DESTINATION "${LIBDIR}") ++ RUNTIME DESTINATION "${BINDIR}" ++ LIBRARY DESTINATION "${LIB_INSTALL_DIR}" ++ ARCHIVE DESTINATION "${LIB_INSTALL_DIR}") + ENDIF(BUILDING_SHARED) + IF(BUILDING_STATIC) + INSTALL(TARGETS sword_static +- DESTINATION "${LIBDIR}") ++ RUNTIME DESTINATION "${BINDIR}" ++ LIBRARY DESTINATION "${LIB_INSTALL_DIR}" ++ ARCHIVE DESTINATION "${LIB_INSTALL_DIR}") + ENDIF(BUILDING_STATIC) + # Install the locales + INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/locales.d +- DESTINATION "${PREFIX}/share/sword") ++ DESTINATION "${SHARE_INSTALL_PREFIX}/sword") + + # Install the headers + INSTALL(FILES ${SWORD_INSTALL_HEADERS} +- DESTINATION "${INCLUDEDIR}/sword") ++ DESTINATION "${INCLUDE_INSTALL_DIR}/sword") ++# Install sysconf file ++INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/sword.conf" ++ DESTINATION "${SYSCONF_INSTALL_DIR}") ++# Create the mods.d ++INSTALL(DIRECTORY DESTINATION "${SHARE_INSTALL_PREFIX}/sword/mods.d") + + IF(SWORD_INTERNAL_REGEX) + INSTALL(FILES ${INTERNAL_REGEX_HEADER} +- DESTINATION "${INCLUDEDIR}/sword") ++ DESTINATION "${INCLUDE_INSTALL_DIR}/sword") + ENDIF(SWORD_INTERNAL_REGEX) + +-MESSAGE(STATUS "Destination: ${PREFIX}") ++MESSAGE(STATUS "Destination: ${CMAKE_INSTALL_PREFIX}") + + SET(VERSION ${SWORD_VERSION}) + IF(WITH_CURL) +@@ -53,4 +58,4 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/sword.pc.in ${CMAKE_CURRENT_BINARY_DI + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/swversion.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/swversion.h @ONLY) + + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/sword.pc +- DESTINATION "${LIBDIR}/pkgconfig") ++ DESTINATION "${LIB_INSTALL_DIR}/pkgconfig") +diff --git a/cmake/options.cmake b/cmake/options.cmake +index 3e07128..4ca7b19 100644 +--- a/cmake/options.cmake ++++ b/cmake/options.cmake +@@ -1,3 +1,27 @@ ++# Borrowed ++# ++# This macro implements some very special logic how to deal with the cache. ++# By default the various install locations inherit their value from their "parent" variable ++# so if you set CMAKE_INSTALL_PREFIX, then EXEC_INSTALL_PREFIX, PLUGIN_INSTALL_DIR will ++# calculate their value by appending subdirs to CMAKE_INSTALL_PREFIX . ++# This would work completely without using the cache. ++# But if somebody wants e.g. a different EXEC_INSTALL_PREFIX this value has to go into ++# the cache, otherwise it will be forgotten on the next cmake run. ++# Once a variable is in the cache, it doesn't depend on its "parent" variables ++# anymore and you can only change it by editing it directly. ++# this macro helps in this regard, because as long as you don't set one of the ++# variables explicitely to some location, it will always calculate its value from its ++# parents. So modifying CMAKE_INSTALL_PREFIX later on will have the desired effect. ++# But once you decide to set e.g. EXEC_INSTALL_PREFIX to some special location ++# this will go into the cache and it will no longer depend on CMAKE_INSTALL_PREFIX. ++macro(_SET_FANCY _var _value _comment) ++ if (NOT DEFINED ${_var}) ++ set(${_var} ${_value}) ++ else() ++ set(${_var} "${${_var}}" CACHE STRING "${_comment}") ++ endif() ++endmacro(_SET_FANCY) ++ + # A list of the options that the library supports + SET(SWORD_PYTHON_INSTALL_DIR "" CACHE STRING "Directory where the Python bindings will be installed. Defaults to default Python path.") + +@@ -10,17 +34,17 @@ ELSE(APPLE) + SET(SWORD_INSTALL_DIR "/usr/local") + ENDIF(APPLE) + +-IF(CMAKE_INSTALL_PREFIX) +- SET(PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE STRING "Directory into which to install architecture-dependent files. Defaults to ${SWORD_INSTALL_DIR}.") +-ELSE(CMAKE_INSTALL_PREFIX) +- SET(PREFIX "${SWORD_INSTALL_DIR}" CACHE STRING "Directory into which to install architecture-dependent files. Defaults to ${SWORD_INSTALL_DIR}") +-ENDIF(CMAKE_INSTALL_PREFIX) ++_SET_FANCY(CMAKE_INSTALL_PREFIX "${SWORD_INSTALL_DIR}" "Directory into which to install architecture-dependent files. Defaults to ${SWORD_INSTALL_DIR}.") ++ ++_SET_FANCY(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib" "Object code library install directory. Defaults to ${SWORD_INSTALL_DIR}/lib") ++ ++_SET_FANCY(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" "C Header files install directory. Defaults to ${SWORD_INSTALL_DIR}/include.") + +-SET(LIBDIR "${PREFIX}/lib" CACHE STRING "Object code library install directory. Defaults to ${SWORD_INSTALL_DIR}/lib") ++SET(BINDIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE STRING "Directory to install binary executable files. Defaults to ${SWORD_INSTALL_DIR}/bin.") + +-SET(INCLUDEDIR "${PREFIX}/include" CACHE STRING "C Header files install directory. Defaults to ${SWORD_INSTALL_DIR}/include.") ++_SET_FANCY(SYSCONF_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/etc" "Directory to install global config files. Defaults to ${SWORD_INSTALL_DIR}/etc.") + +-SET(BINDIR "${PREFIX}/bin" CACHE STRING "Directory to install binary executable files. Defaults to ${SWORD_INSTALL_DIR}/bin.") ++_SET_FANCY(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share" "Directory to install global data files. Defaults to ${SWORD_INSTALL_DIR}/share.") + + # Post-processing of variables + MACRO(PROCESS_VERSION LEVEL VALUE) +diff --git a/utilities/CMakeLists.txt b/utilities/CMakeLists.txt +index 169bda4..e7bd82d 100644 +--- a/utilities/CMakeLists.txt ++++ b/utilities/CMakeLists.txt +@@ -88,7 +88,7 @@ ENDIF(BUILDING_SHARED) + # + FOREACH(UTIL ${install_UTILITIES}) + INSTALL(TARGETS ${UTIL} +- DESTINATION ${BINDIR} ++ RUNTIME DESTINATION "${BINDIR}" + COMPONENT utilities + ) + ENDFOREACH(UTIL ${install_UTILITIES}) +@@ -113,7 +113,7 @@ ELSE(BUILDING_SHARED) + TARGET_LINK_LIBRARIES(diatheke sword_static) + ENDIF(BUILDING_SHARED) + INSTALL(TARGETS diatheke +- DESTINATION ${BINDIR} ++ DESTINATION "${BINDIR}" + COMPONENT utilities + ) + diff --git a/sword.spec b/sword.spec index 3f888a3..227be86 100644 --- a/sword.spec +++ b/sword.spec @@ -1,18 +1,24 @@ +%define soversion 1.7 + Name: sword Version: 1.7.3.900 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Free Bible Software Project License: GPLv2 URL: http://www.crosswire.org/sword/ Source0: http://www.crosswire.org/ftpmirror/pub/sword/source/v1.7/sword-%{version}.tar.gz +BuildRequires: cmake +BuildRequires: openssl-devel +BuildRequires: curl-devel +BuildRequires: zlib-devel +BuildRequires: libidn-devel +BuildRequires: libicu-devel icu BuildRequires: clucene-core-devel BuildRequires: cppunit-devel -BuildRequires: libcurl-devel -BuildRequires: icu -BuildRequires: libicu-devel -BuildRequires: libidn-devel -BuildRequires: openssl-devel -BuildRequires: zlib-devel +BuildRequires: swig +BuildRequires: python-devel +Patch0: install_swig_destdir.diff +Patch1: standard_cmake_args.diff %description The SWORD Project is the CrossWire Bible Society's free Bible software @@ -23,25 +29,60 @@ also create Bible study software for all readers, students, scholars, and translators of the Bible, and have a growing collection of over 200 texts in over 50 languages. -%package devel -Summary: Development files for %{name} -Requires: %{name}%{?_isa} = %{version}-%{release} +%package devel +Summary: Development files for the sword project +Group: Development/Libraries +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: pkgconfig +Requires: curl-devel clucene-core-devel libicu-devel -%description devel -This package contains libraries and header files for -developing applications that use %{name}. +%description devel +This package contains the development headers and libraries for the +sword API. You need this package if you plan on compiling software +that uses the sword API, such as Gnomesword or Bibletime. + +%package utils +Summary: Utilities for the sword project +Group: System Enivonment/Libraries +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description utils +This package contains the pre-built utilities for use with the SWORD +Project. The SWORD Project developers encourage you to use the latest +development version of the utilities rather than those released with +a packaged release as updates to the utilities do not affect the +release schedule of the library. However, these utilities were the +latest at the time of the current library release. + +%package python +Summary: Python bindings for Sword +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: python + +%description python +Python bindings for The SWORD Library. %prep %setup -q +%patch0 -p1 -b .swigdest +%patch1 -p1 -b .cmakeargs + %build -%configure --disable-static --with-icu --with-clucene=%{_prefix} -sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool -sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool +mkdir build +pushd build +%cmake -DLIBSWORD_LIBRARY_TYPE=Shared \ + -DSWORD_BINDINGS="Python" \ + -DBUILD_UTILITIES="Yes" \ + -DLIBSWORD_SOVERSION=%{soversion} \ + -DLIBDIR=%{_libdir} \ + .. make %{?_smp_mflags} %install +pushd build %make_install +popd mkdir -p %{buildroot}%{_datadir}/sword/modules find %{buildroot} -type f -name "*.la" -delete -print @@ -51,12 +92,12 @@ find %{buildroot} -type f -name "*.la" -delete -print %postun -p /sbin/ldconfig %files -%doc AUTHORS COPYING ChangeLog LICENSE NEWS README +%doc AUTHORS COPYING ChangeLog INSTALL LICENSE NEWS README %doc samples doc +# Re-enable after upstream includes it with CMake builds %config(noreplace) %{_sysconfdir}/sword.conf -%{_bindir}/* -%{_datadir}/sword/ -%{_libdir}/libsword-%{version}.so +%{_libdir}/libsword.so.%{soversion} +%{_datadir}/sword %files devel %doc CODINGSTYLE @@ -64,7 +105,38 @@ find %{buildroot} -type f -name "*.la" -delete -print %{_libdir}/libsword.so %{_libdir}/pkgconfig/sword.pc +%files utils +%{_bindir}/vs2osisref +%{_bindir}/vs2osisreftxt +%{_bindir}/mod2vpl +%{_bindir}/imp2ld +%{_bindir}/diatheke +%{_bindir}/mkfastmod +%{_bindir}/mod2zmod +%{_bindir}/xml2gbs +%{_bindir}/imp2vs +%{_bindir}/installmgr +%{_bindir}/osis2mod +%{_bindir}/tei2mod +%{_bindir}/vpl2mod +%{_bindir}/mod2imp +%{_bindir}/addld +%{_bindir}/imp2gbs +%{_bindir}/mod2osis +%{_bindir}/emptyvss + +%files python +%{python2_sitearch}/Sword.py +%{python2_sitearch}/Sword.pyc +%{python2_sitearch}/Sword.pyo +%{python2_sitearch}/_Sword.so +%{python2_sitearch}/sword-%{version}-py2.7.egg-info + %changelog +* Mon Dec 08 2014 Greg Hellings - 1.7.3.900-2 +- Changed to CMake +- Added Python bindings + * Wed Dec 03 2014 Greg Hellings - 1.7.3.900-1 - Upstream pre-release version bump