blob: eeb1965ec390498293f3d12b10f17657b2e11733 [file] [log] [blame]
aviauf89d7062016-06-14 12:42:57 -04001#!/usr/bin/make -f
2# -*- makefile -*-
3
4# Hardening
5export DEB_BUILD_MAINT_OPTIONS = hardening=+all
6DPKG_EXPORT_BUILDFLAGS = 1
7include /usr/share/dpkg/buildflags.mk
8
9# Number of CPUS
10NO_CPUS=$(shell nproc)
11ifeq ($(NO_CPUS),0)
12NO_CPUS=1
13endif
14
Hugo Lefeuvrec902ea12018-07-19 14:23:32 -040015# Binary package names
Fredy P553fef12019-10-10 15:05:06 -040016RING_ALL_IN_ONE_PKG_NAME="jami-all"
17RING_CLIENT_PKG_NAME="jami"
18RING_DAEMON_PKG_NAME="jami-daemon"
Hugo Lefeuvrec902ea12018-07-19 14:23:32 -040019
Fredy Pb20faf62019-12-09 10:15:45 -050020# Bundled packages from contrib
21BUNDLED_PKGS = .ffmpeg
Sandra Tobajasd6dde7e2020-10-08 11:18:56 +000022ifeq (raspbian_10_armhf,$(findstring raspbian_10_armhf, $(DISTRIBUTION)))
Fredy Pb20faf62019-12-09 10:15:45 -050023# Raspbian's yaml-cpp lib does not work properly
24BUNDLED_PKGS += .yaml-cpp
Sandra Tobajasd6dde7e2020-10-08 11:18:56 +000025# Add host environment variables
26CMAKE_OPTIONS=-DCHOST=${HOST_ARCH} \
27 -DCMAKE_C_COMPILER=${HOST_ARCH}-gcc \
28 -DCMAKE_CXX_COMPILER=${HOST_ARCH}-g++ \
29 -DCMAKE_FIND_ROOT_PATH=/usr/${HOST_ARCH} \
30 -DPKG_CONFIG_EXECUTABLE=/usr/bin/${HOST_ARCH}-pkg-config
Fredy Pb20faf62019-12-09 10:15:45 -050031endif
32
aviauf89d7062016-06-14 12:42:57 -040033%:
34 dh $@
35
36override_dh_auto_configure:
37 ###############################################
38 ## Re-create tarballs from tarballs-unpacked ##
39 ###############################################
40 mkdir -p daemon/contrib/tarballs
41
42 # Create tarballs
43 for i in $(CURDIR)/daemon/contrib/tarballs-unpacked/*; do \
44 projectname=`basename $$i` && \
45 cd $$i && tar -caf ../../tarballs/$$projectname * && \
46 echo "Repacked $$projectname"; \
47 done
48
aviauf89d7062016-06-14 12:42:57 -040049 ###########################
50 ## Ring Daemon configure ##
51 ###########################
52 mkdir -p daemon/contrib/native
53 cd daemon/contrib/native && \
54 ../bootstrap \
Sandra Tobajasd6dde7e2020-10-08 11:18:56 +000055 --host=${HOST_ARCH} \
aviaudc3c9de2016-10-05 11:13:23 -040056 --disable-downloads \
aviau2fd81442016-07-27 15:13:33 -040057 --no-checksums \
aviauf89d7062016-06-14 12:42:57 -040058 --disable-ogg \
59 --disable-flac \
60 --disable-vorbis \
61 --disable-vorbisenc \
62 --disable-speex \
63 --disable-sndfile \
aviau9c5c4ad2016-07-20 14:07:34 -040064 --disable-gsm \
Stepan Salenikovich19dd3342016-08-16 10:04:15 -040065 --disable-speexdsp \
Guillaume Roguez46bdda42017-04-17 13:38:18 -040066 --disable-natpmp \
67 --enable-gnutls && \
aviauf89d7062016-06-14 12:42:57 -040068 make list && \
Sébastien Blinb06f51d2019-11-15 10:49:03 -050069 make -j$(NO_CPUS) V=1 && \
Fredy Pb20faf62019-12-09 10:15:45 -050070 make -j$(NO_CPUS) $(BUNDLED_PKGS) V=1
aviauf89d7062016-06-14 12:42:57 -040071 cd daemon && \
72 ./autogen.sh && \
73 ./configure \
Stepan Salenikovicha61de1f2016-08-18 16:02:37 -040074 --prefix=/usr \
Sandra Tobajasd6dde7e2020-10-08 11:18:56 +000075 --disable-shared \
76 --host=${HOST_ARCH}
aviauf89d7062016-06-14 12:42:57 -040077
78 #############################
79 ## libringclient configure ##
80 #############################
81 cd lrc && \
82 mkdir build && \
83 cd build && \
84 cmake \
85 -DRING_BUILD_DIR=$(CURDIR)/daemon/src \
86 -DCMAKE_INSTALL_PREFIX=/usr \
aviau9c5c4ad2016-07-20 14:07:34 -040087 -DCMAKE_BUILD_TYPE=Debug \
Sandra Tobajasd6dde7e2020-10-08 11:18:56 +000088 $(CMAKE_OPTIONS) \
aviauf89d7062016-06-14 12:42:57 -040089 ..
90
91 ############################
92 ## gnome client configure ##
93 ############################
94 cd client-gnome && \
95 mkdir build && \
96 cd build && \
97 cmake \
98 -DCMAKE_INSTALL_PREFIX=/usr \
99 -DLibRingClient_PROJECT_DIR=/$(CURDIR)/lrc \
Stepan Salenikovichd6f588a2016-08-30 15:40:15 -0400100 -DGSETTINGS_LOCALCOMPILE=OFF \
Sandra Tobajasd6dde7e2020-10-08 11:18:56 +0000101 $(CMAKE_OPTIONS) \
aviauf89d7062016-06-14 12:42:57 -0400102 ..
103
104 dh_auto_configure
105
106override_dh_auto_build:
107 #######################
108 ## Ring Daemon build ##
109 #######################
aviau9c5c4ad2016-07-20 14:07:34 -0400110 make -C daemon -j$(NO_CPUS) V=1
aviauf89d7062016-06-14 12:42:57 -0400111 pod2man daemon/man/dring.pod > daemon/dring.1
112
113 #########################
114 ## libringclient build ##
115 #########################
aviau9c5c4ad2016-07-20 14:07:34 -0400116 make -C lrc/build -j$(NO_CPUS) V=1
aviauf89d7062016-06-14 12:42:57 -0400117
118 ########################
119 ## gnome client build ##
120 ########################
aviau9c5c4ad2016-07-20 14:07:34 -0400121 make -C client-gnome/build LDFLAGS="-lpthread" -j$(NO_CPUS) V=1
aviauf89d7062016-06-14 12:42:57 -0400122
123override_dh_auto_clean:
124 ################################
125 ## Generated contrib tarballs ##
126 ################################
127 rm -rfv daemon/contrib/tarballs
128
129 #######################
130 ## Ring Daemon clean ##
131 #######################
aviau9ee77442016-09-06 14:31:00 -0400132 if [ -f daemon/contrib/native/Makefile ]; then make -C daemon/contrib/native distclean; fi
aviauf89d7062016-06-14 12:42:57 -0400133 rm -rfv daemon/contrib/native
134 rm -rfv daemon/dring.1
135
136 #########################
137 ## libringclient clean ##
138 #########################
Maxim Cournoyerdad4c3b2018-02-14 15:48:37 -0500139 # CMake build system has no distclean target, so use clean.
140 if [ -f lrc/build/Makefile ]; then make -C lrc/build clean; fi
aviauf89d7062016-06-14 12:42:57 -0400141 rm -rfv lrc/build
142
143 ########################
144 ## gnome client clean ##
145 ########################
Maxim Cournoyerdad4c3b2018-02-14 15:48:37 -0500146 # CMake build system has no distclean target, so use clean.
147 if [ -f client-gnome/build/Makefile ]; then make -C client-gnome/build clean; fi
aviauf89d7062016-06-14 12:42:57 -0400148 rm -rfv client-gnome/build
149
aviau5c3c1b32017-05-02 22:39:54 -0400150override_dh_clean:
151 # GNUTLS contains:
152 # ring-project/daemon/contrib/tarballs-unpacked/gnutls-3.5.10.tar.xz/gnutls-3.5.10/src/certtool-args.c.bak
153 # ring-project/daemon/contrib/tarballs-unpacked/gnutls-3.5.10.tar.xz/gnutls-3.5.10/doc/doxygen/Doxyfile.orig
154 dh_clean -X.bak -X.orig
155
aviauf89d7062016-06-14 12:42:57 -0400156override_dh_auto_install:
157 #########################
Hugo Lefeuvrec902ea12018-07-19 14:23:32 -0400158 ## Ring daemon install ##
aviauf89d7062016-06-14 12:42:57 -0400159 #########################
aviauf89d7062016-06-14 12:42:57 -0400160
Hugo Lefeuvrec902ea12018-07-19 14:23:32 -0400161 cd daemon && make DESTDIR=$(CURDIR)/debian/$(RING_DAEMON_PKG_NAME) install
162 rm -rfv $(CURDIR)/debian/$(RING_DAEMON_PKG_NAME)/usr/include
163 rm -rfv $(CURDIR)/debian/$(RING_DAEMON_PKG_NAME)/usr/lib/*.a
164 rm -rfv $(CURDIR)/debian/$(RING_DAEMON_PKG_NAME)/usr/lib/*.la
165
Hugo Lefeuvrec79ae4d2018-08-07 14:48:28 -0400166 #########################
Fredy P553fef12019-10-10 15:05:06 -0400167 ## Jami client install ##
Hugo Lefeuvrec79ae4d2018-08-07 14:48:28 -0400168 #########################
169
170 ## LibRingClient
171 cd lrc/build && make DESTDIR=$(CURDIR)/debian/$(RING_CLIENT_PKG_NAME) install
172 rm -rfv $(CURDIR)/debian/$(RING_CLIENT_PKG_NAME)/usr/include
173
174 # This is a symlink, should be in -dev package
175 rm -v $(CURDIR)/debian/$(RING_CLIENT_PKG_NAME)/usr/lib/libringclient.so
176
177 # cmake files
178 rm -rfv $(CURDIR)/debian/$(RING_CLIENT_PKG_NAME)/usr/lib/cmake
179
180 ## GNOME client
181 cd client-gnome/build && make DESTDIR=$(CURDIR)/debian/$(RING_CLIENT_PKG_NAME) install
Fredy P553fef12019-10-10 15:05:06 -0400182 ln -sf /usr/bin/jami $(CURDIR)/debian/jami/usr/bin/ring.cx
Hugo Lefeuvrec79ae4d2018-08-07 14:48:28 -0400183
Hugo Lefeuvrec902ea12018-07-19 14:23:32 -0400184 ######################
Fredy P553fef12019-10-10 15:05:06 -0400185 ## Jami AiO install ##
Hugo Lefeuvrec902ea12018-07-19 14:23:32 -0400186 ######################
187
188 ## daemon
189 cd daemon && make DESTDIR=$(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME) install
190 rm -rfv $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/include
191 rm -rfv $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/lib/*.a
192 rm -rfv $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/lib/*.la
193
194 ## LibRingClient
195 cd lrc/build && make DESTDIR=$(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME) install
196 rm -rfv $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/include
aviauf89d7062016-06-14 12:42:57 -0400197
198 # This is a symlink, should be in -dev package
Hugo Lefeuvrec902ea12018-07-19 14:23:32 -0400199 rm -v $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/lib/libringclient.so
aviauf89d7062016-06-14 12:42:57 -0400200
201 # cmake files
Hugo Lefeuvrec902ea12018-07-19 14:23:32 -0400202 rm -rfv $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/lib/cmake
aviauf89d7062016-06-14 12:42:57 -0400203
Hugo Lefeuvrec902ea12018-07-19 14:23:32 -0400204 ## GNOME client
205 cd client-gnome/build && make DESTDIR=$(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME) install
Fredy P553fef12019-10-10 15:05:06 -0400206 ln -sf /usr/bin/jami $(CURDIR)/debian/jami-all/usr/bin/ring.cx
aviauf89d7062016-06-14 12:42:57 -0400207
aviauf89d7062016-06-14 12:42:57 -0400208tmpdir:= $(shell mktemp -d)
209workdir:= $(shell pwd)
210PKD := $(abspath $(dir $(MAKEFILE_LIST)))
211version_to_download := $(shell dpkg-parsechangelog -ldebian/changelog | perl -ne 'print $$1 if m{^Version:\s+(?:\d+:)?(\d.*)(?:\~dfsg.+)(?:\-\d+.*)};')
212
213# Repacks the tarball with contrib tarballs unpacked.
214get-orig-source:
Fredy P553fef12019-10-10 15:05:06 -0400215 # Download jami tarball
aviauf89d7062016-06-14 12:42:57 -0400216 if [ -n "$$GET_ORIG_SOURCE_OVERRIDE_USCAN_TARBALL" ]; then \
217 mv $$GET_ORIG_SOURCE_OVERRIDE_USCAN_TARBALL ${tmpdir}; \
218 else \
219 uscan --rename --destdir=${tmpdir} --download-version ${version_to_download} ;\
220 fi
221
Fredy P553fef12019-10-10 15:05:06 -0400222 # Unpack jami tarball
aviauf89d7062016-06-14 12:42:57 -0400223 tar -C ${tmpdir} -xf ${tmpdir}/*.tar.gz
224
225 # Remove original tarball
226 rm ${tmpdir}/*.tar.gz
227
228 # Unpack all of the orig tarballs into tarballs-unpacked
Fredy P553fef12019-10-10 15:05:06 -0400229 if [ -d "${tmpdir}/jami/" ]; then \
230 mv ${tmpdir}/jami/ ${tmpdir}/ring-project/; \
Sébastien Blin94aaa832019-04-19 14:04:38 -0400231 fi
aviauf89d7062016-06-14 12:42:57 -0400232 mkdir ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked
233 for i in `find ${tmpdir}/ring-project/daemon/contrib/tarballs/ -name "*.tar.*"`; do \
234 projectname=`basename $$i` && \
235 mkdir ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/$$projectname && \
236 tar -C ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/$$projectname -xf $$i && \
237 echo "Unpacked $$projectname"; \
238 done
239
240 ###################
241 ## Exclude files ##
242 ###################
243 # This does not exclude everything that we need to exclude.
244 # debian/copyright's File-Excluded section also excludes files.
245
246 ## pjproject
247 rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/g7221 # non-distributable (requires a license from Polycom)
248 rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/ilbc # non distributable (the version included with pjproject)
249 rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/milenage # non distributable
250 rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/BaseClasses # non distributable (?)
251 rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/portaudio # not needed
252 rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/speex # not needed
253 rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/mp3 # not needed
254 rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/gsm # not needed
255 rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/bdsound # not needed
256 #rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/srtp # not needed
257 rm -f ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/pjmedia/src/pjmedia-audiodev/s60_g729_bitstream.h # non distributable
258 rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/build/vs # not needed, VisualStudio files.
259
260 # Remove all contrib tarballs
261 rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs
262
263 # Create the new tarball
Fredy P553fef12019-10-10 15:05:06 -0400264 cd ${tmpdir} && tar -czf ${workdir}/jami_${version_to_download}~dfsg1.orig.tar.gz ring-project
aviauf89d7062016-06-14 12:42:57 -0400265
266 # Clear the temp dir
267 rm -rf ${tmpdir}