Compiling freetype - freetype

While trying to compile freetype 2.6.1 on Ubuntu Linux 86-64, I get the following message at configure step:
/usr/local/include/harfbuzz/hb-common.h:316:29: note: in expansion of macro ‘HB_TAG_MAX’
_HB_SCRIPT_MAX_VALUE = HB_TAG_MAX, /*< skip >*/
^
In file included from /home/sem/Downloads/freetype-2.6.1/freetype-2.6.1/src/autofit/afglobal.h:26:0,
from /home/sem/Downloads/freetype-2.6.1/freetype-2.6.1/src/autofit/afpic.c:23,
from /home/sem/Downloads/freetype-2.6.1/freetype-2.6.1/src/autofit/autofit.c:21:
/home/sem/Downloads/freetype-2.6.1/freetype-2.6.1/src/autofit/hbshim.h:31:19: fatal error: hb-ft.h: No such file or directory
#include <hb-ft.h>
^
compilation terminated.
What is wrong here?

Building FreeType can be a bit of a hassle if you don't exactly know what you're doing and without much experience of the required build tools. I ran into this as well and ... then got my experience with build tools :)
You are trying to build FreeType with HarfBuzz support. That, ofcourse, requires HarfBuzz. Actually you'd need a FreeType-supported HarfBuzz build (-> hb-ft.h) in order to build a HarfBuzz-supported FreeType
Here are 2 simple ways I get FreeType to compile without Harfbuzz:
by configure
git clone https://git.savannah.nongnu.org/git/freetype/freetype2.git
cd freetype2
./autogen.sh # generates configure
./configure --without-harfbuzz # generates Makefile + deactivates harfbuzz
make # compile libs
make install # install libs & headers
by cmake
git clone https://git.savannah.nongnu.org/git/freetype/freetype2.git
cd freetype2
mkdir build && cd build
cmake .. # generates Makefile + deactivates HarfBuzz if not found
make # compile libs
make install # install libs & headers
If you want a HarfBuzz supported FreeType build you might want to have a look at this answer

Related

How to build libgit2 with embedded libssh2 on Windows

First we build libssh2 with the WinCNG backend using msvc:
cmake . -DCRYPTO_BACKEND=WinCNG -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=%LIBSSH2%
cmake --build . --target install
libgit2 docs say all we have to do is to set DEMBED_SSH_PATH, although it fails to mentation what to set it to. Maybe it's so obvious that it seems irrelevant. However: I'm not a C guy and have no clue of the cmake build process. From what I understand the folder where the result of the previous built resides with all it's subfolders such as include and bin should be the correct path, so using %LIBSSH2% should be fine.
When finally trying to build libgit2 running
cmake . -DBUILD_CLAR=OFF -DCMAKE_BUILD_TYPE=Release -DEMBED_SSH_PATH=%LIBSSH2% -DCMAKE_INSTALL_PREFIX="%LIBGIT2%"
cmake --build . --target install
It'll fail because it's unable to find the links to the header files / binaries. We see things along the line of:
error LNK2019: unresolved external symbol libssh2_init referenced in function
I already tried replacing the paths backslashes \ with normal slashes /, since this seems to be a common issue. I also tried explicitly setting
set CMAKE_INCLUDE_PATH=%LIBSSH2%/include
set CMAKE_LIBRARY_PATH=%LIBSSH2%/lib
both faild with the same result.
Can anyone provide a reproducible way to compile libgit2 with embedded libssh2?
Using EMBED_SSH_PATH means libssh2 sources will be compiled at the same time as libgit2s. This means you don't actually have to compile libssh2 at all.
I managed to get it to compile successfully by downloading the source for libssh2 and libgit2, then running the following commands:
cd libgit2
mkdir build
cd build
cmake .. -DBUILD_CLAR=OFF -DCMAKE_BUILD_TYPE=Release -DEMBED_SSH_PATH="C:/path-to-ssh/libssh2" -DCMAKE_INSTALL_PREFIX="%LIBGIT2%"
cmake --build . --target install
Internally, it looks for all files that match ${EMBED_SSH_PATH}/src/*.cif EMBED_SSH_PATH is set.
As for using WinCNG as the backend, using embedded SSH creates this file (libssh2_config.h) in the libssh2 directory:
#define HAVE_WINCNG
#define LIBSSH2_WINCNG
#include "../win32/libssh2_config.h"
I assume that means it is already the default backend for an embedded install.

Compile ImageMagick from source with PNG support on OSX

I need to compile it from sources. I followed step by step instruction to build it with jpeg and png support but ImageMagick didn't include PNG to delegates list however jpeg has been included. What is wrong with PNG?
Options used to compile and link:
PREFIX = /opt/im
EXEC-PREFIX = /opt/im
VERSION = 6.9.2
CC = gcc
CFLAGS = -g -O2 -Wall -mtune=haswell -fexceptions -D_FORTIFY_SOURCE=0 -D_THREAD_SAFE -pthread -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16
CPPFLAGS = -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 -I/tmp/IM/ImageMagick-6.9.2-10/jpeg -I/tmp/IM/ImageMagick-6.9.2-10/magick -I/tmp/IM/ImageMagick-6.9.2-10/png -I/tmp/IM/ImageMagick-6.9.2-10/wand
PCFLAGS =
DEFS = -DHAVE_CONFIG_H
LDFLAGS = -L/tmp/IM/ImageMagick-6.9.2-10/jpeg/.libs -L/tmp/IM/ImageMagick-6.9.2-10/jpeg -L/tmp/IM/ImageMagick-6.9.2-10/magick -L/tmp/IM/ImageMagick-6.9.2-10/png/.libs -L/tmp/IM/ImageMagick-6.9.2-10/png -L/tmp/IM/ImageMagick-6.9.2-10/wand
LIBS =
CXX = g++
CXXFLAGS = -g -O2 -D_THREAD_SAFE -pthread
FEATURES = DPC Cipher
DELEGATES = mpeg jpeg
Here is how I would install ImageMagick from source on OSX.
1. Install Xcode
First, you are going to need the Apple compiler and development tools whatever you do. So, start the AppStore which looks like this:
and download Xcode for free - it looks like this:
2. Install Command Line Tools
Once you have Xcode installed, you need to install the command-line tools (i.e. clang, clang++, make) like this:
xcode-select --install
3. Choose Your Method - homebrew or a Life of Agony™
Now you need to choose how you are going to proceed. The simplest option, by miles and miles and miles, is to use homebrew. The other method is self-descriptive.
3a. homebrew Method
Go to the homebrew website and copy and paste the one-liner there into your Terminal - I won't show it here because it may change and I want you and future readers to use the current command. Once homebrew is installed, you just do this to choose your ImageMagick options:
brew options imagemagick
--with-fftw
Compile with FFTW support
--with-fontconfig
Build with fontconfig support
--with-ghostscript
Build with ghostscript support
--with-hdri
Compile with HDRI support
--with-jp2
Compile with Jpeg2000 support
--with-liblqr
Build with liblqr support
--with-librsvg
Build with librsvg support
--with-libwmf
Build with libwmf support
--with-little-cms
Build with little-cms support
--with-little-cms2
Build with little-cms2 support
--with-openexr
Build with openexr support
--with-openmp
Compile with OpenMP support
--with-pango
Build with pango support
--with-perl
enable build/install of PerlMagick
--with-quantum-depth-16
Compile with a quantum depth of 16 bit
--with-quantum-depth-32
Compile with a quantum depth of 32 bit
--with-quantum-depth-8
Compile with a quantum depth of 8 bit
--with-webp
Build with webp support
--with-x11
Build with x11 support
--without-freetype
Build without freetype support
--without-jpeg
Build without jpeg support
--without-libpng
Build without libpng support
--without-libtiff
Build without libtiff support
--without-magick-plus-plus
disable build/install of Magick++
--without-opencl
Disable OpenCL
and then having selected your options, you install with
brew install imagemagick --with-perl --with-librsvg
or whatever you want. Then you are finished and you don't need to read the following torture!
Later on, upgrades are simple:
brew update && brew upgrade --all
Problem-solving is simple:
brew doctor
Uninstallation is simple:
brew rm imagemagick
3b. Life of Agony™ Method
Ok, I see you sadly decided on a Life of Agony™, so be it. I hope you know tar, bash, environment variables, gzip, make, curl. Now would be a good time to think again and use homebrew after all....
Sure you want to proceed? Ok, the general idea is to decide what features you need, install the features first, then install ImageMagick.
4. Set up a build area and environment
Set up two directories and 2 environment vars in your $HOME/.profile. These will be the build area where you build software and the sw area where you install your local software to:
export MSBUILD=$HOME/build
export MSSW=$HOME/sw
Now source your profile into your current session with
. $HOME/.profile
or just log out and log back in so that the variables above take effect.
Next create the two directories:
mkdir "$MSBUILD" "$MSSW"
5. Consider Features you need
Now consider what features you need:
5.1 Feature = PNG Support
If you need PNG support, you need zlib first. In your web-browser, go to the zlib website and find the name of the latest version. Then in Terminal:
cd $MSBUILD
curl -O -J -L http://sourceforge.net/projects/libpng/files/zlib/1.2.8/zlib-1.2.8.tar.xz/download
which gets you this zlib-1.2.8.tar.xz (or similar) which you can unpack and install with:
tar xvfJ zlib*.tar.xz # Unzip and untar what you downloaded
cd zlib*[0-9] # Change directory to wherever it unpacked to
./configure --prefix="$MSSW" # Configure with the necessary prefix
make
make install
Now you want libpng which you do with:
curl -O -J -L http://sourceforge.net/projects/libpng/files/latest/download?source=files
which gets you this (or similar):
libpng-1.6.17.tar.xz
which you install with this command:
tar xvfJ libpng*xz # Unpack and untar whatever you downloaded
cd libpng*[0-9] # Change directory to wherever it unpacked to
./configure --prefix="$MSSW" # Configure with the necessary prefix
make
make install
5.2 Feature = TIFF Support
If you need TIFF support, use this:
cd $MSBUILD
curl -O -J -L ftp://ftp.remotesensing.org/libtiff/tiff-4.0.3.tar.gz
tar xvfz tiff*tar.gz # Unzip and untar what you downloaded
cd tiff*[0-9] # Change directory to wherever it unpacked to
./configure --prefix="$MSSW" # Configure with the necessary prefix
make
make install
5.3 Feature = WEBP Support
If you need WEBP support, use this:
cd $MSBUILD
curl -O -J -L http://downloads.webmproject.org/releases/webp/libwebp-0.4.3.tar.gz
tar xvfz libwebp*tar.gz # Unzip and untar what you downloaded
cd libwebp*[0-9] # Change directory to wherever it unpacked to
./configure --prefix="$MSSW" # Configure with the necessary prefix
make
make install
5.4 Feature = JPEG Support
If you need JPEG support, use this:
cd $MSBUILD
curl -O -J -L http://www.ijg.org/files/jpegsrc.v9a.tar.gz
tar xvfz jpeg*tar.gz # Unzip and untar what you downloaded
cd jpeg-9a # Change directory to wherever it unpacked to
./configure --prefix="$MSSW" # Configure with the necessary prefix
make
make install
5.5 Feature - X11 or X Windows
As OSX no longer ships with an X11 server, you will need to install one yourself if you wish to use X11. Now, if you had taken my advice and used homebrew, you would be able to do:
brew cask install xquartz
and you would be finished. But you chose the Life of Agony ™ option, so you will have to figure out how to install XQuartz yourself.
6. ImageMagick itself
Once you have all the features you want installed, you can install ImageMagick. Get your copy here, then install like this:
cd $MSBUILD
gunzip ImageMagick.tar.gz
tar -xvf ImageMagick.tar
cd ImageMagick-6.9.1-2 # or wherever the tar-file extracted to
Now choose your options. How do you know the options available? You run:
./configure --help
and you will get a daunting array of options like this:
`configure' configures ImageMagick 6.9.2-10 to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking ...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/ImageMagick]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
X features:
--x-includes=DIR X include files are in DIR
--x-libraries=DIR X library files are in DIR
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
--target=TARGET configure for building compilers for TARGET [HOST]
Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-silent-rules less verbose build output (undo: "make V=1")
--disable-silent-rules verbose build output (undo: "make V=0")
--enable-reproducible-build
enable reproducible build
--enable-dependency-tracking
do not reject slow dependency extractors
--disable-dependency-tracking
speeds up one-time build
--enable-ld-version-script
enable linker version script (default is enabled
when possible)
--enable-bounds-checking
enable run-time bounds-checking
--enable-osx-universal-binary
build universal binary on OS X [[default=no]]
--disable-openmp do not use OpenMP
--enable-opencl enable OpenCL support
--disable-largefile omit support for large files
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-static[=PKGS] build static libraries [default=yes]
--enable-fast-install[=PKGS]
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
--enable-delegate-build look for delegate libraries in build directory
--disable-deprecated exclude deprecated methods in MagickCore and
MagickWand APIs
--disable-installed Formally install ImageMagick under PREFIX
--disable-cipher disable enciphering and deciphering image pixels
--enable-zero-configuration
enable self-contained, embeddable,
zero-configuration ImageMagick
--enable-hdri accurately represent the wide range of intensity
levels found in real scenes
--disable-assert disable assert() statements in build
--enable-maintainer-mode
enable make rules and dependencies not useful (and
sometimes confusing) to the casual installer
--enable-hugepages enable 'huge pages' support
--enable-ccmalloc enable 'ccmalloc' memory debug support
--enable-efence enable 'efence' memory debug support
--enable-prof enable 'prof' profiling support
--enable-gprof enable 'gprof' profiling support
--enable-gcov enable 'gcov' profiling support
--disable-assert turn off assertions
--disable-docs disable building of documentation
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-dmalloc use dmalloc, as in http://www.dmalloc.com
--with-gcc-arch=<arch> use architecture <arch> for gcc -march/-mtune,
instead of guessing
--includearch-dir=DIR ARCH specific include directory
--sharearch-dir=DIR ARCH specific config directory
--with-pkgconfigdir=DIR Path to the pkgconfig directory [LIBDIR/pkgconfig]
--without-threads disable threads support
--with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
both]
--with-aix-soname=aix|svr4|both
shared library versioning (aka "SONAME") variant to
provide on AIX, [default=aix].
--with-sysroot[=DIR] Search for dependent libraries within DIR (or the
compiler's sysroot if not specified).
--with-modules enable building dynamically loadable modules
--with-method-prefix=PREFIX
prefix MagickCore API methods
--with-quantum-depth=DEPTH
number of bits in a pixel quantum (default 16)
--with-cache=THRESHOLD set pixel cache threshhold in MB (default available
memory)
--with-frozenpaths freeze delegate paths
--without-magick-plus-plus
disable build/install of Magick++
--with-package-release-name=NAME
encode this name into the shared library
--with-perl enable build/install of PerlMagick
--with-perl-options=OPTIONS
options to pass on command-line when generating
PerlMagick build file
--with-jemalloc enable jemalloc memory allocation library support
--with-umem enable umem memory allocation library support
--with-libstdc=DIR use libstdc++ in DIR (for GNU C++)
--without-bzlib disable BZLIB support
--with-x use the X Window System
--without-zlib disable ZLIB support
--with-apple-font-dir=DIR
Apple font directory
--with-autotrace enable autotrace support
--without-dps disable Display Postscript support
--with-dejavu-font-dir=DIR
DejaVu font directory
--without-fftw disable FFTW support
--without-fpx disable FlashPIX support
--without-djvu disable DjVu support
--without-fontconfig disable fontconfig support
--without-freetype disable Freetype support
--with-gslib enable Ghostscript library support
--with-fontpath=DIR prepend to default font search path
--with-gs-font-dir=DIR Ghostscript font directory
--with-gvc enable GVC support
--without-jbig disable JBIG support
--without-jpeg disable JPEG support
--without-lcms disable lcms (v1.1X) support
--without-openjp2 disable OpenJP2 support
--without-lqr disable Liquid Rescale support
--without-lzma disable LZMA support
--without-openexr disable OpenEXR support
--without-pango disable PANGO support
--without-png disable PNG support
--with-rsvg enable RSVG support
--without-tiff disable TIFF support
--without-webp disable WEBP support
--with-windows-font-dir=DIR
Windows font directory
--with-wmf enable WMF support
--without-xml disable XML support
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
CXX C++ compiler command
CXXFLAGS C++ compiler flags
PKG_CONFIG path to pkg-config utility
PKG_CONFIG_PATH
directories to add to pkg-config's search path
PKG_CONFIG_LIBDIR
path overriding pkg-config's built-in search path
LT_SYS_LIBRARY_PATH
User-defined run-time library search path.
CXXCPP C++ preprocessor
XMKMF Path to xmkmf, Makefile generator for X Window System
ZLIB_CFLAGS C compiler flags for ZLIB, overriding pkg-config
ZLIB_LIBS linker flags for ZLIB, overriding pkg-config
AUTOTRACE_CFLAGS
C compiler flags for AUTOTRACE, overriding pkg-config
AUTOTRACE_LIBS
linker flags for AUTOTRACE, overriding pkg-config
fftw3_CFLAGS
C compiler flags for fftw3, overriding pkg-config
fftw3_LIBS linker flags for fftw3, overriding pkg-config
ddjvuapi_CFLAGS
C compiler flags for ddjvuapi, overriding pkg-config
ddjvuapi_LIBS
linker flags for ddjvuapi, overriding pkg-config
FONTCONFIG_CFLAGS
C compiler flags for FONTCONFIG, overriding pkg-config
FONTCONFIG_LIBS
linker flags for FONTCONFIG, overriding pkg-config
FREETYPE_CFLAGS
C compiler flags for FREETYPE, overriding pkg-config
FREETYPE_LIBS
linker flags for FREETYPE, overriding pkg-config
GVC_CFLAGS C compiler flags for GVC, overriding pkg-config
GVC_LIBS linker flags for GVC, overriding pkg-config
LCMS2_CFLAGS
C compiler flags for LCMS2, overriding pkg-config
LCMS2_LIBS linker flags for LCMS2, overriding pkg-config
LIBOPENJP2_CFLAGS
C compiler flags for LIBOPENJP2, overriding pkg-config
LIBOPENJP2_LIBS
linker flags for LIBOPENJP2, overriding pkg-config
LQR_CFLAGS C compiler flags for LQR, overriding pkg-config
LQR_LIBS linker flags for LQR, overriding pkg-config
LZMA_CFLAGS C compiler flags for LZMA, overriding pkg-config
LZMA_LIBS linker flags for LZMA, overriding pkg-config
OPENEXR_CFLAGS
C compiler flags for OPENEXR, overriding pkg-config
OPENEXR_LIBS
linker flags for OPENEXR, overriding pkg-config
PANGO_CFLAGS
C compiler flags for PANGO, overriding pkg-config
PANGO_LIBS linker flags for PANGO, overriding pkg-config
PNG_CFLAGS C compiler flags for PNG, overriding pkg-config
PNG_LIBS linker flags for PNG, overriding pkg-config
RSVG_CFLAGS C compiler flags for RSVG, overriding pkg-config
RSVG_LIBS linker flags for RSVG, overriding pkg-config
CAIRO_SVG_CFLAGS
C compiler flags for CAIRO_SVG, overriding pkg-config
CAIRO_SVG_LIBS
linker flags for CAIRO_SVG, overriding pkg-config
XML_CFLAGS C compiler flags for XML, overriding pkg-config
XML_LIBS linker flags for XML, overriding pkg-config
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <http://www.imagemagick.org>.
Once you have chosen your options, install with a command that looks like this:
./configure --prefix="$MSSW" --with-modules --disable-docs --without-x --enable-hdri=yes --with-quantum-depth=16
make
make install
Now add $MSSW/bin to your PATH in $HOME/.profile.
export PATH=$HOME/sw/bin:${PATH}
And log out and back in again to make the new PATH active (or dot in your profile, if you know what that means).
7. Test the installation
Now test it with:
identify -version
Version: ImageMagick 6.9.2-10 Q16 x86_64 2015-12-23 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2016 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC Modules
Delegates (built-in): bzlib cairo fontconfig freetype jng jp2 jpeg lcms ltdl lzma png rsvg tiff webp x xml zlib

error adding symbols while compiling gdcm

I wanted to compile gdcm from source code on eOS 0.3/Ubuntu 14.04, and add python support. Therefore I installed swig, and afterwards ran ccmake (for configuring the make file) and make. Unfortunately I get the error:
../../bin/libgdcmMEXD.a: error adding symbols
How can I fix that?
I would try to build using shared libs instead. From the ccmake interface you should see something like
GDCM_BUILD_SHARED_LIBS ON
Then rebuild:
$ make clean && make

When does ExternalProject_Add build?

I want to build openssl and link my project against it. In my project, I have a library called net which is the part that uses openssl. So in my net\CMakeList, I added
include_directories(
../
+ ../../../ext/openssl/inc32/
)
add_library(net STATIC ${sources})
+ ADD_DEPENDENCIES(net openssl)
In my ext folder that is used for organizing all external library, I have a fresh unzipped openssl source code in a folder named openssl. Then I edited ext\CmakeList
message(STATUS "Configuring OpenSSL")
set(openssl_dir openssl)
if (CMAKE_CL_64)
include(ExternalProject)
set(OPENSSL_CONFIGURE perl\ Configure\ VC-WIN64A)
set(OPENSSL_MAKE ms\\do_win64a\ &&\ nmake\ -f\ ms\\ntdll.mak)
ExternalProject_Add(openssl
PREFIX openssl
#-- Download Step ----------
SOURCE_DIR ${CMAKE_SOURCE_DIR}/ext/openssl
#--Configure step ----------
CONFIGURE_COMMAND ${OPENSSL_CONFIGURE}
#--Build Step ----------
BUILD_COMMAND ${OPENSSL_MAKE}
BUILD_IN_SOURCE 1
#--install Step ----------
INSTALL_COMMAND ""}
)
endif()
When I built, the compiler complained the it can't find include files, and the openssl source code was not built at all, since there is no out32dll and inc32.
My question is: When does ExternalProject_Add actually build the project? If I make my net library depending on openssl, does it mean when I build net it would need to check and build openssl first?
ExternalProject use add_custom_target internally to create project and according to its document
By default nothing depends on the custom target. Use ADD_DEPENDENCIES
to add dependencies to or from other targets.
So if no project depend on it, it will not build by default.
When this ExternalProject_Add actually builds the project?
At build time(not at cmake time).
If I make my net library depends on openssl, does it mean when I build net it would need to check and build openssl first?
No. Since you make the dependency, cmake will handle it and openssl will be build before your library.
PS: There's still a lot of work to do. Because cmake doesn't know where the openssl result is, your project may run into link error. Here is a good example from the answer of "What is the best way to build boost with cmake".It use add_library with IMPORTED GLOBAL and set_target_properties with IMPORTED_LOCATION_* to solve the problem
Install missed
First of all I think you missed an install step. See documentation:
nmake -f "ms\ntdll.mak" install
So simplified version of ExternalProject_Add is:
ExternalProject_Add(
OpenSSL
URL https://github.com/openssl/openssl/archive/OpenSSL_1_0_1h.tar.gz
CONFIGURE_COMMAND perl Configure VC-WIN64A "--prefix=${CMAKE_INSTALL_PREFIX}"
BUILD_COMMAND "ms\\do_win64a.bat"
COMMAND nmake -f "ms\\ntdll.mak"
BUILD_IN_SOURCE 1
INSTALL_COMMAND nmake -f "ms\\ntdll.mak" install
)
Find OpenSSL
Second, if you want to find openssl libraries and headers, you need to use find_package(OpenSSL) command:
find_package(OpenSSL REQUIRED)
message("Libs: ${OPENSSL_LIBRARIES}")
message("Includes: ${OPENSSL_INCLUDE_DIR}")
Builds
Now, if you put all this commands together in one project configure step will fail :) Because it's not how ExternalProject designed. Superbuild that made by few or one ExternalProject_Add commands must be configured first, then build step will install the libraries from external archives. This will conflict with your project, because openssl libraries can't be found - they are not installed by superbuild yet.
Fix
Split cmake code. Run superbuild first (i.e. download and install openssl):
> cmake -Hsuperbuild -B_builds\superbuild "-GVisual Studio 12 2013 Win64" -DCMAKE_INSTALL_PREFIX=ext\install
# note, no ext\install directory yet
> cmake --build _builds\superbuild
# install done, libraries can be found in ext\install
Then build your project, note that the libraries found on configure step:
> cmake -Huse -B_builds\use "-GVisual Studio 12 2013 Win64" -DCMAKE_INSTALL_PREFIX=ext\install
-- Found OpenSSL: .../ext/install/lib/ssleay32.lib;.../ext/install/lib/libeay32.lib (found version "1.0.1h")
Libs: .../ext/install/lib/ssleay32.lib;.../ext/install/lib/libeay32.lib
Includes: .../ext/install/include
> cmake --build _builds\use
# OK
Experimental
I have an experimental project that wrap all of this noise in one command (Windows tested on Visual Studio 2013):
hunter_add_package(OpenSSL)
find_package(OpenSSL REQUIRED)
https://github.com/ruslo/hunter

checking for suffix of object files... configure: error: cannot compute suffix of object files: cannot compile

While building ARM toolchain , I got the following error
checking for suffix of object files... configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make[1]: *** [configure-target-libgcc] Error 1
make[1]: Leaving directory `<path>/gcc-4.3.2-arm-elf'
make: *** [all] Error 2
what might be the problem?
Did you read http://gcc.gnu.org/wiki/FAQ#configure_suffix ?
Have you installed GMP, MPFR and MPC? Are they in your library search path?
See http://gcc.gnu.org/wiki/InstallingGCC and make sure you've followed the basic instructions. By far the simplest way to build GCC (including as a cross compiler) is to follow these instructions:
Alternatively, after extracting the GCC source archive, simply run the ./contrib/download_prerequisites script in the GCC source directory. That will download the support libraries and create symlinks, causing them to be built automatically as part of the GCC build process.
"*Building GCC is not trivial, but is not difficult if you follow the instructions carefully.
Many people rush into trying to build it without reading the installation docs properly and make one or more of these common mistakes:
1) do not run ./configure from gcc src dir (this is not supported) => you need to run configure from outside the gcc source directory
2) Note: if GCC links dynamically to the prerequisite libs (GMP/MPFR/MPC) then the shared libraries must be in the dynamic linker's path (LD_LIBRARY_PATH), both when building gcc and when using the installed compiler.*"
Simple example (without dynamic link to GMP/MPFR/MPC):
tar xzf gcc-4.8.0.tar.gz
cd gcc-4.8.0
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.8.0/configure --prefix=/opt/gcc-4.8.0
make
make install
Sources:
Advogato Doc -
GNU Doc
export LD_LIBRARY_PATH=/path/for/libraries:$LD_LIBRARY_PATH
path/for/libraries is where the GMP MPFR and MPC libraries are present.
I was compiling GCC on ubuntu 12.04 and these linraries present in the path /usr/local/lib

Resources