Difference between revisions of "HowTo compile on Mac"

From AMule Project FAQ
Jump to: navigation, search
m (wxMac: Updated link to wxMac sources and forum link to vswprintf issues)
(Binary releases: pipe correct typography)
 
(99 intermediate revisions by 33 users not shown)
Line 1: Line 1:
 +
<center>
 +
'''English''' |
 +
[[HowTo_compile_on_Mac-de|Deutsch]] |
 +
[[HowTo_compile_on_Mac-es|Espa&ntilde;ol]] |
 +
[[HowTo_compile_on_Mac-fr|Fran&ccedil;ais]] |
 +
[[HowTo_compile_on_Mac-it|Italiano]]
 +
</center>
 +
 
How to get and install [[aMule]] on [http://www.apple.com/macosx/ Apple Mac OS X].
 
How to get and install [[aMule]] on [http://www.apple.com/macosx/ Apple Mac OS X].
  
# You can simply download the finished application ('binary release') or
+
# You can simply download the finished application ('binary release');
# You compile it from a [[aMule CVS|CVS source snapshot]].
+
# You compile it from a [[aMule SVN|SVN source snapshot]] or [http://www.amule.org/files/files.php?cat=42 stable release source].
 
+
''The preceding version of this page covering [[aMule]] 2.0.0rc8 and earlier is archived [[HowTo_compile_on_Mac_v200rc8|here]].''
+
  
 
== Binary releases ==
 
== Binary releases ==
 
 
If you don't want to bother with installing and compiling all those tools and sources, then get one of the pre-compiled [[aMule]] applications. The official release is considered 'stable', but every now and then applications are built from the current source to allow more people to test new features or the like.  
 
If you don't want to bother with installing and compiling all those tools and sources, then get one of the pre-compiled [[aMule]] applications. The official release is considered 'stable', but every now and then applications are built from the current source to allow more people to test new features or the like.  
  
# Latest official binary release: [http://www.amule.org/files/files.php?cat=30 aMule-2.1.3-Mac]
+
Check the Mac forum for the most recent user posted binary: [http://forum.amule.org/index.php?board=49.0 aMule forum]
# Periodically compiled binary from cvs: [http://forum.amule.org/index.php?topic=5051.0 amule forum]
+
  
 
Now, to install the downloaded binary, just drag the aMule application to a folder of your choice (e.g., ''/Applications'').
 
Now, to install the downloaded binary, just drag the aMule application to a folder of your choice (e.g., ''/Applications'').
Line 17: Line 21:
 
To start aMule, double-click the application icon.
 
To start aMule, double-click the application icon.
  
'''Note:''' You might want to take a look at the [[Mac specific usage]] article.
+
'''Note:''' You might want to take a look at the [[Mac specific usage|Mac-specific usage]] article.
  
 
== Compiling from source ==
 
== Compiling from source ==
 +
Compiling from source allows most current bug reports, because you can compile and test the [[aMule SVN|SVN snapshot]] of the very day.
  
Compiling from source allows most current bug reports, because you can compile and test the [[aMule CVS|CVS snapshot]] of the very day.
+
To compile [[aMule]] from source you need some development tools, the [[wxWidgets]] library and the [http://www.amule.org/files/files.php?cat=42 aMule source].
 
+
To compile [[aMule]] from source you need some development tools, the [[wxWidgets]] library and the [http://dl.amule.org aMule source].
+
  
 
=== Get the sources and development tools ===
 
=== Get the sources and development tools ===
 +
==== Step 1: Download and install [http://developer.apple.com/tools/xcode Xcode] ====
 +
[http://developer.apple.com/tools/xcode Xcode] is [http://www.apple.com Apple]'s development environment. We need it for the [http://gcc.gnu.org GCC] compiler.
  
==== [http://developer.apple.com/tools/xcode Xcode] ====
+
You will need at least version 2.1 of Xcode, a more recent version is preferable though. You can download the most recent version of Xcode from Apple, but you will need to sign up for a free-of-charge developer account first or log-in using your iTunes Store account.
  
[http://developer.apple.com/tools/xcode Xcode] is [http://www.apple.com Apple]'s development environment. We need it for the [http://gcc.gnu.org GCC] compiler. You may have [http://developer.apple.com/tools/xcode Xcode] on CD/DVD, e.g. it is on the [http://www.apple.com/macosx/ OS X] 10.4 DVD.
+
# Get Xcode from http://developer.apple.com/tools/download
 +
# "Member Site"->"Log In"->"Download Software"->"Developer Tools"->"Download Xcode Tools last release">"Install"
  
Otherwise, you can download it from [http://www.apple.com Apple], but you must sign up for a free-of-charge developer account first.
+
==== Step 2: Install [http://www.macports.org MacPorts]====
 +
[http://www.macports.org MacPorts] is an open source installer for lots of open source tools ported to [http://macos.apple.com Mac OS X]. aMule needs a few of these tools to compile properly. Alternatively, <del>you can also use [http://www.finkproject.org/ Fink] to install these tools or</del> (Fink currently lacks many of the needed tools) you can install them manually .
  
# Get XCode from http://developer.apple.com/tools/download
+
# Download the most recent version of [http://www.macports.org MacPorts]
# "Member Site"->"Log In"->"Download Software"->"Developer Tools"->"Download Xcode Tools last release">"Install"
+
# Read [http://guide.macports.org/ MacPorts' documentation] to learn how to install applications through [http://www.macports.org MacPorts].
 +
 
 +
===== Syntax of most important commands =====
 +
Packages list can be downloaded/updated through
 +
 
 +
  $ sudo port selfupdate
 +
 
 +
You can upgrade all the packages installed with
 +
 
 +
  $ sudo port upgrade installed
 +
 
 +
Packages can be installed through
 +
 
 +
  $ sudo port install ''package_name''
 +
 
 +
and removed with
 +
 
 +
  $ sudo port uninstall ''package_name''
 +
 
 +
Port variants can be invoked with the plus sign:
 +
 
 +
  $ sudo port install ''package_name'' +universal
 +
 
 +
You can list all available variants with:
 +
 
 +
  $ sudo port variants ''package_name''
 +
 
 +
===== Notes about Universal variant =====
  
==== [http://fink.sourceforge.net Fink] ====
+
As stated [http://guide.macports.org/chunked/internals.configuration-files.html here], MacPorts has different build_arch settings for ''universal'' variant. You can use this variant on Leopard to switch both ppc and i386 version on. Since Snow Leopard doesn't support ppc architecture anymore, the universal variant can be used to switch both i386 and x86_64 version on. Please note that default architecture on Snow Leopard is x86_64 if the CPU supports it, i386 otherwise.
  
'''Optional:''' [http://fink.sourceforge.net Fink] and [http://www.gnu.org/software/gettext gettext] are not strictly required to compile [[aMule]], but without them [[aMule]] will only appear in english.
+
'''WARNING''': ''binutils'' [https://svn.macports.org/ticket/21588 fails] building universal. So you should set ''build_arch'' to ''i386'' (about line 59) into ''/opt/local/etc/macports/macports.conf'' to be sure to build every port against i386 architecture (x86_64 is useless since 64-bit Carbon libraries does not exists and wxCocoa is not ready yet).
  
[http://fink.sourceforge.net Fink] is an open source installer for lots of open source tools ported to [http://macos.apple.com Mac OSX]. We need it to install the open source tool [http://www.gnu.org/software/gettext gettext].
+
==== Step 3: Install libraries and tools ====
  
# Get [http://fink.sourceforge.net Fink] from http://fink.sourceforge.net/download
+
These are the package that provides (with dependancies) all needed libraries and tools to build [[wxWidgets]] and [[aMule]] with most of feature:
# Read [http://fink.sourceforge.net/download Fink's installation guide] to learn how to install applications through [http://fink.sourceforge.net Fink].
+
  
 +
# automake
 +
# binutils
 +
# flex
 +
# gettext
 +
# libpng
 +
# libcryptopp
 +
# libiconv
 +
# gd2
 +
# jpeg
 +
# libgeoip
 +
# libupnp
 +
# pkgconfig
  
==== [http://www.gnu.org/software/gettext gettext] ====
+
This should be enough:
  
'''Optional:''' [http://www.gnu.org/software/gettext gettext] and [http://fink.sourceforge.net Fink] are not strictly required to compile [[aMule]], but without them [[aMule]] will only appear in english.
+
  $ sudo port install automake binutils flex libpng libcryptopp gd2 libgeoip libupnp
  
[http://www.gnu.org/software/gettext gettext] is an open source library for text internationalization. This library is used to make [[aMule]] multi-lingual.
+
==== Step 4: Compile [[wxWidgets|wxMac]] ====
# Get and install the [http://www.gnu.org/software/gettext gettext] library with [http://fink.sourceforge.net Fink]. The package name is [http://www.gnu.org/software/gettext gettext].  
+
[[wxWidgets|wxMac]] is the port of the [[wxWidgets]] library for [http://www.apple.com/macosx Mac OS X]. This library is used to make [[aMule]] 'multi-platform'.
  
==== [[wxWidgets|wxMac]] ====
+
Get the source from: http://www.wxwidgets.org/downloads/ (Source Archives: wxMac) and extract the archive on your desktop.<br>
 +
Last stable version is 2.8.11 at now.
 +
Type
  
[[wxWidgets|wxMac]] is the port of the [[wxWidgets]] library for [http://macos.apple.com Mac OSX]. This library is used to make [[aMule]] 'multi-platform'.
+
$ cd
  
# Get the source from: http://www.wxwidgets.org/downloads/ (Source Archives: wxMac)
+
leave a space after the command, than drag and drop the wxMac uncompressed folder into the Terminal window: the complete path of the folder will be printed on screen. For example:
# Extract the archive (just double-click it)
+
  
Or get the current [[wx-cvs|CVS snapshot]]. Warning: the [[wxMac]] [[wx-cvs|CVS]] is frequently in a bad condition (e.g., currently you need to switch the vswprintf implementation that wx uses, see [http://forum.amule.org/index.php?topic=9915.msg58058#msg58058 here] for more details).
+
$ cd ~/Desktop/wxMac-2.8.11/
  
bash: cd ~/Desktop
+
Press enter.
bash: cvs -d :pserver:anoncvs@cvs.wxwidgets.org:/pack/cvsroots/wxwidgets login
+
The basic command to configure and compile the package is the following:
Note: password is 'anoncvs'
+
bash: cvs -d :pserver:anoncvs@cvs.wxwidgets.org:/pack/cvsroots/wxwidgets checkout wxMac
+
  
==== [http://www.amule.org aMule itself] ====
+
$ ./configure --disable-shared --enable-unicode --disable-debug --disable-debug_gdb --with-libiconv-prefix=/opt/local && make -j8
  
# Get latest daily [[aMule CVS|CVS source snapshot]]: [http://www.hirnriss.net/?area=cvs aMule CVS]
+
'''Note:''' The above command doesn't enable debug information. Debug informations allows you to submit a helpful stacktrace if [[aMule]] crashes or a sample if it hangs to the [[aMule devs|aMule developers]]. If you want to compile a debug version then you can use "--enable-debug --enable-debug_gdb" instead.
# Extract the archive (just double-click it)
+
  
=== Compile the sources ===
+
===== Snow Leopard =====
  
Put the ''amule'' folder and the ''wxMac'' folder in the same place, e.g. on the desktop (if using another location, ensure that there are no spaces in the path as this can lead to file not found errors with [[wxMac]]).
+
Building on Snow Leopard is tricky. You must focus on architecture, compiler version, compatibility. This should be enough to have compatibility with i386 Leopard and above:
  
'''Important:''' If you use [http://developer.apple.com/tools/xcode Xcode] 2.0 then the [http://gcc.gnu.org gcc] 4.0 that comes with it is somewhat broken and can't compile aMule. There are two solutions: upgrade to [http://developer.apple.com/tools/xcode Xcode] 2.1 by [[#Xcode|downloading]] it from [http://www.apple.com Apple] for free, or switch your system to use [http://gcc.gnu.org gcc] 3.3. If your prefer to switch to [http://gcc.gnu.org gcc] 3.3, first check the version of your current default [http://gcc.gnu.org gcc] with ''gcc --version'' and then switch to version 3.3 if required:
+
  CC="gcc-4.2 -arch i386" CXX="g++-4.2 -arch i386" \
 +
  ./configure CFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" \
 +
  CXXFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" \
 +
  CPPFLAGS="-arch i386" LDFLAGS="-arch i386" OBJCFLAGS="-arch i386" OBJCXXFLAGS="-arch i386" \
 +
  --disable-shared --enable-unicode --disable-debug --disable-debug_gdb --with-libiconv-prefix=/opt/local
  
bash: gcc --version
+
followed by:
bash: sudo gcc_select 3.3
+
  
==== Compile [[wxMac]] ====
+
  make -j8
  
This step is only needed once, even if you later download and compile a newer version of the [[aMule CVS]] source.  
+
==== Step 5: Compile [[aMule]] ====
 +
Download [http://www.amule.org/files/files.php?cat=42 aMule source] and extract archive into the same place of wxMac (i.e. your desktop if you are following out suggestion).
 +
Open a Terminal and type:
  
The following assumes that you have placed the above packages on your Desktop.<br>
+
  $ cd
''cd'' into the ''wxMac'' folder, ''configure'' and ''make'':
+
  
bash: cd ~/Desktop/wxMac-2.8.3/build
+
then leave a space and drag and drop aMule uncompressed folder whose path will be printed on screen, for example:
bash: ../configure --disable-shared --enable-unicode
+
bash: make
+
  
'''NOTE:''' This took approx. 30 minutes on a G4 at 1 GHz.
+
  $ cd ~/Desktop/aMule-2.2.
  
==== Compile [[aMule]] ====
+
Press Enter. Now it's possible to configure the sources: there are several options that can be used to activate or deactivate feature during compiling. This is only an example, that provide a full feature aMule build:
  
Now ''cd'' into the ''amule'' folder, ''configure'' and ''make'':
+
  $ ./configure --with-wx-config=../wxMac-2.8.10/wx-config  --enable-optimize --with-crypto-prefix=/opt/local \
 +
  --with-gdlib-config=/opt/local/bin/gdlib-config  --with-libiconv-prefix=/opt/local --enable-cas --enable-webserver \
 +
  --enable-amulecmd --enable-amule-gui --enable-wxcas --enable-alc --enable-alcc --enable-amule-daemon --enable-geoip \
 +
  --with-geoip-lib=/opt/local/lib --with-geoip-headers=/opt/local/include --enable-geoip-static --enable-debug
  
'''NOTE:''' You can copy'n'paste the 3 lines for ''./configure'' in one go.
+
Take a look to the [[configure]] page for a complete list of options.
 +
You should pay attention to these elements:
  
bash: cd ~/Desktop/aMule
+
# The given example enables debug informations. To disable them exchange the option ''--enable-debug'' with ''--disable-debug --enable-optimize''.
bash: ./configure --disable-systray --disable-gtk    \
+
# The option ''--with-wx-config'' must point to the correct relative path of the compiled wxMac. The example assumes that aMule and wxMac folders are in the same directory (i.e. your desktop). You should also correct the wxMac folder's name according to its version (in the example is 2.8.10).
            --with-wx-config=../wxMac-2.8.3/build/wx-config \
+
# The option ''--with-crypto-prefix'' should point to /usr/local/cryptopp if you compiled Crypto++ starting from its source, out of MacPorts.
            --disable-debug --enable-optimize    '''''<font color="red">OPTIONAL</font>'''''
+
# '''IMPORTANT!''' It seems that Mac OS version of ''ld'' tool is not able to make static library. So if you plan to run/install your compiled aMule on other Mac which doesn't have MacPorts installed you MUST remove the ''--enable-geoip-static'' option to avoid a crash when the program starts.
  
bash: make
+
Now it's time to make you packages with:
bash: strip src/amule    '''''<font color="red">OPTIONAL</font>'''''
+
bash: mv src/amule aMule.app/Contents/MacOS/
+
  
The two lines marked as '''''<font color="red">OPTIONAL</font>''''' are optional, that is, the last two options to ''./configure'' and the ''strip'' command. They result in a dramatically reduced file size (approx. 3 MB instead of 50 MB) but disable all possibilities to submit a helpful stacktrace if [[aMule]] crashes or a sample if it hangs to the [[aMule devs|aMule developers]].
+
  $ make -j8
  
=== Problems and solutions ===
+
and
  
*If [http://fink.sourceforge.net Fink] reports something like: ''After unpacking 11.2GB will be freed'', don't be afraid. [http://fink.sourceforge.net Fink] has evolved into a different way of managing packet's size and some old ("old": at least some months old) packages' sizes aren't handled correctly on the output. If this is your case, devide the number by 1024. So, what the above example really means is: ''After unpacking 11.2MB will be freed''.
+
  ./src/utils/scripts/mac_packager
  
*If you get an error like this: ''You cannot open the application "amule" because it may be damaged or incomplete'', right click on ''amule'', then click on ''Show Packages Contents'', go to "Contents">"MacOS"> and double click on ''amule''. Next time you start from ''aMule.app'' it will run fine. If you still get the same error, move ''aMule.app'' to the desktop and run it from there.
+
You should find the aMule package in the same source folder.

Latest revision as of 06:09, 14 January 2012

English | Deutsch | Español | Français | Italiano

How to get and install aMule on Apple Mac OS X.

  1. You can simply download the finished application ('binary release');
  2. You compile it from a SVN source snapshot or stable release source.

Binary releases

If you don't want to bother with installing and compiling all those tools and sources, then get one of the pre-compiled aMule applications. The official release is considered 'stable', but every now and then applications are built from the current source to allow more people to test new features or the like.

Check the Mac forum for the most recent user posted binary: aMule forum

Now, to install the downloaded binary, just drag the aMule application to a folder of your choice (e.g., /Applications).

To start aMule, double-click the application icon.

Note: You might want to take a look at the Mac-specific usage article.

Compiling from source

Compiling from source allows most current bug reports, because you can compile and test the SVN snapshot of the very day.

To compile aMule from source you need some development tools, the wxWidgets library and the aMule source.

Get the sources and development tools

Step 1: Download and install Xcode

Xcode is Apple's development environment. We need it for the GCC compiler.

You will need at least version 2.1 of Xcode, a more recent version is preferable though. You can download the most recent version of Xcode from Apple, but you will need to sign up for a free-of-charge developer account first or log-in using your iTunes Store account.

  1. Get Xcode from http://developer.apple.com/tools/download
  2. "Member Site"->"Log In"->"Download Software"->"Developer Tools"->"Download Xcode Tools last release">"Install"

Step 2: Install MacPorts

MacPorts is an open source installer for lots of open source tools ported to Mac OS X. aMule needs a few of these tools to compile properly. Alternatively, you can also use Fink to install these tools or (Fink currently lacks many of the needed tools) you can install them manually .

  1. Download the most recent version of MacPorts
  2. Read MacPorts' documentation to learn how to install applications through MacPorts.
Syntax of most important commands

Packages list can be downloaded/updated through

 $ sudo port selfupdate

You can upgrade all the packages installed with

 $ sudo port upgrade installed

Packages can be installed through

 $ sudo port install package_name

and removed with

 $ sudo port uninstall package_name

Port variants can be invoked with the plus sign:

 $ sudo port install package_name +universal

You can list all available variants with:

 $ sudo port variants package_name
Notes about Universal variant

As stated here, MacPorts has different build_arch settings for universal variant. You can use this variant on Leopard to switch both ppc and i386 version on. Since Snow Leopard doesn't support ppc architecture anymore, the universal variant can be used to switch both i386 and x86_64 version on. Please note that default architecture on Snow Leopard is x86_64 if the CPU supports it, i386 otherwise.

WARNING: binutils fails building universal. So you should set build_arch to i386 (about line 59) into /opt/local/etc/macports/macports.conf to be sure to build every port against i386 architecture (x86_64 is useless since 64-bit Carbon libraries does not exists and wxCocoa is not ready yet).

Step 3: Install libraries and tools

These are the package that provides (with dependancies) all needed libraries and tools to build wxWidgets and aMule with most of feature:

  1. automake
  2. binutils
  3. flex
  4. gettext
  5. libpng
  6. libcryptopp
  7. libiconv
  8. gd2
  9. jpeg
  10. libgeoip
  11. libupnp
  12. pkgconfig

This should be enough:

 $ sudo port install automake binutils flex libpng libcryptopp gd2 libgeoip libupnp

Step 4: Compile wxMac

wxMac is the port of the wxWidgets library for Mac OS X. This library is used to make aMule 'multi-platform'.

Get the source from: http://www.wxwidgets.org/downloads/ (Source Archives: wxMac) and extract the archive on your desktop.
Last stable version is 2.8.11 at now. Type

$ cd

leave a space after the command, than drag and drop the wxMac uncompressed folder into the Terminal window: the complete path of the folder will be printed on screen. For example:

$ cd ~/Desktop/wxMac-2.8.11/

Press enter. The basic command to configure and compile the package is the following:

$ ./configure --disable-shared --enable-unicode --disable-debug --disable-debug_gdb --with-libiconv-prefix=/opt/local && make -j8

Note: The above command doesn't enable debug information. Debug informations allows you to submit a helpful stacktrace if aMule crashes or a sample if it hangs to the aMule developers. If you want to compile a debug version then you can use "--enable-debug --enable-debug_gdb" instead.

Snow Leopard

Building on Snow Leopard is tricky. You must focus on architecture, compiler version, compatibility. This should be enough to have compatibility with i386 Leopard and above:

 CC="gcc-4.2 -arch i386" CXX="g++-4.2 -arch i386" \
 ./configure CFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" \
 CXXFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" \
 CPPFLAGS="-arch i386" LDFLAGS="-arch i386" OBJCFLAGS="-arch i386" OBJCXXFLAGS="-arch i386" \
 --disable-shared --enable-unicode --disable-debug --disable-debug_gdb --with-libiconv-prefix=/opt/local

followed by:

 make -j8

Step 5: Compile aMule

Download aMule source and extract archive into the same place of wxMac (i.e. your desktop if you are following out suggestion). Open a Terminal and type:

 $ cd

then leave a space and drag and drop aMule uncompressed folder whose path will be printed on screen, for example:

 $ cd ~/Desktop/aMule-2.2.

Press Enter. Now it's possible to configure the sources: there are several options that can be used to activate or deactivate feature during compiling. This is only an example, that provide a full feature aMule build:

 $ ./configure --with-wx-config=../wxMac-2.8.10/wx-config  --enable-optimize --with-crypto-prefix=/opt/local \
 --with-gdlib-config=/opt/local/bin/gdlib-config  --with-libiconv-prefix=/opt/local --enable-cas --enable-webserver \
 --enable-amulecmd --enable-amule-gui --enable-wxcas --enable-alc --enable-alcc --enable-amule-daemon --enable-geoip \
 --with-geoip-lib=/opt/local/lib --with-geoip-headers=/opt/local/include --enable-geoip-static --enable-debug

Take a look to the configure page for a complete list of options. You should pay attention to these elements:

  1. The given example enables debug informations. To disable them exchange the option --enable-debug with --disable-debug --enable-optimize.
  2. The option --with-wx-config must point to the correct relative path of the compiled wxMac. The example assumes that aMule and wxMac folders are in the same directory (i.e. your desktop). You should also correct the wxMac folder's name according to its version (in the example is 2.8.10).
  3. The option --with-crypto-prefix should point to /usr/local/cryptopp if you compiled Crypto++ starting from its source, out of MacPorts.
  4. IMPORTANT! It seems that Mac OS version of ld tool is not able to make static library. So if you plan to run/install your compiled aMule on other Mac which doesn't have MacPorts installed you MUST remove the --enable-geoip-static option to avoid a crash when the program starts.

Now it's time to make you packages with:

 $ make -j8

and

 ./src/utils/scripts/mac_packager

You should find the aMule package in the same source folder.