Difference between revisions of "Compiling Mudlet"

From Mudlet
Jump to navigation Jump to search
(48 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
{{TOC right}}
 
{{TOC right}}
  
= Contributing =
+
= Key contributing information =
  
Clang format can be used to automatically format code submissions. Go here for more information on Clang format: http://clang.llvm.org/docs/ClangFormat.html
+
Clang format is used to automatically format code submissions using the [https://github.com/Mudlet/Mudlet/blob/development/src/.clang-format src/.clang-format] style. [http://doc.qt.io/qtcreator/creator-beautifier.html See here] how to enable clang-format with Qt Creator - and make sure to specify the 'File' option for the configuration style.
 +
 
 +
Branches:
 +
 
 +
'''release_30''' is the current branch that the installers are made from, and it is frozen from any new feature changes.
 +
 
 +
'''development''' is the development branch where new features can go.
 +
 
 +
'''release_31''' contains some next-release improvements that will be merged into development once 3.0 is released.
 +
 
 +
Workflow:
 +
 
 +
Fork and submit a PR with your changes ([https://guides.github.com/activities/forking/ Github tutorial]).
  
 
== Travis Integration ==
 
== Travis Integration ==
Line 15: Line 27:
 
= Compiling =
 
= Compiling =
  
== Compiling on Ubuntu 12.04 ==
+
== Compiling on Ubuntu 16.04 ==
 +
 
 +
These instructions will get you setup compiling on Ubuntu. Need a hand? [https://gitter.im/Mudlet/Mudlet Join us on Gitter] (need a Github account), [https://discord.gg/BwgJpMj Discord server] or [http://forums.mudlet.org/viewforum.php?f=7 forums] otherwise.
  
 
'''1. Install Git'''
 
'''1. Install Git'''
  
   sudo apt-get install git
+
   sudo apt install git build-essential qt5-default qtmultimedia5-dev qttools5-dev \
 +
    libhunspell-dev lua5.1 liblua5.1-0-dev libpcre3-dev libboost-dev zlib1g-dev cmake \
 +
    libhunspell-dev lua-rex-pcre lua-sql-sqlite3 lua-filesystem lua-zip libyajl-dev \
 +
    libzip-dev gstreamer0.10-fluendo-mp3 libgstreamer0.10-0 libglu1-mesa-dev \
 +
    mesa-common-dev
  
 
'''2. Get Mudlet source'''
 
'''2. Get Mudlet source'''
Line 30: Line 48:
  
 
   cd mudlet
 
   cd mudlet
 +
  git checkout release_30
 
   mkdir build
 
   mkdir build
 
'''4. Setup your environment'''
 
 
  CI/travis.linux.before_install.sh
 
  CI/travis.linux.install.sh
 
 
'''5  Move to the build location
 
 
 
   cd build
 
   cd build
  
'''6. Run the following commands, depending on which build system you want to use '''
+
'''4. Run the following commands, depending on which build system you want to use '''
(qmake IS recommended for Linux and Mac platforms)
 
  
 
'''EITHER:'''
 
'''EITHER:'''
  
   qmake ../src/src.pro
+
   qmake CONFIG+=debug ../src/src.pro
  
 
'''OR:'''
 
'''OR:'''
Line 54: Line 64:
 
'''THEN:'''
 
'''THEN:'''
  
   make -j 2
+
   make -j `nproc`
  
 
''if you have more than one processor core you can increase the number after -j to one more than the number of cores you would like to devote to building the application to speed things up.''
 
''if you have more than one processor core you can increase the number after -j to one more than the number of cores you would like to devote to building the application to speed things up.''
  
'''7. Start the application you have just compiled - enjoy'''
+
'''5. Start the application you have just compiled - enjoy'''
  
 
   ./mudlet
 
   ./mudlet
  
== Compiling on OS X ==
+
Optionally - install [https://apps.ubuntu.com/cat/applications/ccache/ ccache] and [http://manpages.ubuntu.com/manpages/trusty/man1/ccache.1.html#contenttoc3 enable it] for quicker compilation when switching branches and so on.
 +
 
 +
== Compiling on macOS ==
 +
 
 +
These instructions will get you setup compiling on macOS. Need a hand? [https://gitter.im/Mudlet/Mudlet Join us on Gitter] (need a Github account), [https://discord.gg/BwgJpMj Discord server] or [http://forums.mudlet.org/viewforum.php?f=7 forums] otherwise.
 +
 
  
 
'''1. Install prerequisites'''
 
'''1. Install prerequisites'''
Line 73: Line 88:
 
   brew update
 
   brew update
 
   brew install git
 
   brew install git
 
Then, install Qt:
 
# Download [https://www.qt.io/download-open-source/ Qt Online Installer for macOS].
 
# Uncheck any Qt versions (keep Tools)
 
# Select Qt 5.6 -> macOS
 
# Select Qt 5.6 -> Source Components
 
 
  
 
'''2. Get Mudlet source'''
 
'''2. Get Mudlet source'''
Line 109: Line 117:
 
'''THEN:'''
 
'''THEN:'''
  
   make -j 2
+
   make -j `sysctl -n hw.ncpu`
  make install
 
  
if you have more than one processor core you can increase the number after -j to one more than the number of cores you would like to devote to building the application to speed things up.
 
  
 
'''6. Enjoy'''
 
'''6. Enjoy'''
Line 122: Line 128:
 
'''1. Install required packages from main repo.'''
 
'''1. Install required packages from main repo.'''
 
 
  $ sudo apt-get install build-essential lua5.1 liblua5.1-0-dev libpcre3-dev libboost-dev zlib1g-dbg zlib1g-dev libyajl2 \
+
  $ sudo apt-get install build-essential liblua5.1-dev zlib1g-dev libhunspell-dev libpcre3-dev \
libyajl-dev libyajl2-dbg libphonon-dev libhunspell-dev lua-filesystem zlib-bin libzzip-dev lua-rex-pcre lua-zip \
+
  libzip-dev libboost-dev libyajl-dev libpulse-dev lua-rex-pcre lua-filesystem lua-zip \
lua-sql-sqlite3 qt5-default git libquazip-dev
+
  lua-sql-sqlite3 qt5-default qtmultimedia5-dev qttools5-dev
  
  
 
'''2. Grab latest Mudlet source.'''
 
'''2. Grab latest Mudlet source.'''
 
 
  $ cd ~ && mkdir projects && cd projects && git clone https://github.com/Mudlet/Mudlet.git
+
  $ cd ~ && mkdir projects && cd projects && git clone https://github.com/Mudlet/Mudlet.git mudlet
 
 
  
'''3. Build latest libzip.'''
 
 
$ cd mudlet/src && wget http://www.nih.at/libzip/libzip-0.11.1.tar.gz
 
  
$ tar -xvzf libzip-0.11.1.tar.gz && cd libzip-0.11.1
+
'''3. Build Mudlet.'''
  
  $ ./configure && make && sudo make install
+
  $ cd ~/projects/mudlet/src
  
{{note}} libzip has since reached the version 1.0 milestone - and it is possible that we will move forward to use later version library calls - this version is, I think the minimum version that is usable with the current Mudlet code which may be an issue for some earlier Debian distributions (7.x, "Wheezy" at least only ships a 0.10.x version). --[[User:Slysven|slysven]] 19:41, 15 January 2017 (EST)
+
$ ~/Qt5.8.0/5.8/gcc/bin/qmake
  
 +
$ make
  
'''4. Download and install QT development package.'''
+
  $ sudo make install
 
 
  $ \curl -sS http://download.qt.io/official_releases/qt/5.6/5.6.2/qt-opensource-linux-x64-5.6.2.run
 
 
 
$ chmod +x qt-opensource* && ./qt-opensource*
 
 
 
  
'''5. Fix issues.'''
+
== Compiling on ArchLinux ==
 
 
$ sudo ln -s /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
 
 
 
 
 
'''6. Build Mudlet.'''
 
 
 
$ cd ..
 
 
 
$ /home/<username>/Qt5.3.1/5.3/gcc/bin/qmake
 
 
 
$ make
 
 
 
== Compiling in ArchLinux ==
 
  
 
The best way to do this would be to use the PKGBUILD found [https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=mudlet-dev here]. You'll just download the PKGBUILD into a directory, run
 
The best way to do this would be to use the PKGBUILD found [https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=mudlet-dev here]. You'll just download the PKGBUILD into a directory, run
Line 172: Line 157:
 
and you'll be done. For more info on what this does, visit [https://wiki.archlinux.org/index.php/Arch_User_Repository this site].
 
and you'll be done. For more info on what this does, visit [https://wiki.archlinux.org/index.php/Arch_User_Repository this site].
  
== Compiling in Gentoo ==
+
== Compiling on Gentoo ==
An [https://github.com/toaster/gentoo-mudlet-overlay overlay is available] for compiling Mudlet on Gentoo.
+
An [https://github.com/toaster/gentoo-overlay overlay containing Mudlet is available] for compiling Mudlet on Gentoo.
  
 
== Compiling on Windows 10 ==
 
== Compiling on Windows 10 ==
 +
 +
These instructions will get you setup compiling on Windows. Need a hand? [https://gitter.im/Mudlet/Mudlet Join us on Gitter] (need a Github account), [https://discord.gg/BwgJpMj Discord server] or [http://forums.mudlet.org/viewforum.php?f=7 forums] otherwise.
  
 
'''1.Download & Install the Prerequisites'''
 
'''1.Download & Install the Prerequisites'''
Line 222: Line 209:
 
  wget --no-check-certificate --output-document yajl-2.0.1.tar.gz https://github.com/lloyd/yajl/tarball/2.0.1
 
  wget --no-check-certificate --output-document yajl-2.0.1.tar.gz https://github.com/lloyd/yajl/tarball/2.0.1
 
  wget --no-check-certificate https://sourceforge.net/projects/zziplib/files/zziplib13/0.13.62/zziplib-0.13.62.tar.bz2/download
 
  wget --no-check-certificate https://sourceforge.net/projects/zziplib/files/zziplib13/0.13.62/zziplib-0.13.62.tar.bz2/download
 +
wget --no-check-certificate https://indy.fulgan.com/SSL/openssl-1.0.2k-i386-win32.zip
  
 
A folder will get created in C:\mingw32\msys\home\your_name\src with all the files.
 
A folder will get created in C:\mingw32\msys\home\your_name\src with all the files.
Line 229: Line 217:
 
  for a in `ls -1 *.tar.gz`; do tar -zxvf $a; done
 
  for a in `ls -1 *.tar.gz`; do tar -zxvf $a; done
 
  for a in `ls -1 *.tar.bz2`; do tar xvfj $a; done
 
  for a in `ls -1 *.tar.bz2`; do tar xvfj $a; done
 +
  /c/Program\ Files/7-Zip/7z -oopenssl-1.0.2k e openssl-1.0.2k-i386-win32.zip
  
 
Boost:
 
Boost:
Line 239: Line 228:
 
'''Environment Settings'''
 
'''Environment Settings'''
  
You want control over what compilers are being using so prefix your Path with (in [http://superuser.com/questions/949560/how-do-i-set-system-environment-variables-in-windows-10 system environmental variables]):
+
You want control over what compilers are being using so prefix your Path with (in [http://superuser.com/questions/949560/how-do-i-set-system-environment-variables-in-windows-10 system environment variables]):
  
 
  C:\Python27
 
  C:\Python27
Line 258: Line 247:
  
 
'''YAJL''':
 
'''YAJL''':
Edit CMakeLists.txt in the base dir of YAJL, and make the following changes to remove all the windows specific compiler settings:
+
First, remove all the windows specific compiler settings with:
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") to SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+
  powershell -Command "(Get-Content CMakeLists.txt -Raw) -replace '\/W4' -replace '(?<=SET\(linkFlags)[^\)]+' -replace '\/wd4996 \/wd4255 \/wd4130 \/wd4100 \/wd4711' -replace '(?<=SET\(CMAKE_C_FLAGS_DEBUG .)\/D \DEBUG \/Od \/Z7', '-g' -replace '(?<=SET\(CMAKE_C_FLAGS_RELEASE .)\/D NDEBUG \/O2', '-O2' | Out-File -encoding ASCII CMakeLists.txt"
SET(linkFlags "/PDB:NONE /INCREMENTAL:NO /OPT:NOREF /OPT:NOICF") to SET(linkFlags)
 
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4996 /wd4255 /wd4130 /wd4100 /wd4711") to SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
 
SET(CMAKE_C_FLAGS_DEBUG "/D DEBUG /Od /Z7") to SET(CMAKE_C_FLAGS_DEBUG "-g")
 
SET(CMAKE_C_FLAGS_RELEASE "/D NDEBUG /O2") to SET(CMAKE_C_FLAGS_RELEASE "-O2")
 
  
 
Then compile:
 
Then compile:
Line 319: Line 304:
  
 
  cd ~/src/Mudlet/src
 
  cd ~/src/Mudlet/src
  qmake
+
  qmake CONFIG+=debug
 
  make -j 2
 
  make -j 2
 +
 +
''NOTE:'' If you install any of the above in a directory other than /c/mingw32, it is necessary to override some of the default include/lib paths that qmake sets up. To do so, you'll need to append a number of INCLUDEPATH and LIBPATH parameters to the qmake call.
 +
 +
Example (installed in an F: drive):
 +
qmake CONFIG+=debug INCLUDEPATH+=/f/mingw32/include INCLUDEPATH+=/f/mingw32/lib/include LIBPATH+=/f/mingw32/lib LIBPATH+=/f/mingw32/lib/lib LIBPATH+=/f/mingw32/bin
  
 
'''Building Mudlet from QtCreator'''
 
'''Building Mudlet from QtCreator'''
  
Open src.pro (within Mudlet2/src) in Qt Creator
+
Open src.pro (within Mudlet2/src) in Qt Creator, disable shadow builds for both release and debug. Change build type to debug (bottom-left) and compile.
  
 
'''4.Copy Needed DLLs'''
 
'''4.Copy Needed DLLs'''
  
Copy the following dll's into the release directory:
+
Copy the following dll's needed to run Mudlet:
 +
''See above note about alternative install paths before copying.''
 +
 
 +
cd debug/
 +
cp /c/Qt/5.6/mingw49_32/bin/icudt54.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/icuin54.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/icuuc54.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/Qt5Cored.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/Qt5Guid.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/libEGLd.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/libGLESv2d.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/Qt5Networkd.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/Qt5OpenGLd.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/Qt5Widgetsd.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/Qt5Multimediad.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/libgcc_s_dw2-1.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/libstdc++-6.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/libwinpthread-1.dll .
 +
cp /c/mingw32/lib/libyajl.dll .
 +
cp $HOME/src/lua-5.1.5/src/lua51.dll .
 +
cp $HOME/src/lua-5.1.5/src/lua51.dll /c/mingw32/bin
 +
cp $HOME/src/openssl-1.0.2k/libeay32.dll .
 +
cp $HOME/src/openssl-1.0.2k/ssleay32.dll .
 +
cp /c/mingw32/bin/libzip-2.dll .
 +
cp /c/mingw32/bin/libhunspell-1.4-0.dll .
 +
cp /c/mingw32/bin/libpcre-1.dll .
 +
cp /c/mingw32/bin/libsqlite3-0.dll .
 +
cp /c/mingw32/bin/zlib1.dll .
 +
cp -r ../mudlet-lua/ .
 +
cp ../*.dic .
 +
cp -r /c/Qt/5.6/mingw49_32/plugins/audio .
 +
cp -r /c/Qt/5.6/mingw49_32/plugins/mediaservice .
 +
cp -r /c/Qt/5.6/mingw49_32/plugins/platforms .
 +
cp -r /c/Qt/5.6/mingw49_32/plugins/imageformats .
  
  cd release/
+
  cd ../release/
 
  cp /c/Qt/5.6/mingw49_32/bin/icudt54.dll .
 
  cp /c/Qt/5.6/mingw49_32/bin/icudt54.dll .
 
  cp /c/Qt/5.6/mingw49_32/bin/icuin54.dll .
 
  cp /c/Qt/5.6/mingw49_32/bin/icuin54.dll .
Line 336: Line 359:
 
  cp /c/Qt/5.6/mingw49_32/bin/Qt5Core.dll .
 
  cp /c/Qt/5.6/mingw49_32/bin/Qt5Core.dll .
 
  cp /c/Qt/5.6/mingw49_32/bin/Qt5Gui.dll .
 
  cp /c/Qt/5.6/mingw49_32/bin/Qt5Gui.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/libEGL.dll .
 +
cp /c/Qt/5.6/mingw49_32/bin/libGLESv2.dll .
 
  cp /c/Qt/5.6/mingw49_32/bin/Qt5Network.dll .
 
  cp /c/Qt/5.6/mingw49_32/bin/Qt5Network.dll .
 
  cp /c/Qt/5.6/mingw49_32/bin/Qt5OpenGL.dll .
 
  cp /c/Qt/5.6/mingw49_32/bin/Qt5OpenGL.dll .
Line 346: Line 371:
 
  cp $HOME/src/lua-5.1.5/src/lua51.dll .
 
  cp $HOME/src/lua-5.1.5/src/lua51.dll .
 
  cp $HOME/src/lua-5.1.5/src/lua51.dll /c/mingw32/bin
 
  cp $HOME/src/lua-5.1.5/src/lua51.dll /c/mingw32/bin
 +
cp $HOME/src/openssl-1.0.2k/libeay32.dll .
 +
cp $HOME/src/openssl-1.0.2k/ssleay32.dll .
 
  cp /c/mingw32/bin/libzip-2.dll .
 
  cp /c/mingw32/bin/libzip-2.dll .
 
  cp /c/mingw32/bin/libhunspell-1.4-0.dll .
 
  cp /c/mingw32/bin/libhunspell-1.4-0.dll .
Line 356: Line 383:
 
  cp -r /c/Qt/5.6/mingw49_32/plugins/mediaservice .
 
  cp -r /c/Qt/5.6/mingw49_32/plugins/mediaservice .
 
  cp -r /c/Qt/5.6/mingw49_32/plugins/platforms .
 
  cp -r /c/Qt/5.6/mingw49_32/plugins/platforms .
 +
cp -r /c/Qt/5.6/mingw49_32/plugins/imageformats .
  
  
Line 385: Line 413:
 
  gcc -O2 -c -o src/luazip.o -IC:/mingw32/include/ src/luazip.c  
 
  gcc -O2 -c -o src/luazip.o -IC:/mingw32/include/ src/luazip.c  
 
  gcc -shared -o zip.dll src/luazip.o -Lc:\mingw32\lib -lzzip -lz c:/mingw32/bin/lua51.dll -lm
 
  gcc -shared -o zip.dll src/luazip.o -Lc:\mingw32\lib -lzzip -lz c:/mingw32/bin/lua51.dll -lm
 +
cp zip.dll ~/src/Mudlet/src/debug
 
  cp zip.dll ~/src/Mudlet/src/release
 
  cp zip.dll ~/src/Mudlet/src/release
 +
cp -r /c/mingw32/lib/lua/5.1/* ~/src/Mudlet/src/debug
 
  cp -r /c/mingw32/lib/lua/5.1/* ~/src/Mudlet/src/release
 
  cp -r /c/mingw32/lib/lua/5.1/* ~/src/Mudlet/src/release
  
  
  
 +
You're done! You can now launch mudlet by running '''mudlet.exe''' in the debug/ folder, or from command line:
  
You're done! You can now launch mudlet by running '''mudlet.exe''' in the release/ folder, or from command line:
+
cd ~/src/Mudlet/src/debug
 +
./mudlet.exe
 +
 
 +
= Setting up IDEs =
 +
== CLion ==
 +
If you'd like to use CLion and it is giving the following error:
 +
 
 +
<nowiki>
 +
By not providing "FindQt5Core.cmake" in CMAKE_MODULE_PATH this project has
 +
asked CMake to find a package configuration file provided by "Qt5Core", but
 +
CMake did not find one.
  
  cd ~/src/Mudlet/src/release
+
Could not find a package configuration file provided by "Qt5Core" with any
./mudlet.exe
+
of the following names:
 +
 
 +
Qt5CoreConfig.cmake
 +
qt5core-config.cmake
 +
 
 +
Add the installation prefix of "Qt5Core" to CMAKE_PREFIX_PATH or set
 +
"Qt5Core_DIR" to a directory containing one of the above files. If
 +
"Qt5Core" provides a separate development package or SDK, be sure it has
 +
been installed.</nowiki>
 +
 
 +
You can fix this by setting <code>-DCMAKE_PREFIX_PATH=<your Qt + version + compiler location></code>. For example: <code>-DCMAKE_PREFIX_PATH=/home/vadi/Programs/Qt/5.8/gcc_64/</code> [[File:CLion CMake settings - finidng Qt.png|200px|thumb|right]]

Revision as of 09:55, 24 April 2017

Key contributing information

Clang format is used to automatically format code submissions using the src/.clang-format style. See here how to enable clang-format with Qt Creator - and make sure to specify the 'File' option for the configuration style.

Branches:

release_30 is the current branch that the installers are made from, and it is frozen from any new feature changes.

development is the development branch where new features can go.

release_31 contains some next-release improvements that will be merged into development once 3.0 is released.

Workflow:

Fork and submit a PR with your changes (Github tutorial).

Travis Integration

Mudlet is hosted on Github and uses Travis for continuous integration by building on a Ubuntu 12.04 (Precise Pangolin) LTS Linux and a MacOS 10.11 platforms. This means that every push to the Git repository is test compiled on both Ubuntu and Mac OSX but not Microsoft Windows (yet).

Travis integration is defined in a .travis.yml file and in our case, it references shell scripts in the CI directory, which handle things like installing dependencies and building mudlet.

Note Note: Travis builds do not currently package mudlet, so not everything is automated.

Compiling

Compiling on Ubuntu 16.04

These instructions will get you setup compiling on Ubuntu. Need a hand? Join us on Gitter (need a Github account), Discord server or forums otherwise.

1. Install Git

 sudo apt install git build-essential qt5-default qtmultimedia5-dev qttools5-dev \
   libhunspell-dev lua5.1 liblua5.1-0-dev libpcre3-dev libboost-dev zlib1g-dev cmake \
   libhunspell-dev lua-rex-pcre lua-sql-sqlite3 lua-filesystem lua-zip libyajl-dev \
   libzip-dev gstreamer0.10-fluendo-mp3 libgstreamer0.10-0 libglu1-mesa-dev \
   mesa-common-dev

2. Get Mudlet source

 git clone https://github.com/Mudlet/Mudlet.git mudlet

3. Go to the parent of the mudlet "src" folder and create (if necessary) a build subdirectory

(This is so that we can build out of source which keeps the source code clean!}

 cd mudlet
 git checkout release_30
 mkdir build
 cd build

4. Run the following commands, depending on which build system you want to use

EITHER:

 qmake CONFIG+=debug ../src/src.pro

OR:

 cmake ..

THEN:

 make -j `nproc`

if you have more than one processor core you can increase the number after -j to one more than the number of cores you would like to devote to building the application to speed things up.

5. Start the application you have just compiled - enjoy

 ./mudlet

Optionally - install ccache and enable it for quicker compilation when switching branches and so on.

Compiling on macOS

These instructions will get you setup compiling on macOS. Need a hand? Join us on Gitter (need a Github account), Discord server or forums otherwise.


1. Install prerequisites

Install XCode, command line tools for XCode, and HomeBrew.

Once homebrew is installed, do:

 brew doctor
 brew update
 brew install git

2. Get Mudlet source

 git clone https://github.com/Mudlet/Mudlet.git mudlet

3. Go to the parent of the mudlet "src" folder and create (if necessary) a build subdirectory (this is so that we can build out of source which keeps the source code clean}

 mkdir build

3. Setup your environment you only need the first three lines if your system cannot find the right Qt libraries or tools, the added directories might be different if you have installed them differently

 export PATH="/usr/local/opt/qt5/bin:$PATH"
 export LDFLAGS=" -L/usr/local/opt/qt5/lib ${LDFLAGS}"
 export CPPFLAGS=" -I/usr/local/opt/qt5/include ${CPPFLAGS}"
 CI/travis.osx.before_install.sh
 CI/travis.osx.install.sh

4. Go to the mudlet build folder

 cd build

5. Run the following commands, depending on which build system you want to use (qmake IS recommended for Linux and Mac platforms)

EITHER:

 qmake ../src/src.pro

OR:

 cmake ..

THEN:

 make -j `sysctl -n hw.ncpu`


6. Enjoy

The Mudlet.app is now available in Finder for launching.

Compiling on Debian 'Sid'

1. Install required packages from main repo.

$ sudo apt-get install build-essential liblua5.1-dev zlib1g-dev libhunspell-dev libpcre3-dev \
  libzip-dev libboost-dev libyajl-dev libpulse-dev lua-rex-pcre lua-filesystem lua-zip \
  lua-sql-sqlite3 qt5-default qtmultimedia5-dev qttools5-dev


2. Grab latest Mudlet source.

$ cd ~ && mkdir projects && cd projects && git clone https://github.com/Mudlet/Mudlet.git mudlet


3. Build Mudlet.

$ cd ~/projects/mudlet/src
$ ~/Qt5.8.0/5.8/gcc/bin/qmake
$ make
$ sudo make install

Compiling on ArchLinux

The best way to do this would be to use the PKGBUILD found here. You'll just download the PKGBUILD into a directory, run

makepkg
sudo pacman -U [name of the generated pkg file]

and you'll be done. For more info on what this does, visit this site.

Compiling on Gentoo

An overlay containing Mudlet is available for compiling Mudlet on Gentoo.

Compiling on Windows 10

These instructions will get you setup compiling on Windows. Need a hand? Join us on Gitter (need a Github account), Discord server or forums otherwise.

1.Download & Install the Prerequisites

Qt: 
 http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe
Run the installer and de-select everything and just select:
 Qt->Qt 5.6->MinGW 4.9.2 (32 bit)
 Qt->Qt 5.6->Source components
In this tutorial, it is installed in C:\Qt\ (so you will have C:\Qt\5.x)
7Zip:
 http://www.7-zip.org/a/7z1602-x64.msi
Notepad++: 
 https://notepad-plus-plus.org/download (at the last check it was at version 7.3)
Recommended if you don't have a good source editor installed already (it is release under a GPL License).
Mingw-builds:
 https://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.8.1/32-bit/threads-posix/dwarf/x32-4.8.1-release-posix-dwarf-rev5.7z/download
extract this to C:\mingw32
Latest msys from:
 http://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/
put the msys folder in C:\mingw32, so you get C:\mingw32\msys
CMake:
 http://www.cmake.org/files/v3.0/cmake-3.0.0-win32-x86.exe
Python:
 https://www.python.org/ftp/python/2.7.11/python-2.7.11.msi


2.Download libraries in MSYS

Open MSYS (click msys.bat in the C:\mingw32\msys folder), where you'll be in a home directory. Copy the lines below and right-click on the terminal to paste them:

mkdir src
cd src
wget --no-check-certificate --output-document hunspell-1.4.1.tar.gz https://github.com/hunspell/hunspell/archive/v1.4.1.tar.gz
wget http://www.lua.org/ftp/lua-5.1.5.tar.gz
wget --no-check-certificate https://sourceforge.net/projects/pcre/files/pcre/8.38/pcre-8.38.tar.gz/download
wget http://zlib.net/zlib-1.2.11.tar.gz
wget http://www.sqlite.org/2013/sqlite-autoconf-3071700.tar.gz
wget --no-check-certificate https://launchpad.net/ubuntu/+archive/primary/+files/libzip_0.11.2.orig.tar.gz
wget --no-check-certificate --output-document yajl-2.0.1.tar.gz https://github.com/lloyd/yajl/tarball/2.0.1
wget --no-check-certificate https://sourceforge.net/projects/zziplib/files/zziplib13/0.13.62/zziplib-0.13.62.tar.bz2/download
wget --no-check-certificate https://indy.fulgan.com/SSL/openssl-1.0.2k-i386-win32.zip

A folder will get created in C:\mingw32\msys\home\your_name\src with all the files.

Extract all libraries with:

for a in `ls -1 *.tar.gz`; do tar -zxvf $a; done
for a in `ls -1 *.tar.bz2`; do tar xvfj $a; done
 /c/Program\ Files/7-Zip/7z -oopenssl-1.0.2k e openssl-1.0.2k-i386-win32.zip

Boost:

wget --no-check-certificate https://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.gz/download
/c/Program\ Files/7-Zip/7z e boost_1_60_0.tar.gz && /c/Program\ Files/7-Zip/7z x boost_1_60_0.tar
cp -r boost_1_60_0/boost /c/mingw32/include

3.Compiling libraries

Environment Settings

You want control over what compilers are being using so prefix your Path with (in system environment variables):

C:\Python27
C:\mingw32\bin
C:\Program Files (x86)\CMake\bin
C:\Qt\5.6\mingw49_32\bin

Be sure to restart msys.bat after setting the above to pick up the new values.

MSYS Compilations

All of the following will be completed inside the msys command prompt.

cd into each respective directory:

Hunspell:

./configure --prefix=/c/mingw32 && make -j 2 && make install

YAJL: First, remove all the windows specific compiler settings with:

powershell -Command "(Get-Content CMakeLists.txt -Raw) -replace '\/W4' -replace '(?<=SET\(linkFlags)[^\)]+' -replace '\/wd4996 \/wd4255 \/wd4130 \/wd4100 \/wd4711' -replace '(?<=SET\(CMAKE_C_FLAGS_DEBUG .)\/D \DEBUG \/Od \/Z7', '-g' -replace '(?<=SET\(CMAKE_C_FLAGS_RELEASE .)\/D NDEBUG \/O2', '-O2' | Out-File -encoding ASCII CMakeLists.txt"

Then compile:

mkdir build
cd build
cmake -G "MSYS Makefiles" ..
make
cp yajl-2.0.1/lib/* /c/mingw32/lib/
cp -R yajl-2.0.1/include/* /c/mingw32/include/

Lua: edit the Makefile, change INSTALL_TOP= /usr/local to INSTALL_TOP= /c/mingw32

change TO_LIB= liblua.a to TO_LIB= liblua.a lua51.dll

make mingw
make install

PCRE:

./configure --prefix=/c/mingw32 && make -j 2 && make install

Sqlite:

./configure --prefix=/c/mingw32 && make -j 2 && make install

ZLib:

make -f win32/Makefile.gcc
export INCLUDE_PATH=/c/mingw32/include/
export LIBRARY_PATH=/c/mingw32/lib/
export BINARY_PATH=/c/mingw32/bin/
make -f win32/Makefile.gcc install
cp zlib1.dll /c/mingw32/bin
cp libz.dll.a /c/mingw32/lib

LibZip:

./configure --prefix=/c/mingw32 && make -j 2 && make install
cp lib/zipconf.h /c/mingw32/include

ZZIPlib:

powershell -Command "(gc configure) -replace 'uname -msr', 'uname -ms' | Out-File -encoding ASCII configure"
configure --disable-mmap --prefix=c:/mingw32/ && make -j 2 && make install

3.Downloading Mudlet Sources

Getting Mudlet

From within msys:

cd ~/src
git clone https://github.com/Mudlet/Mudlet.git
cd Mudlet/src
git checkout release_30 

Building Mudlet from terminal

cd ~/src/Mudlet/src
qmake CONFIG+=debug
make -j 2

NOTE: If you install any of the above in a directory other than /c/mingw32, it is necessary to override some of the default include/lib paths that qmake sets up. To do so, you'll need to append a number of INCLUDEPATH and LIBPATH parameters to the qmake call.

Example (installed in an F: drive):

qmake CONFIG+=debug INCLUDEPATH+=/f/mingw32/include INCLUDEPATH+=/f/mingw32/lib/include LIBPATH+=/f/mingw32/lib LIBPATH+=/f/mingw32/lib/lib LIBPATH+=/f/mingw32/bin

Building Mudlet from QtCreator

Open src.pro (within Mudlet2/src) in Qt Creator, disable shadow builds for both release and debug. Change build type to debug (bottom-left) and compile.

4.Copy Needed DLLs

Copy the following dll's needed to run Mudlet: See above note about alternative install paths before copying.

cd debug/
cp /c/Qt/5.6/mingw49_32/bin/icudt54.dll .
cp /c/Qt/5.6/mingw49_32/bin/icuin54.dll .
cp /c/Qt/5.6/mingw49_32/bin/icuuc54.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5Cored.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5Guid.dll .
cp /c/Qt/5.6/mingw49_32/bin/libEGLd.dll .
cp /c/Qt/5.6/mingw49_32/bin/libGLESv2d.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5Networkd.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5OpenGLd.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5Widgetsd.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5Multimediad.dll .
cp /c/Qt/5.6/mingw49_32/bin/libgcc_s_dw2-1.dll .
cp /c/Qt/5.6/mingw49_32/bin/libstdc++-6.dll .
cp /c/Qt/5.6/mingw49_32/bin/libwinpthread-1.dll .
cp /c/mingw32/lib/libyajl.dll .
cp $HOME/src/lua-5.1.5/src/lua51.dll .
cp $HOME/src/lua-5.1.5/src/lua51.dll /c/mingw32/bin
cp $HOME/src/openssl-1.0.2k/libeay32.dll .
cp $HOME/src/openssl-1.0.2k/ssleay32.dll .
cp /c/mingw32/bin/libzip-2.dll .
cp /c/mingw32/bin/libhunspell-1.4-0.dll .
cp /c/mingw32/bin/libpcre-1.dll .
cp /c/mingw32/bin/libsqlite3-0.dll .
cp /c/mingw32/bin/zlib1.dll .
cp -r ../mudlet-lua/ .
cp ../*.dic .
cp -r /c/Qt/5.6/mingw49_32/plugins/audio .
cp -r /c/Qt/5.6/mingw49_32/plugins/mediaservice .
cp -r /c/Qt/5.6/mingw49_32/plugins/platforms .
cp -r /c/Qt/5.6/mingw49_32/plugins/imageformats .
cd ../release/
cp /c/Qt/5.6/mingw49_32/bin/icudt54.dll .
cp /c/Qt/5.6/mingw49_32/bin/icuin54.dll .
cp /c/Qt/5.6/mingw49_32/bin/icuuc54.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5Core.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5Gui.dll .
cp /c/Qt/5.6/mingw49_32/bin/libEGL.dll .
cp /c/Qt/5.6/mingw49_32/bin/libGLESv2.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5Network.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5OpenGL.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5Widgets.dll .
cp /c/Qt/5.6/mingw49_32/bin/Qt5Multimedia.dll .
cp /c/Qt/5.6/mingw49_32/bin/libgcc_s_dw2-1.dll .
cp /c/Qt/5.6/mingw49_32/bin/libstdc++-6.dll .
cp /c/Qt/5.6/mingw49_32/bin/libwinpthread-1.dll .
cp /c/mingw32/lib/libyajl.dll .
cp $HOME/src/lua-5.1.5/src/lua51.dll .
cp $HOME/src/lua-5.1.5/src/lua51.dll /c/mingw32/bin
cp $HOME/src/openssl-1.0.2k/libeay32.dll .
cp $HOME/src/openssl-1.0.2k/ssleay32.dll .
cp /c/mingw32/bin/libzip-2.dll .
cp /c/mingw32/bin/libhunspell-1.4-0.dll .
cp /c/mingw32/bin/libpcre-1.dll .
cp /c/mingw32/bin/libsqlite3-0.dll .
cp /c/mingw32/bin/zlib1.dll .
cp -r ../mudlet-lua/ .
cp ../*.dic .
cp -r /c/Qt/5.6/mingw49_32/plugins/audio .
cp -r /c/Qt/5.6/mingw49_32/plugins/mediaservice .
cp -r /c/Qt/5.6/mingw49_32/plugins/platforms .
cp -r /c/Qt/5.6/mingw49_32/plugins/imageformats .


5.Setting up Lua libraries

At this point your Lua install will be bare-bones and lacking the Lua libraries Mudlet uses.

cd ~/src
wget --no-check-certificate http://keplerproject.github.io/luarocks/releases/luarocks-2.4.0-win32.zip
unzip luarocks-2.4.0-win32.zip

Switch to the Windows command line to install luarocks:

cd C:\mingw32\msys\home\%USERNAME%\src\luarocks-2.4.0-win32
install.bat /P C:\LuaRocks /MW

Wait for the installation to finish. Then:

cd \LuaRocks\lua\luarocks
powershell -Command "(gc cfg.lua) -replace 'mingw32-gcc', 'gcc' | Out-File -encoding ASCII cfg.lua"
cd \LuaRocks
luarocks install LuaFileSystem
luarocks install LuaSQL-SQLite3 SQLITE_INCDIR="c:\mingw32\include" SQLITE_LIBDIR="c:\mingw32\lib"
luarocks install lrexlib-pcre PCRE_LIBDIR="c:\mingw32\lib" PCRE_INCDIR="c:\mingw32\include"

Back in the msys command line:

cd ~/src
wget --no-check-certificate https://github.com/rjpcomputing/luazip/archive/master.zip
unzip master
cd luazip-master/
gcc -O2 -c -o src/luazip.o -IC:/mingw32/include/ src/luazip.c 
gcc -shared -o zip.dll src/luazip.o -Lc:\mingw32\lib -lzzip -lz c:/mingw32/bin/lua51.dll -lm
cp zip.dll ~/src/Mudlet/src/debug
cp zip.dll ~/src/Mudlet/src/release
cp -r /c/mingw32/lib/lua/5.1/* ~/src/Mudlet/src/debug
cp -r /c/mingw32/lib/lua/5.1/* ~/src/Mudlet/src/release


You're done! You can now launch mudlet by running mudlet.exe in the debug/ folder, or from command line:

cd ~/src/Mudlet/src/debug
./mudlet.exe

Setting up IDEs

CLion

If you'd like to use CLion and it is giving the following error:

By not providing "FindQt5Core.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Qt5Core", but
CMake did not find one.

Could not find a package configuration file provided by "Qt5Core" with any
of the following names:

Qt5CoreConfig.cmake
qt5core-config.cmake

Add the installation prefix of "Qt5Core" to CMAKE_PREFIX_PATH or set
"Qt5Core_DIR" to a directory containing one of the above files.  If
"Qt5Core" provides a separate development package or SDK, be sure it has
been installed.

You can fix this by setting -DCMAKE_PREFIX_PATH=<your Qt + version + compiler location>. For example: -DCMAKE_PREFIX_PATH=/home/vadi/Programs/Qt/5.8/gcc_64/

CLion CMake settings - finidng Qt.png