<?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=Apple4ever</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=Apple4ever"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php/Special:Contributions/Apple4ever"/>
	<updated>2026-04-21T00:54:43Z</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=6938</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=6938"/>
		<updated>2017-06-20T00:00:14Z</updated>

		<summary type="html">&lt;p&gt;Apple4ever: Removed ninja as its not needed&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;
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>Apple4ever</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6936</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=6936"/>
		<updated>2017-06-13T20:56:31Z</updated>

		<summary type="html">&lt;p&gt;Apple4ever: Fixed segfault bug&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;
sudo apt -y install clang git ninja 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>Apple4ever</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6935</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=6935"/>
		<updated>2017-06-13T20:31:06Z</updated>

		<summary type="html">&lt;p&gt;Apple4ever: /* 16.04, 16.10, &amp;amp; 17.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;
=== 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;
'''NOTE: there is a bug that causes a crash when launch apps. It seems to be due to a recent change in the code. It is being investigated.'''&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;
sudo apt -y install clang git ninja 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`&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>Apple4ever</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6934</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=6934"/>
		<updated>2017-06-13T20:28:19Z</updated>

		<summary type="html">&lt;p&gt;Apple4ever: Added note about installing from default repos.&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;
'''NOTE: there is a bug that causes a crash when launch apps. It seems to be due to a recent change in the code. It is being investigated.'''&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;
sudo apt -y install clang git ninja 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;
./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>Apple4ever</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6933</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=6933"/>
		<updated>2017-06-13T20:23:12Z</updated>

		<summary type="html">&lt;p&gt;Apple4ever: Added note about crashes&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;
&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;
'''NOTE: there is a bug that causes a crash when launch apps. It seems to be due to a recent change in the code. It is being investigated.'''&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;
sudo apt -y install clang git ninja 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;
./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;
&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>Apple4ever</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6932</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=6932"/>
		<updated>2017-06-13T20:21:54Z</updated>

		<summary type="html">&lt;p&gt;Apple4ever: Added note for 17.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;
&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;
sudo apt -y install clang git ninja 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;
./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;
&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>Apple4ever</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6931</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=6931"/>
		<updated>2017-06-13T13:19:02Z</updated>

		<summary type="html">&lt;p&gt;Apple4ever: Updated for new github repositories&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;
&lt;br /&gt;
=== 16.04 &amp;amp; 16.10===&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;
sudo apt -y install clang git ninja 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;
./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;
&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>Apple4ever</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6903</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=6903"/>
		<updated>2016-10-20T02:49:00Z</updated>

		<summary type="html">&lt;p&gt;Apple4ever: /* 16.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;
&lt;br /&gt;
=== 16.04 &amp;amp; 16.10===&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;
sudo apt -y install clang git ninja 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/make&lt;br /&gt;
git clone https://github.com/gnustep/base.git&lt;br /&gt;
git clone https://github.com/gnustep/gui.git&lt;br /&gt;
git clone https://github.com/gnustep/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/projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/gworkspace.git&lt;br /&gt;
 	curl -O ftp://ftp.gnustep.org/pub/gnustep/usr-apps/SystemPreferences-1.2.0.tar.gz&lt;br /&gt;
  tar xvzf SystemPreferences-1.2.0.tar.gz&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 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;
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 ../../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 ../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 ../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 ../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 ../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 ../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 ../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 ../SystemPreferences-1.2.0/&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;
&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>Apple4ever</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6902</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=6902"/>
		<updated>2016-10-20T02:36:08Z</updated>

		<summary type="html">&lt;p&gt;Apple4ever: /* 16.04 */ Multiple bug fixes&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;
&lt;br /&gt;
=== 16.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;
sudo apt -y install clang git 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;
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/make&lt;br /&gt;
git clone https://github.com/gnustep/base.git&lt;br /&gt;
git clone https://github.com/gnustep/gui.git&lt;br /&gt;
git clone https://github.com/gnustep/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/projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/gworkspace.git&lt;br /&gt;
 	curl -O ftp://ftp.gnustep.org/pub/gnustep/usr-apps/SystemPreferences-1.2.0.tar.gz&lt;br /&gt;
  tar xvzf SystemPreferences-1.2.0.tar.gz&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 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;
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 ../../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 ../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 ../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 ../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 ../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 ../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 ../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 ../SystemPreferences-1.2.0/&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;
&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>Apple4ever</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_under_Ubuntu_Linux&amp;diff=6901</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=6901"/>
		<updated>2016-08-25T15:59:53Z</updated>

		<summary type="html">&lt;p&gt;Apple4ever: /* 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  ==&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;
&lt;br /&gt;
=== 16.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;
# 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;
# compare to dependencies on scripts&lt;br /&gt;
echo -e &amp;quot;\n\n${GREEN}Installing dependencies...${NC}&amp;quot;&lt;br /&gt;
sudo apt -y install clang git 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;
# 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/make&lt;br /&gt;
git clone https://github.com/gnustep/base.git&lt;br /&gt;
git clone https://github.com/gnustep/gui.git&lt;br /&gt;
git clone https://github.com/gnustep/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/projectcenter.git&lt;br /&gt;
  git clone https://github.com/gnustep/gorm.git&lt;br /&gt;
  git clone https://github.com/gnustep/gworkspace.git&lt;br /&gt;
 	curl -O ftp://ftp.gnustep.org/pub/gnustep/usr-apps/SystemPreferences-1.2.0.tar.gz&lt;br /&gt;
  tar xvzf SystemPreferences-1.2.0.tar.gz&lt;br /&gt;
fi&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;
# 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 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;
echo &amp;quot;. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh&amp;quot; &amp;gt;&amp;gt; ~/.bashrc&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;
# 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;
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;
# 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;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang -DCMAKE_ASM_COMPILER=clang -DCMAKE_ASM_FLAGS=-c -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;
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;
OBJCFLAGS=&amp;quot;-fblocks -fobjc-nonfragile-abi&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 ../../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;
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;
# 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 ../base/&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&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;
# 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 ../gui&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&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;
# 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 ../back&lt;br /&gt;
./configure&lt;br /&gt;
make -j8&lt;br /&gt;
sudo -E make install&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;
source ~/.bashrc&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 ../projectcenter/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&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;
  echo -e &amp;quot;${GREEN}Building Gorm...${NC}&amp;quot;&lt;br /&gt;
  cd ../gorm/&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&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;
  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 ../gworkspace/&lt;br /&gt;
  ./configure&lt;br /&gt;
  make -j8&lt;br /&gt;
  sudo -E make install&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;
  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 ../SystemPreferences-1.2.0/&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 or type source ~/.bashrc to use.${NC}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&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;
&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>Apple4ever</name></author>
	</entry>
</feed>