# -*- mode: makefile; tab-width: 4; -*- # Makefile for installing 3rd-party software required to build Moses. # author: Ulrich Germann # # run as # make -f /path/to/this/file # # By default, everything will be installed in ./opt. # If you want an alternative destination specify PREFIX=... with the make call # # make -f /path/to/this/file PREFIX=/where/to/install/things # # The name of the current directory must not contain spaces! The build scripts for # at least some of the external software can't handle them. space := space += # $(CWD) may contain space, safepath escapes them # Update: doesn't work, because the build scripts for some of the external packages # can't handle spaces in path names. safepath=$(subst $(space),\$(space),$1) # current working directory: bit of a hack to get the nfs-accessible # path instead of the local real path CWD := $(shell cd . && pwd) # by default, we install in ./opt and build in ./build PREFIX ?= $(CWD)/opt BUILD_DIR = $(CWD)/opt/build/${URL} # you can also specify specific prefixes for different packages: XMLRPC_PREFIX ?= ${PREFIX} CMPH_PREFIX ?= ${PREFIX} IRSTLM_PREFIX ?= ${PREFIX}/irstlm-5.80.08 BOOST_PREFIX ?= ${PREFIX} # currently, the full enchilada means xmlrpc-c, cmph, irstlm, boost all: xmlrpc cmph boost # we use bash and fail when pipelines fail SHELL = /bin/bash -e -o pipefail # evaluate prefixes now to avoid recursive evaluation problems later ... XMLRPC_PREFIX := ${XMLRPC_PREFIX} CMPH_PREFIX := ${CMPH_PREFIX} IRSTLM_PREFIX := ${IRSTLM_PREFIX} BOOST_PREFIX := ${BOOST_PREFIX} # Code repositories: github = https://github.com/ sourceforge = http://downloads.sourceforge.net/project # functions for building software from sourceforge nproc := $(shell getconf _NPROCESSORS_ONLN) sfget = mkdir -p '${TMP}' && cd '${TMP}' && wget -qO- ${URL} | tar xz configure-make-install = cd '$1' && ./configure --prefix='${PREFIX}' configure-make-install += && make -j${nproc} && make install # XMLRPC-C for moses server xmlrpc: URL=$(sourceforge)/xmlrpc-c/Xmlrpc-c%20Super%20Stable/1.33.17/xmlrpc-c-1.33.17.tgz xmlrpc: TMP=$(CWD)/build/xmlrpc xmlrpc: override PREFIX=${XMLRPC_PREFIX} xmlrpc: | $(call safepath,${XMLRPC_PREFIX}/bin/xmlrpc-c-config) $(call safepath,${XMLRPC_PREFIX}/bin/xmlrpc-c-config): $(sfget) $(call configure-make-install,${TMP}/xmlrpc-c-1.33.17) rm -rf ${TMP} # CMPH for CompactPT cmph: URL=$(sourceforge)/cmph/cmph/cmph-2.0.tar.gz cmph: TMP=$(CWD)/build/cmph cmph: override PREFIX=${CMPH_PREFIX} cmph: | $(call safepath,${CMPH_PREFIX}/bin/cmph) $(call safepath,${CMPH_PREFIX}/bin/cmph): $(sfget) $(call configure-make-install,${TMP}/cmph-2.0) rm -rf ${TMP} # irstlm for irstlm irstlm: URL=$(sourceforge)/irstlm/irstlm/irstlm-5.80/irstlm-5.80.08.tgz irstlm: TMP=$(CWD)/build/irstlm irstlm: VERSION=$(basename $(notdir $(irstlm_url))) irstlm: override PREFIX=${IRSTLM_PREFIX} irstlm: | $(call safepath,$(IRSTLM_PREFIX)/bin/build-lm.sh) $(call safepath,$(IRSTLM_PREFIX)/bin/build-lm.sh): $(sfget) cd $$(find '${TMP}' -name trunk) && ./regenerate-makefiles.sh \ && ./configure --prefix='${PREFIX}' && make -j${nproc} && make install -j${nproc} rm -rf ${TMP} # boost boost: VERSION=1.68.0 boost: UNDERSCORED=$(subst .,_,$(VERSION)) boost: URL=http://sourceforge.net/projects/boost/files/boost/${VERSION}/boost_${UNDERSCORED}.tar.gz/download boost: TMP=$(CWD)/build/boost boost: override PREFIX=${BOOST_PREFIX} boost: | $(call safepath,${BOOST_PREFIX}/include/boost) $(call safepath,${BOOST_PREFIX}/include/boost): $(sfget) cd '${TMP}/boost_${UNDERSCORED}' && ./bootstrap.sh && ./b2 --prefix=${PREFIX} -j${nproc} --layout=system link=static install rm -rf ${TMP}