ocamlframa-cocamlfind

ocamlfind: Package `lablgtk2.gnomecanvas' not found on ubuntu 17.04


I am trying to install Frama-C gui Phosphorus from repository (6aa64) on Ubuntu 17.04 (Zesty). Frama-C opam works fine but it lacks the GUI as far as I can tell + I might want to patch frama-C later on so I would like to be able to compile it myself.

First step:

./configure --enable-gui --enable-verbosemake 

generates the output:

configure: ******************
configure: * CONFIGURE MAKE *
configure: ******************
checking for make... make
checking version of make... 4.1
configure: *****************************
configure: * CONFIGURE OCAML COMPILERS *
configure: *****************************
checking for ocamlc... ocamlc
checking version of OCaml... 4.02.3
checking OCaml library path... /usr/lib/ocaml
checking for ocamlopt... ocamlopt
checking ocamlopt version and standard library... ok
checking for ocamlfind... ocamlfind
configure: Distribution mode: all warnings are deactivated
configure: *******************************************
configure: * CONFIGURE MANDATORY TOOLS AND LIBRARIES *
configure: *******************************************
checking for ocamldep... ocamldep
checking for ocamllex... ocamllex
checking for ocamllex.opt... ocamllex.opt
checking for ocamlyacc... ocamlyacc
checking for ocamlcp... ocamlcp
checking for ocamlgraph... found
checking for zarith... found
configure: ******************************************
configure: * CONFIGURE OPTIONAL TOOLS AND LIBRARIES *
configure: ******************************************
checking for ocamldoc... ocamldoc
checking for ocamlmktop... ocamlmktop
checking for otags... no
checking for Apron... not found. The corresponding domains won't be available in Eva
checking for Landmarks... not found.
configure: **********************
configure: * CONFIGURE PLATFORM *
configure: **********************
checking platform... Unix
checking OCaml native threads... ok.
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for stdlib.h... (cached) yes
checking assert.h usability... yes
checking assert.h presence... yes
checking for assert.h... yes
checking float.h usability... yes
checking float.h presence... yes
checking for float.h... yes
checking math.h usability... yes
checking math.h presence... yes
checking for math.h... yes
checking signal.h usability... yes
checking signal.h presence... yes
checking for signal.h... yes
checking for unistd.h... (cached) yes
checking how to run the C preprocessor... gcc -E
/* Check whether comments are kept in output */
Default preprocessor is 'gcc -E -C -I.'.
Default preprocessor supported architecture-related options: \"-m32\"; \"-m64\"; \"-m16\"; 
configure: ***************************
configure: * WISHED FRAMA-C PLUG-INS *
configure: ***************************
checking for src/plugins/callgraph... yes
callgraph... yes
checking for src/plugins/constant_propagation... yes
semantic_constant_folding... yes
checking for src/plugins/from... yes
from_analysis... yes
checking for src/plugins/gui... yes
gui... yes
checking for src/plugins/impact... yes
impact... yes
checking for src/plugins/inout... yes
inout... yes
checking for src/plugins/metrics... yes
metrics... yes
checking for src/plugins/occurrence... yes
occurrence... yes
checking for src/plugins/pdg... yes
pdg... yes
checking for src/plugins/postdominators... yes
postdominators... yes
checking for src/plugins/rte... yes
rtegen... yes
checking for src/plugins/scope... yes
scope... yes
checking for src/plugins/slicing... yes
slicing... yes
checking for src/plugins/sparecode... yes
sparecode... yes
checking for src/plugins/users... yes
users... yes
checking for src/plugins/value... yes
value_analysis... yes
checking for src/plugins/aorai/Makefile.in... yes
aorai... yes
checking for ltl2ba... no
checking for src/plugins/e-acsl/Makefile.in... yes
e_acsl... yes
checking for uname... uname
checking stdio.h usability... yes
checking stdio.h presence... yes
checking for stdio.h... yes
checking for doxygen... doxygen
checking for dot... yes
configure: creating ./config.status
config.status: creating src/plugins/e-acsl/doc/doxygen/doxygen.cfg
config.status: executing default commands
configure: Configure libjemalloc
autoconf
./configure --enable-autogen --with-jemalloc-prefix=__e_acsl_native_ --with-private-namespace=__e_acsl_hidden_
checking for xsltproc... /usr/bin/xsltproc
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether compiler supports -std=gnu99... yes
checking whether compiler supports -Wall... yes
checking whether compiler supports -Werror=declaration-after-statement... yes
checking whether compiler supports -Wshorten-64-to-32... no
checking whether compiler supports -Wsign-compare... yes
checking whether compiler supports -pipe... yes
checking whether compiler supports -g3... yes
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking whether byte ordering is bigendian... no
checking size of void *... 8
checking size of int... 4
checking size of long... 8
checking size of long long... 8
checking size of intmax_t... 8
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking whether pause instruction is compilable... yes
checking for ar... ar
checking malloc.h usability... yes
checking malloc.h presence... yes
checking for malloc.h... yes
checking whether malloc_usable_size definition can use const argument... no
checking whether __attribute__ syntax is compilable... yes
checking whether compiler supports -fvisibility=hidden... yes
checking whether compiler supports -Werror... yes
checking whether tls_model attribute is compilable... yes
checking whether compiler supports -Werror... yes
checking whether alloc_size attribute is compilable... yes
checking whether compiler supports -Werror... yes
checking whether format(gnu_printf, ...) attribute is compilable... yes
checking whether compiler supports -Werror... yes
checking whether format(printf, ...) attribute is compilable... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for ranlib... ranlib
checking for ld... /usr/bin/ld
checking for autoconf... /usr/bin/autoconf
checking for memalign... yes
checking for valloc... yes
checking whether compiler supports -O3... yes
checking whether compiler supports -funroll-loops... yes
checking configured backtracing method... N/A
checking for sbrk... yes
checking whether utrace(2) is compilable... no
checking whether valgrind is compilable... yes
checking whether a program using __builtin_ffsl is compilable... yes
checking LG_PAGE... 12
checking pthread.h usability... yes
checking pthread.h presence... yes
checking for pthread.h... yes
checking for pthread_create in -lpthread... yes
checking for library containing clock_gettime... none required
checking for secure_getenv... yes
checking for issetugid... no
checking for _malloc_thread_cleanup... no
checking for _pthread_mutex_init_calloc_cb... no
checking for TLS... yes
checking whether C11 atomics is compilable... no
checking whether atomic(9) is compilable... no
checking whether Darwin OSAtomic*() is compilable... no
checking whether madvise(2) is compilable... yes
checking whether to force 32-bit __sync_{add,sub}_and_fetch()... no
checking whether to force 64-bit __sync_{add,sub}_and_fetch()... no
checking for __builtin_clz... yes
checking whether Darwin OSSpin*() is compilable... no
checking whether glibc malloc hook is compilable... yes
checking whether glibc memalign hook is compilable... yes
checking whether pthreads adaptive mutexes is compilable... yes
checking for stdbool.h that conforms to C99... yes
checking for _Bool... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating jemalloc.pc
config.status: creating doc/html.xsl
config.status: creating doc/manpages.xsl
config.status: creating doc/jemalloc.xml
config.status: creating include/jemalloc/jemalloc_macros.h
config.status: creating include/jemalloc/jemalloc_protos.h
config.status: creating include/jemalloc/jemalloc_typedefs.h
config.status: creating include/jemalloc/internal/jemalloc_internal.h
config.status: creating test/test.sh
config.status: creating test/include/test/jemalloc_test.h
config.status: creating config.stamp
config.status: creating bin/jemalloc-config
config.status: creating bin/jemalloc.sh
config.status: creating bin/jeprof
config.status: creating include/jemalloc/jemalloc_defs.h
config.status: include/jemalloc/jemalloc_defs.h is unchanged
config.status: creating include/jemalloc/internal/jemalloc_internal_defs.h
config.status: include/jemalloc/internal/jemalloc_internal_defs.h is unchanged
config.status: creating test/include/test/jemalloc_test_defs.h
config.status: test/include/test/jemalloc_test_defs.h is unchanged
config.status: executing include/jemalloc/internal/private_namespace.h commands
config.status: executing include/jemalloc/internal/private_unnamespace.h commands
config.status: executing include/jemalloc/internal/public_symbols.txt commands
config.status: executing include/jemalloc/internal/public_namespace.h commands
config.status: executing include/jemalloc/internal/public_unnamespace.h commands
config.status: executing include/jemalloc/internal/size_classes.h commands
config.status: executing include/jemalloc/jemalloc_protos_jet.h commands
config.status: executing include/jemalloc/jemalloc_rename.h commands
config.status: executing include/jemalloc/jemalloc_mangle.h commands
config.status: executing include/jemalloc/jemalloc_mangle_jet.h commands
config.status: executing include/jemalloc/jemalloc.h commands
checking for src/plugins/loop_analysis/Makefile.in... yes
loop_analysis... yes
checking for src/plugins/nonterm/Makefile.in... yes
nonterm... yes
checking for src/plugins/obfuscator/Makefile.in... yes
obfuscator... yes
checking for src/plugins/print_api... yes
print_api... yes
checking for src/plugins/report/Makefile.in... yes
report... yes
checking for src/plugins/security_slicing/Makefile.in... yes
security_slicing... yes
checking for src/plugins/variadic/Makefile.in... yes
variadic... yes
checking for src/plugins/wp/Makefile.in... yes
wp... yes
configure: *******************************************************
configure: * CONFIGURE TOOLS AND LIBRARIES USED BY SOME PLUG-INS *
configure: *******************************************************
Ocamlfind -> using +lablgtk2.(/usr/lib/ocaml/lablgtk2,/usr/lib/ocaml/lablgtk2)
checking for /usr/lib/ocaml/lablgtk2/lablgtksourceview2.cmxa... yes
checking for /usr/lib/ocaml/lablgtk2/lablgnomecanvas.cmxa... yes
checking for /usr/lib/ocaml/lablgtk2/lablgtk.cmxa... yes
checking for dot... yes
native dynlink works fine. Great.
configure: *************************************
configure: * CHECKING FOR PLUG-IN DEPENDENCIES *
configure: *************************************
configure: WARNING: ltl2ba not found.
configure: WARNING: aorai partially enabled because ltl2ba missing.
checking for coqc... yes
unsupported coqc version 8.6
configure: *********************
configure: * CREATING MAKEFILE *
configure: *********************
configure: creating ./config.status
config.status: creating src/plugins/e-acsl/doc/doxygen/doxygen.cfg
config.status: creating src/plugins/e-acsl/Makefile
config.status: creating src/plugins/loop_analysis/Makefile
config.status: creating src/plugins/nonterm/Makefile
config.status: creating src/plugins/obfuscator/Makefile
config.status: creating src/plugins/report/Makefile
config.status: creating src/plugins/variadic/Makefile
config.status: creating src/plugins/aorai/Makefile
config.status: creating src/plugins/security_slicing/Makefile
config.status: creating src/plugins/wp/Makefile
config.status: creating share/Makefile.config
config.status: executing default commands
configure: *******************************
configure: * SUMMARY: PLUG-INS AVAILABLE *
configure: *******************************
configure: callgraph: yes, dynamic
configure: semantic_constant_folding: yes, dynamic
configure: from_analysis: yes, dynamic
configure: gui: yes
configure: impact: yes, dynamic
configure: inout: yes, dynamic
configure: metrics: yes, dynamic
configure: occurrence: yes, dynamic
configure: pdg: yes, dynamic
configure: postdominators: yes, dynamic
configure: rtegen: yes, dynamic
configure: scope: yes, dynamic
configure: slicing: yes, dynamic
configure: sparecode: yes, dynamic
configure: users: yes, dynamic
configure: value_analysis: yes, dynamic
configure: aorai: partial, dynamic, ltl2ba missing
configure: e_acsl: yes, dynamic
configure: loop_analysis: yes, dynamic
configure: nonterm: yes, dynamic
configure: obfuscator: yes, dynamic
configure: print_api: yes, dynamic
configure: report: yes, dynamic
configure: security_slicing: yes, dynamic
configure: variadic: yes, dynamic
configure: wp: yes, dynamic

... which once I run make ends up in:

ocamlfind ocamlc -c -package findlib -package ocamlgraph -package num -package unix -package str -package dynlink -package bytes -package zarith -w -a  -bin-annot -strict-sequence -safe-string -g -I src/plugins/slicing_types -I src/plugins/pdg_types -I src/plugins/value_types -I src/libraries/stdlib -I src/libraries/utils -I src/libraries/project -I src/libraries/datatype -I src/kernel_internals/parsing -I src/kernel_internals/typing -I src/kernel_internals/runtime -I src/kernel_services/parsetree -I src/kernel_services/ast_data -I src/kernel_services/ast_queries -I src/kernel_services/ast_printing -I src/kernel_services/cmdline_parameters -I src/kernel_services/plugin_entry_points -I src/kernel_services/abstract_interp -I src/kernel_services/visitors -I src/kernel_services/analysis -I src/kernel_services/ast_transformations -I src/plugins/gui -I /home/teto/framac/lib/plugins  -I src/plugins/security_slicing -I /home/teto/framac/lib/plugins  -package findlib -package ocamlgraph -package num -package unix -package str -package dynlink -package bytes -package zarith -w -a  -bin-annot -strict-sequence -safe-string -g -I /home/teto/framac/src/plugins/slicing_types -I /home/teto/framac/src/plugins/pdg_types -I /home/teto/framac/src/plugins/value_types -I /home/teto/framac/src/libraries/stdlib -I /home/teto/framac/src/libraries/utils -I /home/teto/framac/src/libraries/project -I /home/teto/framac/src/libraries/datatype -I /home/teto/framac/src/kernel_internals/parsing -I /home/teto/framac/src/kernel_internals/typing -I /home/teto/framac/src/kernel_internals/runtime -I /home/teto/framac/src/kernel_services/parsetree -I /home/teto/framac/src/kernel_services/ast_data -I /home/teto/framac/src/kernel_services/ast_queries -I /home/teto/framac/src/kernel_services/ast_printing -I /home/teto/framac/src/kernel_services/cmdline_parameters -I /home/teto/framac/src/kernel_services/plugin_entry_points -I /home/teto/framac/src/kernel_services/abstract_interp -I /home/teto/framac/src/kernel_services/visitors -I /home/teto/framac/src/kernel_services/analysis -I /home/teto/framac/src/kernel_services/ast_transformations -I /home/teto/framac/src/plugins/gui -I /home/teto/framac/lib  -package lablgtk2 -package lablgtk2.gnomecanvas -package lablgtk2.sourceview2 src/plugins/security_slicing/security_slicing_parameters.mli
ocamlfind: Package `lablgtk2.gnomecanvas' not found

I have libgnomecanvas2(*) installed. The problem was already mentioned here without solution: https://lists.gforge.inria.fr/pipermail/frama-c-discuss/2017-January/005200.html

I don't know much about ocaml but it seems that gnomecanvas should be found in /usr/lib/ocaml/lablgtk2/. I uploaded a listing of this folder if it can help here https://transfer.sh/4lQol/listing (too big for SO)

Best regards Matt


Solution

  • For some reason (that we, the Frama-c team, do not really understand), Debian deviates significantly from upstream Labgltk2 -- and thus so does the Ubuntu package. In both of these distributions, the OCamlfind package for gnomecanvas is called lablgtk2-gnome.gnomecanvas, not just lablgtk2.gnomecanvas. You can either patch the sources of Frama-c accordingly, but I suggest you instead perform an Opam installation. This will make things simpler in the long term.