This message is for those of you who have expressed an interest in
packaging Facebook's Infer code analysis tool. There is now a COPR
repo available with, I think, all of the dependencies in it. Create
~/.config/mock/fedora-rawhide-infer.cfg with these contents:
```
include('/etc/mock/fedora-rawhide-x86_64.cfg')
config_opts['root'] = 'fedora-rawhide-infer'
config_opts[f'{config_opts.package_manager}.conf'] += """
[infer]
name=Copr repo for infer owned by jjames
baseurl=https://copr-be.cloud.fedoraproject.org/results/jjames/Infer/fedora-rawhide-$basearch/
type=rpm-md
skip_if_unavailable=False
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/jjames/Infer/pubkey.gpg
repo_gpgcheck=0
enabled=1
enabled_metadata=1
cost=10
"""
```
I've only just started figuring out how to package Infer itself. See
the attached spec file for what I have so far. I won't have time to
touch it again for a few days, so if any of you interested parties
want to take a stab at it, please go ahead.
Be aware that infer builds a modified version of clang, and that takes
quite awhile. Start a build, go have dinner, come back to see what
happened. :-) It would be interesting to determine whether any of
their modifications are critical; i.e., can we use the Fedora build of
clang?
I'll post a message on the ocaml-devel list regarding getting the
dependencies into Fedora.
--
Jerry James
http://www.jamezone.org/
# The latest version, 1.1.0, fails to buld. We use a git snapshot until the
# next release.
%global commit e0ecc32c37c6fe5af8e05b88f88da17006d321ed
%global date 20220304
%global forgeurl https://github.com/facebook/infer
# Infer builds a modified version of clang
%global llvm_ver 12.0.1
# LTO leads to build failures, reason unknown
%global _lto_cflags %{nil}
Name: infer
Version: 1.1.0
Summary: Static analyzer for Java, C, C++, and Objective-C
%forgemeta
Release: 1%{?dist}
License: MIT
URL: https://fbinfer.com/
Source0: %{forgesource}
Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{llvm_ver}/llvm-project-%{llvm_ver}.src.tar.xz
BuildRequires: ant
BuildRequires: autoconf
BuildRequires: cmake
BuildRequires: emacs-nox
BuildRequires: emacs-tuareg
BuildRequires: erlang-erts
BuildRequires: erlang-rebar3
BuildRequires: gcc-c++
BuildRequires: libatomic
BuildRequires: libpfm-devel
BuildRequires: libtool
BuildRequires: make
BuildRequires: maven-local
BuildRequires: mvn(com.fasterxml.jackson.core:jackson-annotations)
BuildRequires: mvn(com.fasterxml.jackson.core:jackson-core)
BuildRequires: mvn(com.fasterxml.jackson.core:jackson-databind)
BuildRequires: mvn(com.fasterxml.jackson.dataformat:jackson-dataformat-smile)
BuildRequires: mvn(com.google.guava:guava)
BuildRequires: mvn(junit:junit)
BuildRequires: mvn(org.hamcrest:hamcrest)
BuildRequires: mvn(org.jsr-305:ri)
BuildRequires: ninja-build
BuildRequires: ocaml >= 4.12.0
BuildRequires: ocaml-ansiterminal-devel >= 0.7
BuildRequires: ocaml-apron-devel >= 0.9.13
BuildRequires: ocaml-async-devel >= 0.14.0
BuildRequires: ocaml-atdgen-devel >= 2.0.0
BuildRequires: ocaml-base-devel
BuildRequires: ocaml-base64-devel >= 3.0.0
BuildRequires: ocaml-biniou-devel
BuildRequires: ocaml-cmdliner-devel >= 1.0.0
BuildRequires: ocaml-containers-data-devel
BuildRequires: ocaml-containers-devel >= 3.4
BuildRequires: ocaml-core-devel >= 0.14.0
BuildRequires: ocaml-ctypes-devel >= 0.9.2
BuildRequires: ocaml-dune >= 2.7
BuildRequires: ocaml-dune-build-info-devel
BuildRequires: ocaml-easy-format-devel
BuildRequires: ocaml-findlib
BuildRequires: ocaml-fpath-devel
BuildRequires: ocaml-iter-devel
BuildRequires: ocaml-javalib-devel >= 3.2.1
BuildRequires: ocaml-memtrace-devel >= 0.1.2
BuildRequires: ocaml-menhir
BuildRequires: ocaml-merlin
BuildRequires: ocaml-mtime-devel
BuildRequires: ocaml-ocamlbuild
BuildRequires: ocaml-ocamldoc
BuildRequires: ocaml-ocamlgraph-devel
BuildRequires: ocaml-ocp-indent-devel
BuildRequires: ocaml-ounit-devel >= 2.0.5
BuildRequires: ocaml-parmap-devel >= 1.0
BuildRequires: ocaml-ppx-blob-devel
BuildRequires: ocaml-ppx-compare-devel >= 0.14.0
BuildRequires: ocaml-ppx-deriving-devel >= 4.1
BuildRequires: ocaml-ppx-enumerate-devel >= 0.14.0
BuildRequires: ocaml-ppx-expect-devel >= 0.14.0
BuildRequires: ocaml-ppx-fields-conv-devel >= 0.14.0
BuildRequires: ocaml-ppx-yojson-conv-devel >= 0.14.0
BuildRequires: ocaml-ppxlib-devel >= 0.21.0
BuildRequires: ocaml-sawja-devel >= 1.5.11
BuildRequires: ocaml-shexp-devel
BuildRequires: ocaml-smtlib-utils-devel
BuildRequires: ocaml-sqlite-devel
BuildRequires: ocaml-xmlm-devel >= 1.2.0
BuildRequires: ocaml-yojson-devel >= 1.7.0
BuildRequires: ocaml-zarith-devel >= 1.7
BuildRequires: ocaml-zip-devel >= 1.11
BuildRequires: ocamlformat
BuildRequires: opam-user-setup
BuildRequires: patchelf
BuildRequires: patdiff
BuildRequires: perl-generators
BuildRequires: perl(Digest::SHA)
BuildRequires: perl(FindBin)
BuildRequires: perl(lib)
BuildRequires: pkgconfig(gmp)
BuildRequires: pkgconfig(libedit)
BuildRequires: pkgconfig(libelf)
BuildRequires: pkgconfig(libffi)
BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(mpfr)
BuildRequires: pkgconfig(ncurses)
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(zlib)
BuildRequires: python3-devel
BuildRequires: %{py3_dist pygments}
BuildRequires: %{py3_dist pyyaml}
BuildRequires: utop-devel
BuildRequires: which
BuildRequires: xar-devel
# Infer builds modified versions of llvm and clang
Provides: bundled(clang) = %{llvm_ver}
Provides: bundled(llvm) = %{llvm_ver}
%description
Infer is a static analysis tool for Java, C++, Objective-C, and C.
%prep
%forgesetup
# Unpack the clang sources
mkdir -p facebook-clang-plugins/clang/src/download
cd facebook-clang-plugins/clang/src/download
cp -p %{SOURCE1} .
tar xf %{SOURCE1}
mv llvm-project-%{llvm_ver}.src llvm-project
patches="err_ret_local_block.patch mangle_suppress_errors.patch AArch64SVEACLETypes.patch benchmark_register.patch nsattributedstring.patch"
for patch in $patches; do
patch --force -p1 < ../$patch
done
cd -
# Install into a temporary directory while building
mkdir -p facebook-clang-plugins/clang/install/lib/ocaml
sed -i "/LLVM_OCAML_INSTALL_PATH/s,\${OCAML_STDLIB_PATH},$PWD/facebook-clang-plugins/clang/install/lib/ocaml," \
facebook-clang-plugins/clang/src/download/llvm-project/llvm/cmake/config-ix.cmake
# Tell the clang build which python executable to use
sed -i '/-DLLVM_TARGETS_TO_BUILD/a\ -DPython3_EXECUTABLE=%{python3}' \
facebook-clang-plugins/clang/setup.sh
# Update the ounit name
sed -i 's/oUnit/ounit2/g' configure.ac infer/src/clang/dune.in \
infer/src/clang/unit/dune infer/src/deadcode/dune.in infer/src/dune.in \
infer/src/nullsafe/unit/dune infer/src/unit/dune.in
# Generate the configure script
./autogen.sh
%build
export STRIP=true
%configure
# The upstream Makefile objects to us setting MAKEFLAGS, so don't.
# It adds parallelism to the build itself.
# We do not have an flambda-enabled OCaml, so choose the dev build.
make BUILD_MODE=dev-noerror
%install
%make_install
%files
%doc CONTRIBUTORS README.md
%license LICENSE
%changelog
* Fri Mar 4 2022 Jerry James <[email protected]> - 1.1.0-1.20220304gite0ecc32
- Initial RPM
_______________________________________________
devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Fedora Code of Conduct:
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives:
https://lists.fedoraproject.org/archives/list/[email protected]
Do not reply to spam on the list, report it:
https://pagure.io/fedora-infrastructure