Closed NuLL3rr0r closed 8 years ago
Thank you for testing on FreeBSD. There seems to be a version mismatch between your glib and glibmm. We should really test glibmm version instead of glib version here: https://github.com/cppit/jucipp/blob/master/src/git.cc#L107. I'll try fix it now.
Would you mind test the above commit?
Sorry, there was a similar check in src/directories.cc as well. I did a rebase too, please use the latest commit above.
Thank you so much for the quick reply. I'm not at home right now. But, I'll try to test and report back as soon as I can.
I just checked out the master branch and I'm getting the following error:
[ 12%] Building CXX object src/CMakeFiles/project_shared.dir/git.cc.o
/home/babaei/Desktop/jucipp-master/src/git.cc:108:44: error: no member named
'FILE_MONITOR_WATCH_MOVES' in 'Gio::FileMonitorFlags'; did you mean
'G_FILE_MONITOR_WATCH_MOVES'?
monitor=git_directory->monitor_directory(Gio::FileMonitorFlags::FILE_MONITOR_WATCH_MOVES);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
G_FILE_MONITOR_WATCH_MOVES
/usr/local/include/glib-2.0/gio/gioenums.h:347:3: note: 'G_FILE_MONITOR_WATCH_MOVES' declared
here
G_FILE_MONITOR_WATCH_MOVES = (1 << 3)
^
/home/babaei/Desktop/jucipp-master/src/git.cc:108:26: error: no matching member function for
call to 'monitor_directory'
monitor=git_directory->monitor_directory(Gio::FileMonitorFlags::FILE_MONITOR_WATCH_MOVES);
~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/local/include/giomm-2.4/giomm/file.h:2735:29: note: candidate function not viable: no
known conversion from 'GFileMonitorFlags' to 'const Glib::RefPtr<Cancellable>' for 1st
argument
Glib::RefPtr<FileMonitor> monitor_directory(const Glib::RefPtr<Cancellable>& cancell...
^
/usr/local/include/giomm-2.4/giomm/file.h:2743:29: note: candidate function not viable: no
known conversion from 'GFileMonitorFlags' to 'Gio::FileMonitorFlags' for 1st argument
Glib::RefPtr<FileMonitor> monitor_directory(FileMonitorFlags flags = FILE_MONITOR_NONE);
^
2 errors generated.
gmake[2]: *** [src/CMakeFiles/project_shared.dir/build.make:159: src/CMakeFiles/project_shared.dir/git.cc.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:125: src/CMakeFiles/project_shared.dir/all] Error 2
gmake: *** [Makefile:150: all] Error 2
What version of glib and glibmm do you have?
$ pkg info | grep glib
dbus-glib-0.104 GLib bindings for the D-BUS messaging system
glib-2.46.2_2 Some useful routines of C programming (current stable version)
glib-networking-2.46.1_1 Network-related giomodules for glib
glibmm-2.44.0,1 C++ interfaces for glib2
json-glib-1.1.2 JSON (RFC 4627) interface for Glib
libgit2-glib-0.24.0 Glib wrapper library around the libgit2 git access library
poppler-glib-0.40.0 GLib bindings to poppler
taglib-1.10 Library for manipulating ID3 tags and Ogg comments
telepathy-glib-0.24.1 GLib utility library for the Telepathy framework
That is strange, you have the required glibmm version (2.44) for Gio::FileMonitorFlags::FILE_MONITOR_WATCH_MOVES
. You can however replace Gio::FileMonitorFlags::FILE_MONITOR_WATCH_MOVES
with Gio::FileMonitorFlags::FILE_MONITOR_SEND_MOVED
in src/git.cc
and src/directories.cc
.
Or, is there a separate giomm package on FreeBSD? In that case, what version is your gio and giomm?
Or, is there a separate giomm package on FreeBSD? In that case, what version is your gio and giomm?
No, there is not: https://www.freebsd.org/cgi/ports.cgi?query=giomm&stype=name&sektion=all
That is strange, you have the required glibmm version (2.44) for Gio::FileMonitorFlags::FILE_MONITOR_WATCH_MOVES. You can however replace Gio::FileMonitorFlags::FILE_MONITOR_WATCH_MOVES with Gio::FileMonitorFlags::FILE_MONITOR_SEND_MOVED in src/git.cc and src/directories.cc.
Now I get a linker error despite the fact that I have /usr/local/lib/libgtkmm-3.0.so on my system:
[41/41] Linking CXX executable src/juci
FAILED: src/juci
: && /usr/bin/CC -DJUCI_VERSION=\"1.2.1\" -std=c++1y -pthread -Wall -Wextra -Wno-unused-parameter -Wno-reorder -O3 src/CMakeFiles/project_shared.dir/cmake.cc.o src/CMakeFiles/project_shared.dir/ctags.cc.o src/CMakeFiles/project_shared.dir/dispatcher.cc.o src/CMakeFiles/project_shared.dir/filesystem.cc.o src/CMakeFiles/project_shared.dir/git.cc.o src/CMakeFiles/project_shared.dir/project_build.cc.o src/CMakeFiles/project_shared.dir/source.cc.o src/CMakeFiles/project_shared.dir/source_clang.cc.o src/CMakeFiles/project_shared.dir/source_diff.cc.o src/CMakeFiles/project_shared.dir/source_spellcheck.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/CodeCompleteResults.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/CompilationDatabase.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/CompileCommand.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/CompileCommands.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/CompletionString.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/Cursor.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/Diagnostic.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/Index.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/SourceLocation.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/SourceRange.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/Token.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/Tokens.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/TranslationUnit.cc.o src/CMakeFiles/project_shared.dir/__/libclangmm/src/Utility.cc.o src/CMakeFiles/project_shared.dir/__/tiny-process-library/process.cpp.o src/CMakeFiles/project_shared.dir/__/tiny-process-library/process_unix.cpp.o src/CMakeFiles/juci.dir/config.cc.o src/CMakeFiles/juci.dir/dialogs.cc.o src/CMakeFiles/juci.dir/dialogs_unix.cc.o src/CMakeFiles/juci.dir/directories.cc.o src/CMakeFiles/juci.dir/entrybox.cc.o src/CMakeFiles/juci.dir/info.cc.o src/CMakeFiles/juci.dir/juci.cc.o src/CMakeFiles/juci.dir/menu.cc.o src/CMakeFiles/juci.dir/notebook.cc.o src/CMakeFiles/juci.dir/project.cc.o src/CMakeFiles/juci.dir/selectiondialog.cc.o src/CMakeFiles/juci.dir/terminal.cc.o src/CMakeFiles/juci.dir/tooltips.cc.o src/CMakeFiles/juci.dir/window.cc.o -o src/juci -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lpangomm-1.4 -lglibmm-2.4 -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lgio-2.0 -lcairomm-1.0 -lcairo -lpthread -lsigc-2.0 -lgdk_pixbuf-2.0 -lgobject-2.0 -lglib-2.0 -lintl -lgtksourceviewmm-3.0 -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lpangomm-1.4 -lglibmm-2.4 -lcairomm-1.0 -lsigc-2.0 -lgtksourceview-3.0 -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lpthread -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl /usr/local/lib/libboost_system.so /usr/local/lib/libboost_filesystem.so /usr/local/llvm36/lib/libclang.so /usr/local/lib/libaspell.so -lgit2 -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lpangomm-1.4 -lglibmm-2.4 -lcairomm-1.0 -lsigc-2.0 -lgtksourceviewmm-3.0 -lgtksourceview-3.0 /usr/local/lib/libboost_system.so /usr/local/lib/libboost_filesystem.so /usr/local/llvm36/lib/libclang.so /usr/local/lib/libaspell.so -lgit2 -Wl,-rpath,/usr/local/lib:/usr/local/llvm36/lib: && :
/usr/bin/ld: cannot find -lgtkmm-3.0
c++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
I should not that traditionally FreeBSD systems install all packages inside /usr/local and leaves the base system untouched by ports and packages. e.g:
/usr/local/lib
/usr/local/include
/usr/local/share
/usr/local/etc
Or, is there a separate giomm package on FreeBSD? In that case, what version is your gio and giomm?
No, there is not: https://www.freebsd.org/cgi/ports.cgi?query=giomm&stype=name&sektion=all
$ pkg which /usr/local/include/giomm-2.4/giomm/file.h
/usr/local/include/giomm-2.4/giomm/file.h was installed by package glibmm-2.44.0,1
I fixed the gio check in https://github.com/cppit/jucipp/tree/freebsd I hope.
Regarding the linking error, try add -L/usr/local/lib to the compile flags, or modify the path so that the libgtkmm-3.0.so
(or something similar) library is found.
OK, thanks. I checked out the freebsd branch and the gio check issue still persists:
$ git status
On branch freebsd
Your branch is up-to-date with 'origin/freebsd'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: ../tiny-process-library (new commits)
no changes added to commit (use "git add" and/or "git commit -a")
The actual build error:
Scanning dependencies of target project_shared
[ 2%] Building CXX object src/CMakeFiles/project_shared.dir/cmake.cc.o
[ 4%] Building CXX object src/CMakeFiles/project_shared.dir/ctags.cc.o
[ 7%] Building CXX object src/CMakeFiles/project_shared.dir/dispatcher.cc.o
[ 9%] Building CXX object src/CMakeFiles/project_shared.dir/filesystem.cc.o
[ 12%] Building CXX object src/CMakeFiles/project_shared.dir/git.cc.o
/usr/home/babaei/Desktop/jucipp-freebsd/src/git.cc:108:44: error: no member named
'FILE_MONITOR_WATCH_MOVES' in 'Gio::FileMonitorFlags'; did you mean
'G_FILE_MONITOR_WATCH_MOVES'?
monitor=git_directory->monitor_directory(Gio::FileMonitorFlags::FILE_MONITOR_WATCH_MOVES);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
G_FILE_MONITOR_WATCH_MOVES
/usr/local/include/glib-2.0/gio/gioenums.h:347:3: note: 'G_FILE_MONITOR_WATCH_MOVES' declared
here
G_FILE_MONITOR_WATCH_MOVES = (1 << 3)
^
/usr/home/babaei/Desktop/jucipp-freebsd/src/git.cc:108:26: error: no matching member function
for call to 'monitor_directory'
monitor=git_directory->monitor_directory(Gio::FileMonitorFlags::FILE_MONITOR_WATCH_MOVES);
~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/local/include/giomm-2.4/giomm/file.h:2735:29: note: candidate function not viable: no
known conversion from 'GFileMonitorFlags' to 'const Glib::RefPtr<Cancellable>' for 1st
argument
Glib::RefPtr<FileMonitor> monitor_directory(const Glib::RefPtr<Cancellable>& cancell...
^
/usr/local/include/giomm-2.4/giomm/file.h:2743:29: note: candidate function not viable: no
known conversion from 'GFileMonitorFlags' to 'Gio::FileMonitorFlags' for 1st argument
Glib::RefPtr<FileMonitor> monitor_directory(FileMonitorFlags flags = FILE_MONITOR_NONE);
^
2 errors generated.
gmake[2]: *** [src/CMakeFiles/project_shared.dir/build.make:159: src/CMakeFiles/project_shared.dir/git.cc.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:125: src/CMakeFiles/project_shared.dir/all] Error 2
gmake: *** [Makefile:150: all] Error 2
In addition to that now I noticed that CMake is not able to find liblldb in both master and freebsd branches. In the cmake_modules/FindLibClang.cmake file I manipulated from v1.2.0 tag there is no warning about liblldb is missing:
-- The C compiler identification is Clang 3.4.1
-- The CXX compiler identification is Clang 3.4.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/CC
-- Check for working CXX compiler: /usr/bin/CC -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found LibClang: /usr/local/llvm36/lib/libclang.so
liblldb not found. Building juCi++ without debugging support
-- Boost version: 1.55.0
-- Found the following Boost libraries:
-- system
-- filesystem
-- Found ASPELL: /usr/local/lib/libaspell.so
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.28")
-- Checking for module 'gtkmm-3.0'
-- Found gtkmm-3.0, version 3.16.0
-- Checking for module 'gtksourceviewmm-3.0'
-- Found gtksourceviewmm-3.0, version 3.2.0
-- Checking for module 'libgit2'
-- Found libgit2, version 0.24.0
-- Could NOT find plantuml (missing: PLANTUML_JARFILE)
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/home/babaei/Desktop/jucipp-freebsd/build
Thank you very much for testing this! According to https://developer.gnome.org/glibmm/stable/group__giommEnums.html#ga469f795e9a4dddb2421c0e5568be6649, the check is correct in master branch. Not sure how to fix the compilation error actually, other than doing the manual replace.
Where is your liblldb located? I might need the full path and file name.
OK, I found the issue with: liblldb not found. Building juCi++ without debugging support
I have 3 versions of LLVM installed at the same time:
/usr/local/llvm36
/usr/local/llvm37
/usr/local/llvm38
Now if change the following lines inside ./cmake_modules/FindLibClang.cmake
from
find_path(LIBCLANG_INCLUDE_DIR clang-c/Index.h
PATHS ${libclang_llvm_header_search_paths}
PATH_SUFFIXES LLVM/include #Windows package from http://llvm.org/releases/
llvm33/include llvm34/include llvm35/include llvm36/include llvm37/include llvm38/include llvm39/include # FreeBSD
DOC "The path to the directory that contains clang-c/Index.h")
find_library(LIBCLANG_LIBRARY NAMES libclang.imp libclang clang
PATHS ${libclang_llvm_lib_search_paths}
PATH_SUFFIXES LLVM/lib #Windows package from http://llvm.org/releases/
llvm33/lib llvm34/lib llvm35/lib llvm36/lib llvm37/lib llvm38/lib llvm39/lib # FreeBSD
DOC "The file that corresponds to the libclang library.")
To, for example
find_path(LIBCLANG_INCLUDE_DIR clang-c/Index.h
PATHS ${libclang_llvm_header_search_paths}
PATH_SUFFIXES LLVM/include #Windows package from http://llvm.org/releases/
llvm38/include # FreeBSD
DOC "The path to the directory that contains clang-c/Index.h")
find_library(LIBCLANG_LIBRARY NAMES libclang.imp libclang clang
PATHS ${libclang_llvm_lib_search_paths}
PATH_SUFFIXES LLVM/lib #Windows package from http://llvm.org/releases/
llvm38/lib # FreeBSD
DOC "The file that corresponds to the libclang library.")
CMake won't get confused and won't spit out that warning.
Thank you very much for testing this! According to https://developer.gnome.org/glibmm/stable/group__giommEnums.html#ga469f795e9a4dddb2421c0e5568be6649, the check is correct in master branch. Not sure how to fix the compilation error actually, other than doing the manual replace.
Maybe an #if defined ( __FreeBSD__ )
is necessary on that check.
I'll try to make it work and make the necessary patches with your approval.
Thank you, I'll change the search order so that the newest version is checked first. I also removed older llvm versions. llvm 3.6 should probably be minimum.
That would be great @NuLL3rr0r
When I think about it, the gio build error might be a glibmm issue on freebsd, so the #if
check might be needed as a workaround.
Well, I investigated that http://svnweb.freebsd.org/ports/head/devel/glibmm/
In the Makefile the MASTER_SITES
variable points to gnome official website and if you check the distinfo file the sha hash is the same. Moreover, in FreeBSD Ports system if they patch a port/package there should be a files
folder too which is not there (all patch files go into that folder). So, the package is a vanilla upstream package.
The file operations are very platform dependent. What I'm thinking is that, Gio::FileMonitorFlags::FILE_MONITOR_WATCH_MOVES is missing or not implemented in your version of glibmm. Since it might be implemented in glib (the C-library), this might be an issue with glibmm where there might be an incorrect platform check. I've seen this before for gtksourceview (and posted a fix) for MSYS2. This is only a hunch though, the problem might lie elsewhere.
Thanks for the info, I'm not familiar with these gtk stuff. So, perhaps your guess might be correct. I checked this package maintainer's email and it's the FreeBSD Gnome Team at gnome@FreeBSD.org. Probably they are the best to ask.
I'll have a look at the glibmm bug reports and the source code later in a day or two. We probably have to add the #if defined ( __FreeBSD__ )
expression anyway though, since a potential fix would not arrive until a later glibmm version.
Thank you so much. Now I'm able to build and install it on my FreeBSD system. I'll try to create a FreeBSD port and submit it for review on FreeBSD ports tree.
Looks promising BTW! Thanks for the great work.
Thank you as well! Let me know if there are any more issues on FreeBSD. I guess it's about time I give FreeBSD a try too, maybe next week:)
My pleasure! That's awesome :) I'm sure you'll like it.
I'm trying to build juCi++ on FreeBSD 10.3-Release which is my main development box. Unfortunately I'm getting a few build errors:
First it was not able to find libclang.so. That's because FreeBSD uses a different directory structure in order to allow the user install different compiler versions. So, I made the following changes:
cmake_modules/FindLibClang.cmake
Then cmake was successful:
Now, I'm getting the following error at the build stage:
It seems cmake picks up the wrong version of gtkmm library since I do have two different version of it installed at the same time (despite the fact that it says it picked up version 3 of the library):
I'm really excited about this brand new IDE and like to check it out, or even create a port for it. So, any help would be greatly appreciated.