1#############################################################################
2##    Kwave                - KwaveRPMSupport.cmake
3##                           -------------------
4##    begin                : Sun Jun 10 2007
5##    copyright            : (C) 2007 by Thomas Eschenbacher
6##    email                : Thomas.Eschenbacher@gmx.de
7#############################################################################
8#
9#############################################################################
10#                                                                           #
11# Redistribution and use in source and binary forms, with or without        #
12# modification, are permitted provided that the following conditions        #
13# are met:                                                                  #
14#                                                                           #
15# 1. Redistributions of source code must retain the above copyright         #
16#    notice, this list of conditions and the following disclaimer.          #
17# 2. Redistributions in binary form must reproduce the above copyright      #
18#    notice, this list of conditions and the following disclaimer in the    #
19#    documentation and/or other materials provided with the distribution.   #
20#                                                                           #
21# For details see the accompanying cmake/COPYING-CMAKE-SCRIPTS file.        #
22#                                                                           #
23#############################################################################
24
25#############################################################################
26### some needed programs                                                  ###
27
28FIND_PROGRAM(TAR_EXECUTABLE NAMES tar) # we need tar-1.16 or newer !
29FIND_PROGRAM(RPM_EXECUTABLE NAMES rpm)
30FIND_PROGRAM(RPMBUILD_EXECUTABLE NAMES rpmbuild)
31FIND_PROGRAM(BZIP2_EXECUTABLE NAMES bzip2)
32
33#############################################################################
34### determine all variables in the kwave.spec.in                          ###
35
36SET(RPM_RELEASE "1")
37SET(RPM_FULL_VERSION "${KWAVE_VERSION}-${RPM_RELEASE}")
38
39#############################################################################
40### generate the .changes file                                            ###
41
42SET(_changes ${DISTFILES_DIR}/kwave.changes)
43ADD_CUSTOM_COMMAND(OUTPUT ${_changes}
44    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bin/make-specfile-changelog.pl
45        ${CMAKE_CURRENT_SOURCE_DIR}/CHANGES
46        ${_changes}
47    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/CHANGES
48    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/make-specfile-changelog.pl
49)
50
51SET(KWAVE_ADDITIONAL_CLEAN_FILES ${KWAVE_ADDITIONAL_CLEAN_FILES} ${_changes})
52
53#############################################################################
54### generate the .spec file                                               ###
55
56SET(_specfile_without_changelog ${CMAKE_CURRENT_BINARY_DIR}/kwave.spec.no-chglog)
57SET(_specfile ${DISTFILES_DIR}/kwave.spec)
58CONFIGURE_FILE(
59    ${CMAKE_CURRENT_SOURCE_DIR}/kwave.spec.in
60    ${_specfile_without_changelog}
61    @ONLY
62)
63
64ADD_CUSTOM_COMMAND(OUTPUT ${_specfile}
65    COMMAND ${CAT_EXECUTABLE} ${_specfile_without_changelog} > ${_specfile}
66    COMMAND ${CAT_EXECUTABLE} ${_changes} >> ${_specfile}
67    DEPENDS ${_specfile_without_changelog} ${_changes}
68)
69
70ADD_CUSTOM_TARGET(specfile
71    DEPENDS ${_specfile}
72)
73
74#############################################################################
75### "make tarball"                                                        ###
76
77SET(_tarball ${DISTFILES_DIR}/kwave-${RPM_FULL_VERSION}.tar)
78SET(_tarball_bz2 ${_tarball}.bz2)
79
80SET(_git "${CMAKE_SOURCE_DIR}/.git")
81IF (EXISTS ${_git})
82    FIND_PROGRAM(GIT_EXECUTABLE NAMES git)
83    IF (GIT_EXECUTABLE)
84	MESSAGE(STATUS "Found git: ${GIT_EXECUTABLE}")
85	SET(files_lst "${CMAKE_BINARY_DIR}/files.lst")
86	ADD_CUSTOM_COMMAND(OUTPUT ${files_lst}
87	    COMMENT "Building file list from local .git repository"
88	    COMMAND "${GIT_EXECUTABLE}" ls-tree -r --name-only HEAD ">" ${files_lst}
89	    COMMAND test -e po && find po -name \\*.po ">>" ${files_lst}
90	    COMMAND find doc -type f -name \\*.txt ">>" ${files_lst}
91	    COMMAND find doc -type f -name index.docbook ">>" ${files_lst}
92	    COMMAND find doc -type f -name \\*.png ">>" ${files_lst}
93	    COMMAND find . -type f -name \\*.spec ">>" ${files_lst}
94	    COMMAND cat ${files_lst} | sort | uniq > ${files_lst}.tmp
95	    COMMAND mv ${files_lst}.tmp ${files_lst}
96	    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
97	)
98	SET(file_selection "--files-from=${files_lst}")
99    ELSE (GIT_EXECUTABLE)
100	MESSAGE(STATUS "Warning: .git exists but git program not found")
101    ENDIF (GIT_EXECUTABLE)
102ELSE (EXISTS ${_git})
103    MESSAGE(STATUS "No git version control files")
104ENDIF (EXISTS ${_git})
105IF (NOT file_selection)
106    SET(file_selection ".")
107ENDIF (NOT file_selection)
108
109ADD_CUSTOM_COMMAND(OUTPUT ${_tarball_bz2}
110    COMMAND ${TAR_EXECUTABLE}
111        -c
112        --exclude=.git --exclude=testfiles --exclude=*~
113        --transform=s+^./++g
114        --transform=s+^+kwave-${KWAVE_VERSION}/+g
115        --owner=root --group=root --mode=a+rX,go-w
116        -C ${CMAKE_SOURCE_DIR}
117        -f ${_tarball}
118        ${file_selection}
119    COMMAND ${TAR_EXECUTABLE} --append -f ${_tarball}
120        --owner=root --group=root --mode=a+rX,go-w
121        -C ${DISTFILES_DIR}
122        --transform=s+^+kwave-${KWAVE_VERSION}/+g
123        kwave.spec
124    COMMAND ${CMAKE_COMMAND} -E remove -f ${_tarball_bz2}
125    COMMAND ${BZIP2_EXECUTABLE} ${_tarball}
126    DEPENDS ${_specfile} ${files_lst}
127)
128
129ADD_CUSTOM_TARGET(tarball
130    DEPENDS ${_tarball_bz2}
131)
132
133SET(KWAVE_ADDITIONAL_CLEAN_FILES ${KWAVE_ADDITIONAL_CLEAN_FILES} ${_tarball_bz2})
134
135#############################################################################
136### source RPM                                                            ###
137
138EXECUTE_PROCESS(
139    COMMAND ${RPM_EXECUTABLE} -E %{_topdir}
140    OUTPUT_VARIABLE _rpm_topdir
141    OUTPUT_STRIP_TRAILING_WHITESPACE
142)
143
144SET(_src_rpm ${_rpm_topdir}/SRPMS/kwave-${RPM_FULL_VERSION}.src.rpm)
145
146ADD_CUSTOM_COMMAND(OUTPUT ${_src_rpm}
147    COMMAND ${CMAKE_COMMAND} -E make_directory ${_rpm_topdir}/{SPECS,SOURCES,RPMS,SRPMS,BUILD}
148    COMMAND ${CMAKE_COMMAND} -E copy_if_different
149        ${_specfile} ${_rpm_topdir}/SPECS/kwave-${RPM_FULL_VERSION}.spec
150    COMMAND ${CMAKE_COMMAND} -E copy_if_different
151        ${_tarball_bz2} ${_rpm_topdir}/SOURCES/kwave-${RPM_FULL_VERSION}.tar.bz2
152    COMMAND ${RPMBUILD_EXECUTABLE} -bs --nodeps
153        ${_rpm_topdir}/SPECS/kwave-${RPM_FULL_VERSION}.spec
154    DEPENDS ${_specfile} ${_tarball_bz2}
155)
156
157ADD_CUSTOM_TARGET(src_rpm
158    DEPENDS ${_src_rpm} ${_specfile} ${_changes}
159)
160
161#############################################################################
162### binary RPM for this architecture                                      ###
163
164ADD_CUSTOM_TARGET(rpm
165    COMMAND ${RPMBUILD_EXECUTABLE} --rebuild --nodeps ${_src_rpm}
166    DEPENDS ${_src_rpm} ${_specfile}
167)
168
169#############################################################################
170### add files to the list of distribution files                           ###
171
172SET(KWAVE_DISTFILES
173    ${KWAVE_DISTFILES}
174    ${_tarball_bz2}
175    ${_specfile}
176    ${_changes}
177)
178
179#############################################################################
180#############################################################################
181