]> git.pld-linux.org Git - packages/zfs.git/blob - zfs.spec
a581e67c10433d065e6730215ba4e900a4022c6e
[packages/zfs.git] / zfs.spec
1 # TODO:
2 # - PLDify init script
3 # - unpackaged initramfs-tools support:
4 #   /usr/share/initramfs-tools/conf-hooks.d/zfs
5 #   /usr/share/initramfs-tools/hooks/zfs
6 #   /usr/share/initramfs-tools/scripts/zfs
7 #
8 # Conditional build:
9 %bcond_without  kernel          # don't build kernel modules
10 %bcond_without  userspace       # don't build userspace programs
11 %bcond_without  python2         # CPython 2.x module
12 %bcond_without  python3         # CPython 3.x module
13 %bcond_with     verbose         # verbose build (V=1)
14 #
15 # The goal here is to have main, userspace, package built once with
16 # simple release number, and only rebuild kernel packages with kernel
17 # version as part of release number, without the need to bump release
18 # with every kernel change.
19 %if 0%{?_pld_builder:1} && %{with kernel} && %{with userspace}
20 %{error:kernel and userspace cannot be built at the same time on PLD builders}
21 exit 1
22 %endif
23
24 %if %{without userspace}
25 # nothing to be placed to debuginfo package
26 %define         _enable_debug_packages  0
27 %endif
28
29 %define         _duplicate_files_terminate_build        0
30
31 %define rel     4
32 %define pname   zfs
33 Summary:        Native Linux port of the ZFS filesystem
34 Summary(pl.UTF-8):      Natywny linuksowy port systemu plików ZFS
35 Name:           %{pname}%{?_pld_builder:%{?with_kernel:-kernel}}%{_alt_kernel}
36 Version:        0.8.1
37 Release:        %{rel}%{?_pld_builder:%{?with_kernel:@%{_kernel_ver_str}}}
38 License:        CDDL
39 Group:          Applications/System
40 #Source0:       https://github.com/zfsonlinux/zfs/releases/download/zfs-%{version}/%{pname}-%{version}.tar.gz
41 Source0:        https://github.com/zfsonlinux/zfs/archive/zfs-%{version}/%{pname}-%{version}.tar.gz
42 # Source0-md5:  db6618a09f6494e1126b14a1302f77c8
43 Patch0:         x32.patch
44 Patch1:         am.patch
45 Patch2:         %{pname}-sh.patch
46 Patch3:         kernel-5.3.patch
47 URL:            http://zfsonlinux.org/
48 BuildRequires:  autoconf >= 2.50
49 BuildRequires:  automake
50 BuildRequires:  libtool
51 BuildRequires:  rpmbuild(macros) >= 1.714
52 %if %{with kernel}
53 %{expand:%buildrequires_kernel kernel%%{_alt_kernel}-module-build >= 3:2.6.20.2}
54 %endif
55 %if %{with userspace}
56 # only for mmap_libaio test command
57 #BuildRequires: libaio-devel
58 BuildRequires:  libblkid-devel
59 BuildRequires:  libselinux-devel
60 # if xdr gets removed from glibc
61 #BuildRequires: libtirpc-devel
62 BuildRequires:  libuuid-devel
63 BuildRequires:  openssl-devel
64 BuildRequires:  pkgconfig
65 BuildRequires:  udev-devel
66 BuildRequires:  zlib-devel
67 %if %{with python2}
68 BuildRequires:  python-cffi
69 BuildRequires:  python-modules >= 1:2.6
70 BuildRequires:  python-setuptools
71 %endif
72 %if %{with python3}
73 BuildRequires:  python3-cffi
74 BuildRequires:  python3-modules >= 1:3.4
75 BuildRequires:  python3-setuptools
76 %endif
77 %if %{with python2} || %{with python3}
78 BuildRequires:  rpm-pythonprov
79 %endif
80 %endif
81 Requires:       %{pname}-libs = %{version}-%{release}
82 Obsoletes:      spl < 0.7.9-2
83 BuildRoot:      %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
84
85 %define         dracutlibdir    %{_prefix}/lib/dracut
86
87 %description
88 ZFS is an advanced file system and volume manager which was originally
89 developed for Solaris and is now maintained by the Illumos community.
90
91 ZFS on Linux, which is also known as ZoL, is currently feature
92 complete. It includes fully functional and stable SPA, DMU, ZVOL, and
93 ZPL layers.
94
95 %description -l pl.UTF-8
96 ZFS to zaawansowany system plików i zarządca wolumenów, oryginalnie
97 stworzony dla Solarisa, obecnie utrzymywany przez społeczność Illumos.
98
99 ZFS dla Linuksa, znany takża jako ZoL (ZFS on Linux), jest obecnie w
100 pełni funkcjonalny. Zawiera w pełni funkcjonalne i stabilne warstwy
101 SPA, DMU, ZVOL i ZPL.
102
103 %package libs
104 Summary:        ZFS on Linux libraries
105 Summary(pl.UTF-8):      Biblioteki ZFS-a dla Linuksa
106 License:        CDDL
107 Group:          Libraries
108 Requires(post,postun):  /sbin/ldconfig
109
110 %description libs
111 ZFS on Linux libraries.
112
113 %description libs -l pl.UTF-8
114 Biblioteki ZFS-a dla Linuksa.
115
116 %package devel
117 Summary:        Header files for ZFS libraries
118 Summary(pl.UTF-8):      Pliki nagłówkowe bibliotek ZFS-a
119 License:        CDDL
120 Group:          Development/Libraries
121 Requires:       %{pname}-libs = %{version}-%{release}
122 Requires:       libselinux-devel
123 Requires:       libuuid-devel
124 Requires:       zlib-devel
125
126 %description devel
127 Header files for ZFS libraries.
128
129 %description devel -l pl.UTF-8
130 Pliki nagłówkowe bibliotek ZFS-a.
131
132 %package static
133 Summary:        Static ZFS libraries
134 Summary(pl.UTF-8):      Statyczne biblioteki ZFS-a
135 License:        CDDL
136 Group:          Development/Libraries
137 Requires:       %{pname}-devel = %{version}-%{release}
138
139 %description static
140 Static ZFS libraries.
141
142 %description static -l pl.UTF-8
143 Statyczne biblioteki ZFS-a.
144
145 %package -n dracut-zfs
146 Summary:        ZFS support for Dracut
147 Summary(pl.UTF-8):      Obsługa ZFS-a dla Dracuta
148 Group:          Applications/System
149 Requires:       %{pname} = %{version}-%{release}
150 Requires:       dracut
151
152 %description -n dracut-zfs
153 ZFS support for Dracut.
154
155 %description -n dracut-zfs -l pl.UTF-8
156 Obsługa ZFS-a dla Dracuta.
157
158 %package -n python-pyzfs
159 Summary:        Python 2 wrapper for libzfs_core C library
160 Summary(pl.UTF-8):      Interfejs Pythona 2 do biblioteki C libzfs_core
161 License:        Apache v2.0
162 Group:          Libraries/Python
163 Requires:       %{pname}-libs = %{version}-%{release}
164
165 %description -n python-pyzfs
166 Python 2 wrapper for libzfs_core C library.
167
168 %description -n python-pyzfs -l pl.UTF-8
169 Interfejs Pythona 2 do biblioteki C libzfs_core.
170
171 %package -n python3-pyzfs
172 Summary:        Python 3 wrapper for libzfs_core C library
173 Summary(pl.UTF-8):      Interfejs Pythona 3 do biblioteki C libzfs_core
174 License:        Apache v2.0
175 Group:          Libraries/Python
176 Requires:       %{pname}-libs = %{version}-%{release}
177
178 %description -n python3-pyzfs
179 Python 3 wrapper for libzfs_core C library.
180
181 %description -n python3-pyzfs -l pl.UTF-8
182 Interfejs Pythona 3 do biblioteki C libzfs_core.
183
184 %package -n kernel-zfs-common-devel
185 Summary:        ZFS Linux kernel headers
186 Summary(pl.UTF-8):      ZFS - pliki nagłówkowe jądra Linuksa
187 Group:          Development/Building
188 Obsoletes:      kernel-spl-common-devel < 0.7.9-2
189
190 %description -n kernel-zfs-common-devel
191 ZFS Linux kernel headers common for all PLD kernel versions.
192
193 %description -n kernel-zfs-common-devel -l pl.UTF-8
194 ZFS - pliki nagłówkowe jądra Linuksa wspólne na wszystkich
195 wersji jąder PLD.
196
197 %define kernel_pkg()\
198 %package -n kernel%{_alt_kernel}-zfs\
199 Summary:        ZFS Linux kernel modules\
200 Summary(pl.UTF-8):      ZFS - moduły jądra Linuksa\
201 Release:        %{rel}@%{_kernel_ver_str}\
202 Group:          Base/Kernel\
203 Requires(post,postun):  /sbin/depmod\
204 %requires_releq_kernel\
205 Requires(postun):       %releq_kernel\
206 \
207 %description -n kernel%{_alt_kernel}-zfs\
208 ZFS Linux kernel modules.\
209 \
210 %description -n kernel%{_alt_kernel}-zfs -l pl.UTF-8\
211 ZFS - moduły jądra Linuksa.\
212 \
213 %package -n kernel%{_alt_kernel}-zfs-devel\
214 Summary:        ZFS Linux kernel headers\
215 Summary(pl.UTF-8):      ZFS - pliki nagłówkowe jądra Linuksa\
216 Release:        %{rel}@%{_kernel_ver_str}\
217 Group:          Development/Building\
218 Requires:       kernel%{_alt_kernel}-headers\
219 Requires:       kernel-zfs-common-devel\
220 Obsoletes:      kernel-spl-devel < 0.7.9-2\
221 \
222 %description -n kernel%{_alt_kernel}-zfs-devel\
223 ZFS Linux kernel headers configured for PLD kernel%{_alt_kernel},\
224 version %{_kernel_ver}.\
225 \
226 %description -n kernel%{_alt_kernel}-zfs-devel -l pl.UTF-8\
227 ZFS - pliki nagłówkowe jądra Linuksa skonfigurowane dla jądra PLD z\
228 pakietu kernel%{_alt_kernel} w wersji %{_kernel_ver}.\
229 \
230 %files -n kernel%{_alt_kernel}-zfs\
231 %defattr(644,root,root,755)\
232 %dir /lib/modules/%{_kernel_ver}/misc/lua\
233 /lib/modules/%{_kernel_ver}/misc/lua/zlua.ko*\
234 %dir /lib/modules/%{_kernel_ver}/misc/avl\
235 /lib/modules/%{_kernel_ver}/misc/avl/zavl.ko*\
236 %dir /lib/modules/%{_kernel_ver}/misc/icp\
237 /lib/modules/%{_kernel_ver}/misc/icp/icp.ko*\
238 %dir /lib/modules/%{_kernel_ver}/misc/nvpair\
239 /lib/modules/%{_kernel_ver}/misc/nvpair/znvpair.ko*\
240 %dir /lib/modules/%{_kernel_ver}/misc/spl\
241 /lib/modules/%{_kernel_ver}/misc/spl/spl.ko*\
242 %dir /lib/modules/%{_kernel_ver}/misc/unicode\
243 /lib/modules/%{_kernel_ver}/misc/unicode/zunicode.ko*\
244 %dir /lib/modules/%{_kernel_ver}/misc/zcommon\
245 /lib/modules/%{_kernel_ver}/misc/zcommon/zcommon.ko*\
246 %dir /lib/modules/%{_kernel_ver}/misc/zfs\
247 /lib/modules/%{_kernel_ver}/misc/zfs/zfs.ko*\
248 \
249 %files -n kernel%{_alt_kernel}-zfs-devel\
250 %defattr(644,root,root,755)\
251 /usr/src/zfs-%{version}/%{_kernel_ver}\
252 \
253 %post   -n kernel%{_alt_kernel}-zfs\
254 %depmod %{_kernel_ver}\
255 \
256 %postun -n kernel%{_alt_kernel}-zfs\
257 %depmod %{_kernel_ver}\
258 %{nil}
259
260 %define build_kernel_pkg()\
261 %configure \\\
262         --disable-silent-rules \\\
263         --with-config="kernel" \\\
264         --with-linux=%{_kernelsrcdir}\\\
265         --with-linux-obj=%{_kernelsrcdir}\
266 \
267 %{__make} clean\
268 %{__make} %{?with_verbose:V=1}\
269 p=`pwd`\
270 %{__make} install DESTDIR=$p/installed INSTALL_MOD_DIR=misc\
271 %{nil}
272
273 %{?with_kernel:%{expand:%create_kernel_packages}}
274
275 %prep
276 %setup -q -n %{pname}-zfs-%{version}
277 %patch0 -p1
278 %patch1 -p1
279 %patch2 -p1
280 %patch3 -p1
281
282 %build
283 %{__libtoolize}
284 %{__aclocal} -I config
285 %{__autoconf}
286 %{__autoheader}
287 %{__automake}
288 %{?with_kernel:%{expand:%build_kernel_packages}}
289
290 %if %{with userspace}
291 %configure \
292         --disable-silent-rules \
293         --enable-systemd \
294         --with-config="user" \
295         --with-linux=%{_kernelsrcdir} \
296         --with-systemdunitdir=%{systemdunitdir} \
297         --with-systemdpresetdir=/etc/systemd/system-preset \
298         --with-systemdmodulesloaddir=/etc/modules-load.d \
299         --with-systemdgeneratordir=/lib/systemd/system-generators \
300         --with-udevdir=/lib/udev
301
302 %{__make} \
303         %{?with_verbose:V=1}
304
305 %if %{with python2}
306 cd contrib/pyzfs
307 %py_build
308 cd ../..
309 %endif
310
311 %if %{with python3}
312 cd contrib/pyzfs
313 %py3_build
314 cd ../..
315 %endif
316 %endif
317
318 %install
319 rm -rf $RPM_BUILD_ROOT
320
321 %if %{with kernel}
322 install -d $RPM_BUILD_ROOT
323 cp -a installed/* $RPM_BUILD_ROOT
324 # Drop unneeded spl compat links
325 %{__rm} -r $RPM_BUILD_ROOT/usr/src/spl-%{version}
326 %endif
327
328 %if %{with userspace}
329 %{__make} install \
330         DESTDIR=$RPM_BUILD_ROOT \
331         DEFAULT_INIT_DIR=/etc/rc.d/init.d
332
333 %if %{with python2}
334 %{__rm} -rf $RPM_BUILD_ROOT%{py_sitescriptdir}
335 cd contrib/pyzfs
336 %py_install
337
338 %py_ocomp $RPM_BUILD_ROOT%{py_sitescriptdir}
339 %py_comp $RPM_BUILD_ROOT%{py_sitescriptdir}
340
341 %py_postclean
342 cd ../..
343 %{__rm} -r $RPM_BUILD_ROOT%{py_sitescriptdir}/libzfs_core/test
344 %endif
345
346 %if %{with python3}
347 %{__rm} -rf $RPM_BUILD_ROOT{%{py3_sitescriptdir},/usr/local/share/python3*}
348 cd contrib/pyzfs
349 %py3_install
350 cd ../..
351 %{__rm} -r $RPM_BUILD_ROOT%{py3_sitescriptdir}/libzfs_core/test
352 %endif
353
354 install -d $RPM_BUILD_ROOT%{_pkgconfigdir}
355 %{__mv} $RPM_BUILD_ROOT%{_npkgconfigdir}/* $RPM_BUILD_ROOT%{_pkgconfigdir}
356
357 # Debian specific stuff
358 %{__rm} -r $RPM_BUILD_ROOT%{_datadir}/initramfs-tools
359
360 # Package these? These are integration tests of the implementation.
361 %{__rm} -r $RPM_BUILD_ROOT%{_datadir}/zfs/{zfs-tests,test-runner,runfiles}
362 %{__rm} $RPM_BUILD_ROOT%{_mandir}/man1/{raidz_test,test-runner}.1*
363 %{__rm} $RPM_BUILD_ROOT%{_bindir}/raidz_test
364 %endif
365
366 %clean
367 rm -rf $RPM_BUILD_ROOT
368
369 %post   libs -p /sbin/ldconfig
370 %postun libs -p /sbin/ldconfig
371
372 %if %{with userspace}
373 %files
374 %defattr(644,root,root,755)
375 %doc AUTHORS COPYRIGHT LICENSE NEWS NOTICE README.md
376 %attr(755,root,root) /sbin/mount.zfs
377 %attr(755,root,root) %{_bindir}/arc_summary
378 %attr(755,root,root) %{_bindir}/arcstat
379 %attr(755,root,root) %{_bindir}/dbufstat
380 %attr(755,root,root) %{_bindir}/zgenhostid
381 %attr(755,root,root) %{_sbindir}/fsck.zfs
382 %attr(755,root,root) %{_sbindir}/zdb
383 %attr(755,root,root) %{_sbindir}/zed
384 %attr(755,root,root) %{_sbindir}/zfs
385 %attr(755,root,root) %{_sbindir}/zhack
386 %attr(755,root,root) %{_sbindir}/zinject
387 %attr(755,root,root) %{_sbindir}/zpool
388 %attr(755,root,root) %{_sbindir}/zstreamdump
389 %attr(755,root,root) %{_sbindir}/ztest
390 %dir %{_sysconfdir}/zfs
391 # package *.example as %doc? (they cannot act as default configuration)
392 %{_sysconfdir}/zfs/vdev_id.conf.*.example
393 %dir %{_sysconfdir}/zfs/zed.d
394 %attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/zfs/zed.d/*.sh
395 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/zfs/zed.d/zed.rc
396 %dir %{_sysconfdir}/zfs/zpool.d
397 %attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/zfs/zpool.d/*
398 %attr(754,root,root) /etc/rc.d/init.d/zfs-import
399 %attr(754,root,root) /etc/rc.d/init.d/zfs-mount
400 %attr(754,root,root) /etc/rc.d/init.d/zfs-share
401 %attr(754,root,root) /etc/rc.d/init.d/zfs-zed
402 %config(noreplace) %verify(not md5 mtime size) /etc/default/zfs
403 /etc/zfs/zfs-functions
404 %config(noreplace) %verify(not md5 mtime size) /etc/modules-load.d/zfs.conf
405 /etc/systemd/system-preset/50-zfs.preset
406 /lib/systemd/system-generators/zfs-mount-generator
407 %{systemdunitdir}/zfs.target
408 %{systemdunitdir}/zfs-import.target
409 %{systemdunitdir}/zfs-import-cache.service
410 %{systemdunitdir}/zfs-import-scan.service
411 %{systemdunitdir}/zfs-mount.service
412 %{systemdunitdir}/zfs-share.service
413 %{systemdunitdir}/zfs-zed.service
414 %attr(755,root,root) /lib/udev/vdev_id
415 %attr(755,root,root) /lib/udev/zvol_id
416 /lib/udev/rules.d/60-zvol.rules
417 /lib/udev/rules.d/69-vdev.rules
418 /lib/udev/rules.d/90-zfs.rules
419 %dir %{_libexecdir}/zfs
420 %dir %{_libexecdir}/zfs/zed.d
421 %attr(755,root,root) %{_libexecdir}/zfs/zed.d/*.sh
422 %dir %{_libexecdir}/zfs/zpool.d
423 %attr(755,root,root) %{_libexecdir}/zfs/zpool.d/*
424 %dir %{_datadir}/zfs
425 %attr(755,root,root) %{_datadir}/zfs/*.sh
426 %{_mandir}/man1/zhack.1*
427 %{_mandir}/man1/ztest.1*
428 %{_mandir}/man5/spl-module-parameters.5*
429 %{_mandir}/man5/vdev_id.conf.5*
430 %{_mandir}/man5/zfs-events.5*
431 %{_mandir}/man5/zfs-module-parameters.5*
432 %{_mandir}/man5/zpool-features.5*
433 %{_mandir}/man8/fsck.zfs.8*
434 %{_mandir}/man8/mount.zfs.8*
435 %{_mandir}/man8/vdev_id.8*
436 %{_mandir}/man8/zdb.8*
437 %{_mandir}/man8/zed.8*
438 %{_mandir}/man8/zfs.8*
439 %{_mandir}/man8/zfs-mount-generator.8*
440 %{_mandir}/man8/zfs-program.8*
441 %{_mandir}/man8/zgenhostid.8*
442 %{_mandir}/man8/zinject.8*
443 %{_mandir}/man8/zpool.8*
444 %{_mandir}/man8/zstreamdump.8*
445
446 %files libs
447 %defattr(644,root,root,755)
448 %attr(755,root,root) %{_libdir}/libnvpair.so.*.*.*
449 %attr(755,root,root) %ghost %{_libdir}/libnvpair.so.1
450 %attr(755,root,root) %{_libdir}/libuutil.so.*.*.*
451 %attr(755,root,root) %ghost %{_libdir}/libuutil.so.1
452 %attr(755,root,root) %{_libdir}/libzfs.so.*.*.*
453 %attr(755,root,root) %ghost %{_libdir}/libzfs.so.2
454 %attr(755,root,root) %{_libdir}/libzfs_core.so.*.*.*
455 %attr(755,root,root) %ghost %{_libdir}/libzfs_core.so.1
456 %attr(755,root,root) %{_libdir}/libzpool.so.*.*.*
457 %attr(755,root,root) %ghost %{_libdir}/libzpool.so.2
458
459 %files devel
460 %defattr(644,root,root,755)
461 %attr(755,root,root) %{_libdir}/libnvpair.so
462 %attr(755,root,root) %{_libdir}/libuutil.so
463 %attr(755,root,root) %{_libdir}/libzfs.so
464 %attr(755,root,root) %{_libdir}/libzfs_core.so
465 %attr(755,root,root) %{_libdir}/libzpool.so
466 %{_libdir}/libnvpair.la
467 %{_libdir}/libuutil.la
468 %{_libdir}/libzfs.la
469 %{_libdir}/libzfs_core.la
470 %{_libdir}/libzpool.la
471 %{_includedir}/libspl
472 %{_includedir}/libzfs
473 %{_pkgconfigdir}/libzfs.pc
474 %{_pkgconfigdir}/libzfs_core.pc
475
476 %files static
477 %defattr(644,root,root,755)
478 %{_libdir}/libnvpair.a
479 %{_libdir}/libuutil.a
480 %{_libdir}/libzfs.a
481 %{_libdir}/libzfs_core.a
482 %{_libdir}/libzpool.a
483
484 %files -n dracut-zfs
485 %defattr(644,root,root,755)
486 %doc contrib/dracut/README.dracut.markdown
487 %dir %{dracutlibdir}/modules.d/02zfsexpandknowledge
488 %attr(755,root,root) %{dracutlibdir}/modules.d/02zfsexpandknowledge/module-setup.sh
489 %dir %{dracutlibdir}/modules.d/90zfs
490 %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/export-zfs.sh
491 %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/module-setup.sh
492 %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/mount-zfs.sh
493 %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/parse-zfs.sh
494 %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/zfs-env-bootfs.service
495 %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/zfs-generator.sh
496 %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/zfs-lib.sh
497 %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/zfs-load-key.sh
498 %attr(755,root,root) %{dracutlibdir}/modules.d/90zfs/zfs-needshutdown.sh
499
500 %if %{with python2}
501 %files -n python-pyzfs
502 %defattr(644,root,root,755)
503 %doc contrib/pyzfs/README
504 %{py_sitescriptdir}/libzfs_core
505 %{py_sitescriptdir}/pyzfs-*-py*.egg-info
506 %endif
507
508 %if %{with python3}
509 %files -n python3-pyzfs
510 %defattr(644,root,root,755)
511 %doc contrib/pyzfs/README
512 %{py3_sitescriptdir}/libzfs_core
513 %{py3_sitescriptdir}/pyzfs-*-py*.egg-info
514 %endif
515 %endif
516
517 %if %{with kernel}
518 %files -n kernel-zfs-common-devel
519 %defattr(644,root,root,755)
520 %dir /usr/src/zfs-%{version}
521 /usr/src/zfs-%{version}/include
522 /usr/src/zfs-%{version}/zfs.release
523 /usr/src/zfs-%{version}/zfs_config.h
524 %endif
This page took 0.06731 seconds and 2 git commands to generate.