How do I build from source code bundle

Get help for specific problems
Posts: 2
Joined: 23 May 2016

steve_dupuis

Hi - is there a post that depicts the steps to build (make, compile, install) free file sync?
I can't find anything here that describes how to do it.

Would you please provide instructions and dependencies on how to do it.

Thanks for your time.

Steve Dupuis
Ottawa, Canada
Posts: 10
Joined: 17 Aug 2016

RogerP

Hi,
Somewhat belatedly but in case anyone else is searching, this works for me on Manjaro
git clone https://aur.archlinux.org/freefilesync.git

cd freefilesync

makepkg

sudo cp pkg/freefilesync/usr/bin/FreeFileSync /usr/bin/
Posts: 2
Joined: 31 Oct 2016

DrGuenter

Hi,
Obviously the spirit of the GPL is not met concerning the build info.

Well - I was forced to build from source, since I use the really cool tool "FreeFileSync" on my windows machines, and wanted to roll it out to my linux engine based on Open Suse 13.1. Unfortunately, the rpm does not install.

In this posting, I like to share my build experience to get FreeFileSync running from source.


Abstract:
-> I succeeded to build FileSync 8.2 - but failed for the recent 8.6
-> The prerequisites concerning compilers and library dependencies are totally unclear.

What I have found out:

- Compiler - it is neccessary, that the compiler supports "C14" -> Use at least Gcc4.9
- Libraries
"ZEN_XML" (incomplete contained in the FreeFileSync source distro)
gtk - unclear version (-> Reason, why 8.2 and not 8.6)
- Build
cd FreeFileSync/Source
make
- Buildtarget is found in
    FreeFileSync/Build/FreeFileSync
------------------------------------

C14 compatible compiler - at least Gcc 4.9 is required.
The package can be obtained in the open suse build service for development, since openSUSE 13.1 does not support natively.

For installation hints, refer to unix.stackexchange.com/questions/197584/install-gcc4-9-on-opensuse-13-1

In short use the SUSE repository
        download.opensuse.org/repositories/devel:/gcc/openSUSE_13.1/ devel-gcc
And install the "g++-4.9" package.

To use the compiler, you have to call "g++-4.9" directly (instead of g++)

-> Patch the makefile in "FreeFileSync/Source/makefile" on lines 100 and 103 to use the g++-4.9
Exchange "g++" with "g++-4.9"
../Obj/FFS_GCC_Make_Release/ffs/src/%.o : %.cpp
    mkdir -p $(dir $@)
    g++-4.9 $(CXXFLAGS) -c $< -o $@

FreeFileSync: $(OBJECT_LIST)
    g++-4.9 -o ../Build/$(APPNAME) $(OBJECT_LIST) $(LINKFLAGS)
------------------------------------------------

Compilerflags for g++-4.9
Since this compiler is syntactically more strict than its predessors, the flag "-fpermissive" has to be added to the variable "CXXFLAGS" line 8/9
CXXFLAGS  = -std=c++14 -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" -Wall \
-O3 -DNDEBUG `wx-config --cxxflags --debug=no` -DZEN_LINUX [b]-pthread -fpermissive[/b]
-------------------------------------------------------

ZEN::XML Library - another library of the same author.
Download from sourceforge sourceforge.net/projects/zenxml
Obviously it is the version 2.3
Unpack it, and copy the folders next to the folders "zen", "wx+", "FreeFileSync" in the folder of the archive.
In effect, a new directory "zenxml" is created.

-----------------------------------------------
gtk/wxGTK: Well, this is a problem, where I did not find a proper dependency solution.

My openSUSE 13.1 uses a gtk-2.0 but some of the API calls are obviously not supported.

So, essentially the file "FreeFileSync/Source/ui/small_dlgs.cpp" does not compile due to
          m_gridCustomCommand->SetTabBehaviour(wxGrid::Tab_Leave);
 
ui/small_dlgs.cpp: In constructor ‘OptionsDlg::OptionsDlg(wxWindow*, xmlAccess::XmlGlobalSettings&)’:
ui/small_dlgs.cpp:797:26: error: ‘class wxGrid’ has no member named ‘SetTabBehaviour’
     m_gridCustomCommand->SetTabBehaviour(wxGrid::Tab_Leave);
                          ^
ui/small_dlgs.cpp:797:42: error: ‘Tab_Leave’ is not a member of ‘wxGrid’
     m_gridCustomCommand->SetTabBehaviour(wxGrid::Tab_Leave);

I commented the line.

------------------------------------------------------------------

Note: In the 8.6, the file "FreeFileSync/Source/ui/main_dlg.cpp" is also not compiling.
 
 ui/main_dlg.cpp:1046:68: error: ‘class wxListBox’ has no member named ‘GetTopItem’
         globalSettings.gui.cfgFileHistFirstItemPos = m_listBoxHistory->GetTopItem();
-------------------

I would be happy, to get a dependency hint concerning the gtx issues -> "wxGrid", "SetTabBehaviour", "GetTopItem".

bye for now,
DrGuenter
Posts: 2
Joined: 31 Oct 2016

DrGuenter

Quick update ...
... I've just commented the uncompiling lines, and I succeeded FileSync 8.6 to build and run on openSUSE 13.1.
ui/small_dlgs.cpp:796

//  m_gridCustomCommand->SetTabBehaviour(wxGrid::Tab_Leave);
ui/main_dlg.cpp:1046

// globalSettings.gui.cfgFileHistFirstItemPos = m_listBoxHistory->GetTopItem();

Cool stuff...