Сборка GNATCOLL в контейнере Alpine Linux Docker - PullRequest
4 голосов
/ 09 апреля 2019

Я не могу заставить GNATCOLL скомпилироваться в Docker-контейнере на базе Alpine Linux.

Мой контейнер до сих пор:

FROM alpine:edge

# Add extra repositories
RUN echo 'http://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories; \
    echo 'http://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories; \
    echo 'http://dl-cdn.alpinelinux.org/alpine/edge/main' >> /etc/apk/repositories;

RUN apk add --no-cache build-base coreutils curl-dev gcc-gnat git gmp-dev openssl

# Bootstrap GPRBuild
RUN git clone https://github.com/AdaCore/xmlada.git; \
    git clone https://github.com/AdaCore/gprbuild.git; \
    cd gprbuild; ./bootstrap.sh --with-xmlada=../xmlada; \
    cd ..; \
    rm -rf xmlada gprbuild

Это отлично работает и дает мне контейнер с работающей средой разработки Ada на основе GNAT GPR. Проблема возникает, когда я пытаюсь установить GNATCOLL в этом контейнере.

Запуск docker run -i -t <built_image> происходит следующее:

/ # git clone https://github.com/AdaCore/gnatcoll-core.git
<Typical git clone output>
/ # cd gnatcoll-core/
/gnatcoll-core # make setup
/gnatcoll-core # make
gprbuild -p -m --target=x86_64-linux  -j0 -XGNATCOLL_MMAP=yes -XGNATCOLL_MADVISE=yes -XGNATCOLL_VERSION=0.0 -XGNATCOLL_OS=unix -XBUILD=PROD  -XLIBRARY_TYPE=static -XXMLADA_BUILD=static -XGPR_BUILD=static \
        -XGNATCOLL_MMAP=yes -XGNATCOLL_MADVISE=yes -XGNATCOLL_VERSION=0.0 -XGNATCOLL_OS=unix -XBUILD=PROD gnatcoll.gpr
Setup
   [mkdir]        object directory for project GnatColl
   [mkdir]        library directory for project GnatColl
gnatcoll.gpr:24:06: unknown project file: "gpr"
make: *** [Makefile:128: build-static] Error 4

Основываясь на обсуждении в https://github.com/AdaCore/gnatcoll-core/issues/30 Я проверил свою версию gprbuild:

/gnatcoll-core # gprbuild --version
GPRBUILD Pro 18.0w (19940713) (x86_64-alpine-linux-musl)
Copyright (C) 2004-2016, AdaCore
This is free software; see the source for copying conditions.
See your AdaCore support agreement for details of warranty and support.
If you do not have a current support agreement, then there is absolutely
no warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.

Так что может показаться, что gprbuild for musl крайне устарел, что приводит к невозможности сборки GNATCOLL. Есть ли способ получить более свежую версию gprbuild для musl-c? Если нет, то есть ли другой способ установить GNATCOLL?

1 Ответ

5 голосов
/ 09 апреля 2019

Проблема в том, что ./bootstrap.sh в gprbuild не устанавливает все, а просто создает минимальную минимальную установку gprbuild. Кроме того, он не собирает gprlib, который необходим для gnatcoll, а также должен быть установлен.

Необходимые шаги:

# As before...
git clone https://github.com/AdaCore/xmlada.git
git clone https://github.com/AdaCore/gprbuild.git
cd gprbuild; ./bootstrap.sh --with-xmlada=../xmlada

# New: build and install xmlada
cd ../xmlada; ./configure && make && make install

# New: build and install gprbuild fully
cd ../gprbuild
export GPR_PROJECT_PATH=/usr/local/share/gpr
make prefix=/usr/local setup && make all && make install

# New: build and install gprlib
make libgpr.build && make libgpr.install

Благодаря этим дополнениям я смог собрать gnatcoll, как указано в его проекте.

...