<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.gnustep.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pakl</id>
	<title>GNUstepWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.gnustep.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pakl"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php/Special:Contributions/Pakl"/>
	<updated>2026-06-17T19:17:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.7</generator>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7300</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7300"/>
		<updated>2022-04-17T21:05:42Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Usually it is a good a idea to just use the package manager of your distribution to get a stable and well integrated GNUstep environment:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install gnustep gnustep-devel&lt;br /&gt;
&lt;br /&gt;
If you want to develop new apps and try the newest features consider the approach described below.&lt;br /&gt;
&lt;br /&gt;
= Compiling Everything from Scratch  =&lt;br /&gt;
&lt;br /&gt;
The following repo contains scripts that  compile and install everything needed for GNUstep Objective-C 2.0.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks/Grand Central Dispatch, etc.&lt;br /&gt;
&lt;br /&gt;
For example, to build GNUstep under Ubuntu 19.04, do:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/plaurent/gnustep-build&lt;br /&gt;
 cd gnustep-build/ubuntu-19.04-clang-8.0-runtime-2.0/&lt;br /&gt;
 ./GNUstep-buildon-ubuntu1904.sh&lt;br /&gt;
&lt;br /&gt;
The demo.sh and demo-gui.sh scripts show example code and compilation examples (using command line as well as the recommended GNUmakefile approach.)&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7080</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7080"/>
		<updated>2019-05-13T02:18:11Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following repo contains scripts that  compile and install everything needed for GNUstep Objective-C 2.0.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks/Grand Central Dispatch, etc.&lt;br /&gt;
&lt;br /&gt;
For example, to build GNUstep under Ubuntu 19.04, do:&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/plaurent/gnustep-build&lt;br /&gt;
 cd gnustep-build/ubuntu-19.04-clang-8.0-runtime-2.0/&lt;br /&gt;
 ./GNUstep-buildon-ubuntu1904.sh&lt;br /&gt;
&lt;br /&gt;
The demo.sh and demo-gui.sh scripts show example code and compilation examples (using command line as well as the recommended GNUmakefile approach.)&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7079</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7079"/>
		<updated>2019-05-13T02:17:58Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following repo contains scripts that  compile and install everything needed for GNUstep Objective-C 2.0.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks/Grand Central Dispatch, etc.&lt;br /&gt;
&lt;br /&gt;
For example, to build GNUstep under Ubuntu 19.04, do:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/plaurent/gnustep-build&lt;br /&gt;
 cd gnustep-build/ubuntu-19.04-clang-8.0-runtime-2.0/&lt;br /&gt;
 ./GNUstep-buildon-ubuntu1904.sh&lt;br /&gt;
&lt;br /&gt;
The demo.sh and demo-gui.sh scripts show example code and compilation examples (using command line as well as the recommended GNUmakefile approach.)&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7078</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7078"/>
		<updated>2019-05-13T02:16:26Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following repo contains scripts that  compile and install everything needed for GNUstep Objective-C 2.0.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks/Grand Central Dispatch, etc.&lt;br /&gt;
&lt;br /&gt;
For example, to build GNUstep under Ubuntu 19.04, do:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/plaurent/gnustep-build&lt;br /&gt;
 cd gnustep-build/ubuntu-19.04-clang-8.0-runtime-2.0/&lt;br /&gt;
 ./GNUstep-buildon-ubuntu1904.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7077</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7077"/>
		<updated>2019-05-13T02:15:52Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following repo contains scripts that  compile and install everything needed for GNUstep Objective-C 2.0.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks/Grand Central Dispatch, etc.&lt;br /&gt;
&lt;br /&gt;
For example, to build GNUstep under Ubuntu 19.04, do:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/plaurent/gnustep-build&lt;br /&gt;
 cd ubuntu-19.04-clang-8.0-runtime-2.0&lt;br /&gt;
 ./GNUstep-buildon-ubuntu1904.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7076</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7076"/>
		<updated>2019-05-13T02:15:33Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following repo contains scripts that  compile and install everything needed for GNUstep Objective-C 2.0.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks/Grand Central Dispatch, etc.&lt;br /&gt;
&lt;br /&gt;
For example, to build GNUstep under Ubuntu 19.04, do:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 https://github.com/plaurent/gnustep-build&lt;br /&gt;
 cd ubuntu-19.04-clang-8.0-runtime-2.0&lt;br /&gt;
 ./GNUstep-buildon-ubuntu1904.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7075</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7075"/>
		<updated>2019-05-13T02:15:12Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following repo contains scripts that  compile and install everything needed for GNUstep Objective-C 2.0.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks/Grand Central Dispatch, etc.&lt;br /&gt;
&lt;br /&gt;
For example, to build GNUstep under Ubuntu 19.04, do:&lt;br /&gt;
```&lt;br /&gt;
https://github.com/plaurent/gnustep-build&lt;br /&gt;
cd ubuntu-19.04-clang-8.0-runtime-2.0&lt;br /&gt;
./GNUstep-buildon-ubuntu1904.sh&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7069</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7069"/>
		<updated>2019-04-22T02:56:23Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following script compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
NOTE: Unless you have a need for the above features, its recommended to install from the default repos as often the scripts below have issues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install gnustep&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 19.04 ===&lt;br /&gt;
&lt;br /&gt;
In addition to building everything, this script also provides the ability to build the most recent version of four apps: Project Center, Gorm, GWorkspace, and System Preferences.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Show prompt function&lt;br /&gt;
function showPrompt()&lt;br /&gt;
{&lt;br /&gt;
  if [ &amp;quot;$PROMPT&amp;quot; = true ] ; then&lt;br /&gt;
    echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
    read -p &amp;quot;${GREEN}Press enter to continue...${NC}&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Set colors&lt;br /&gt;
GREEN=`tput setaf 2`&lt;br /&gt;
NC=`tput sgr0` # No Color&lt;br /&gt;
&lt;br /&gt;
# Set to true to also build and install apps&lt;br /&gt;
APPS=true&lt;br /&gt;
&lt;br /&gt;
# Set to true to pause after each build to verify successful build and installation&lt;br /&gt;
PROMPT=false&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
sudo apt update&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Installing dependencies...${NC}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386  # Enable 32-bit repos for libx11-dev:i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt -y install clang git cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls28-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libxft-dev&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  sudo apt -y install curl&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Create build directory&lt;br /&gt;
mkdir GNUstep-build&lt;br /&gt;
cd GNUstep-build&lt;br /&gt;
&lt;br /&gt;
# Set clang as compiler&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
# Checkout sources&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Checking out sources...${NC}&amp;quot;&lt;br /&gt;
#git clone https://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
git clone https://github.com/plaurent/libdispatch.git&lt;br /&gt;
cd libdispatch&lt;br /&gt;
  git checkout fix_major_missing_symbol_for_ubuntu1904&lt;br /&gt;
cd ..&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2.git&lt;br /&gt;
git clone https://github.com/gnustep/tools-make.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-base.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-gui.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-back.git&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  git clone https://github.com/gnustep/apps-projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gworkspace.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-systempreferences.git&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make first time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the first time...${NC}&amp;quot;&lt;br /&gt;
cd tools-make&lt;br /&gt;
# git checkout `git rev-list -1 --first-parent --before=2017-04-06 master` # fixes segfault, should probably be looked at.&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep  --enable-objc-arc  --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libdispatch&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libdispatch...${NC}&amp;quot;&lt;br /&gt;
cd ../libdispatch&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
../configure  --prefix=/usr&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libobjc2&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libobjc2...${NC}&amp;quot;&lt;br /&gt;
cd ../../libobjc2&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang -DCMAKE_ASM_COMPILER=clang -DTESTS=OFF&lt;br /&gt;
cmake --build .&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
export LDFLAGS=-ldispatch&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make second time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the second time...${NC}&amp;quot;&lt;br /&gt;
cd ../../tools-make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-arc --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep base&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-base...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep GUI&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN} Building GNUstep-gui...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep back&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-back...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building ProjectCenter...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-projectcenter/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building Gorm...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gorm/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building GWorkspace...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gworkspace/&lt;br /&gt;
  ./configure&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building SystemPreferences...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-systempreferences/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Install is done. Open a new terminal to start using.${NC}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Older versions of Ubuntu (18.04 or earlier) ===&lt;br /&gt;
&lt;br /&gt;
On older versions of Ubuntu (including 18.04) you won't have a recent enough clang (-fobjc-runtime=gnustep-2.0 requires Clang 7.0 or later).  If you want to build on an older Ubuntu (like 18.04) you should:&lt;br /&gt;
&lt;br /&gt;
(1) Set OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-1.9&amp;quot; in the script above&lt;br /&gt;
&lt;br /&gt;
(2) git checkout 1.9 on libobjc2&lt;br /&gt;
&lt;br /&gt;
OR &lt;br /&gt;
&lt;br /&gt;
(1) Build a new clang manually (instead of apt install clang):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc  blocktest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7068</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7068"/>
		<updated>2019-04-22T02:54:36Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following script compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
NOTE: Unless you have a need for the above features, its recommended to install from the default repos as often the scripts below have issues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install gnustep&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 19.04 ===&lt;br /&gt;
&lt;br /&gt;
In addition to building everything, this script also provides the ability to build the most recent version of four apps: Project Center, Gorm, GWorkspace, and System Preferences.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Show prompt function&lt;br /&gt;
function showPrompt()&lt;br /&gt;
{&lt;br /&gt;
  if [ &amp;quot;$PROMPT&amp;quot; = true ] ; then&lt;br /&gt;
    echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
    read -p &amp;quot;${GREEN}Press enter to continue...${NC}&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Set colors&lt;br /&gt;
GREEN=`tput setaf 2`&lt;br /&gt;
NC=`tput sgr0` # No Color&lt;br /&gt;
&lt;br /&gt;
# Set to true to also build and install apps&lt;br /&gt;
APPS=true&lt;br /&gt;
&lt;br /&gt;
# Set to true to pause after each build to verify successful build and installation&lt;br /&gt;
PROMPT=false&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
sudo apt update&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Installing dependencies...${NC}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386  # Enable 32-bit repos for libx11-dev:i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt -y install clang git cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls28-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libxft-dev&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  sudo apt -y install curl&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Create build directory&lt;br /&gt;
mkdir GNUstep-build&lt;br /&gt;
cd GNUstep-build&lt;br /&gt;
&lt;br /&gt;
# Set clang as compiler&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
# Checkout sources&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Checking out sources...${NC}&amp;quot;&lt;br /&gt;
#git clone https://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
git clone https://github.com/plaurent/libdispatch.git&lt;br /&gt;
cd libdispatch&lt;br /&gt;
  git checkout fix_major_missing_symbol_for_ubuntu1904&lt;br /&gt;
cd ..&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2.git&lt;br /&gt;
git clone https://github.com/gnustep/tools-make.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-base.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-gui.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-back.git&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  git clone https://github.com/gnustep/apps-projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gworkspace.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-systempreferences.git&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make first time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the first time...${NC}&amp;quot;&lt;br /&gt;
cd tools-make&lt;br /&gt;
# git checkout `git rev-list -1 --first-parent --before=2017-04-06 master` # fixes segfault, should probably be looked at.&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep  --enable-objc-arc  --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libdispatch&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libdispatch...${NC}&amp;quot;&lt;br /&gt;
cd ../libdispatch&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
../configure  --prefix=/usr&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libobjc2&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libobjc2...${NC}&amp;quot;&lt;br /&gt;
cd ../../libobjc2&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang -DCMAKE_ASM_COMPILER=clang -DTESTS=OFF&lt;br /&gt;
cmake --build .&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
export LDFLAGS=-ldispatch&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make second time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the second time...${NC}&amp;quot;&lt;br /&gt;
cd ../../tools-make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-arc --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep base&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-base...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep GUI&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN} Building GNUstep-gui...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep back&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-back...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building ProjectCenter...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-projectcenter/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building Gorm...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gorm/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building GWorkspace...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gworkspace/&lt;br /&gt;
  ./configure&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building SystemPreferences...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-systempreferences/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Install is done. Open a new terminal to start using.${NC}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Older versions of Ubuntu (18.04 or earlier) ===&lt;br /&gt;
&lt;br /&gt;
On older versions of Ubuntu (including 18.04) you won't have a recent enough clang.  If you want to build on an older Ubuntu (like 18.04) you should:&lt;br /&gt;
&lt;br /&gt;
(1) Set OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-1.9&amp;quot; in the script above&lt;br /&gt;
&lt;br /&gt;
(2) git checkout 1.9 on libobjc2&lt;br /&gt;
&lt;br /&gt;
(3) Build a new clang manually (instead of apt install clang):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc  blocktest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7067</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7067"/>
		<updated>2019-04-22T02:52:28Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following scripts compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
NOTE: Unless you have a need for the above features, its recommended to install from the default repos as often the scripts below have issues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install gnustep&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 19.04 ===&lt;br /&gt;
&lt;br /&gt;
In addition to building everything, this script also provides the ability to build the most recent version of four apps: Project Center, Gorm, GWorkspace, and System Preferences.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Show prompt function&lt;br /&gt;
function showPrompt()&lt;br /&gt;
{&lt;br /&gt;
  if [ &amp;quot;$PROMPT&amp;quot; = true ] ; then&lt;br /&gt;
    echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
    read -p &amp;quot;${GREEN}Press enter to continue...${NC}&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Set colors&lt;br /&gt;
GREEN=`tput setaf 2`&lt;br /&gt;
NC=`tput sgr0` # No Color&lt;br /&gt;
&lt;br /&gt;
# Set to true to also build and install apps&lt;br /&gt;
APPS=true&lt;br /&gt;
&lt;br /&gt;
# Set to true to pause after each build to verify successful build and installation&lt;br /&gt;
PROMPT=false&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
sudo apt update&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Installing dependencies...${NC}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386  # Enable 32-bit repos for libx11-dev:i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt -y install clang git cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls28-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libxft-dev&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  sudo apt -y install curl&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Create build directory&lt;br /&gt;
mkdir GNUstep-build&lt;br /&gt;
cd GNUstep-build&lt;br /&gt;
&lt;br /&gt;
# Set clang as compiler&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
# Checkout sources&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Checking out sources...${NC}&amp;quot;&lt;br /&gt;
#git clone https://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
git clone https://github.com/plaurent/libdispatch.git&lt;br /&gt;
cd libdispatch&lt;br /&gt;
  git checkout fix_major_missing_symbol_for_ubuntu1904&lt;br /&gt;
cd ..&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2.git&lt;br /&gt;
git clone https://github.com/gnustep/tools-make.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-base.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-gui.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-back.git&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  git clone https://github.com/gnustep/apps-projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gworkspace.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-systempreferences.git&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make first time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the first time...${NC}&amp;quot;&lt;br /&gt;
cd tools-make&lt;br /&gt;
# git checkout `git rev-list -1 --first-parent --before=2017-04-06 master` # fixes segfault, should probably be looked at.&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep  --enable-objc-arc  --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libdispatch&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libdispatch...${NC}&amp;quot;&lt;br /&gt;
cd ../libdispatch&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
../configure  --prefix=/usr&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libobjc2&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libobjc2...${NC}&amp;quot;&lt;br /&gt;
cd ../../libobjc2&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang -DCMAKE_ASM_COMPILER=clang -DTESTS=OFF&lt;br /&gt;
cmake --build .&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
export LDFLAGS=-ldispatch&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make second time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the second time...${NC}&amp;quot;&lt;br /&gt;
cd ../../tools-make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-arc --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep base&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-base...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep GUI&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN} Building GNUstep-gui...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep back&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-back...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building ProjectCenter...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-projectcenter/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building Gorm...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gorm/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building GWorkspace...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gworkspace/&lt;br /&gt;
  ./configure&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building SystemPreferences...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-systempreferences/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Install is done. Open a new terminal to start using.${NC}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Older versions of Ubuntu (18.04 or earlier) ===&lt;br /&gt;
&lt;br /&gt;
On older versions of Ubuntu (including 18.04) you won't have a recent enough clang.  If you want to build on an older Ubuntu (like 18.04) you should:&lt;br /&gt;
&lt;br /&gt;
(1) Set OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-1.9&amp;quot; in the script above&lt;br /&gt;
&lt;br /&gt;
(2) git checkout 1.9 on libobjc2&lt;br /&gt;
&lt;br /&gt;
(3) Build a new clang manually (instead of apt install clang):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc  blocktest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7066</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7066"/>
		<updated>2019-04-22T02:51:45Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following scripts compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
NOTE: Unless you have a need for the above features, its recommended to install from the default repos as often the scripts below have issues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install gnustep&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 19.04 ===&lt;br /&gt;
&lt;br /&gt;
In addition to building everything, this script also provides the ability to build the most recent version of four apps: Project Center, Gorm, GWorkspace, and System Preferences.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Show prompt function&lt;br /&gt;
function showPrompt()&lt;br /&gt;
{&lt;br /&gt;
  if [ &amp;quot;$PROMPT&amp;quot; = true ] ; then&lt;br /&gt;
    echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
    read -p &amp;quot;${GREEN}Press enter to continue...${NC}&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Set colors&lt;br /&gt;
GREEN=`tput setaf 2`&lt;br /&gt;
NC=`tput sgr0` # No Color&lt;br /&gt;
&lt;br /&gt;
# Set to true to also build and install apps&lt;br /&gt;
APPS=true&lt;br /&gt;
&lt;br /&gt;
# Set to true to pause after each build to verify successful build and installation&lt;br /&gt;
PROMPT=false&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
sudo apt update&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Installing dependencies...${NC}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386  # Enable 32-bit repos for libx11-dev:i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt -y install clang git cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls28-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libxft-dev&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  sudo apt -y install curl&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Create build directory&lt;br /&gt;
mkdir GNUstep-build&lt;br /&gt;
cd GNUstep-build&lt;br /&gt;
&lt;br /&gt;
# Set clang as compiler&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
# Checkout sources&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Checking out sources...${NC}&amp;quot;&lt;br /&gt;
#git clone https://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
git clone https://github.com/plaurent/libdispatch.git&lt;br /&gt;
cd libdispatch&lt;br /&gt;
  git checkout fix_major_missing_symbol_for_ubuntu1904&lt;br /&gt;
cd ..&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2.git&lt;br /&gt;
git clone https://github.com/gnustep/tools-make.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-base.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-gui.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-back.git&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  git clone https://github.com/gnustep/apps-projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gworkspace.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-systempreferences.git&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make first time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the first time...${NC}&amp;quot;&lt;br /&gt;
cd tools-make&lt;br /&gt;
# git checkout `git rev-list -1 --first-parent --before=2017-04-06 master` # fixes segfault, should probably be looked at.&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep  --enable-objc-arc  --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libdispatch&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libdispatch...${NC}&amp;quot;&lt;br /&gt;
cd ../libdispatch&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
../configure  --prefix=/usr&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libobjc2&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libobjc2...${NC}&amp;quot;&lt;br /&gt;
cd ../../libobjc2&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang -DCMAKE_ASM_COMPILER=clang -DTESTS=OFF&lt;br /&gt;
cmake --build .&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
export LDFLAGS=-ldispatch&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make second time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the second time...${NC}&amp;quot;&lt;br /&gt;
cd ../../tools-make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-arc --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep base&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-base...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep GUI&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN} Building GNUstep-gui...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep back&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-back...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building ProjectCenter...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-projectcenter/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building Gorm...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gorm/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building GWorkspace...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gworkspace/&lt;br /&gt;
  ./configure&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building SystemPreferences...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-systempreferences/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Install is done. Open a new terminal to start using.${NC}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Older versions of Ubuntu (18.04 or earlier) ===&lt;br /&gt;
&lt;br /&gt;
On older versions of Ubuntu (including 18.04) you won't have a recent enough clang.  If you want to build on an older Ubuntu (like 18.04) you should:&lt;br /&gt;
&lt;br /&gt;
(1) Set OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-1.9&amp;quot; in the script above&lt;br /&gt;
(2) git checkout 1.9 on libobjc2&lt;br /&gt;
(3) Build a new clang manually (instead of apt install clang):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc  blocktest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7065</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7065"/>
		<updated>2019-04-22T02:51:25Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Ubuntu 19.04 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following scripts compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
NOTE: Unless you have a need for the above features, its recommended to install from the default repos as often the scripts below have issues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install gnustep&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 19.04 ===&lt;br /&gt;
&lt;br /&gt;
In addition to building everything, this script also provides the ability to build the most recent version of four apps: Project Center, Gorm, GWorkspace, and System Preferences.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Show prompt function&lt;br /&gt;
function showPrompt()&lt;br /&gt;
{&lt;br /&gt;
  if [ &amp;quot;$PROMPT&amp;quot; = true ] ; then&lt;br /&gt;
    echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
    read -p &amp;quot;${GREEN}Press enter to continue...${NC}&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Set colors&lt;br /&gt;
GREEN=`tput setaf 2`&lt;br /&gt;
NC=`tput sgr0` # No Color&lt;br /&gt;
&lt;br /&gt;
# Set to true to also build and install apps&lt;br /&gt;
APPS=true&lt;br /&gt;
&lt;br /&gt;
# Set to true to pause after each build to verify successful build and installation&lt;br /&gt;
PROMPT=false&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
sudo apt update&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Installing dependencies...${NC}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386  # Enable 32-bit repos for libx11-dev:i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt -y install clang git cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls28-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libxft-dev&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  sudo apt -y install curl&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Create build directory&lt;br /&gt;
mkdir GNUstep-build&lt;br /&gt;
cd GNUstep-build&lt;br /&gt;
&lt;br /&gt;
# Set clang as compiler&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
# Checkout sources&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Checking out sources...${NC}&amp;quot;&lt;br /&gt;
#git clone https://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
git clone https://github.com/plaurent/libdispatch.git&lt;br /&gt;
cd libdispatch&lt;br /&gt;
  git checkout fix_major_missing_symbol_for_ubuntu1904&lt;br /&gt;
cd ..&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2.git&lt;br /&gt;
git clone https://github.com/gnustep/tools-make.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-base.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-gui.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-back.git&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  git clone https://github.com/gnustep/apps-projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gworkspace.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-systempreferences.git&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make first time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the first time...${NC}&amp;quot;&lt;br /&gt;
cd tools-make&lt;br /&gt;
# git checkout `git rev-list -1 --first-parent --before=2017-04-06 master` # fixes segfault, should probably be looked at.&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep  --enable-objc-arc  --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libdispatch&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libdispatch...${NC}&amp;quot;&lt;br /&gt;
cd ../libdispatch&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
../configure  --prefix=/usr&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libobjc2&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libobjc2...${NC}&amp;quot;&lt;br /&gt;
cd ../../libobjc2&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang -DCMAKE_ASM_COMPILER=clang -DTESTS=OFF&lt;br /&gt;
cmake --build .&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
export LDFLAGS=-ldispatch&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make second time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the second time...${NC}&amp;quot;&lt;br /&gt;
cd ../../tools-make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-arc --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep base&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-base...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep GUI&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN} Building GNUstep-gui...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep back&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-back...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building ProjectCenter...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-projectcenter/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building Gorm...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gorm/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building GWorkspace...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gworkspace/&lt;br /&gt;
  ./configure&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building SystemPreferences...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-systempreferences/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Install is done. Open a new terminal to start using.${NC}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Older versions of Ubuntu (e.g., 18.04) ===&lt;br /&gt;
&lt;br /&gt;
On older versions of Ubuntu (including 18.04) you won't have a recent enough clang.  If you want to build on an older Ubuntu (like 18.04) you should:&lt;br /&gt;
&lt;br /&gt;
(1) Set OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-1.9&amp;quot; in the script above&lt;br /&gt;
(2) git checkout 1.9 on libobjc2&lt;br /&gt;
(3) Build a new clang manually (instead of apt install clang):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc  blocktest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7064</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7064"/>
		<updated>2019-04-22T02:48:11Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Test Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following scripts compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
NOTE: Unless you have a need for the above features, its recommended to install from the default repos as often the scripts below have issues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install gnustep&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 19.04 ===&lt;br /&gt;
&lt;br /&gt;
In addition to building everything, this script also provides the ability to build the most recent version of four apps: Project Center, Gorm, GWorkspace, and System Preferences.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Show prompt function&lt;br /&gt;
function showPrompt()&lt;br /&gt;
{&lt;br /&gt;
  if [ &amp;quot;$PROMPT&amp;quot; = true ] ; then&lt;br /&gt;
    echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
    read -p &amp;quot;${GREEN}Press enter to continue...${NC}&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Set colors&lt;br /&gt;
GREEN=`tput setaf 2`&lt;br /&gt;
NC=`tput sgr0` # No Color&lt;br /&gt;
&lt;br /&gt;
# Set to true to also build and install apps&lt;br /&gt;
APPS=true&lt;br /&gt;
&lt;br /&gt;
# Set to true to pause after each build to verify successful build and installation&lt;br /&gt;
PROMPT=false&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
sudo apt update&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Installing dependencies...${NC}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386  # Enable 32-bit repos for libx11-dev:i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt -y install clang git cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls28-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libxft-dev&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  sudo apt -y install curl&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Create build directory&lt;br /&gt;
mkdir GNUstep-build&lt;br /&gt;
cd GNUstep-build&lt;br /&gt;
&lt;br /&gt;
# Set clang as compiler&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
# Checkout sources&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Checking out sources...${NC}&amp;quot;&lt;br /&gt;
#git clone https://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
git clone https://github.com/plaurent/libdispatch.git&lt;br /&gt;
cd libdispatch&lt;br /&gt;
  git checkout fix_major_missing_symbol_for_ubuntu1904&lt;br /&gt;
cd ..&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2.git&lt;br /&gt;
git clone https://github.com/gnustep/tools-make.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-base.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-gui.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-back.git&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  git clone https://github.com/gnustep/apps-projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gworkspace.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-systempreferences.git&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make first time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the first time...${NC}&amp;quot;&lt;br /&gt;
cd tools-make&lt;br /&gt;
# git checkout `git rev-list -1 --first-parent --before=2017-04-06 master` # fixes segfault, should probably be looked at.&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep  --enable-objc-arc  --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libdispatch&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libdispatch...${NC}&amp;quot;&lt;br /&gt;
cd ../libdispatch&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
../configure  --prefix=/usr&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libobjc2&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libobjc2...${NC}&amp;quot;&lt;br /&gt;
cd ../../libobjc2&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang -DCMAKE_ASM_COMPILER=clang -DTESTS=OFF&lt;br /&gt;
cmake --build .&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
export LDFLAGS=-ldispatch&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make second time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the second time...${NC}&amp;quot;&lt;br /&gt;
cd ../../tools-make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-arc --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep base&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-base...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep GUI&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN} Building GNUstep-gui...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep back&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-back...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building ProjectCenter...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-projectcenter/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building Gorm...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gorm/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building GWorkspace...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gworkspace/&lt;br /&gt;
  ./configure&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building SystemPreferences...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-systempreferences/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Install is done. Open a new terminal to start using.${NC}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On older versions of Ubuntu you won't have a recent enough clang.  To build clang yourself (instead of apt install clang), use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc  blocktest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7063</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7063"/>
		<updated>2019-04-22T02:47:51Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following scripts compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
NOTE: Unless you have a need for the above features, its recommended to install from the default repos as often the scripts below have issues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install gnustep&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 19.04 ===&lt;br /&gt;
&lt;br /&gt;
In addition to building everything, this script also provides the ability to build the most recent version of four apps: Project Center, Gorm, GWorkspace, and System Preferences.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Show prompt function&lt;br /&gt;
function showPrompt()&lt;br /&gt;
{&lt;br /&gt;
  if [ &amp;quot;$PROMPT&amp;quot; = true ] ; then&lt;br /&gt;
    echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
    read -p &amp;quot;${GREEN}Press enter to continue...${NC}&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Set colors&lt;br /&gt;
GREEN=`tput setaf 2`&lt;br /&gt;
NC=`tput sgr0` # No Color&lt;br /&gt;
&lt;br /&gt;
# Set to true to also build and install apps&lt;br /&gt;
APPS=true&lt;br /&gt;
&lt;br /&gt;
# Set to true to pause after each build to verify successful build and installation&lt;br /&gt;
PROMPT=false&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
sudo apt update&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Installing dependencies...${NC}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386  # Enable 32-bit repos for libx11-dev:i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt -y install clang git cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls28-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libxft-dev&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  sudo apt -y install curl&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Create build directory&lt;br /&gt;
mkdir GNUstep-build&lt;br /&gt;
cd GNUstep-build&lt;br /&gt;
&lt;br /&gt;
# Set clang as compiler&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
# Checkout sources&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Checking out sources...${NC}&amp;quot;&lt;br /&gt;
#git clone https://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
git clone https://github.com/plaurent/libdispatch.git&lt;br /&gt;
cd libdispatch&lt;br /&gt;
  git checkout fix_major_missing_symbol_for_ubuntu1904&lt;br /&gt;
cd ..&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2.git&lt;br /&gt;
git clone https://github.com/gnustep/tools-make.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-base.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-gui.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-back.git&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  git clone https://github.com/gnustep/apps-projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gworkspace.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-systempreferences.git&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make first time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the first time...${NC}&amp;quot;&lt;br /&gt;
cd tools-make&lt;br /&gt;
# git checkout `git rev-list -1 --first-parent --before=2017-04-06 master` # fixes segfault, should probably be looked at.&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep  --enable-objc-arc  --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libdispatch&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libdispatch...${NC}&amp;quot;&lt;br /&gt;
cd ../libdispatch&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
../configure  --prefix=/usr&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libobjc2&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libobjc2...${NC}&amp;quot;&lt;br /&gt;
cd ../../libobjc2&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang -DCMAKE_ASM_COMPILER=clang -DTESTS=OFF&lt;br /&gt;
cmake --build .&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
export LDFLAGS=-ldispatch&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make second time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the second time...${NC}&amp;quot;&lt;br /&gt;
cd ../../tools-make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-arc --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep base&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-base...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep GUI&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN} Building GNUstep-gui...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep back&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-back...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building ProjectCenter...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-projectcenter/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building Gorm...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gorm/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building GWorkspace...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gworkspace/&lt;br /&gt;
  ./configure&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building SystemPreferences...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-systempreferences/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Install is done. Open a new terminal to start using.${NC}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On older versions of Ubuntu you won't have a recent enough clang.  To build clang yourself (instead of apt install clang), use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc  blocktest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7062</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=7062"/>
		<updated>2019-04-22T02:06:35Z</updated>

		<summary type="html">&lt;p&gt;Pakl: Updates for new (mid-2018) GNUstep make parameters and libobjc gnustep 2.0 runtime&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following scripts compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
NOTE: Unless you have a need for the above features, its recommended to install from the default repos as often the scripts below have issues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install gnustep&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 19.04 ===&lt;br /&gt;
&lt;br /&gt;
In addition to building everything, this script also provides the ability to build the most recent version of four apps: Project Center, Gorm, GWorkspace, and System Preferences.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Show prompt function&lt;br /&gt;
function showPrompt()&lt;br /&gt;
{&lt;br /&gt;
  if [ &amp;quot;$PROMPT&amp;quot; = true ] ; then&lt;br /&gt;
    echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
    read -p &amp;quot;${GREEN}Press enter to continue...${NC}&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Set colors&lt;br /&gt;
GREEN=`tput setaf 2`&lt;br /&gt;
NC=`tput sgr0` # No Color&lt;br /&gt;
&lt;br /&gt;
# Set to true to also build and install apps&lt;br /&gt;
APPS=true&lt;br /&gt;
&lt;br /&gt;
# Set to true to pause after each build to verify successful build and installation&lt;br /&gt;
PROMPT=true&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
sudo apt update&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Installing dependencies...${NC}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386  # Enable 32-bit repos for libx11-dev:i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt -y install clang git cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls28-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libxft-dev&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  sudo apt -y install curl&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Create build directory&lt;br /&gt;
mkdir GNUstep-build&lt;br /&gt;
cd GNUstep-build&lt;br /&gt;
&lt;br /&gt;
# Set clang as compiler&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
# Checkout sources&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Checking out sources...${NC}&amp;quot;&lt;br /&gt;
#git clone https://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
git clone https://github.com/plaurent/libdispatch.git&lt;br /&gt;
cd libdispatch&lt;br /&gt;
  git checkout fix_major_missing_symbol_for_ubuntu1904&lt;br /&gt;
cd ..&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2.git&lt;br /&gt;
git clone https://github.com/gnustep/tools-make.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-base.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-gui.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-back.git&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  git clone https://github.com/gnustep/apps-projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gworkspace.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-systempreferences.git&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make first time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the first time...${NC}&amp;quot;&lt;br /&gt;
cd tools-make&lt;br /&gt;
# git checkout `git rev-list -1 --first-parent --before=2017-04-06 master` # fixes segfault, should probably be looked at.&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep  --enable-objc-arc  --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libdispatch&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libdispatch...${NC}&amp;quot;&lt;br /&gt;
cd ../libdispatch&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
../configure  --prefix=/usr&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libobjc2&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libobjc2...${NC}&amp;quot;&lt;br /&gt;
cd ../../libobjc2&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang -DCMAKE_ASM_COMPILER=clang -DTESTS=OFF&lt;br /&gt;
cmake --build .&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
export LDFLAGS=-ldispatch&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-1.9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make second time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the second time...${NC}&amp;quot;&lt;br /&gt;
cd ../../tools-make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-arc --with-library-combo=ng-gnu-gnu&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep base&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-base...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep GUI&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN} Building GNUstep-gui...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep back&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-back...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building ProjectCenter...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-projectcenter/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building Gorm...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gorm/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building GWorkspace...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gworkspace/&lt;br /&gt;
  ./configure&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building SystemPreferences...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-systempreferences/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Install is done. Open a new terminal to start using.${NC}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On older versions of Ubuntu you won't have a recent enough clang.  To build clang yourself (instead of apt install clang), use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc  blocktest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
./a.out&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-2.0&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6983</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6983"/>
		<updated>2018-01-14T07:15:48Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* 16.04, 16.10, &amp;amp; 17.04 */  --add-architecture i386  # Enable 32-bit repos for libx11-dev:i386&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch  ==&lt;br /&gt;
&lt;br /&gt;
The following scripts compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
NOTE: Unless you have a need for the above features, its recommended to install from the default repos as often the scripts below have issues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install gnustep&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 16.04, 16.10, &amp;amp; 17.04===&lt;br /&gt;
&lt;br /&gt;
In addition to building everything, this script also provides the ability to build the most recent version of four apps: Project Center, Gorm, GWorkspace, and System Preferences.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Show prompt function&lt;br /&gt;
function showPrompt()&lt;br /&gt;
{&lt;br /&gt;
  if [ &amp;quot;$PROMPT&amp;quot; = true ] ; then&lt;br /&gt;
    echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
    read -p &amp;quot;${GREEN}Press enter to continue...${NC}&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Set colors&lt;br /&gt;
GREEN=`tput setaf 2`&lt;br /&gt;
NC=`tput sgr0` # No Color&lt;br /&gt;
&lt;br /&gt;
# Set to true to also build and install apps&lt;br /&gt;
APPS=true&lt;br /&gt;
&lt;br /&gt;
# Set to true to pause after each build to verify successful build and installation&lt;br /&gt;
PROMPT=true&lt;br /&gt;
&lt;br /&gt;
# Install Requirements&lt;br /&gt;
sudo apt update&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Installing dependencies...${NC}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386  # Enable 32-bit repos for libx11-dev:i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt -y install clang git cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls28-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libxft-dev&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  sudo apt -y install curl&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Create build directory&lt;br /&gt;
mkdir GNUstep-build&lt;br /&gt;
cd GNUstep-build&lt;br /&gt;
&lt;br /&gt;
# Set clang as compiler&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
# Checkout sources&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Checking out sources...${NC}&amp;quot;&lt;br /&gt;
git clone https://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2.git&lt;br /&gt;
git clone https://github.com/gnustep/tools-make.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-base.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-gui.git&lt;br /&gt;
git clone https://github.com/gnustep/libs-back.git&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  git clone https://github.com/gnustep/apps-projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-gworkspace.git&lt;br /&gt;
  git clone https://github.com/gnustep/apps-systempreferences.git&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make first time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the first time...${NC}&amp;quot;&lt;br /&gt;
cd tools-make&lt;br /&gt;
git checkout `git rev-list -1 --first-parent --before=2017-04-06 master` # fixes segfault, should probably be looked at.&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi --enable-objc-arc&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libdispatch&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libdispatch...${NC}&amp;quot;&lt;br /&gt;
cd ../libdispatch&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
../configure  --prefix=/usr&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build libobjc2&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building libobjc2...${NC}&amp;quot;&lt;br /&gt;
cd ../../libobjc2&lt;br /&gt;
rm -Rf build&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang -DCMAKE_ASM_COMPILER=clang -DTESTS=OFF&lt;br /&gt;
cmake --build .&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
export LDFLAGS=-ldispatch&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
OBJCFLAGS=&amp;quot;-fblocks -fobjc-runtime=gnustep-1.8.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep make second time&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-make for the second time...${NC}&amp;quot;&lt;br /&gt;
cd ../../tools-make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi --enable-objc-arc&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep base&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-base...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep GUI&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN} Building GNUstep-gui...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
# Build GNUstep back&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Building GNUstep-back...${NC}&amp;quot;&lt;br /&gt;
cd ../libs-back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
showPrompt&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$APPS&amp;quot; = true ] ; then&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building ProjectCenter...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-projectcenter/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building Gorm...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gorm/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building GWorkspace...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-gworkspace/&lt;br /&gt;
  ./configure&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
  showPrompt&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${GREEN}Building SystemPreferences...${NC}&amp;quot;&lt;br /&gt;
  cd ../apps-systempreferences/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
echo -e &amp;quot;${GREEN}Install is done. Open a new terminal to start using.${NC}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 14.04 &amp;amp; 15.04 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
sudo apt-get -y install python-dev libncurses5-dev doxygen swig libedit-dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2&lt;br /&gt;
&lt;br /&gt;
# OBTAIN, COMPILE, INSTALL THE LATEST LLVM/clang. (Doing apt-get install clang instead may or may not work.)&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 12.04 ===&lt;br /&gt;
&lt;br /&gt;
This uses the same as the 14.04 &amp;amp; 15.04 except there are some additional requirements.&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now run the 14.04 &amp;amp; 15.04 script.&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.8.1&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6881</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6881"/>
		<updated>2016-02-28T02:11:39Z</updated>

		<summary type="html">&lt;p&gt;Pakl: add libedit-dev to deal with readline error during lldb compilation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04, 15.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
''(See below for Ubuntu 12.04 help.)&lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
sudo apt-get -y install python-dev libncurses5-dev doxygen swig libedit-dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2&lt;br /&gt;
&lt;br /&gt;
# OBTAIN, COMPILE, INSTALL THE LATEST LLVM/clang. (Doing apt-get install clang instead may or may not work.)&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.8.1&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6880</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6880"/>
		<updated>2016-02-28T01:57:09Z</updated>

		<summary type="html">&lt;p&gt;Pakl: add package requirements needed in ubuntu 15.10&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04, 15.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
''(See below for Ubuntu 12.04 help.)&lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
sudo apt-get -y install python-dev libncurses5-dev doxygen swig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2&lt;br /&gt;
&lt;br /&gt;
# OBTAIN, COMPILE, INSTALL THE LATEST LLVM/clang. (Doing apt-get install clang instead may or may not work.)&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.8.1&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6879</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6879"/>
		<updated>2016-02-27T18:52:40Z</updated>

		<summary type="html">&lt;p&gt;Pakl: Ensure i386 arch is available (was needed for Ubuntu 15.10)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04, 15.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
''(See below for Ubuntu 12.04 help.)&lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo dpkg --add-architecture i386&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2&lt;br /&gt;
&lt;br /&gt;
# OBTAIN, COMPILE, INSTALL THE LATEST LLVM/clang. (Doing apt-get install clang instead may or may not work.)&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.8.1&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6878</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6878"/>
		<updated>2016-02-21T21:46:48Z</updated>

		<summary type="html">&lt;p&gt;Pakl: Added checkout of LLDB so it gets built too&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04, 15.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
''(See below for Ubuntu 12.04 help.)&lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2&lt;br /&gt;
&lt;br /&gt;
# OBTAIN, COMPILE, INSTALL THE LATEST LLVM/clang. (Doing apt-get install clang instead may or may not work.)&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.8.1&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6873</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6873"/>
		<updated>2015-12-14T05:37:21Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch (Ubuntu 14.04, 15.04) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04, 15.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
''(See below for Ubuntu 12.04 help.)&lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2&lt;br /&gt;
&lt;br /&gt;
# OBTAIN, COMPILE, INSTALL THE LATEST LLVM/clang. (Doing apt-get install clang instead may or may not work.)&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake -D CMAKE_BUILD_TYPE:STRING=Release ..    # If you don't choose Release, it defaults to Debug which takes lots more space&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.8.1&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6870</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6870"/>
		<updated>2015-12-02T07:28:48Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch (Ubuntu 14.04, 15.04) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04, 15.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
''(See below for Ubuntu 12.04 help.)&lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
Reference manuals for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2&lt;br /&gt;
&lt;br /&gt;
# OBTAIN, COMPILE, INSTALL THE LATEST LLVM/clang. (Doing apt-get install clang instead may or may not work.)&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.8.1&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6867</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6867"/>
		<updated>2015-11-29T17:41:56Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04, 15.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
''(See below for Ubuntu 12.04 help.)&lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2&lt;br /&gt;
&lt;br /&gt;
# OBTAIN, COMPILE, INSTALL THE LATEST LLVM/clang. (Doing apt-get install clang instead may or may not work.)&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.8.1&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6866</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6866"/>
		<updated>2015-11-29T17:41:40Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch (Ubuntu 14.04) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
 Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04, 15.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script compiles and installs everything needed for Objective-C 2.0 from scratch.  The script uses clang and libobjc2 for all the awesome new features like ARC, blocks, etc.&lt;br /&gt;
&lt;br /&gt;
''(See below for Ubuntu 12.04 help.)&lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2&lt;br /&gt;
&lt;br /&gt;
# OBTAIN, COMPILE, INSTALL THE LATEST LLVM/clang. (Doing apt-get install clang instead may or may not work.)&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.8.1&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in https://github.com/gnustep/libobjc2 (e.g., ANNOUNCE.1.8.1))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6860</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6860"/>
		<updated>2015-10-03T04:49:02Z</updated>

		<summary type="html">&lt;p&gt;Pakl: No longer check out old libobjc2 1.7 from svn.gna.org, get newer one from github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script installs everything from scratch.  It uses clang and libobjc2 for all the new Objective-C 2 features like ARC, Blocks, etc.  '''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
These instructions were tested on a fresh installation of Ubuntu 14.04 on May 31, 2015.&lt;br /&gt;
&lt;br /&gt;
Note: If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working on 12.04.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
git clone https://github.com/gnustep/libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6852</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6852"/>
		<updated>2015-05-31T23:21:56Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script installs everything from scratch.  It uses clang and libobjc2 for all the new Objective-C 2 features like ARC, Blocks, etc.  '''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
These instructions were tested on a fresh installation of Ubuntu 14.04 on May 31, 2015.&lt;br /&gt;
&lt;br /&gt;
Note: If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working on 12.04.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# Using COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# Using MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6851</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6851"/>
		<updated>2015-05-31T23:20:52Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script installs everything from scratch.  It uses clang and libobjc2 for all the new Objective-C 2 features like ARC, Blocks, etc.  '''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
These instructions were tested on a fresh installation of Ubuntu 14.04 on May 31, 2015.&lt;br /&gt;
&lt;br /&gt;
Note: If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working on 12.04.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
The following is some Objective-C source code from the internet.  &lt;br /&gt;
It demonstrates blocks, Grand Central Dispatch, and the use of GNUStep GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6850</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6850"/>
		<updated>2015-05-31T23:13:21Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script installs everything from scratch.  It uses clang and libobjc2 for all the new Objective-C 2 features like ARC, Blocks, etc.  '''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
These instructions were tested on a fresh installation of Ubuntu 14.04 on May 31, 2015.&lt;br /&gt;
&lt;br /&gt;
Note: If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working on 12.04.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
GUITest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6849</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6849"/>
		<updated>2015-05-31T23:12:10Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script installs everything from scratch.  It uses clang and libobjc2 for all the new Objective-C 2 features like ARC, Blocks, etc.  '''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
These instructions were tested on a fresh installation of Ubuntu 14.04 on May 31, 2015.&lt;br /&gt;
&lt;br /&gt;
Note: If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working on 12.04.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
PanelTest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include \$(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6848</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6848"/>
		<updated>2015-05-31T23:10:17Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script installs everything from scratch.  It uses clang and libobjc2 for all the new Objective-C 2 features like ARC, Blocks, etc.  '''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
These instructions were tested on a fresh installation of Ubuntu 14.04 on May 31, 2015.&lt;br /&gt;
&lt;br /&gt;
Note: If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working on 12.04.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
# COMMAND LINE&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
# MAKEFILE&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; GNUmakefile &amp;lt;&amp;lt; EOF&lt;br /&gt;
include $(GNUSTEP_MAKEFILES)/common.make&lt;br /&gt;
&lt;br /&gt;
APP_NAME = GUITest&lt;br /&gt;
PanelTest_OBJC_FILES = guitest.m&lt;br /&gt;
&lt;br /&gt;
include $(GNUSTEP_MAKEFILES)/application.make&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
openapp ./GUITest.app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6847</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6847"/>
		<updated>2015-05-31T23:04:32Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script installs everything from scratch.  It uses clang and libobjc2 for all the new Objective-C 2 features like ARC, Blocks, etc.  '''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
These instructions were tested on a fresh installation of Ubuntu 14.04 on May 31, 2015.&lt;br /&gt;
&lt;br /&gt;
Note: If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working on 12.04.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev \&lt;br /&gt;
libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \&lt;br /&gt;
libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6846</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6846"/>
		<updated>2015-05-31T23:03:22Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script installs everything from scratch.  It uses clang and libobjc2 for all the new Objective-C 2 features like ARC, Blocks, etc.  '''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
These instructions were tested on a fresh installation of Ubuntu 14.04 on May 31, 2015.&lt;br /&gt;
&lt;br /&gt;
Note: If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working on 12.04.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool   libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6845</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6845"/>
		<updated>2015-05-31T23:02:31Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch (Ubuntu 14.04) ==&lt;br /&gt;
&lt;br /&gt;
The following script installs everything from scratch.  It uses clang and libobjc2 for all the new Objective-C 2 features like ARC, Blocks, etc.  '''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working on 12.04.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -y install build-essential git subversion ninja cmake libffi-dev libxml2-dev libgnutls-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool   libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev:i386 libxt-dev libXft-dev&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
export PATH=$PATH:~/llvm/build/bin&lt;br /&gt;
export CC=clang&lt;br /&gt;
export CXX=clang++&lt;br /&gt;
&lt;br /&gt;
. ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
rm -rf build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
rm -rf libdispatch-build&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Install is done. Open a new terminal or type source ~/.bashrc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Code ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL);&lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# ======================================================================&lt;br /&gt;
# COMPILE USING THE FOLLOWING COMMAND LINES, OR CREATE A MAKEFILE&lt;br /&gt;
# ======================================================================&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6842</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6842"/>
		<updated>2015-05-31T06:44:22Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch ==&lt;br /&gt;
&lt;br /&gt;
The compilation instructions below are divided into two steps. &lt;br /&gt;
The first step compiles the *base* (non-graphical) parts of GNUStep, including setting up the Objective-C compiler. &lt;br /&gt;
The second step compiles the graphical parts of GNUStep.  After installing everything below, you could install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working.&lt;br /&gt;
&lt;br /&gt;
'''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# STEP 2:  INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
Some other notes:&lt;br /&gt;
&lt;br /&gt;
* We use clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Tested on fresh installs of (and likely with a more completed installation of):&lt;br /&gt;
* Ubuntu 12.10 Server.&lt;br /&gt;
* Ubuntu 13.10 Desktop.&lt;br /&gt;
* Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6834</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6834"/>
		<updated>2015-04-05T21:40:04Z</updated>

		<summary type="html">&lt;p&gt;Pakl: (don't clone the libdispatch repo a second time)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch ==&lt;br /&gt;
&lt;br /&gt;
The compilation instructions below are divided into two steps. &lt;br /&gt;
The first step compiles the *base* (non-graphical) parts of GNUStep, including setting up the Objective-C compiler. &lt;br /&gt;
The second step compiles the graphical parts of GNUStep.  After installing everything below, you could install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working.&lt;br /&gt;
&lt;br /&gt;
'''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# STEP 2:  INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
Some other notes:&lt;br /&gt;
&lt;br /&gt;
* We use clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Tested on fresh installs of (and likely with a more completed installation of):&lt;br /&gt;
* Ubuntu 12.10 Server.&lt;br /&gt;
* Ubuntu 13.10 Desktop.&lt;br /&gt;
* Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6833</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6833"/>
		<updated>2015-04-05T21:39:27Z</updated>

		<summary type="html">&lt;p&gt;Pakl: Updated with the new libdispatch compile instructions (no longer autogen but ../configure)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch ==&lt;br /&gt;
&lt;br /&gt;
The compilation instructions below are divided into two steps. &lt;br /&gt;
The first step compiles the *base* (non-graphical) parts of GNUStep, including setting up the Objective-C compiler. &lt;br /&gt;
The second step compiles the graphical parts of GNUStep.  After installing everything below, you could install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working.&lt;br /&gt;
&lt;br /&gt;
'''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git &amp;amp;&amp;amp; cd libdispatch&lt;br /&gt;
mkdir libdispatch-build &amp;amp;&amp;amp; cd libdispatch-build&lt;br /&gt;
../configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# STEP 2:  INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
Some other notes:&lt;br /&gt;
&lt;br /&gt;
* We use clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Tested on fresh installs of (and likely with a more completed installation of):&lt;br /&gt;
* Ubuntu 12.10 Server.&lt;br /&gt;
* Ubuntu 13.10 Desktop.&lt;br /&gt;
* Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6700</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6700"/>
		<updated>2014-08-02T20:42:17Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch ==&lt;br /&gt;
&lt;br /&gt;
The compilation instructions below are divided into two steps. &lt;br /&gt;
The first step compiles the *base* (non-graphical) parts of GNUStep, including setting up the Objective-C compiler. &lt;br /&gt;
The second step compiles the graphical parts of GNUStep.  After installing everything below, you could install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working.&lt;br /&gt;
&lt;br /&gt;
'''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# STEP 2:  INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
Some other notes:&lt;br /&gt;
&lt;br /&gt;
* We use clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Tested on fresh installs of (and likely with a more completed installation of):&lt;br /&gt;
* Ubuntu 12.10 Server.&lt;br /&gt;
* Ubuntu 13.10 Desktop.&lt;br /&gt;
* Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6699</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6699"/>
		<updated>2014-08-02T20:42:04Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch ==&lt;br /&gt;
&lt;br /&gt;
The compilation instructions below are divided into two steps. &lt;br /&gt;
The first step compiles the *base* (non-graphical) parts of GNUStep, including setting up the Objective-C compiler. &lt;br /&gt;
The second step compiles the graphical parts of GNUStep.  After installing everything below, you could install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Reference manuals''' for GNUStep, including available APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# STEP 2:  INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
Some other notes:&lt;br /&gt;
&lt;br /&gt;
* We use clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Tested on fresh installs of (and likely with a more completed installation of):&lt;br /&gt;
* Ubuntu 12.10 Server.&lt;br /&gt;
* Ubuntu 13.10 Desktop.&lt;br /&gt;
* Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6698</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6698"/>
		<updated>2014-08-02T20:41:28Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch ==&lt;br /&gt;
&lt;br /&gt;
The compilation instructions below are divided into two steps. &lt;br /&gt;
The first step compiles the *base* (non-graphical) parts of GNUStep, including setting up the Objective-C compiler. &lt;br /&gt;
The second step compiles the graphical parts of GNUStep.  &lt;br /&gt;
&lt;br /&gt;
If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working.&lt;br /&gt;
&lt;br /&gt;
After installing everything below, you could install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
'''Reference manuals''' for GNUStep, including availabl APIs, etc, are available at http://www.gnustep.org/developers/documentation.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# STEP 2:  INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
Some other notes:&lt;br /&gt;
&lt;br /&gt;
* We use clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Tested on fresh installs of (and likely with a more completed installation of):&lt;br /&gt;
* Ubuntu 12.10 Server.&lt;br /&gt;
* Ubuntu 13.10 Desktop.&lt;br /&gt;
* Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6697</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6697"/>
		<updated>2014-08-02T20:34:31Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling Everything from Scratch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch ==&lt;br /&gt;
&lt;br /&gt;
The compilation instructions below are divided into two steps. &lt;br /&gt;
The first step compiles the *base* (non-graphical) parts of GNUStep, including setting up the Objective-C compiler. &lt;br /&gt;
The second step compiles the graphical parts of GNUStep.  &lt;br /&gt;
&lt;br /&gt;
If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working.&lt;br /&gt;
&lt;br /&gt;
After installing everything below, you could install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# STEP 2:  INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
  app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
  NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
  [alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
  [alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
  int result = [alert runModal];&lt;br /&gt;
  if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
    NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
Some other notes:&lt;br /&gt;
&lt;br /&gt;
* We use clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Tested on fresh installs of (and likely with a more completed installation of):&lt;br /&gt;
* Ubuntu 12.10 Server.&lt;br /&gt;
* Ubuntu 13.10 Desktop.&lt;br /&gt;
* Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6696</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6696"/>
		<updated>2014-08-02T20:33:49Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch ==&lt;br /&gt;
&lt;br /&gt;
The compilation instructions below are divided into two steps. &lt;br /&gt;
The first step compiles the *base* (non-graphical) parts of GNUStep, including setting up the Objective-C compiler. &lt;br /&gt;
The second step compiles the graphical parts of GNUStep.  &lt;br /&gt;
&lt;br /&gt;
If you are using Ubuntu 12.04, your version of CMake and/or g++ may be too old to handle the newer versions of LLVM.  See the bottom of this wiki page for instructions on how to get a newer version of CMake working.&lt;br /&gt;
&lt;br /&gt;
After installing everything below, you could install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# STEP 2:  INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
[alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
[alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
int result = [alert runModal];&lt;br /&gt;
if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
  NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
Some other notes:&lt;br /&gt;
&lt;br /&gt;
* We use clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Tested on fresh installs of (and likely with a more completed installation of):&lt;br /&gt;
* Ubuntu 12.10 Server.&lt;br /&gt;
* Ubuntu 13.10 Desktop.&lt;br /&gt;
* Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6695</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6695"/>
		<updated>2014-08-02T20:32:04Z</updated>

		<summary type="html">&lt;p&gt;Pakl: Improve guitest so it returns/exits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling Everything from Scratch ==&lt;br /&gt;
&lt;br /&gt;
The compilation instructions below are divided into two steps. &lt;br /&gt;
The first step compiles the *base* (non-graphical) parts of GNUStep, including setting up the Objective-C compiler. &lt;br /&gt;
The second step compiles the graphical parts of GNUStep.  &lt;br /&gt;
&lt;br /&gt;
After installing everything below, you could install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# STEP 2:  INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
[alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
[alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
int result = [alert runModal];&lt;br /&gt;
if (result == NSAlertFirstButtonReturn) {&lt;br /&gt;
  NSLog(@&amp;quot;First button pressed&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
Some other notes:&lt;br /&gt;
&lt;br /&gt;
* We use clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Tested on fresh installs of (and likely with a more completed installation of):&lt;br /&gt;
* Ubuntu 12.10 Server.&lt;br /&gt;
* Ubuntu 13.10 Desktop.&lt;br /&gt;
* Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6689</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6689"/>
		<updated>2014-06-05T16:12:43Z</updated>

		<summary type="html">&lt;p&gt;Pakl: Update intro and explain compilation at bottom of page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling manually ==&lt;br /&gt;
&lt;br /&gt;
The compilation instructions below are divided into two steps. &lt;br /&gt;
The first step compiles the *base* (non-graphical) parts of GNUStep, including setting up the Objective-C compiler. &lt;br /&gt;
The second step compiles the graphical parts of GNUStep.  &lt;br /&gt;
&lt;br /&gt;
Some notes:&lt;br /&gt;
&lt;br /&gt;
* We use clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Tested on fresh installs of (and likely with a more completed installation of):&lt;br /&gt;
* Ubuntu 12.10 Server.&lt;br /&gt;
* Ubuntu 13.10 Desktop.&lt;br /&gt;
* Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
After installing everything below, you could install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# STEP 2:  INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
[alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
[alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
[alert runModal];&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* General Note: When compiling your own code, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6688</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6688"/>
		<updated>2014-06-01T05:14:04Z</updated>

		<summary type="html">&lt;p&gt;Pakl: Remove link to broken PPA page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Objective-C under Ubuntu Linux&lt;br /&gt;
&lt;br /&gt;
== Compiling manually ==&lt;br /&gt;
&lt;br /&gt;
* Uses clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Works with a fresh install and likely with a more completed installation.&lt;br /&gt;
* Works on Ubuntu 12.10 Server.&lt;br /&gt;
* Works on Ubuntu 13.10 Desktop.&lt;br /&gt;
* For Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
After this, you can try to install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# ADDITIONAL OPTIONAL STEPS FOR INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
[alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
[alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
[alert runModal];&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* General Note: When compiling, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6653</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6653"/>
		<updated>2014-02-10T05:39:56Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The most simple way to get an up-to-date installation of GNUstep on Debian or Ubuntu is to add the [https://launchpad.net/~gnustep-dev/+archive/weekly GNUstep weekly PPA] to your distribution sources, provided by the GNUstep Developers team on Launchpad. On how to do this in detail, see the PPA page.&lt;br /&gt;
&lt;br /&gt;
== Compiling manually ==&lt;br /&gt;
&lt;br /&gt;
* Uses clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Works with a fresh install and likely with a more completed installation.&lt;br /&gt;
* Works on Ubuntu 12.10 Server.&lt;br /&gt;
* Works on Ubuntu 13.10 Desktop.&lt;br /&gt;
* For Ubuntu 12.04 LTS Desktop, see bottom of the page for important info.&lt;br /&gt;
&lt;br /&gt;
After this, you can try to install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# ADDITIONAL OPTIONAL STEPS FOR INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
[alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
[alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
[alert runModal];&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* General Note: When compiling, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 12.04, the default installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.  And the default installed version of GCC and G++ is 4.6 but you need 4.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
For CMake, the solution is to download and compile CMake yourself.  Use the existing CMake 2.8.7 and then replace it:&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress it in a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get GCC and G++ 4.8, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should be good to go.&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6652</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6652"/>
		<updated>2014-02-10T05:30:46Z</updated>

		<summary type="html">&lt;p&gt;Pakl: Add libffi-dev, updated for latest llvm&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The most simple way to get an up-to-date installation of GNUstep on Debian or Ubuntu is to add the [https://launchpad.net/~gnustep-dev/+archive/weekly GNUstep weekly PPA] to your distribution sources, provided by the GNUstep Developers team on Launchpad. On how to do this in detail, see the PPA page.&lt;br /&gt;
&lt;br /&gt;
== Compiling manually ==&lt;br /&gt;
&lt;br /&gt;
* Uses clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Works with a fresh install and likely with a more completed installation.&lt;br /&gt;
* Works on Ubuntu 12.10 Server.&lt;br /&gt;
* Works on Ubuntu 13.10 Desktop.&lt;br /&gt;
* If you're trying Ubuntu 12.04 Desktop, see bottom of the page for help.&lt;br /&gt;
&lt;br /&gt;
After this, you can try to install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# ADDITIONAL OPTIONAL STEPS FOR INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev libffi-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
[alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
[alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
[alert runModal];&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* General Note: When compiling, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Ubuntu 12.04 Desktop, the installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
patryk@telperion:~/llvm/build$ cmake ..&lt;br /&gt;
CMake Error at CMakeLists.txt:3 (cmake_minimum_required):&lt;br /&gt;
  CMake 2.8.8 or higher is required.  You are running version 2.8.7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Configuring incomplete, errors occurred!&lt;br /&gt;
patryk@telperion:~/llvm/build$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution is to download and compile CMake yourself, using the existing CMake 2.8.7 and then replacing it.&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress iin a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You probably will also need to upgrade to a newer GCC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If running make -j8 in llvm failed with a &amp;quot;syntax error in VERSION script&amp;quot; error, &lt;br /&gt;
you may be able to overcome it by doing the following steps &amp;lt;b&amp;gt;after getting the error&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# After make -j8 returned a syntax error in VERSION script error&lt;br /&gt;
cd ~/llvm/build&lt;br /&gt;
make clean&lt;br /&gt;
cd ~/llvm/build/tools/lto&lt;br /&gt;
make -j8&lt;br /&gt;
cd ~/llvm/build&lt;br /&gt;
make -j8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6651</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6651"/>
		<updated>2014-02-10T05:17:40Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The most simple way to get an up-to-date installation of GNUstep on Debian or Ubuntu is to add the [https://launchpad.net/~gnustep-dev/+archive/weekly GNUstep weekly PPA] to your distribution sources, provided by the GNUstep Developers team on Launchpad. On how to do this in detail, see the PPA page.&lt;br /&gt;
&lt;br /&gt;
== Compiling manually ==&lt;br /&gt;
&lt;br /&gt;
* Uses clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Works with a fresh install and likely with a more completed installation.&lt;br /&gt;
* Works on Ubuntu 12.10 Server.&lt;br /&gt;
* Works on Ubuntu 13.10 Desktop.&lt;br /&gt;
* If you're trying Ubuntu 12.04 Desktop, see bottom of the page for help.&lt;br /&gt;
&lt;br /&gt;
After this, you can try to install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# ADDITIONAL OPTIONAL STEPS FOR INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
[alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
[alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
[alert runModal];&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* General Note: When compiling, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Ubuntu 12.04 Desktop, the installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
patryk@telperion:~/llvm/build$ cmake ..&lt;br /&gt;
CMake Error at CMakeLists.txt:3 (cmake_minimum_required):&lt;br /&gt;
  CMake 2.8.8 or higher is required.  You are running version 2.8.7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Configuring incomplete, errors occurred!&lt;br /&gt;
patryk@telperion:~/llvm/build$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution is to download and compile CMake yourself, using the existing CMake 2.8.7 and then replacing it.&lt;br /&gt;
&lt;br /&gt;
# Download the latest CMake version from the CMake web site (http://www.cmake.org/cmake/resources/software.html), and uncompress iin a folder.&lt;br /&gt;
# Create a _build directory in the CMake sources folder. &lt;br /&gt;
# From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You probably will also need to upgrade to a newer GCC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If running make -j8 in llvm failed with a &amp;quot;syntax error in VERSION script&amp;quot; error, &lt;br /&gt;
you may be able to overcome it by doing the following steps &amp;lt;b&amp;gt;after getting the error&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# After make -j8 returned a syntax error in VERSION script error&lt;br /&gt;
cd ~/llvm/build&lt;br /&gt;
make clean&lt;br /&gt;
cd ~/llvm/build/tools/lto&lt;br /&gt;
make -j8&lt;br /&gt;
cd ~/llvm/build&lt;br /&gt;
make -j8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6650</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6650"/>
		<updated>2014-02-10T05:15:10Z</updated>

		<summary type="html">&lt;p&gt;Pakl: /* Compiling manually */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The most simple way to get an up-to-date installation of GNUstep on Debian or Ubuntu is to add the [https://launchpad.net/~gnustep-dev/+archive/weekly GNUstep weekly PPA] to your distribution sources, provided by the GNUstep Developers team on Launchpad. On how to do this in detail, see the PPA page.&lt;br /&gt;
&lt;br /&gt;
== Compiling manually ==&lt;br /&gt;
&lt;br /&gt;
* Uses clang and libobjc2 for all the new features like ARC, Blocks, etc.&lt;br /&gt;
* Works with a fresh install and likely with a more completed installation.&lt;br /&gt;
* Works on Ubuntu 12.10 Server.&lt;br /&gt;
* Works on Ubuntu 13.10 Desktop.&lt;br /&gt;
* If you're trying Ubuntu 12.04 Desktop, see bottom of the page for help.&lt;br /&gt;
&lt;br /&gt;
After this, you can try to install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# ADDITIONAL OPTIONAL STEPS FOR INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
[alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
[alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
[alert runModal];&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* General Note: When compiling, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Ubuntu 12.04 Desktop, the installed version of CMake is 2.8.7 but you need 2.8.8 or later to compile LLVM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
patryk@telperion:~/llvm/build$ cmake ..&lt;br /&gt;
CMake Error at CMakeLists.txt:3 (cmake_minimum_required):&lt;br /&gt;
  CMake 2.8.8 or higher is required.  You are running version 2.8.7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Configuring incomplete, errors occurred!&lt;br /&gt;
patryk@telperion:~/llvm/build$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution is to download and compile CMake yourself, using the existing CMake 2.8.7 and then replacing it.&lt;br /&gt;
&lt;br /&gt;
* Download the latest CMake version from the CMake web site, and uncompress iin a folder&lt;br /&gt;
* Create a _build directory in the CMake sources foldert &lt;br /&gt;
* From the _build directory, run the following commands to build and install CMake from sources:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr&lt;br /&gt;
make&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
sudo apt-get remove cmake cmake-data&lt;br /&gt;
sudo dpkg -i cmake*.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You probably will also need to upgrade to a newer GCC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install gcc-4.8 g++-4.8&lt;br /&gt;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50&lt;br /&gt;
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If running make -j8 in llvm failed with a &amp;quot;syntax error in VERSION script&amp;quot; error, &lt;br /&gt;
you may be able to overcome it by doing the following steps &amp;lt;b&amp;gt;after getting the error&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# After make -j8 returned a syntax error in VERSION script error&lt;br /&gt;
cd ~/llvm/build&lt;br /&gt;
make clean&lt;br /&gt;
cd ~/llvm/build/tools/lto&lt;br /&gt;
make -j8&lt;br /&gt;
cd ~/llvm/build&lt;br /&gt;
make -j8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6639</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6639"/>
		<updated>2014-01-02T07:13:00Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Objective C 2.0 on a fresh install of Ubuntu &lt;br /&gt;
&lt;br /&gt;
* Works on Ubuntu 12.10 Server&lt;br /&gt;
* Works on Ubuntu 13.10 Desktop &lt;br /&gt;
* (if you're trying Ubuntu 12.04 Desktop, see bottom of the page for help)&lt;br /&gt;
&lt;br /&gt;
After this, you can try to install EtoileOS: see [[EtoileOS under Ubuntu Linux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Objective C 2.0 on a fresh install of Ubuntu 12.10 Server&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# ADDITIONAL OPTIONAL STEPS FOR INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
[alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
[alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
[alert runModal];&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* General Note: When compiling, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Ubuntu 12.04 Desktop, I found that running make -j8 in llvm failed with a &amp;quot;syntax error in VERSION script&amp;quot; error.  &lt;br /&gt;
&lt;br /&gt;
I was able to overcome it by doing the following steps &amp;lt;b&amp;gt;after getting the error&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# After make -j8 returned a syntax error in VERSION script error&lt;br /&gt;
cd ~/llvm/build&lt;br /&gt;
make clean&lt;br /&gt;
cd ~/llvm/build/tools/lto&lt;br /&gt;
make -j8&lt;br /&gt;
cd ~/llvm/build&lt;br /&gt;
make -j8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6638</id>
		<title>GNUstep under Ubuntu Linux</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6638"/>
		<updated>2014-01-02T05:38:19Z</updated>

		<summary type="html">&lt;p&gt;Pakl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Objective C 2.0 on a fresh install of Ubuntu &lt;br /&gt;
&lt;br /&gt;
* Works on Ubuntu 12.10 Server&lt;br /&gt;
* Works on Ubuntu 13.10 Desktop &lt;br /&gt;
* (if you're trying Ubuntu 12.04 Desktop, see bottom of the page for help)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Objective C 2.0 on a fresh install of Ubuntu 12.10 Server&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install aptitude&lt;br /&gt;
# Dependencies&lt;br /&gt;
sudo aptitude -y install build-essential git subversion ninja cmake&lt;br /&gt;
# Dependencies for GNUStep Base&lt;br /&gt;
sudo aptitude -y install libffi-dev libxml2-dev libgnutls-dev libicu-dev &lt;br /&gt;
# Dependencies for libdispatch&lt;br /&gt;
sudo aptitude -y install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool&lt;br /&gt;
&lt;br /&gt;
cd ~&lt;br /&gt;
git clone git://github.com/nickhutchinson/libdispatch.git&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/modules/core&lt;br /&gt;
svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;
cd llvm/tools&lt;br /&gt;
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;br /&gt;
&lt;br /&gt;
cd ~/llvm&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8   # 8=your number of build CPUs&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;export PATH=\$PATH:~/llvm/build/bin&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CC=clang&amp;quot;  &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
echo &amp;quot;export CXX=clang++&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
clang -v&lt;br /&gt;
clang++ -v&lt;br /&gt;
&lt;br /&gt;
cd ~/libobjc2&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/make&lt;br /&gt;
./configure --enable-debug-by-default --with-layout=gnustep --enable-objc-nonfragile-abi&lt;br /&gt;
make &amp;amp;&amp;amp; sudo -E make install&lt;br /&gt;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;
source ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
sudo /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ~/core/base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/libdispatch&lt;br /&gt;
sh autogen.sh&lt;br /&gt;
./configure CFLAGS=&amp;quot;-I/usr/include/kqueue&amp;quot; LDFLAGS=&amp;quot;-lkqueue -lpthread_workqueue -pthread -lm&amp;quot;&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
# TEST COMPILING SOME CODE FROM THE INTERNET&lt;br /&gt;
# ----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -fobjc-arc -lobjc  blocktest.m &lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-base  Fraction.m helloGCD_objc.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; blocktest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    void (^hello)(void) = ^(void) {&lt;br /&gt;
        printf(&amp;quot;Hello, block!\n&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
    hello();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; helloGCD_objc.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dispatch/dispatch.h&amp;gt;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main( int argc, const char *argv[] ) {&lt;br /&gt;
   dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); &lt;br /&gt;
   Fraction *frac = [[Fraction alloc] init];&lt;br /&gt;
&lt;br /&gt;
   [frac setNumerator: 1];&lt;br /&gt;
   [frac setDenominator: 3];&lt;br /&gt;
&lt;br /&gt;
   // print it&lt;br /&gt;
   dispatch_sync(queue, ^{&lt;br /&gt;
     printf( &amp;quot;The fraction is: &amp;quot; );&lt;br /&gt;
     [frac print];&lt;br /&gt;
     printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
   });&lt;br /&gt;
   dispatch_release(queue);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.h &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;Foundation/NSObject.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface Fraction: NSObject {&lt;br /&gt;
   int numerator;&lt;br /&gt;
   int denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
-(void) setNumerator: (int) n;&lt;br /&gt;
-(void) setDenominator: (int) d;&lt;br /&gt;
-(int) numerator;&lt;br /&gt;
-(int) denominator;&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; Fraction.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;quot;Fraction.h&amp;quot;&lt;br /&gt;
#import &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation Fraction&lt;br /&gt;
-(void) print {&lt;br /&gt;
   printf( &amp;quot;%i/%i&amp;quot;, numerator, denominator );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setNumerator: (int) n {&lt;br /&gt;
   numerator = n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setDenominator: (int) d {&lt;br /&gt;
   denominator = d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) denominator {&lt;br /&gt;
   return denominator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) numerator {&lt;br /&gt;
   return numerator;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
# ADDITIONAL OPTIONAL STEPS FOR INSTALLING GUI AND BACK&lt;br /&gt;
# (i.e., if you're running Ubuntu Desktop)&lt;br /&gt;
# ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sudo aptitude install -y libjpeg-dev libtiff-dev&lt;br /&gt;
sudo aptitude install -y libcairo-dev libx11-dev:i386 libxt-dev&lt;br /&gt;
&lt;br /&gt;
cd ~/core/gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
cd ~/core/back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&lt;br /&gt;
&lt;br /&gt;
You can compile the following code with:&lt;br /&gt;
&lt;br /&gt;
clang `gnustep-config --objc-flags` `gnustep-config --objc-libs`  -fobjc-runtime=gnustep -fblocks -lobjc -fobjc-arc -ldispatch -lgnustep-base -lgnustep-gui  guitest.m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; guitest.m &amp;lt;&amp;lt; EOF&lt;br /&gt;
#import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
NSApplication *app;  // Without these 2 lines, seg fault may occur&lt;br /&gt;
app = [NSApplication sharedApplication];&lt;br /&gt;
&lt;br /&gt;
NSAlert * alert = [[NSAlert alloc] init];&lt;br /&gt;
[alert setMessageText:@&amp;quot;Hello alert&amp;quot;];&lt;br /&gt;
[alert addButtonWithTitle:@&amp;quot;All done&amp;quot;];&lt;br /&gt;
[alert runModal];&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* General Note: When compiling, it is generally good to tell clang both the family and version of the runtime: -fobjc-runtime=gnustep-1.7&lt;br /&gt;
(The current version number can be had by looking at the latest ANNOUNCE filename in http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk/ (e.g., ANNOUNCE.1.7))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ubuntu 12.04 Help&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Ubuntu 12.04 Desktop, I found that running make -j8 in llvm failed with a &amp;quot;syntax error in VERSION script&amp;quot; error.  &lt;br /&gt;
&lt;br /&gt;
I was able to overcome it by doing the following steps &amp;lt;b&amp;gt;after getting the error&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# After make -j8 returned a syntax error in VERSION script error&lt;br /&gt;
cd ~/llvm/build&lt;br /&gt;
make clean&lt;br /&gt;
cd ~/llvm/build/tools/lto&lt;br /&gt;
make -j8&lt;br /&gt;
cd ~/llvm/build&lt;br /&gt;
make -j8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pakl</name></author>
	</entry>
</feed>