Changeset: a7a8b710c071 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a7a8b710c071
Added Files:
        find_linux_distro.sh.in
Modified Files:
        CMakeLists.txt
        cmake/Distribute.cmake
        rpm.mk.in
        sql/backends/monet5/vaults/bam/CMakeLists.txt
        testing/CMakeLists.txt
Branch: cmake-fun
Log Message:

Steps into building RPMs from Cmake output.


diffs (236 lines):

diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -63,7 +63,7 @@ if(EXISTS "${CMAKE_SOURCE_DIR}/.hg")
                set(DFT_STRICT "YES")
        endif()
 elseif(EXISTS "${CMAKE_SOURCE_DIR}/.git")
-       exec_program("git" "${CMAKE_SOURCE_DIR}" ARGS "rev-parse HEAD" 
OUTPUT_VARIABLE GIT_OUPUT_RES RETURN_VALUE GIT_RETURN_CODE)
+       exec_program("git" "${CMAKE_SOURCE_DIR}" ARGS "rev-parse --short HEAD" 
OUTPUT_VARIABLE GIT_OUPUT_RES RETURN_VALUE GIT_RETURN_CODE)
        if(GIT_RETURN_CODE EQUAL 0 AND GIT_OUPUT_RES)
                set(MERCURIAL_ID "${GIT_OUPUT_RES}+")
                set(DFT_STRICT "YES")
@@ -757,6 +757,10 @@ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_M
 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}" CACHE STRING 
"Shared library link options for all builds" FORCE)
 set(LINK_OPTIONS "${LINK_OPTIONS}" CACHE STRING "Link options for all builds" 
FORCE)
 
+# Programs required for testing and building RPMs
+find_program(DIFF NAMES gdiff diff DOC "Diff program fullpath")
+find_program(BASH NAMES bash DOC "bash interpreter fullpath")
+
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 add_subdirectory(buildtools)
 add_subdirectory(common)
diff --git a/cmake/Distribute.cmake b/cmake/Distribute.cmake
--- a/cmake/Distribute.cmake
+++ b/cmake/Distribute.cmake
@@ -11,7 +11,7 @@
 # Cpack general configurations
 set(CPACK_SOURCE_GENERATOR "7Z;TBZ2;TGZ;TXZ;ZIP")
 set(CPACK_GENERATOR "${CPACK_SOURCE_GENERATOR}") # All what we need I think
-# DEB;RPM;productbuild;FREEBSD;WIX; -> for these we will continue with the 
previous
+# DEB;RPM;productbuild;FREEBSD;WIX; -> for these we will continue with the 
previous method
 set(CPACK_PACKAGE_VENDOR "MonetDBSolutions")
 set(CPACK_PACKAGE_CHECKSUM "SHA512")
 set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/buildtools/conf/monetdb.ico")
@@ -21,11 +21,37 @@ set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE
 # Source build configurations
 # Using regular expressions for ignored files, later we could move to a 
generated variable
 set(CPACK_SOURCE_IGNORE_FILES "/bootstrap" "/buildtools/autogen/" 
"/clients/odbc/doc" "/debian/" "/de-bootstrap"
-       "/libversions" "/MacOSX/" "/rpm.mk.in" "/tools/monetdbbincopy" 
"/testing/quicktest" "/testing/cmptests.py"
-       "/vertoo.config" "/vertoo.data" "/\\\\.idea/" "/\\\\.git/" "/\\\\.hg/" 
"ChangeLog.*" "CMakeFiles*" "\\\\.hg.*" "#"
-       "~" "\\\\.ac$" "\\\\.ag$" "\\\\.lst$" "\\\\.mal\\\\.sh$")
+       "/libversions" "/MacOSX/" "/tools/monetdbbincopy" "/testing/quicktest" 
"/testing/cmptests.py" "/vertoo.config"
+       "/vertoo.data" "/\\\\.idea/" "/\\\\.git/" "/\\\\.hg/" "ChangeLog.*" 
"CMakeFiles*" "\\\\.hg.*" "#" "~" "\\\\.ac$"
+       "\\\\.ag$" "\\\\.lst$" "\\\\.mal\\\\.sh$")
 set(CPACK_SOURCE_PACKAGE_FILE_NAME "MonetDB-${MONETDB_VERSION}")
 include(CPack)
 
-# RPM configurations
-#set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_SOURCE_DIR}/MonetDB.spec") ...
+# Build rpms only on Linux, because that's what the find_linux_distro script 
is for
+if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
+       if(HAVE_LIDAR) # needed for rpm.mk.in
+               set(LIBLAS_RPM "with")
+       else()
+               set(LIBLAS_RPM "without")
+       endif()
+
+       find_program(ECHO NAMES echo DOC "echo program fullpath")
+       if(NOT ECHO OR NOT BASH)
+               message(FATAL_ERROR "echo and bash program are required to 
build rpms")
+       endif()
+
+       # Create a temporary file in CMakeFiles and copy it to the final 
location while setting proper permissions
+       # We need these two steps because I couldn't find a better way to do it 
with cmake...
+       configure_file(${CMAKE_SOURCE_DIR}/find_linux_distro.sh.in 
${CMAKE_BINARY_DIR}/CMakeFiles/find_linux_distro.sh @ONLY)
+       file(COPY ${CMAKE_BINARY_DIR}/CMakeFiles/find_linux_distro.sh 
DESTINATION ${CMAKE_BINARY_DIR}
+                FILE_PERMISSIONS ${PROGRAM_PERMISSIONS_DEFAULT})
+       file(REMOVE ${CMAKE_BINARY_DIR}/CMakeFiles/find_linux_distro.sh)
+
+       exec_program("${CMAKE_BINARY_DIR}/find_linux_distro.sh" OUTPUT_VARIABLE 
LINUX_DIST RETURN_VALUE LINUX_DIST_RC)
+       if(LINUX_DIST AND LINUX_DIST_RC EQUAL 0)
+               configure_file(${CMAKE_SOURCE_DIR}/rpm.mk.in 
${CMAKE_BINARY_DIR}/rpm.mk @ONLY)
+               install(FILES ${CMAKE_BINARY_DIR}/rpm.mk DESTINATION 
${INCLUDEDIR}/monetdb)
+       else()
+               message(WARNING "Could not determine Linux distribution, thus 
rpm.mk could not be generated")
+       endif()
+endif()
diff --git a/find_linux_distro.sh.in b/find_linux_distro.sh.in
new file mode 100644
--- /dev/null
+++ b/find_linux_distro.sh.in
@@ -0,0 +1,55 @@
+#!@BASH@
+
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0.  If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.
+
+if [ -f /etc/os-release ]
+       then
+       # this is the new way of getting release information
+       # works for Fedora >= 17, Ubuntu >= 12.04 (Precise Pangolin)
+       LINUX_DIST=`source /etc/os-release; @ECHO@ "${ID}:${VERSION_ID}"`
+elif [ -f /etc/fedora-release ]
+       then
+       LINUX_DIST=`cat /etc/fedora-release | head -n1 \
+               | sed 's|^.*\(Fedora\).* release \([[0-9]][[^ \n]]*\)\( 
.*\)*$|\1:\2|'`
+elif [ -f /etc/centos-release ]
+       then
+       LINUX_DIST=`cat /etc/centos-release | head -n1 | sed 's|^\(CentOS\).* 
release \([[0-9]][[^ \n]]*\)\( .*\)*$|\1:\2|'`
+elif [ -f /etc/yellowdog-release ]
+       then
+       LINUX_DIST=`cat /etc/yellowdog-release | head -n1 \
+               | sed 's|^\(Yellow\) Dog Linux release \([[0-9]][[^ \n]]*\)\( 
.*\)*$|\1:\2|'`
+elif [ -f /etc/redhat-release ]
+       then
+       LINUX_DIST=`cat /etc/redhat-release | head -n1 \
+               | sed 's|^.*\(Red\) \(Hat\).* Linux *\([[A-Z]]*\) release 
\([[0-9]][[^ \n]]*\)\( .*\)*$|\1\2:\4\3|' \
+               | sed 's|^Red Hat Enterprise Linux \([[AW]]S\) release 
\([[0-9]][[^ \n]]*\)\( .*\)*$|RHEL:\2\1|' \
+               | sed 's|^\(CentOS\).* release \([[0-9]][[^ \n]]*\)\( 
.*\)*$|\1:\2|' \
+               | sed 's|^\(Scientific\) Linux.* release \([[0-9]][[^ \n]]*\)\( 
.*\)*$|\1:\2|'`
+elif [ -f /etc/SuSE-release ]
+       then
+       LINUX_DIST=`cat /etc/SuSE-release | head -n1 \
+               | sed 's|^.*\(S[[Uu]]SE\) LINUX Enterprise 
\([[SD]]\)[[ervsktop]]* \([[0-9]][[^ \n]]*\)\( .*\)*$|\1:\3E\2|' \
+               | sed 's|^S[[Uu]]SE LINUX Enterprise \([[SD]]\)[[ervsktop]]* 
\([[0-9]][[^ \n]]*\)\( .*\)*$|SLE\1:\2|' \
+               | sed 's|^.*\(S[[Uu]]SE\) [[Ll]][[Ii]][[Nn]][[Uu]][[Xx]].* 
\([[0-9]][[^ \n]]*\)\( .*\)*$|\1:\2|' \
+               | sed 's|^open\(S[[Uu]]SE\) \([[0-9]][[^ \n]]*\)\( 
.*\)*$|\1:\2|'`
+elif [ -f /etc/gentoo-release ]
+       then
+       LINUX_DIST=`cat /etc/gentoo-release | head -n1 \
+               | sed 's|^.*\(Gentoo\) Base System.* [[versionrelease]]* 
\([[0-9]][[^ \n]]*\)\( .*\)*$|\1:\2|'`
+elif [ -f /etc/lsb-release ]
+       then
+       LINUX_DIST=`grep '^DISTRIB_ID=' /etc/lsb-release \
+               | cut -d'=' -f2`:`grep '^DISTRIB_RELEASE=' /etc/lsb-release | 
cut -d'=' -f2`
+elif [ -f /etc/debian_version ]
+       then
+       LINUX_DIST=Debian:`cat /etc/debian_version | head -n1`
+else
+       LINUX_DIST=`uname -s`:`uname -r | sed 
's|^\([[0-9\.]]*\)\([[^0-9\.]].*\)$|\1|'`
+fi
+
+LINUX_DIST_TRIMMED=`@ECHO@ "${LINUX_DIST}" | sed 's|:||'`
+@ECHO@ "${LINUX_DIST_TRIMMED}"
diff --git a/rpm.mk.in b/rpm.mk.in
--- a/rpm.mk.in
+++ b/rpm.mk.in
@@ -8,15 +8,15 @@
 
 # make rules to generate MonetDB RPMs (works on Fedora, only)
 
-rpmtopdir = $(shell cd $(top_builddir) && pwd)/rpmbuild
+rpmtopdir = $(shell cd @CMAKE_BINARY_DIR@ && pwd)/rpmbuild
 
 RPMBUILDARGS = --define="_tmppath /tmp" --define="_topdir $(rpmtopdir)" 
--define="tmpdir %{_tmppath}" --define="rpmcflags -O2 " --define="packager 
MonetDB Database System <[email protected]>" --define="_@LIBLAS_RPM@_lidar 1"
 
-$(top_builddir)/$(distdir).tar.bz2:
-       $(MAKE) $(AM_MAKEFLAGS) dist-bzip2
+@CMAKE_BINARY_DIR@/@[email protected]:
+       cpack -G TBZ2 --config @CMAKE_BINARY_DIR@/CPackSourceConfig.cmake
 
-$(top_builddir)/$(distdir).tar.xz:
-       $(MAKE) $(AM_MAKEFLAGS) dist-xz
+@CMAKE_BINARY_DIR@/@[email protected]:
+       cpack -G TXZ --config @CMAKE_BINARY_DIR@/CPackSourceConfig.cmake
 
 $(rpmtopdir)/rpmmacros:
        mkdir -p $(rpmtopdir)/RPMS
@@ -25,36 +25,8 @@ RPMBUILDARGS = --define="_tmppath /tmp" 
        mkdir -p $(rpmtopdir)/BUILD
        mkdir -p $(rpmtopdir)/INSTALL
 
-rpm: MonetDB.spec $(top_builddir)/$(distdir).tar.bz2 $(rpmtopdir)/rpmmacros
-       $(RPMBUILD) $(RPMBUILDARGS) --define="dist _@LINUX_DIST@" -ta --target 
`uname -m` --define="comp_cc @CC@" $(top_builddir)/$(distdir).tar.bz2
-
-srpm: MonetDB.spec $(top_builddir)/$(distdir).tar.bz2 $(rpmtopdir)/rpmmacros
-       $(RPMBUILD) $(RPMBUILDARGS) --define="dist %{?undefined}" -ts 
$(top_builddir)/$(distdir).tar.bz2
-
-all: monetdb_hgversion.h
+rpm: @CMAKE_SOURCE_DIR@/MonetDB.spec 
@CMAKE_BINARY_DIR@/@[email protected] 
$(rpmtopdir)/rpmmacros
+       $(RPMBUILD) $(RPMBUILDARGS) --define="dist _@LINUX_DIST@" -ta --target 
`uname -m` --define="comp_cc @CMAKE_C_COMPILER@" 
@CMAKE_BINARY_DIR@/@[email protected]
 
-monetdb_hgversion.h: always
-       if [ -d "$(srcdir)"/.hg ] && hgid=`(cd "$(srcdir)"; hg id -i) 
2>/dev/null`; then \
-               echo "#define MERCURIAL_ID \"$$hgid\"" > 
monetdb_hgversion.h.new; \
-               if [ -f monetdb_hgversion.h ] && cmp -s monetdb_hgversion.h 
monetdb_hgversion.h.new; then \
-                       rm -f monetdb_hgversion.h.new; \
-               else \
-                       mv -f monetdb_hgversion.h.new monetdb_hgversion.h; \
-               fi; \
-       elif [ -d "$(srcdir)"/.git ]; then \
-               hgid=`(cd "$(srcdir)"; git log -1 | sed -n '/Notes (hg):/,$$p' 
| grep -v Notes | sed 's/^ \+\(............\).*/\1/') 2>/dev/null`; \
-               dirty=`(cd "$(srcdir)"; [[ -z $$(git status -s) ]] || echo 
"+")`; \
-               if [ -z "$${hgid}" ]; then \
-                       hgid="`(cd "$(srcdir)"; git rev-parse --short HEAD)` 
(git)"; \
-               fi; \
-               echo "#define MERCURIAL_ID \"$$hgid$$dirty\"" > 
monetdb_hgversion.h.new; \
-               if [ -f monetdb_hgversion.h ] && cmp -s monetdb_hgversion.h 
monetdb_hgversion.h.new; then \
-                       rm -f monetdb_hgversion.h.new; \
-               else \
-                       mv -f monetdb_hgversion.h.new monetdb_hgversion.h; \
-               fi; \
-       elif [ ! -f monetdb_hgversion.h ]; then \
-               touch monetdb_hgversion.h; \
-       fi
-
-always:
+srpm: @CMAKE_SOURCE_DIR@/MonetDB.spec 
@CMAKE_BINARY_DIR@/@[email protected] 
$(rpmtopdir)/rpmmacros
+       $(RPMBUILD) $(RPMBUILDARGS) --define="dist %{?undefined}" -ts 
@CMAKE_BINARY_DIR@/@[email protected]
diff --git a/sql/backends/monet5/vaults/bam/CMakeLists.txt 
b/sql/backends/monet5/vaults/bam/CMakeLists.txt
--- a/sql/backends/monet5/vaults/bam/CMakeLists.txt
+++ b/sql/backends/monet5/vaults/bam/CMakeLists.txt
@@ -26,7 +26,7 @@ if(NOT ${ENABLE_SAMTOOLS} STREQUAL "NO" 
        cmake_pop_check_state()
 endif()
 if(HAVE_SAMTOOLS)
-       configure_file(bam_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/bam_config.h)
+       configure_file(bam_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/bam_config.h 
@ONLY)
        include_directories(${CMAKE_CURRENT_BINARY_DIR} .. ../.. 
../../../../include ../../../../common ../../../../storage
                                                ../../../../server 
../../../../../monetdb5/modules/atoms ../../../../../monetdb5/modules/kernel
                                                ../../../../../monetdb5/mal 
../../../../../monetdb5/modules/mal ../../../../../monetdb5/optimizer
diff --git a/testing/CMakeLists.txt b/testing/CMakeLists.txt
--- a/testing/CMakeLists.txt
+++ b/testing/CMakeLists.txt
@@ -6,9 +6,6 @@
 # Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.
 #]]
 
-#Test for diff program existance
-find_program(DIFF NAMES gdiff diff DOC "Diff program")
-
 add_executable(Mdiff difflib.c helpers.c Mdiff.c difflib.h helpers.h)
 install(TARGETS Mdiff DESTINATION ${BINDIR})
 
@@ -68,7 +65,6 @@ if(WIN32)
        install(FILES Mtest.py.bat DESTINATION ${BINDIR} RENAME Mapprove.py.bat)
        install(FILES $<TARGET_PDB_FILE:Mdiff> DESTINATION ${BINDIR} OPTIONAL)
 else()
-       find_program(BASH NAMES bash DOC "bash interpreter fullpath")
        if(NOT BASH)
                message(FATAL_ERROR "A bash interpreter was not found")
        endif()
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to