FreeCAD

Форк
0
/
freecad.spec 
355 строк · 11.5 Кб
1
# This package depends on automagic byte compilation
2
# https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_3
3
%global py_bytecompile 1
4

5
# Setup python target for shiboken so the right cmake file is imported.
6
%global py_suffix %(%{__python3} -c "import sysconfig; print(sysconfig.get_config_var('SOABI'))")
7

8
# Maintainers:  keep this list of plugins up to date
9
# List plugins in %%{_libdir}/%{name}/lib, less '.so' and 'Gui.so', here
10
%global plugins Fem FreeCAD PathApp Import Inspection Mesh MeshPart Part Points ReverseEngineering Robot Sketcher Start Web PartDesignGui _PartDesign Path PathGui Spreadsheet SpreadsheetGui area DraftUtils DraftUtils libDriver libDriverDAT libDriverSTL libDriverUNV libE57Format libMEFISTO2 libSMDS libSMESH libSMESHDS libStdMeshers Measure TechDraw TechDrawGui libarea-native Surface SurfaceGui AssemblyGui flatmesh QtUnitGui PathSimulator MatGui Material
11

12

13
# Some configuration options for other environments
14
# rpmbuild --with=bundled_zipios:  use bundled version of zipios++
15
%global bundled_zipios %{?_with_bundled_zipios: 1} %{?!_with_bundled_zipios: 1}
16
# rpmbuild --without=bundled_pycxx:  don't use bundled version of pycxx
17
%global bundled_pycxx %{?_without_bundled_pycxx: 0} %{?!_without_bundled_pycxx: 1}
18
# rpmbuild --without=bundled_smesh:  don't use bundled version of Salome's Mesh
19
%global bundled_smesh %{?_without_bundled_smesh: 0} %{?!_without_bundled_smesh: 1}
20

21

22
# Prevent RPM from doing its magical 'build' directory for now
23
%global __cmake_in_source_build 0
24

25
# See FreeCAD-main/src/3rdParty/salomesmesh/CMakeLists.txt to find this out.
26
%global bundled_smesh_version 7.7.1.0
27

28
# Some plugins go in the Mod folder instead of lib. Deal with those here:
29
%global mod_plugins Mod/PartDesign
30
%define name freecad
31
%define github_name FreeCAD
32
%define branch main
33

34
Name:           %{name}
35
Epoch:          1
36
Version:        0.22
37
Release:        pre_{{{git_commit_no}}}%{?dist}
38
Summary:        A general purpose 3D CAD modeler
39
Group:          Applications/Engineering
40

41
License:        LGPLv2+
42
URL:            https://www.freecad.org/
43
Source0:        https://github.com/%{github_name}/FreeCAD/archive/%{branch}.tar.gz
44

45

46
# Utilities
47
BuildRequires:  cmake gcc-c++ gettext
48
BuildRequires:  doxygen swig graphviz
49
BuildRequires:  gcc-gfortran
50
BuildRequires:  desktop-file-utils
51
BuildRequires:  git
52

53
BuildRequires:  tbb-devel
54

55
# Development Libraries
56
BuildRequires:  freeimage-devel
57
BuildRequires:  libXmu-devel
58
BuildRequires:  mesa-libEGL-devel
59
BuildRequires:  mesa-libGLU-devel
60
BuildRequires:  opencascade-devel
61
BuildRequires:  Coin4-devel
62
BuildRequires:  python3-devel
63
BuildRequires:  python3-matplotlib
64
BuildRequires:  python3-pivy
65
BuildRequires:  boost-devel
66
BuildRequires:  boost-python3-devel
67
BuildRequires:  eigen3-devel
68
# Qt5 dependencies
69
\BuildRequires:  qt5-qtsvg-devel
70
BuildRequires:  qt5-qttools-static
71

72
BuildRequires:  fmt-devel
73

74

75
BuildRequires:  xerces-c
76
BuildRequires:  xerces-c-devel
77
BuildRequires:  libspnav-devel
78
BuildRequires:  python3-shiboken2-devel
79
BuildRequires:  python3-pyside2-devel
80
BuildRequires:  pyside2-tools
81
%if ! %{bundled_smesh}
82
BuildRequires:  smesh-devel
83
%endif
84
BuildRequires:  netgen-mesher-devel
85
BuildRequires:  netgen-mesher-devel-private
86
%if ! %{bundled_zipios}
87
BuildRequires:  zipios++-devel
88
%endif
89

90
%if ! %{bundled_pycxx}
91
BuildRequires:  python3-pycxx-devel
92
%endif
93
BuildRequires:  libicu-devel
94
BuildRequires:  vtk-devel
95
BuildRequires:  openmpi-devel
96
BuildRequires:  med-devel
97
BuildRequires:  libkdtree++-devel
98

99
BuildRequires:  pcl-devel
100
BuildRequires:  python3
101
BuildRequires:  libglvnd-devel
102
BuildRequires:  yaml-cpp-devel
103
#BuildRequires:  zlib-devel
104

105
# For appdata
106
%if 0%{?fedora}
107
BuildRequires:  libappstream-glib
108
%endif
109

110
# Packages separated because they are noarch, but not optional so require them
111
# here.
112
Requires:       %{name}-data = %{epoch}:%{version}-%{release}
113
# Obsolete old doc package since it's required for functionality.
114
Obsoletes:      %{name}-doc < 0.13-5
115
Requires:       hicolor-icon-theme
116

117
Requires:       fmt
118

119
Requires:       python3-pivy
120
Requires:       python3-matplotlib
121
Requires:       python3-collada
122
Requires:       python3-pyside2
123
Requires:       qt5-assistant
124

125
%if %{bundled_smesh}
126
Provides:       bundled(smesh) = %{bundled_smesh_version}
127
%endif
128
%if %{bundled_pycxx}
129
Provides:       bundled(python-pycxx)
130
%endif
131
Recommends:     python3-pysolar
132

133

134

135
# plugins and private shared libs in %%{_libdir}/freecad/lib are private;
136
# prevent private capabilities being advertised in Provides/Requires
137
%define plugin_regexp /^\\\(libFreeCAD.*%(for i in %{plugins}; do echo -n "\\\|$i\\\|$iGui"; done)\\\)\\\(\\\|Gui\\\)\\.so/d
138
%{?filter_setup:
139
%filter_provides_in %{_libdir}/%{name}/lib
140
%filter_from_requires %{plugin_regexp}
141
%filter_from_provides %{plugin_regexp}
142
%filter_provides_in %{_libdir}/%{name}/Mod
143
%filter_requires_in %{_libdir}/%{name}/Mod
144
%filter_setup
145
}
146

147
%description
148
FreeCAD is a general purpose Open Source 3D CAD/MCAD/CAx/CAE/PLM modeler, aimed
149
directly at mechanical engineering and product design but also fits a wider
150
range of uses in engineering, such as architecture or other engineering
151
specialities. It is a feature-based parametric modeler with a modular software
152
architecture which makes it easy to provide additional functionality without
153
modifying the core system.
154

155

156
%package data
157
Summary:        Data files for FreeCAD
158
BuildArch:      noarch
159
Requires:       %{name} = %{epoch}:%{version}-%{release}
160

161
%description data
162
Data files for FreeCAD
163

164

165
%prep
166
%autosetup -p1 -n FreeCAD-%{branch}
167
# Remove bundled pycxx if we're not using it
168
%if ! %{bundled_pycxx}
169
rm -rf src/CXX
170
%endif
171

172
%if ! %{bundled_zipios}
173
rm -rf src/zipios++
174
#sed -i "s/zipios-config.h/zipios-config.hpp/g" \
175
#    src/Base/Reader.cpp src/Base/Writer.h
176
%endif
177

178
# Removed bundled libraries
179

180
%build
181
rm -rf build && mkdir build && cd build
182

183
# Deal with cmake projects that tend to link excessively.
184
CXXFLAGS='-Wno-error=cast-function-type'; export CXXFLAGS
185
LDFLAGS='-Wl,--as-needed -Wl,--no-undefined'; export LDFLAGS
186

187
%if 0%{?fedora} > 27
188
%define MEDFILE_INCLUDE_DIRS %{_includedir}/med/
189
%else
190
%define MEDFILE_INCLUDE_DIRS %{_includedir}/
191
%endif
192

193
%cmake \
194
       -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \
195
       -DCMAKE_INSTALL_DATADIR=%{_datadir}/%{name} \
196
       -DCMAKE_INSTALL_DOCDIR=%{_docdir}/%{name} \
197
       -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \
198
       -DRESOURCEDIR=%{_datadir}/%{name} \
199
       -DFREECAD_USE_EXTERNAL_PIVY=TRUE \
200
       -DFREECAD_USE_PCL=TRUE \
201
       -DBUILD_QT5=ON \
202
       -DSHIBOKEN_INCLUDE_DIR=%{_includedir}/shiboken2 \
203
       -DSHIBOKEN_LIBRARY=-lshiboken2.%{py_suffix} \
204
       -DPYTHON_SUFFIX=.%{py_suffix} \
205
       -DPYSIDE_INCLUDE_DIR=/usr/include/PySide2 \
206
       -DPYSIDE_LIBRARY=-lpyside2.%{py_suffix} \
207
       -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \
208
       -DMEDFILE_INCLUDE_DIRS=%{MEDFILE_INCLUDE_DIRS} \
209
       -DOpenGL_GL_PREFERENCE=GLVND \
210
       -DCOIN3D_INCLUDE_DIR=%{_includedir}/Coin4 \
211
       -DCOIN3D_DOC_PATH=%{_datadir}/Coin4/Coin \
212
       -DUSE_OCC=TRUE \
213
%if ! %{bundled_smesh}
214
       -DFREECAD_USE_EXTERNAL_SMESH=TRUE \
215
       -DSMESH_FOUND=TRUE \
216
       -DSMESH_INCLUDE_DIR=%{_includedir}/smesh \
217
       -DSMESH_DIR=`pwd`/../cMake \
218
%endif
219
%if ! %{bundled_zipios}
220
       -DFREECAD_USE_EXTERNAL_ZIPIOS=TRUE \
221
%endif
222
%if ! %{bundled_pycxx}
223
       -DPYCXX_INCLUDE_DIR=$(pkg-config --variable=includedir PyCXX) \
224
       -DPYCXX_SOURCE_DIR=$(pkg-config --variable=srcdir PyCXX) \
225
%endif
226
       -DPACKAGE_WCREF="%{release} (Git)" \
227
       -DPACKAGE_WCURL="git://github.com/%{github_name}/FreeCAD.git main" \
228
       -DENABLE_DEVELOPER_TESTS=FALSE \
229
	   -DBUILD_GUI=TRUE \
230
       ../
231

232
make fc_version
233
for I in src/Build/Version.h src/Build/Version.h.out; do
234
	sed -i 's,FCRevision      \"Unknown\",FCRevision      \"%{release} (Git)\",' $I
235
	sed -i 's,FCRepositoryURL \"Unknown\",FCRepositoryURL \"git://github.com/FreeCAD/FreeCAD.git main\",' $I
236
done
237

238
%{make_build}
239

240
%install
241
cd build
242
%make_install
243

244
# Symlink binaries to /usr/bin
245
mkdir -p %{buildroot}%{_bindir}
246
ln -s ../%{_lib}/%{name}/bin/FreeCAD %{buildroot}%{_bindir}/FreeCAD
247
ln -s ../%{_lib}/%{name}/bin/FreeCADCmd %{buildroot}%{_bindir}/FreeCADCmd
248

249
mkdir %{buildroot}%{_metainfodir}/
250
mv %{buildroot}%{_libdir}/%{name}/share/metainfo/* %{buildroot}%{_metainfodir}/
251

252
mkdir %{buildroot}%{_datadir}/applications/
253
mv %{buildroot}%{_libdir}/%{name}/share/applications/* %{buildroot}%{_datadir}/applications/
254

255

256
mkdir -p %{buildroot}%{_datadir}/thumbnailers/
257
mv %{buildroot}%{_libdir}/%{name}/share/thumbnailers/* %{buildroot}%{_datadir}/thumbnailers/
258

259
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/
260
mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/* %{buildroot}%{_datadir}/icons/hicolor/scalable/
261

262
mkdir -p %{buildroot}%{_datadir}/pixmaps/
263
mv %{buildroot}%{_libdir}/%{name}/share/pixmaps/* %{buildroot}%{_datadir}/pixmaps/
264

265
mkdir -p %{buildroot}%{_datadir}/mime/packages/
266
mv %{buildroot}%{_libdir}/%{name}/share/mime/packages/* %{buildroot}%{_datadir}/mime/packages/
267

268
pushd %{buildroot}%{_libdir}/%{name}/share/
269
rmdir metainfo/
270
rmdir applications/
271
rm -rf mime
272
rm -rf icons
273
popd
274

275
# Remove obsolete Start_Page.html
276
rm -f %{buildroot}%{_docdir}/%{name}/Start_Page.html
277
# Belongs in %%license not %%doc
278
rm -f %{buildroot}%{_docdir}/freecad/ThirdPartyLibraries.html
279

280
# Remove header from external library that's erroneously installed
281
rm -f %{buildroot}%{_libdir}/%{name}/include/E57Format/E57Export.h
282

283
# Bug maintainers to keep %%{plugins} macro up to date.
284
#
285
# Make sure there are no plugins that need to be added to plugins macro
286
new_plugins=`ls %{buildroot}%{_libdir}/%{name}/%{_lib} | sed -e  '%{plugin_regexp}'`
287
if [ -n "$new_plugins" ]; then
288
    echo -e "\n\n\n**** ERROR:\n" \
289
        "\nPlugins not caught by regexp:  " $new_plugins \
290
        "\n\nPlugins in %{_libdir}/%{name}/lib do not exist in" \
291
         "\nspecfile %%{plugins} macro.  Please add these to" \
292
         "\n%%{plugins} macro at top of specfile and rebuild.\n****\n" 1>&2
293
    exit 1
294
fi
295
# Make sure there are no entries in the plugins macro that don't match plugins
296
for p in %{plugins}; do
297
    if [ -z "`ls %{buildroot}%{_libdir}/%{name}/%{_lib}/$p*.so`" ]; then
298
        set +x
299
        echo -e "\n\n\n**** ERROR:\n" \
300
             "\nExtra entry in %%{plugins} macro with no matching plugin:" \
301
             "'$p'.\n\nPlease remove from %%{plugins} macro at top of" \
302
             "\nspecfile and rebuild.\n****\n" 1>&2
303
        exit 1
304
    fi
305
done
306

307
# Bytecompile Python modules
308
%py_byte_compile %{__python3} %{buildroot}%{_libdir}/%{name}
309

310

311
%check
312
desktop-file-validate \
313
    %{buildroot}%{_datadir}/applications/org.freecad.FreeCAD.desktop
314
%{?fedora:appstream-util validate-relax --nonet \
315
    %{buildroot}%{_metainfodir}/*.metainfo.xml}
316

317

318
%post
319
/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
320
/usr/bin/update-desktop-database &> /dev/null || :
321
/usr/bin/update-mime-database %{_datadir}/mime &> /dev/null || :
322

323
%postun
324
if [ $1 -eq 0 ] ; then
325
    /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null
326
    /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
327
fi
328
/usr/bin/update-desktop-database &> /dev/null || :
329
/usr/bin/update-mime-database %{_datadir}/mime &> /dev/null || :
330

331
%posttrans
332
/usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor/scalable/apps &>/dev/null || :
333

334

335
%files
336

337
%{_bindir}/*
338
%{_metainfodir}/*
339
%dir %{_libdir}/%{name}
340
%{_libdir}/%{name}/bin/
341
%{_libdir}/%{name}/%{_lib}/
342
%{_libdir}/%{name}/Ext/
343
%{_libdir}/%{name}/Mod/
344
%{_datadir}/applications/*
345
%{_datadir}/icons/hicolor/scalable/*
346
%{_datadir}/pixmaps/*
347
%{_datadir}/mime/packages/*
348
%{_datadir}/thumbnailers/*
349

350
%files data
351
%{_datadir}/%{name}/
352
%{_docdir}/%{name}/LICENSE.html
353

354

355
%changelog
356

357

358

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.