7a246137700bedcb491d56f8349948c9f09111f3
[lldb-experimental.git] / lldb-experimental.spec
1 # https://download.copr.fedorainfracloud.org/results/jankratochvil/lldb/fedora-rawhide-x86_64/01574351-lldb-experimental/builder-live.log.gz
2 # No space left on device.
3 %global fast 1
4 %global use_jankratochvil_dwz 1
5 %global use_jankratochvil_rust 0
6 %global pkg_prefix /opt/%{name}
7 %global _unpackaged_files_terminate_build 0
8 # dwz: Couldn't find DIE referenced by DW_OP_GNU_parameter_ref
9 %global _find_debuginfo_dwz_opts %{nil}
10 # *** ERROR: ambiguous python shebang in /opt/lldb-experimental/...: #!/usr/bin/env python. Change it to python3 (or python2) explicitly.
11 %global __brp_mangle_shebangs %{nil}
12 %if %{fast}
13 %global debug_package %{nil}
14 %endif
15 Name: lldb-experimental
16 Version: 12.0.0
17 Release: 0.20201026snap2%{?dist}
18 Summary: Next generation high-performance debugger - experimental trunk snapshot
19 License: NCSA
20 URL: http://lldb.llvm.org/
21 ExclusiveArch: x86_64
22 BuildRequires: gcc-c++ git libedit-devel libatomic libxml2-devel zlib-devel valgrind-devel libpfm-devel
23 # https://src.fedoraproject.org/rpms/epydoc
24 #BuildRequires: epydoc
25 %if 0%{?rhel:1} && 0%{?rhel} <= 7
26 BuildRequires: devtoolset-8-gcc-c++
27 # swig on rhel7: /builddir/build/BUILD/lldb-experimental-11.0.0/lldb/bindings/./python/python-typemaps.swig:496: Error: Syntax error in input(3).
28 BuildRequires: swig3
29 BuildRequires: rh-git218-git-core
30 BuildRequires: rh-python38-python-devel rh-python38-python-pyyaml
31 # https://bugzilla.redhat.com/show_bug.cgi?id=1511892
32 BuildRequires: cmake3
33 %global cmake %{cmake3}
34 %global cmake_build %{cmake3_build}
35 %global cmake_install %{cmake3_install}
36 %else
37 # FIXME: CentOS-8:
38 # CMake Error at CMakeLists.txt:3 (cmake_minimum_required):
39 #   CMake 3.13.4 or higher is required.  You are running version 3.11.4
40 %if 0%{?rhel} != 8
41 BuildRequires: cmake
42 %else
43 # cmake-3.17.0-1.el8:
44 BuildRequires: /usr/bin/sphinx-build curl-devel emacs jsoncpp-devel libarchive-devel openssl-devel pkgconfig(Qt5Widgets) rhash-devel
45 # [local]=https://kojipkgs.fedoraproject.org/repos/epel8-build/latest/$basearch/
46 BuildRequires: libuv-devel
47 %endif
48 BuildRequires: swig
49 BuildRequires: python3-devel python3-pygments python3-pyyaml
50 # removed in F31+
51 #BuildRequires: xar-devel
52 %if !0%{?rhel:1} || 0%{?rhel} > 8
53 BuildRequires: z3-devel
54 %endif
55 %endif
56
57 %description
58 LLDB is a next generation, high-performance debugger. It is built as a set
59 of reusable components which highly leverage existing libraries in the
60 larger LLVM Project, such as the Clang expression parser and LLVM
61 disassembler.
62 This package is an experimental trunk snapshot.
63 %if %{use_jankratochvil_dwz}
64 This package contains off-trunk DWZ support for Fedora debuginfos such as:
65   unsupported DW_FORM values: 0x1f20 0x1f21
66 %endif
67 %if %{use_jankratochvil_rust}
68 This package contains off-trunk Rust support:
69   https://github.com/rust-lang-nursery/lldb
70 %endif
71
72 %package devel
73 Summary: Development header files for %{name}
74 Requires: %{name}%{?_isa} = %{version}-%{release}
75
76 %description devel
77 The package contains header files for %{name}.
78
79 {-L,"-Wl,-rpath,"}%{pkg_prefix}/%{_lib} -I%{pkg_prefix}/include -llldb -lLLVMSupport -ltinfo -pthread
80
81 %ldconfig_scriptlets
82
83 %prep
84 %if 0%{?rhel:1} && 0%{?rhel} <= 7
85 # git clone --depth 10000 --single-branch --reference ../reference https://github.com/llvm/llvm-project.git .
86 # fatal: git fetch-pack: expected shallow list
87 . /opt/rh/rh-git218/enable
88 # CMake Warning at ../lldb/cmake/modules/FindPythonInterpAndLibs.cmake:10 (find_package):
89 #   By not providing "FindPython3.cmake" in CMAKE_MODULE_PATH this project has
90 #   asked CMake to find a package configuration file provided by "Python3", but
91 #   CMake did not find one.
92 #   Could not find a package configuration file provided by "Python3" with any
93 #   of the following names:
94 #     Python3Config.cmake
95 #     python3-config.cmake
96 #   Add the installation prefix of "Python3" to CMAKE_PREFIX_PATH or set
97 #   "Python3_DIR" to a directory containing one of the above files.  If
98 #   "Python3" provides a separate development package or SDK, be sure it has
99 #   been installed.
100 # Call Stack (most recent call first):
101 #   ../lldb/cmake/modules/FindPythonInterpAndLibs.cmake:71 (FindPython3)
102 #   ../lldb/cmake/modules/LLDBConfig.cmake:48 (find_package)
103 #   ../lldb/cmake/modules/LLDBConfig.cmake:59 (add_optional_dependency)
104 #   ../lldb/CMakeLists.txt:28 (include)
105 . /opt/rh/rh-python38/enable
106 %endif
107 %if 0%{?rhel} == 8
108 cmakesrc=cmake-3.17.0-1.fc32.src.rpm
109 rm -rf $cmakesrc $cmakesrc.tgz $cmakesrc.d
110 wget http://ftp.fi.muni.cz/pub/linux/fedora/linux/releases/32/Everything/source/tree/Packages/c/$cmakesrc
111 rpm2archive $cmakesrc
112 (mkdir $cmakesrc.d
113  cd $cmakesrc.d
114  tar xzf ../$cmakesrc.tgz
115  # FIXME: Why?
116  for i in .[a-z]*;do mv $i `echo $i|sed 's/^\.//'`;done
117  # -- Could NOT find LibArchive: Found unsuitable version "3.3.2", but required is at least "3.3.3" (found /usr/lib64/libarchive.so)
118  # CMAKE_USE_SYSTEM_LIBARCHIVE is ON but LibArchive is not found!
119  patch -p1 <../cmake.spec.patchx
120  rpmbuild --define "_topdir $PWD" --define "_builddir $PWD" --define "_rpmdir $PWD" --define "_sourcedir $PWD" --define "_specdir $PWD" --define "_srcrpmdir $PWD" -bc cmake.spec
121 )
122 %global __cmake %(echo %{_builddir}/cmake-*.d/cmake-*/*/bin/cmake)
123 %global __cmake_builddir .
124 %global cmake_build \
125   %__cmake --build "%{__cmake_builddir}" %{?_smp_mflags} --verbose
126 %global cmake_install \
127   DESTDIR="%{buildroot}" %__cmake --install "%{__cmake_builddir}"
128 %endif
129 %setup -q -c -T
130 OPTS="--depth 10000"
131 %if !0%{?rhel:1} || 0%{?rhel} > 7
132   OPTS="$OPTS --no-tags"
133 %endif
134 REF="reference"
135 # RHEL-7 does not support: --reference-if-able
136 CLONEOPTS="--single-branch"
137 test -d ../$REF/ && CLONEOPTS="$CLONEOPTS --reference ../$REF"
138 # 2500 = 1 month in 2019
139 git clone $OPTS $CLONEOPTS https://github.com/llvm/llvm-project.git .
140 %if %{use_jankratochvil_dwz} || %{use_jankratochvil_rust}
141 git remote remove jankratochvil || :
142 #git remote add jankratochvil git://git.jankratochvil.net/lldb
143 git remote add jankratochvil https://github.com/jankratochvil/llvm-project.git
144 git fetch $OPTS jankratochvil
145 git config user.email jankratochvil@copr.fedorainfracloud.org
146 git config user.name jankratochvil
147 %endif
148 %if %{use_jankratochvil_dwz}
149 git merge jankratochvil/dwz
150 %endif
151 %if %{use_jankratochvil_rust}
152 # '-c merge.renames=false' is F-29+.
153 # '-c merge.renameLimit=0' has no effect.
154 git -c merge.renameLimit=1 merge jankratochvil/rust
155 %endif
156
157 %build
158 FLAGS="%{optflags}"
159
160 # lldb/scripts/LLDBWrapPython.cpp:23699:70: error: format not a string literal and no format arguments [-Werror=format-security]
161 FLAGS="$FLAGS -Wno-error=format-security"
162
163 %if (0%{?rhel:1} && 0%{?rhel} <= 7)
164 . /opt/rh/devtoolset-8/enable
165 . /opt/rh/rh-python38/enable
166 # -gsplit-dwarf: LLVM: internal compiler error: in output_index_string, at dwarf2out.c:21891
167 # https://bugzilla.redhat.com/show_bug.cgi?id=1590678
168 # Set %%{fast} only after %%debug_package above.
169 %global fast 1
170 %endif
171 %if %{fast}
172 FLAGS="$FLAGS -g0"
173 %else
174 # -fno-reorder-blocks-and-partition:
175 # -gsplit-dwarf: Error: can't resolve `.text.unlikely' - `.LVL414'
176 # https://bugzilla.redhat.com/show_bug.cgi?id=1573647
177 FLAGS="$FLAGS -fdebug-types-section"
178 %endif
179
180 CFLAGS="$FLAGS"
181 CXXFLAGS="$FLAGS"
182
183 # This is default - changing it breaks the testsuite: -DLLVM_LINK_LLVM_DYLIB=OFF
184 # It does not work: -DDCMAKE_EXECUTABLE_SUFFIX=-experimental
185 # -fdebug-types-section && -DLLVM_USE_LINKER=gold:
186 # ../../../../lib64/libclangLex.a(PreprocessingRecord.cpp.o)(.debug_types+0xfe): error: undefined reference to 'clang::SourceRange::getBegin() const'
187 %cmake llvm \
188   -DCMAKE_INSTALL_PREFIX=%{pkg_prefix} \
189   -DBUILD_SHARED_LIBS=OFF \
190 %if %{fast}
191   -DCMAKE_BUILD_TYPE=Release \
192 %else
193   -DCMAKE_BUILD_TYPE=RelWithDebInfo \
194 %endif
195   -DLLVM_ENABLE_PROJECTS="lldb;clang;lld" \
196   -DLLVM_TARGETS_TO_BUILD=X86 \
197   -DLLVM_BUILD_TOOLS=OFF \
198   -DLLVM_USE_LINKER=gold \
199   $(: file INSTALL cannot find build-release/lib/python3.6 ) \
200 %if 0%{?__isa_bits} == 64
201   -DLLVM_LIBDIR_SUFFIX=64 \
202 %else
203   -DLLVM_LIBDIR_SUFFIX= \
204 %endif
205   -DLLDB_DISABLE_CURSES=OFF \
206   -DLLDB_DISABLE_LIBEDIT=OFF \
207   -DLLDB_DISABLE_PYTHON=OFF \
208   #
209 %cmake_build
210
211 %install
212 mkdir -p %{buildroot}%{pkg_prefix}
213 (function revline {
214    echo "$(cd $1;git rev-parse ${2:-origin/master}) ${2:-$1}"
215  }
216  revline .
217 %if %{use_jankratochvil_dwz}
218  revline . jankratochvil/dwz
219 %endif
220 %if %{use_jankratochvil_rust}
221  revline . jankratochvil/rust
222 %endif
223 ) >%{buildroot}%{pkg_prefix}/HEAD
224 %cmake_install
225 mkdir -p %{buildroot}%{_bindir}
226 # lldb-mi
227 for i in lldb;do
228   echo >%{buildroot}%{_bindir}/${i}-experimental -e '#! /bin/bash\nexec %{pkg_prefix}/bin/'$i' "$@"'
229   chmod +x %{buildroot}%{_bindir}/${i}-experimental
230 done
231
232 # remove static libraries
233 rm -fv %{buildroot}%{_libdir}/*.a
234
235 ### python: fix liblldb.so -> liblldb.so.7 symlink target
236 (cd %{buildroot}%{pkg_prefix}/%{_lib}/python*/site-packages/lldb/
237  ln -vsf "$(dirname $(readlink _lldb.so))/$(readlink $(readlink _lldb.so))" _lldb.so
238 )
239
240 %files
241 %{_bindir}/lldb-experimental
242 #{_bindir}/lldb-mi-experimental
243 %{pkg_prefix}/HEAD
244 %{pkg_prefix}/bin/lldb
245 %{pkg_prefix}/bin/lldb-server
246 #{pkg_prefix}/bin/lldb-mi
247 %{pkg_prefix}/bin/lldb-argdumper
248 # RHEL-7: File not found by glob: .../lib{lldb,clang,LLVM}*.so.*
249 %{pkg_prefix}/%{_lib}/libl*.so.*
250 %{pkg_prefix}/%{_lib}/python*
251
252 %files devel
253 %{pkg_prefix}/include
254 %{pkg_prefix}/%{_lib}/lib[^l]*.so.*
255 %{pkg_prefix}/%{_lib}/*.so
256 %{pkg_prefix}/%{_lib}/*.a
257
258 %changelog
259 * Thu Apr  5 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.0-0.1
260 - Initial import for COPR, based on Fedora package 'lldb'.