macOS에서 Autotools 빌드하기

GNU 로고
GNU 로고

GNU 빌드 시스템으로도 알려진 AutotoolsAutoconfAutomake, Libtool 등으로 구성된 빌드 도구 모음이다. 이 글은 HomebrewMacPorts 같은 패키지 매니저에 의존하지 않고 직접 빌드하는 과정을 설명한다.

빌드에 필요한 Perl과 m4는 최소 버전 이상이 macOS에 기본 내장되어 있어 별도로 빌드하지 않고 시스템에 설치된 것을 사용하였다.

Libtool

macOS에는 애플이 NeXT 시절부터 사용하는 또 다른 libtool/usr/bin/에 설치되어 있어 충돌하게 된다.

$ which libtool
/usr/bin/libtool

GNU 소프트웨어가 기존 시스템의 것과 이름이 충돌할 때 일반적으로 g 접두사를 붙인다. configure 스크립트에서 프로그램 이름의 접두사를 설정해 glibtool로 빌드되도록 한다. 나는 빌드된 결과물을 구분하기 쉽게 소스 트리에 build 디렉터리를 만들어 빌드하는 방법을 사용하지만, 소스 트리의 최상위에서 빌드 또는 설치(make install)해야만 하는 소프트웨어도 있다.

# $HOME/local에 설치하는 것으로 가정한다.
$ tar -xvf libtool-2.4.6.tar.gz
$ cd libtool-2.4.6
$ mkdir build && cd $_
$ ../configure --prefix=$HOME/local --program-prefix=g
$ make
$ make install

Homebrew의 FormulaMacPorts의 Portfile에서도 같은 방법을 사용하고 있다.

Autoconf

Autoconf는 Automake의 빌드과정에서 의존하고 있어 먼저 빌드되어야 한다. Autoconf의 툴 중 autoreconflibtoolize 대신 위에서 빌드된 glibtoolize을 사용하도록 아래와 같이 수정하여 빌드한다.

$ tar -xvf autoconf-2.69.tar.gz
$ cd autoconf-2.69
$ mkdir build && cd $_
$ sed -i '' 's/libtoolize/glibtoolize/' bin/autoreconf.in
$ sed -i '' 's/libtoolize/glibtoolize/' man/autoreconf.1
$ ../configure --prefix=$HOME/local
$ make
$ make install

glibtoolize로 교체해야 할 부분은 Homebrew의 FormulaMacPorts의 패치를 참고하여 위의 두 파일을 sed로 수정하였다.

Automake

Automake 자체를 개발하거나 수정하여 테스트하려면 MacPorts의 패치와 같이 테스트 스크립트도 패치가 되어야 하지만, 일반적으로 사용하기 위한 Automake를 빌드할 경우에는 별다른 수정 없이 아래와 같이 빌드하여 설치한다.

Automake의 configure 스크립트에서 Autoconf가 필요하게 되므로, 위에서 빌드한 툴들이 설치된 경로가 PATH에 추가되어야 한다.

$ export PATH=$HOME/local/bin:$PATH
$ tar -xvf automake-1.16.1.tar.gz
$ cd automake-1.16.1
$ mkdir build && cd $_
$ ../configure --prefix=$HOME/local
$ make
$ make install

And one more thing, m4

macOS에 내장된 m4의 버전은 1.4.6으로 Autoconf를 빌드할 수 있는 최소 버전이며, README 파일에서는 1.4.14 이상을 추천하고 있다.

내친김에 m4도 최신 버전을 빌드해 실행해보면 일부 상황에서 크래시를 겪게 되는데, macOS 10.13 High Sierra 이상부터는 MacPorts의 패치를 적용해야 한다.

$ curl https://raw.githubusercontent.com/macports/macports-ports/edf0ee1e2cf/devel/m4/files/secure_snprintf.patch > secure_snprintf.patch
$ patch -p0 < secure_snprintf.patch

중요한 것은 빌드나 실행에 문제를 겪을 때, Homebrew Formula와 MacPorts Portfile을 참고해 (이미 해결된) 문제를 해결하는 방법을 배우는 것이다.