]> git.pld-linux.org Git - packages/pcl.git/blame - pcl.spec
- up to 1.9.1
[packages/pcl.git] / pcl.spec
CommitLineData
4c0e3b4c 1# TODO: MPI, ROS?
ca4db9a4
JB
2#
3# Conditional build:
4c0e3b4c 4%bcond_without apidocs # do not build and package API docs
0a13f061 5%bcond_without fzapi # Fotonic FZ API support
40dd16fa 6%bcond_with sse # SSE/SSE2/SSE3 support
dbd80059 7%bcond_with tawara # Tawara video output (pcl_video)
4c0e3b4c 8%bcond_without vtk # VTK support in libpcl_{io,surface} + libpcl_{apps,visualization} libs
5bcc65ba 9
ca4db9a4
JB
10Summary: Point Cloud Library - library for point cloud processing
11Summary(pl.UTF-8): Point Cloud Library - biblioteka do operacji na chmurze punktów
12Name: pcl
f42dc93c
JR
13Version: 1.9.1
14Release: 1
ca4db9a4
JB
15License: BSD
16Group: Libraries
92237c8c 17#Source0Download: http://pointclouds.org/downloads/
40dd16fa 18Source0: https://github.com/PointCloudLibrary/pcl/archive/%{name}-%{version}.tar.gz
f42dc93c 19# Source0-md5: 4d4cfb6bf87cc1f08703deeeac1eb6e2
ca4db9a4 20URL: http://pointclouds.org/
14d7b673
JB
21BuildRequires: OpenGL-devel
22BuildRequires: OpenGL-GLU-devel
ba0740cc 23BuildRequires: OpenNI-devel
608cf0e6 24BuildRequires: OpenNI2-devel
14d7b673
JB
25BuildRequires: QtCore-devel >= 4
26BuildRequires: QtOpenGL-devel >= 4
27BuildRequires: boost-devel >= 1.43
4c0e3b4c 28BuildRequires: cmake >= 2.8
ca4db9a4 29BuildRequires: eigen3 >= 3
14d7b673 30BuildRequires: flann-devel >= 1.7.0
0a13f061 31%{?with_fzapi:BuildRequires: fz-api-devel}
ca4db9a4
JB
32BuildRequires: gcc-c++ >= 6:4.2
33BuildRequires: libgomp-devel
14d7b673
JB
34BuildRequires: libpcap-devel
35BuildRequires: libpng-devel
ca4db9a4
JB
36BuildRequires: libstdc++-devel
37BuildRequires: libusb-devel >= 1.0
f42dc93c 38BuildRequires: netcdf-cxx-devel
ca4db9a4 39BuildRequires: qhull-devel
14d7b673 40BuildRequires: qt4-build >= 4
ca4db9a4
JB
41BuildRequires: python
42BuildRequires: sed >= 4.0
0a13f061 43%{?with_tawara:BuildRequires: tawara-devel}
40dd16fa 44# FIXME: only vtk-devel is really required, the rest (java,python,tcl runtimes) only because of checks in VTK cmake files
14d7b673
JB
45%{?with_vtk:BuildRequires: vtk-devel >= 6}
46%{?with_vtk:BuildRequires: vtk-java >= 6}
47%{?with_vtk:BuildRequires: vtk-python >= 6}
48%{?with_vtk:BuildRequires: vtk-tcl >= 6}
ca4db9a4
JB
49%if %{with apidocs}
50BuildRequires: doxygen
703755e4
JR
51BuildRequires: python3-sphinxcontrib-doxylink >= 1.3
52BuildRequires: sphinx-pdg >= 1.3.3-2
233d0834 53BuildRequires: texlive-latex-ams
ca4db9a4
JB
54%endif
55BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
56
57%description
58The Point Cloud Library (PCL) is a standalone, large scale, open
59project for 3D point cloud processing.
60
61The PCL framework contains numerous state-of-the art algorithms
62including filtering, feature estimation, surface reconstruction,
63registration, model fitting and segmentation, as well as higher level
64tools for performing mapping and object recognition. Think of it as
65the Boost of 3D point cloud processing.
66
67%description -l pl.UTF-8
68Biblioteka PCL (Point Cloud Processing) to samodzielna, wielkoskalowa,
69mająca otwarte źródła biblioteka do przetwarzania chmury punktów 3D.
70
71Szkielet PCL zawiera wiele współczesnych algorytmów, obejmujących
72filtrowanie, przybliżanie cech, rekonstrukcję powierzchni,
73rejestrację, dopasowywanie modeli oraz segmentację, a także narzędzia
74wyższego poziomu do wykonywania odwzorowań oraz rozpoznawania
75obiektów. O bibliotece można myśleć jako odpowiedniku Boosta do
76przetwarzania chmury punktów 3D.
77
78%package devel
79Summary: Header files for PCL library
80Summary(pl.UTF-8): Pliki nagłówkowe biblioteki PCL
81Group: Development/Libraries
82Requires: %{name} = %{version}-%{release}
14d7b673 83Requires: boost-devel >= 1.44
9d7b02db 84Requires: eigen3 >= 3
14d7b673 85%{?with_vtk:Requires: vtk-devel >= 6}
ca4db9a4
JB
86
87%description devel
88Header files for PCL library.
89
90%description devel -l pl.UTF-8
91Pliki nagłówkowe biblioteki PCL.
92
93%package apidocs
94Summary: PCL API documentation and tutorials
95Summary(pl.UTF-8): Dokumentacja API oraz wprowadzenie do biblioteki PCL
96Group: Documentation
5bcc65ba
ER
97%if "%{_rpmversion}" >= "5"
98BuildArch: noarch
99%endif
ca4db9a4
JB
100
101%description apidocs
102API documentation and tutorials for PCL library.
103
104%description apidocs -l pl.UTF-8
105Dokumentacja API oraz wprowadzenie do biblioteki PCL.
106
107%prep
40dd16fa 108%setup -q -n pcl-pcl-%{version}
ca4db9a4
JB
109
110%build
111mkdir build
112cd build
bc8fb1e0
JB
113# LIB_INSTALL_DIR specified by PLD cmake macro is incompatible with what PCL expects
114%cmake .. \
40dd16fa 115 -DLIB_INSTALL_DIR=%{_lib} \
0a13f061
JB
116%if %{with fzapi}
117 -DFZAPI_DIR=/usr \
118 -DFZAPI_INCLUDE_DIR=/usr/include \
119 -DFZAPI_LIBS=%{_libdir}/libfz_api.so \
6448c801
AM
120%endif
121%if %{with apidocs}
122 -DWITH_DOCS=ON \
123 -DWITH_TUTORIALS=ON \
0a13f061 124%endif
40dd16fa 125 %{!?with_sse:-DPCL_ENABLE_SSE=OFF}
e0ef7a16
JB
126
127# NOTE: -j1 because of OOM on th-x86_64
128%{__make} -j1
ca4db9a4 129
ca4db9a4
JB
130%install
131rm -rf $RPM_BUILD_ROOT
132
133%{__make} -C build install \
134 DESTDIR=$RPM_BUILD_ROOT
135
136%clean
137rm -rf $RPM_BUILD_ROOT
138
139%post -p /sbin/ldconfig
140%postun -p /sbin/ldconfig
141
142%files
143%defattr(644,root,root,755)
144%doc AUTHORS.txt LICENSE.txt
6448c801 145%attr(755,root,root) %{_bindir}/pcl_compute_hausdorff
40dd16fa
JB
146%attr(755,root,root) %{_bindir}/pcl_compute_hull
147%attr(755,root,root) %{_bindir}/pcl_concatenate_points_pcd
f42dc93c 148%attr(755,root,root) %{_bindir}/pcl_converter
92237c8c 149%attr(755,root,root) %{_bindir}/pcl_convert_pcd_ascii_binary
f42dc93c 150%attr(755,root,root) %{_bindir}/pcl_crf_segmentation
40dd16fa
JB
151%attr(755,root,root) %{_bindir}/pcl_demean_cloud
152%attr(755,root,root) %{_bindir}/pcl_fast_bilateral_filter
6448c801
AM
153%attr(755,root,root) %{_bindir}/pcl_generate
154%attr(755,root,root) %{_bindir}/pcl_grid_min
40dd16fa
JB
155%attr(755,root,root) %{_bindir}/pcl_hdl_grabber
156%attr(755,root,root) %{_bindir}/pcl_linemod_detection
6448c801 157%attr(755,root,root) %{_bindir}/pcl_local_max
40dd16fa
JB
158%attr(755,root,root) %{_bindir}/pcl_lum
159%attr(755,root,root) %{_bindir}/pcl_match_linemod_template
6448c801 160%attr(755,root,root) %{_bindir}/pcl_morph
40dd16fa
JB
161%attr(755,root,root) %{_bindir}/pcl_ndt2d
162%attr(755,root,root) %{_bindir}/pcl_ndt3d
6448c801 163%attr(755,root,root) %{_bindir}/pcl_obj2pcd
f42dc93c 164%attr(755,root,root) %{_bindir}/pcl_obj2ply
40dd16fa 165%attr(755,root,root) %{_bindir}/pcl_oni2pcd
f42dc93c 166%attr(755,root,root) %{_bindir}/pcl_openni2_viewer
40dd16fa 167%attr(755,root,root) %{_bindir}/pcl_openni_grabber_depth_example
92237c8c 168%attr(755,root,root) %{_bindir}/pcl_openni_grabber_example
40dd16fa
JB
169%attr(755,root,root) %{_bindir}/pcl_openni_pcd_recorder
170%attr(755,root,root) %{_bindir}/pcl_outofcore_print
171%attr(755,root,root) %{_bindir}/pcl_outofcore_process
172%attr(755,root,root) %{_bindir}/pcl_outofcore_viewer
173%attr(755,root,root) %{_bindir}/pcl_pcd_change_viewpoint
92237c8c 174%attr(755,root,root) %{_bindir}/pcl_pcd_convert_NaN_nan
f42dc93c 175%attr(755,root,root) %{_bindir}/pcl_pcd_introduce_nan
40dd16fa 176%attr(755,root,root) %{_bindir}/pcl_pclzf2pcd
92237c8c
JB
177%attr(755,root,root) %{_bindir}/pcl_ply2obj
178%attr(755,root,root) %{_bindir}/pcl_ply2ply
179%attr(755,root,root) %{_bindir}/pcl_ply2raw
180%attr(755,root,root) %{_bindir}/pcl_plyheader
6448c801 181%attr(755,root,root) %{_bindir}/pcl_progressive_morphological_filter
40dd16fa
JB
182%attr(755,root,root) %{_bindir}/pcl_radius_filter
183%attr(755,root,root) %{_bindir}/pcl_sac_segmentation_plane
184%attr(755,root,root) %{_bindir}/pcl_train_linemod_template
f42dc93c
JR
185%attr(755,root,root) %{_bindir}/pcl_train_unary_classifier
186%attr(755,root,root) %{_bindir}/pcl_unary_classifier_segment
40dd16fa 187%attr(755,root,root) %{_bindir}/pcl_uniform_sampling
f42dc93c 188%attr(755,root,root) %{_bindir}/pcl_vlp_viewer
40dd16fa 189%attr(755,root,root) %{_bindir}/pcl_xyz2pcd
4c0e3b4c 190%if %{with vtk}
4c0e3b4c
JB
191%attr(755,root,root) %{_bindir}/pcl_add_gaussian_noise
192%attr(755,root,root) %{_bindir}/pcl_boundary_estimation
193%attr(755,root,root) %{_bindir}/pcl_cluster_extraction
194%attr(755,root,root) %{_bindir}/pcl_compute_cloud_error
195%attr(755,root,root) %{_bindir}/pcl_crop_to_hull
196%attr(755,root,root) %{_bindir}/pcl_elch
197%attr(755,root,root) %{_bindir}/pcl_extract_feature
4c0e3b4c
JB
198%attr(755,root,root) %{_bindir}/pcl_fpfh_estimation
199%attr(755,root,root) %{_bindir}/pcl_gp3_surface
40dd16fa
JB
200%attr(755,root,root) %{_bindir}/pcl_ground_based_rgbd_people_detector
201%attr(755,root,root) %{_bindir}/pcl_hdl_viewer_simple
4c0e3b4c
JB
202%attr(755,root,root) %{_bindir}/pcl_icp
203%attr(755,root,root) %{_bindir}/pcl_icp2d
40dd16fa
JB
204%attr(755,root,root) %{_bindir}/pcl_image_grabber_saver
205%attr(755,root,root) %{_bindir}/pcl_image_grabber_viewer
4c0e3b4c
JB
206%attr(755,root,root) %{_bindir}/pcl_marching_cubes_reconstruction
207%attr(755,root,root) %{_bindir}/pcl_mesh2pcd
208%attr(755,root,root) %{_bindir}/pcl_mesh_sampling
209%attr(755,root,root) %{_bindir}/pcl_mls_smoothing
4c0e3b4c 210%attr(755,root,root) %{_bindir}/pcl_normal_estimation
40dd16fa
JB
211%attr(755,root,root) %{_bindir}/pcl_obj2vtk
212%attr(755,root,root) %{_bindir}/pcl_obj_rec_ransac_accepted_hypotheses
213%attr(755,root,root) %{_bindir}/pcl_obj_rec_ransac_hash_table
214%attr(755,root,root) %{_bindir}/pcl_obj_rec_ransac_model_opps
215%attr(755,root,root) %{_bindir}/pcl_obj_rec_ransac_orr_octree
216%attr(755,root,root) %{_bindir}/pcl_obj_rec_ransac_orr_octree_zprojection
217%attr(755,root,root) %{_bindir}/pcl_obj_rec_ransac_result
218%attr(755,root,root) %{_bindir}/pcl_obj_rec_ransac_scene_opps
4c0e3b4c 219%attr(755,root,root) %{_bindir}/pcl_octree_viewer
40dd16fa
JB
220%attr(755,root,root) %{_bindir}/pcl_oni_viewer
221%attr(755,root,root) %{_bindir}/pcl_openni_image
4c0e3b4c 222%attr(755,root,root) %{_bindir}/pcl_openni_save_image
40dd16fa
JB
223%attr(755,root,root) %{_bindir}/pcl_openni_viewer
224%attr(755,root,root) %{_bindir}/pcl_organized_pcd_to_png
4c0e3b4c
JB
225%attr(755,root,root) %{_bindir}/pcl_outlier_removal
226%attr(755,root,root) %{_bindir}/pcl_passthrough_filter
227%attr(755,root,root) %{_bindir}/pcl_pcd2ply
0df594f4 228%attr(755,root,root) %{_bindir}/pcl_pcd2png
4c0e3b4c 229%attr(755,root,root) %{_bindir}/pcl_pcd2vtk
40dd16fa
JB
230%attr(755,root,root) %{_bindir}/pcl_pcd_grabber_viewer
231%attr(755,root,root) %{_bindir}/pcl_pcd_image_viewer
4c0e3b4c
JB
232%attr(755,root,root) %{_bindir}/pcl_plane_projection
233%attr(755,root,root) %{_bindir}/pcl_ply2pcd
40dd16fa
JB
234%attr(755,root,root) %{_bindir}/pcl_ply2vtk
235%attr(755,root,root) %{_bindir}/pcl_png2pcd
4c0e3b4c 236%attr(755,root,root) %{_bindir}/pcl_poisson_reconstruction
4c0e3b4c
JB
237%attr(755,root,root) %{_bindir}/pcl_registration_visualizer
238%attr(755,root,root) %{_bindir}/pcl_spin_estimation
40dd16fa
JB
239%attr(755,root,root) %{_bindir}/pcl_tiff2pcd
240%attr(755,root,root) %{_bindir}/pcl_timed_trigger_test
4c0e3b4c
JB
241%attr(755,root,root) %{_bindir}/pcl_transform_from_viewpoint
242%attr(755,root,root) %{_bindir}/pcl_transform_point_cloud
243%attr(755,root,root) %{_bindir}/pcl_vfh_estimation
233d0834 244%if %{with tawara}
b58bf143
JR
245%attr(755,root,root) %{_bindir}/pcl_video
246%endif
40dd16fa 247%attr(755,root,root) %{_bindir}/pcl_viewer
4c0e3b4c
JB
248%attr(755,root,root) %{_bindir}/pcl_virtual_scanner
249%attr(755,root,root) %{_bindir}/pcl_voxel_grid
40dd16fa
JB
250%attr(755,root,root) %{_bindir}/pcl_voxel_grid_occlusion_estimation
251%attr(755,root,root) %{_bindir}/pcl_vtk2obj
252%attr(755,root,root) %{_bindir}/pcl_vtk2pcd
253%attr(755,root,root) %{_bindir}/pcl_vtk2ply
4c0e3b4c 254%endif
ca4db9a4 255%attr(755,root,root) %{_libdir}/libpcl_common.so.*.*.*
f42dc93c 256%attr(755,root,root) %ghost %{_libdir}/libpcl_common.so.1.9
ca4db9a4 257%attr(755,root,root) %{_libdir}/libpcl_features.so.*.*.*
f42dc93c 258%attr(755,root,root) %ghost %{_libdir}/libpcl_features.so.1.9
ca4db9a4 259%attr(755,root,root) %{_libdir}/libpcl_filters.so.*.*.*
f42dc93c 260%attr(755,root,root) %ghost %{_libdir}/libpcl_filters.so.1.9
ca4db9a4 261%attr(755,root,root) %{_libdir}/libpcl_io.so.*.*.*
f42dc93c 262%attr(755,root,root) %ghost %{_libdir}/libpcl_io.so.1.9
92237c8c 263%attr(755,root,root) %{_libdir}/libpcl_io_ply.so.*.*.*
f42dc93c 264%attr(755,root,root) %ghost %{_libdir}/libpcl_io_ply.so.1.9
ca4db9a4 265%attr(755,root,root) %{_libdir}/libpcl_kdtree.so.*.*.*
f42dc93c 266%attr(755,root,root) %ghost %{_libdir}/libpcl_kdtree.so.1.9
ca4db9a4 267%attr(755,root,root) %{_libdir}/libpcl_keypoints.so.*.*.*
f42dc93c 268%attr(755,root,root) %ghost %{_libdir}/libpcl_keypoints.so.1.9
ca4db9a4 269%attr(755,root,root) %{_libdir}/libpcl_octree.so.*.*.*
f42dc93c 270%attr(755,root,root) %ghost %{_libdir}/libpcl_octree.so.1.9
40dd16fa 271%attr(755,root,root) %{_libdir}/libpcl_outofcore.so.*.*.*
f42dc93c 272%attr(755,root,root) %ghost %{_libdir}/libpcl_outofcore.so.1.9
40dd16fa 273%attr(755,root,root) %{_libdir}/libpcl_recognition.so.*.*.*
f42dc93c 274%attr(755,root,root) %ghost %{_libdir}/libpcl_recognition.so.1.9
ca4db9a4 275%attr(755,root,root) %{_libdir}/libpcl_registration.so.*.*.*
f42dc93c 276%attr(755,root,root) %ghost %{_libdir}/libpcl_registration.so.1.9
ca4db9a4 277%attr(755,root,root) %{_libdir}/libpcl_sample_consensus.so.*.*.*
f42dc93c 278%attr(755,root,root) %ghost %{_libdir}/libpcl_sample_consensus.so.1.9
ca4db9a4 279%attr(755,root,root) %{_libdir}/libpcl_search.so.*.*.*
f42dc93c 280%attr(755,root,root) %ghost %{_libdir}/libpcl_search.so.1.9
ca4db9a4 281%attr(755,root,root) %{_libdir}/libpcl_segmentation.so.*.*.*
f42dc93c 282%attr(755,root,root) %ghost %{_libdir}/libpcl_segmentation.so.1.9
ca4db9a4 283%attr(755,root,root) %{_libdir}/libpcl_surface.so.*.*.*
f42dc93c 284%attr(755,root,root) %ghost %{_libdir}/libpcl_surface.so.1.9
92237c8c 285%attr(755,root,root) %{_libdir}/libpcl_tracking.so.*.*.*
f42dc93c
JR
286%attr(755,root,root) %ghost %{_libdir}/libpcl_tracking.so.1.9
287%attr(755,root,root) %{_libdir}/libpcl_ml.so.*.*.*
288%attr(755,root,root) %ghost %{_libdir}/libpcl_ml.so.1.9
289%attr(755,root,root) %{_libdir}/libpcl_stereo.so.*.*.*
290%attr(755,root,root) %ghost %{_libdir}/libpcl_stereo.so.1.9
4c0e3b4c 291%if %{with vtk}
40dd16fa 292%attr(755,root,root) %{_libdir}/libpcl_people.so.*.*.*
f42dc93c 293%attr(755,root,root) %ghost %{_libdir}/libpcl_people.so.1.9
4c0e3b4c 294%attr(755,root,root) %{_libdir}/libpcl_visualization.so.*.*.*
f42dc93c 295%attr(755,root,root) %ghost %{_libdir}/libpcl_visualization.so.1.9
4c0e3b4c 296%endif
ca4db9a4
JB
297
298%files devel
299%defattr(644,root,root,755)
300%attr(755,root,root) %{_libdir}/libpcl_common.so
301%attr(755,root,root) %{_libdir}/libpcl_features.so
302%attr(755,root,root) %{_libdir}/libpcl_filters.so
92237c8c 303%attr(755,root,root) %{_libdir}/libpcl_io_ply.so
f42dc93c 304%attr(755,root,root) %{_libdir}/libpcl_io.so
ca4db9a4
JB
305%attr(755,root,root) %{_libdir}/libpcl_kdtree.so
306%attr(755,root,root) %{_libdir}/libpcl_keypoints.so
f42dc93c 307%attr(755,root,root) %{_libdir}/libpcl_ml.so
ca4db9a4 308%attr(755,root,root) %{_libdir}/libpcl_octree.so
40dd16fa
JB
309%attr(755,root,root) %{_libdir}/libpcl_outofcore.so
310%attr(755,root,root) %{_libdir}/libpcl_recognition.so
ca4db9a4
JB
311%attr(755,root,root) %{_libdir}/libpcl_registration.so
312%attr(755,root,root) %{_libdir}/libpcl_sample_consensus.so
313%attr(755,root,root) %{_libdir}/libpcl_search.so
314%attr(755,root,root) %{_libdir}/libpcl_segmentation.so
f42dc93c 315%attr(755,root,root) %{_libdir}/libpcl_stereo.so
ca4db9a4 316%attr(755,root,root) %{_libdir}/libpcl_surface.so
92237c8c 317%attr(755,root,root) %{_libdir}/libpcl_tracking.so
4c0e3b4c 318%if %{with vtk}
40dd16fa 319%attr(755,root,root) %{_libdir}/libpcl_people.so
4c0e3b4c
JB
320%attr(755,root,root) %{_libdir}/libpcl_visualization.so
321%endif
f42dc93c
JR
322%{_includedir}/pcl-1.9
323%{_pkgconfigdir}/pcl_common-1.9.pc
324%{_pkgconfigdir}/pcl_features-1.9.pc
325%{_pkgconfigdir}/pcl_filters-1.9.pc
326%{_pkgconfigdir}/pcl_geometry-1.9.pc
327%{_pkgconfigdir}/pcl_io-1.9.pc
328%{_pkgconfigdir}/pcl_kdtree-1.9.pc
329%{_pkgconfigdir}/pcl_keypoints-1.9.pc
330%{_pkgconfigdir}/pcl_octree-1.9.pc
331%{_pkgconfigdir}/pcl_outofcore-1.9.pc
332%{_pkgconfigdir}/pcl_recognition-1.9.pc
333%{_pkgconfigdir}/pcl_registration-1.9.pc
334%{_pkgconfigdir}/pcl_sample_consensus-1.9.pc
335%{_pkgconfigdir}/pcl_search-1.9.pc
336%{_pkgconfigdir}/pcl_segmentation-1.9.pc
337%{_pkgconfigdir}/pcl_surface-1.9.pc
338%{_pkgconfigdir}/pcl_tracking-1.9.pc
339%{_pkgconfigdir}/pcl_2d-1.9.pc
340%{_pkgconfigdir}/pcl_ml-1.9.pc
341%{_pkgconfigdir}/pcl_stereo-1.9.pc
4c0e3b4c 342%if %{with vtk}
f42dc93c
JR
343%{_pkgconfigdir}/pcl_people-1.9.pc
344%{_pkgconfigdir}/pcl_visualization-1.9.pc
4c0e3b4c 345%endif
f42dc93c
JR
346%dir %{_datadir}/pcl-1.9
347%{_datadir}/pcl-1.9/PCLConfig*.cmake
ca4db9a4
JB
348
349%if %{with apidocs}
350%files apidocs
351%defattr(644,root,root,755)
f42dc93c
JR
352%dir %{_docdir}/pcl-1.9
353%{_docdir}/pcl-1.9/advanced
354%{_docdir}/pcl-1.9/html
355%{_docdir}/pcl-1.9/tutorials
ca4db9a4 356%endif
This page took 0.151882 seconds and 4 git commands to generate.