diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 73f1ed906da..3fc4e48aa27 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -39,7 +39,7 @@ jobs: build-linux-docker: name: build-linux-docker-${{ matrix.arch }} - runs-on: ubuntu-24.04 + runs-on: ${{ (startsWith(matrix.arch, 'arm') && 'ubuntu-24.04-arm') || 'ubuntu-24.04' }} env: FB_DOCKER_PATH: ${{ (startsWith(matrix.arch, 'arm') && 'arm32-arm64') || 'x86-x64' }} diff --git a/.gitignore b/.gitignore index 87fe2b6f3c8..2b826f5856a 100644 --- a/.gitignore +++ b/.gitignore @@ -28,5 +28,4 @@ extern/ttmath/release/ /src/include/gen/parse.h /src/include/gen/autoconfig.auto /src/include/gen/autoconfig.h -extern/libcds/lib/ /vcpkg_installed/ diff --git a/autogen.sh b/autogen.sh index f800af9a7e1..df71f2fc156 100755 --- a/autogen.sh +++ b/autogen.sh @@ -5,6 +5,15 @@ PKG_NAME=Firebird6 SRCDIR=`dirname $0` +SRCDIR=`(cd "$SRCDIR" && pwd)` +OBJDIR=`pwd` + +if [ "$OBJDIR" = "$SRCDIR" ] +then + BUILD_MODE=in-tree +else + BUILD_MODE=out-of-tree +fi if [ -z "$AUTORECONF" ] then @@ -17,8 +26,11 @@ echo "AUTORECONF="$AUTORECONF AUTOMAKE=true export AUTOMAKE -# This helps some old aclocal versions find binreloc.m4 in current directory -ACLOCAL='aclocal -I .' +# This helps some old aclocal versions find local and source m4 macros +ACLOCAL="aclocal -I $OBJDIR -I $OBJDIR/m4 -I $SRCDIR" +if [ -d "$SRCDIR/m4" ]; then + ACLOCAL="$ACLOCAL -I $SRCDIR/m4" +fi export ACLOCAL # Give a warning if no arguments to 'configure' have been supplied. @@ -30,9 +42,9 @@ if test -z "$*" -a x$NOCONFIGURE = x; then fi # Some versions of autotools need it -if [ ! -d m4 ]; then - rm -rf m4 - mkdir m4 +if [ ! -d "$OBJDIR/m4" ]; then + rm -rf "$OBJDIR/m4" + mkdir -p "$OBJDIR/m4" fi # Ensure correct utilities are called by AUTORECONF @@ -42,28 +54,49 @@ if [ "x$autopath" != "x" ]; then export PATH fi -echo "Running autoreconf ..." -$AUTORECONF --install --force --verbose || exit 1 +if [ "$BUILD_MODE" = "out-of-tree" ] +then + mkdir -p "$OBJDIR/builds/make.new" + ln -sf "$SRCDIR/configure.ac" "$OBJDIR/configure.ac" + ln -sf "$SRCDIR/acx_pthread.m4" "$OBJDIR/acx_pthread.m4" + ln -sf "$SRCDIR/binreloc.m4" "$OBJDIR/binreloc.m4" +fi + +echo "Running autoreconf in $OBJDIR ($BUILD_MODE) ..." +(cd "$OBJDIR" && $AUTORECONF --install --force --verbose) || exit 1 + +if [ "$BUILD_MODE" = "out-of-tree" ] +then + # Prefer auxiliary files generated in the build directory when running configure + sed -i 's#ac_aux_dir_candidates="${srcdir}/builds/make.new/config"#ac_aux_dir_candidates="$ac_pwd/builds/make.new/config${PATH_SEPARATOR}${srcdir}/builds/make.new/config"#' "$OBJDIR/configure" +fi # Hack to bypass bug in autoreconf - --install switch not passed to libtoolize, # therefore missing config.sub and confg.guess files -CONFIG_AUX_DIR=builds/make.new/config -if [ ! -f $CONFIG_AUX_DIR/config.sub -o ! -f $CONFIG_AUX_DIR/config.guess ]; then +CONFIG_AUX_DIR="$OBJDIR/builds/make.new/config" +if [ ! -f "$CONFIG_AUX_DIR/config.sub" -o ! -f "$CONFIG_AUX_DIR/config.guess" ]; then # re-run libtoolize with --install switch, if it does not understand that switch # and there are no config.sub/guess files in CONFIG_AUX_DIR, we will anyway fail echo "Re-running libtoolize ..." if [ -z "$LIBTOOLIZE" ]; then LIBTOOLIZE=libtoolize fi - $LIBTOOLIZE --install --copy --force || exit 1 + (cd "$OBJDIR" && $LIBTOOLIZE --install --copy --force) || exit 1 fi # If NOCONFIGURE is set, skip the call to configure if test "x$NOCONFIGURE" = "x"; then - echo Running $SRCDIR/configure $conf_flags "$@" ... + if [ "$BUILD_MODE" = "out-of-tree" ] + then + CONFIGURE_CMD="$OBJDIR/configure --srcdir=$SRCDIR" + else + CONFIGURE_CMD="$OBJDIR/configure" + fi + + echo Running $CONFIGURE_CMD $conf_flags "$@" ... rm -f config.cache config.log - chmod a+x $SRCDIR/configure - $SRCDIR/configure $conf_flags "$@" \ + chmod a+x "$OBJDIR/configure" + $CONFIGURE_CMD $conf_flags "$@" \ && echo Now type \`make\' to compile $PKG_NAME else echo Autogen skipping configure process. diff --git a/builds/docker/linux/arm32-arm64/Dockerfile b/builds/docker/linux/arm32-arm64/Dockerfile index f89b6236543..22106357a81 100644 --- a/builds/docker/linux/arm32-arm64/Dockerfile +++ b/builds/docker/linux/arm32-arm64/Dockerfile @@ -7,7 +7,7 @@ ARG ARG_LIBTOOL_VERSION=2.4.6 ARG ARG_NCURSES_VERSION=6.3 ARG ARG_LTM_VERSION=1.2.0 ARG ARG_ZLIB_VERSION=1.3.1 -ARG ARG_ICU_VERSION=70-1 +ARG ARG_ICU_VERSION=77-1 ARG ARG_CPUCOUNT=24 @@ -15,7 +15,7 @@ ARG ARG_CTNG_UID=1000 ARG ARG_CTNG_GID=1000 -FROM debian:bookworm as builder +FROM $ARG_BASE AS builder ARG ARG_TARGET_ARCH ARG ARG_CTNF_CONFIG @@ -25,7 +25,6 @@ ARG ARG_LIBTOOL_VERSION ARG ARG_NCURSES_VERSION ARG ARG_LTM_VERSION ARG ARG_ZLIB_VERSION -ARG ARG_ICU_VERSION ARG ARG_CPUCOUNT @@ -71,10 +70,9 @@ RUN groupadd -g $ARG_CTNG_GID ctng && \ USER ctng -COPY --from=asfernandes/firebird-builder:fb6-x64-ng-v1 --chown=ctng:ctng /home/ctng/x-tools /home/ctng/x-tools +COPY --from=firebirdsql/firebird-builder-linux:fb6-x64-ng-v2 --chown=ctng:ctng /home/ctng/x-tools /home/ctng/x-tools RUN mkdir ~/build && \ - curl -SL --output ~/build/icu4c-${ARG_ICU_VERSION}-src.tgz https://github.com/unicode-org/icu/releases/download/release-${ARG_ICU_VERSION}/icu4c-`echo ${ARG_ICU_VERSION} | tr - _`-src.tgz && \ curl -SL --output ~/build/ncurses-${ARG_NCURSES_VERSION}.tar.gz https://ftp.gnu.org/pub/gnu/ncurses/ncurses-${ARG_NCURSES_VERSION}.tar.gz && \ curl -SL --output ~/build/libtool-${ARG_LIBTOOL_VERSION}.tar.gz https://ftpmirror.gnu.org/libtool/libtool-${ARG_LIBTOOL_VERSION}.tar.gz && \ curl -SL --output ~/build/ltm-${ARG_LTM_VERSION}.tar.xz https://github.com/libtom/libtommath/releases/download/v${ARG_LTM_VERSION}/ltm-${ARG_LTM_VERSION}.tar.xz && \ @@ -110,8 +108,8 @@ RUN sudo apt-get -y remove \ libtomcrypt-dev && \ sudo rm -rf /var/lib/apt/lists/* -ENV PATH "/home/ctng/x-tools/x86_64-pc-linux-gnu/bin:/home/ctng/x-tools/x86_64-pc-linux-gnu/x86_64-pc-linux-gnu/sysroot/usr/local/bin:${PATH}" -ENV PATH "/home/ctng/x-tools/${ARG_TARGET_ARCH}/bin:/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/bin:${PATH}" +ENV PATH="/home/ctng/x-tools/x86_64-pc-linux-gnu/bin:/home/ctng/x-tools/x86_64-pc-linux-gnu/x86_64-pc-linux-gnu/sysroot/usr/local/bin:${PATH}" +ENV PATH="/home/ctng/x-tools/${ARG_TARGET_ARCH}/bin:/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/bin:${PATH}" RUN cd ~/build && \ mkdir -p libtool-${ARG_LIBTOOL_VERSION}-src && \ @@ -180,38 +178,20 @@ RUN cd ~/build && \ make -j${ARG_CPUCOUNT} && \ make install -RUN cd ~/build && \ - mkdir icu4c-${ARG_ICU_VERSION}-src && \ - tar xvf icu4c-${ARG_ICU_VERSION}-src.tgz --strip 1 -C icu4c-${ARG_ICU_VERSION}-src && \ - mkdir icu4c-${ARG_ICU_VERSION}-build-x86_64 && \ - cd icu4c-${ARG_ICU_VERSION}-build-x86_64 && \ - CXXFLAGS='-std=c++20 -static-libstdc++' ../icu4c-${ARG_ICU_VERSION}-src/source/runConfigureICU \ - Linux \ - --host=x86_64-pc-linux-gnu && \ - make -j${ARG_CPUCOUNT} - -RUN cd ~/build && \ - mkdir icu4c-${ARG_ICU_VERSION}-build && \ - cd icu4c-${ARG_ICU_VERSION}-build && \ - CXXFLAGS='-std=c++20 -static-libstdc++' ../icu4c-${ARG_ICU_VERSION}-src/source/runConfigureICU \ - Linux \ - --host=${ARG_TARGET_ARCH} \ - --with-cross-build=/home/ctng/build/icu4c-${ARG_ICU_VERSION}-build-x86_64 \ - --prefix=/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local \ - --includedir=/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/include && \ - make -j${ARG_CPUCOUNT} && \ - make install - FROM $ARG_BASE ARG ARG_TARGET_ARCH ARG ARG_CTNG_UID ARG ARG_CTNG_GID +ARG ARG_ICU_VERSION +ARG ARG_CPUCOUNT RUN apt-get update && \ apt-get -y install \ cmake \ + gosu \ + curl \ libc6-amd64-cross \ libfile-copy-recursive-perl \ unzip && \ @@ -221,9 +201,9 @@ RUN ln -s /usr/x86_64-linux-gnu/lib64 /lib64 && \ groupadd -g $ARG_CTNG_GID ctng && \ useradd -d /home/ctng -m -g $ARG_CTNG_GID -u $ARG_CTNG_UID -s /bin/bash ctng -USER ctng - -RUN chmod o=u /home/ctng +RUN mkdir /home/ctng/firebird-build && \ + chown ctng:ctng /home/ctng/firebird-build && \ + chmod o=u /home/ctng COPY --from=builder --chown=ctng:ctng /home/ctng/x-tools /home/ctng/x-tools COPY --chown=ctng:ctng scripts/* / @@ -231,10 +211,26 @@ COPY --chown=ctng:ctng scripts/* / # Let non-emulated x86_64-linux-gnu make run. RUN rm /home/ctng/x-tools/${ARG_TARGET_ARCH}/bin/make -ENV PATH "/home/ctng/x-tools/${ARG_TARGET_ARCH}/bin:/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/bin:/home/ctng/x-tools/x86_64-pc-linux-gnu/bin:${PATH}" +ENV PATH="/home/ctng/x-tools/${ARG_TARGET_ARCH}/bin:/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/bin:/home/ctng/x-tools/x86_64-pc-linux-gnu/bin:${PATH}" ENV LIBRARY_PATH "/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/lib" ENV LD_LIBRARY_PATH "/usr/x86_64-linux-gnu/lib:/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/lib" +RUN mkdir ~/build && \ + cd ~/build && \ + curl -SL --output icu4c-${ARG_ICU_VERSION}-src.tgz https://github.com/unicode-org/icu/releases/download/release-${ARG_ICU_VERSION}/icu4c-`echo ${ARG_ICU_VERSION} | tr - _`-src.tgz && \ + mkdir icu4c-${ARG_ICU_VERSION}-src && \ + tar xvf icu4c-${ARG_ICU_VERSION}-src.tgz --strip 1 -C icu4c-${ARG_ICU_VERSION}-src && \ + mkdir icu4c-${ARG_ICU_VERSION}-build && \ + cd icu4c-${ARG_ICU_VERSION}-build && \ + CXXFLAGS='-std=c++20 -static-libstdc++' ../icu4c-${ARG_ICU_VERSION}-src/source/runConfigureICU \ + Linux \ + --host=${ARG_TARGET_ARCH} \ + --prefix=/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr && \ + make -j${ARG_CPUCOUNT} && \ + make install && \ + cd / && \ + rm -rf ~/build + ENV BUILD_ARCH=$ARG_TARGET_ARCH WORKDIR /firebird diff --git a/builds/docker/linux/arm32-arm64/build-arm32.sh b/builds/docker/linux/arm32-arm64/build-arm32.sh index 4072c97d77a..d6dfb738d1d 100755 --- a/builds/docker/linux/arm32-arm64/build-arm32.sh +++ b/builds/docker/linux/arm32-arm64/build-arm32.sh @@ -1,7 +1,11 @@ #!/bin/sh +ARG_NATIVE_ARCH=linux/arm docker buildx build \ + --progress=plain \ + --platform $ARG_NATIVE_ARCH \ --pull \ + --build-arg ARG_NATIVE_ARCH=$ARG_NATIVE_ARCH \ --build-arg ARG_BASE=arm32v7/debian:bookworm \ --build-arg ARG_TARGET_ARCH=arm-pc-linux-gnueabihf \ --build-arg ARG_CTNF_CONFIG=crosstool-ng-config-arm32 \ - -t asfernandes/firebird-builder:fb6-arm32-ng-v1 . + -t firebirdsql/firebird-builder-linux:fb6-arm32-ng-v2 . diff --git a/builds/docker/linux/arm32-arm64/build-arm64.sh b/builds/docker/linux/arm32-arm64/build-arm64.sh index ae8385b8e33..219a69e331e 100755 --- a/builds/docker/linux/arm32-arm64/build-arm64.sh +++ b/builds/docker/linux/arm32-arm64/build-arm64.sh @@ -1,7 +1,11 @@ #!/bin/sh +ARG_NATIVE_ARCH=linux/arm64 docker buildx build \ + --progress=plain \ + --platform $ARG_NATIVE_ARCH \ --pull \ + --build-arg ARG_NATIVE_ARCH=$ARG_NATIVE_ARCH \ --build-arg ARG_BASE=arm64v8/debian:bookworm \ --build-arg ARG_TARGET_ARCH=aarch64-pc-linux-gnu \ --build-arg ARG_CTNF_CONFIG=crosstool-ng-config-arm64 \ - -t asfernandes/firebird-builder:fb6-arm64-ng-v1 . + -t firebirdsql/firebird-builder-linux:fb6-arm64-ng-v2 . diff --git a/builds/docker/linux/arm32-arm64/push.sh b/builds/docker/linux/arm32-arm64/push.sh index aff99770828..ad9124e7112 100755 --- a/builds/docker/linux/arm32-arm64/push.sh +++ b/builds/docker/linux/arm32-arm64/push.sh @@ -1,5 +1,5 @@ #!/bin/sh set -e -docker push asfernandes/firebird-builder:fb6-arm32-ng-v1 -docker push asfernandes/firebird-builder:fb6-arm64-ng-v1 +docker push firebirdsql/firebird-builder-linux:fb6-arm32-ng-v2 +docker push firebirdsql/firebird-builder-linux:fb6-arm64-ng-v2 diff --git a/builds/docker/linux/arm32-arm64/run-arm32.sh b/builds/docker/linux/arm32-arm64/run-arm32.sh index d8dcf83575a..f53910bc2e2 100755 --- a/builds/docker/linux/arm32-arm64/run-arm32.sh +++ b/builds/docker/linux/arm32-arm64/run-arm32.sh @@ -1,2 +1,8 @@ #!/bin/sh -docker run --platform arm --rm --user `id -u`:`id -g` -v `pwd`/../../../..:/firebird -t asfernandes/firebird-builder:fb6-arm32-ng-v1 +mkdir -p `pwd`/../../../../gen +docker run --platform arm --rm \ + -e CTNG_UID=${CTNG_UID:-$(id -u)} \ + -e CTNG_GID=${CTNG_GID:-$(id -g)} \ + -v `pwd`/../../../..:/firebird \ + -v `pwd`/../../../../gen:/home/ctng/firebird-build/gen \ + -t firebirdsql/firebird-builder-linux:fb6-arm32-ng-v2 diff --git a/builds/docker/linux/arm32-arm64/run-arm64.sh b/builds/docker/linux/arm32-arm64/run-arm64.sh index ee4c1ccf59e..3b8903dc6d6 100755 --- a/builds/docker/linux/arm32-arm64/run-arm64.sh +++ b/builds/docker/linux/arm32-arm64/run-arm64.sh @@ -1,2 +1,8 @@ #!/bin/sh -docker run --platform arm64 --rm --user `id -u`:`id -g` -v `pwd`/../../../..:/firebird -t asfernandes/firebird-builder:fb6-arm64-ng-v1 +mkdir -p `pwd`/../../../../gen +docker run --platform arm64 --rm \ + -e CTNG_UID=${CTNG_UID:-$(id -u)} \ + -e CTNG_GID=${CTNG_GID:-$(id -g)} \ + -v `pwd`/../../../..:/firebird \ + -v `pwd`/../../../../gen:/home/ctng/firebird-build/gen \ + -t firebirdsql/firebird-builder-linux:fb6-arm64-ng-v2 diff --git a/builds/docker/linux/arm32-arm64/scripts/build.sh b/builds/docker/linux/arm32-arm64/scripts/build.sh index 02c25e525ee..b73ef5b1b95 100755 --- a/builds/docker/linux/arm32-arm64/scripts/build.sh +++ b/builds/docker/linux/arm32-arm64/scripts/build.sh @@ -5,7 +5,9 @@ gcc -v ld -v make -v -./autogen.sh \ +cd /home/ctng/firebird-build + +/firebird/autogen.sh \ --host=$BUILD_ARCH \ --prefix=/opt/firebird \ --enable-binreloc \ diff --git a/builds/docker/linux/arm32-arm64/scripts/entry-common.sh b/builds/docker/linux/arm32-arm64/scripts/entry-common.sh new file mode 100755 index 00000000000..9ab9ec38e26 --- /dev/null +++ b/builds/docker/linux/arm32-arm64/scripts/entry-common.sh @@ -0,0 +1,32 @@ +#!/bin/sh +set -e + +: "${CTNG_UID:=1000}" +: "${CTNG_GID:=1000}" + +current_uid="$(id -u ctng)" +current_gid="$(id -g ctng)" + +if [ "$CTNG_GID" != "$current_gid" ]; then + # If the requested GID exists, use it as the primary group. + if getent group "$CTNG_GID" >/dev/null 2>&1; then + usermod -g "$CTNG_GID" ctng + else + groupmod -g "$CTNG_GID" ctng + fi +fi + +if [ "$CTNG_UID" != "$current_uid" ]; then + # If the requested UID is already taken by another user, keep the existing UID. + if getent passwd "$CTNG_UID" >/dev/null 2>&1 && [ "$(getent passwd "$CTNG_UID" | cut -d: -f1)" != "ctng" ]; then + echo "warning: CTNG_UID=$CTNG_UID already exists, keeping ctng uid=$current_uid" >&2 + else + usermod -u "$CTNG_UID" ctng + fi +fi + +chown ctng:ctng /home/ctng /home/ctng/firebird-build/gen + +export HOME=/home/ctng + +exec gosu ctng "$@" diff --git a/builds/docker/linux/arm32-arm64/scripts/entry.sh b/builds/docker/linux/arm32-arm64/scripts/entry.sh index c062d692ea4..37b89e0e8c6 100755 --- a/builds/docker/linux/arm32-arm64/scripts/entry.sh +++ b/builds/docker/linux/arm32-arm64/scripts/entry.sh @@ -1,6 +1,4 @@ #!/bin/sh set -e -trap exit INT TERM -/build.sh & -wait $! +exec /entry-common.sh /build.sh diff --git a/builds/docker/linux/x86-x64/Dockerfile b/builds/docker/linux/x86-x64/Dockerfile index 93f0e15d86d..acdf7eca4a5 100644 --- a/builds/docker/linux/x86-x64/Dockerfile +++ b/builds/docker/linux/x86-x64/Dockerfile @@ -8,7 +8,7 @@ ARG ARG_LIBTOOL_VERSION=2.4.6 ARG ARG_NCURSES_VERSION=6.3 ARG ARG_LTM_VERSION=1.2.0 ARG ARG_ZLIB_VERSION=1.3.1 -ARG ARG_ICU_VERSION=70-1 +ARG ARG_ICU_VERSION=77-1 ARG ARG_CPUCOUNT=24 @@ -16,7 +16,7 @@ ARG ARG_CTNG_UID=1000 ARG ARG_CTNG_GID=1000 -FROM $ARG_BASE as builder +FROM $ARG_BASE AS builder ARG ARG_SET_ARCH ARG ARG_TARGET_ARCH @@ -74,7 +74,7 @@ RUN groupadd -g $ARG_CTNG_GID ctng && \ USER ctng RUN mkdir ~/build && \ - curl -SL --output ~/build/icu4c-${ARG_ICU_VERSION}-src.tgz https://github.com/unicode-org/icu/releases/download/release-${ARG_ICU_VERSION}/icu4c-`echo ${ARG_ICU_VERSION} | tr - _`-src.tgz && \ + curl -SL --output ~/build/icu4c-${ARG_ICU_VERSION}-src.tgz https://github.com/unicode-org/icu/releases/download/release-${ARG_ICU_VERSION}/icu4c-$(echo "${ARG_ICU_VERSION}" | tr '-' '_')-src.tgz && \ curl -SL --output ~/build/ncurses-${ARG_NCURSES_VERSION}.tar.gz https://ftp.gnu.org/pub/gnu/ncurses/ncurses-${ARG_NCURSES_VERSION}.tar.gz && \ curl -SL --output ~/build/libtool-${ARG_LIBTOOL_VERSION}.tar.gz https://ftpmirror.gnu.org/libtool/libtool-${ARG_LIBTOOL_VERSION}.tar.gz && \ curl -SL --output ~/build/ltm-${ARG_LTM_VERSION}.tar.xz https://github.com/libtom/libtommath/releases/download/v${ARG_LTM_VERSION}/ltm-${ARG_LTM_VERSION}.tar.xz && \ @@ -110,7 +110,7 @@ RUN sudo apt-get -y remove \ libtomcrypt-dev && \ sudo rm -rf /var/lib/apt/lists/* -ENV PATH "/home/ctng/x-tools/${ARG_TARGET_ARCH}/bin:/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/bin:${PATH}" +ENV PATH="/home/ctng/x-tools/${ARG_TARGET_ARCH}/bin:/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/bin:${PATH}" RUN cd ~/build && \ mkdir -p libtool-${ARG_LIBTOOL_VERSION}-src && \ @@ -198,10 +198,12 @@ ARG ARG_TARGET_ARCH ARG ARG_SET_ARCH ARG ARG_CTNG_UID ARG ARG_CTNG_GID +ARG ARG_ICU_VERSION RUN apt-get update && \ apt-get -y install \ cmake \ + gosu \ libfile-copy-recursive-perl \ unzip \ xz-utils && \ @@ -210,19 +212,21 @@ RUN apt-get update && \ RUN groupadd -g $ARG_CTNG_GID ctng && \ useradd -d /home/ctng -m -g $ARG_CTNG_GID -u $ARG_CTNG_UID -s /bin/bash ctng -USER ctng - -RUN chmod o=u /home/ctng +RUN mkdir /home/ctng/firebird-build && \ + chown ctng:ctng /home/ctng/firebird-build && \ + chmod o=u /home/ctng COPY --from=builder --chown=ctng:ctng /home/ctng/x-tools /home/ctng/x-tools COPY --chown=ctng:ctng scripts/* / -ENV PATH "/home/ctng/x-tools/${ARG_TARGET_ARCH}/bin:/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/bin:${PATH}" -ENV LIBRARY_PATH "/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/lib" -ENV LD_LIBRARY_PATH "/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/lib" +ENV PATH="/home/ctng/x-tools/${ARG_TARGET_ARCH}/bin:/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/bin:${PATH}" +ENV LIBRARY_PATH="/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/lib" +ENV LD_LIBRARY_PATH="/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/lib" ENV BUILD_ARCH=$ARG_TARGET_ARCH ENV SET_ARCH=$ARG_SET_ARCH +ENV CTNG_UID=1000 +ENV CTNG_GID=1000 WORKDIR /firebird diff --git a/builds/docker/linux/x86-x64/build-x64.sh b/builds/docker/linux/x86-x64/build-x64.sh index 89ecc57a8fd..07405e9cf24 100755 --- a/builds/docker/linux/x86-x64/build-x64.sh +++ b/builds/docker/linux/x86-x64/build-x64.sh @@ -1,8 +1,11 @@ #!/bin/sh docker buildx build \ + --progress=plain \ --pull \ --build-arg ARG_BASE=debian:bookworm \ --build-arg ARG_SET_ARCH=x86_64 \ --build-arg ARG_TARGET_ARCH=x86_64-pc-linux-gnu \ --build-arg ARG_CTNF_CONFIG=crosstool-ng-config-x64 \ - -t asfernandes/firebird-builder:fb6-x64-ng-v1 . + --build-arg ARG_CTNG_UID=${CTNG_UID:-$(id -u)} \ + --build-arg ARG_CTNG_GID=${CTNG_GID:-$(id -g)} \ + -t firebirdsql/firebird-builder-linux:fb6-x64-ng-v2 . diff --git a/builds/docker/linux/x86-x64/build-x86.sh b/builds/docker/linux/x86-x64/build-x86.sh index 94de4e40abc..49521a1e28a 100755 --- a/builds/docker/linux/x86-x64/build-x86.sh +++ b/builds/docker/linux/x86-x64/build-x86.sh @@ -1,8 +1,11 @@ #!/bin/sh docker buildx build \ + --progress=plain \ --pull \ --build-arg ARG_BASE=i386/debian:bookworm \ --build-arg ARG_SET_ARCH=i686 \ --build-arg ARG_TARGET_ARCH=i586-pc-linux-gnu \ --build-arg ARG_CTNF_CONFIG=crosstool-ng-config-x86 \ - -t asfernandes/firebird-builder:fb6-x86-ng-v1 . + --build-arg ARG_CTNG_UID=${CTNG_UID:-$(id -u)} \ + --build-arg ARG_CTNG_GID=${CTNG_GID:-$(id -g)} \ + -t firebirdsql/firebird-builder-linux:fb6-x86-ng-v2 . diff --git a/builds/docker/linux/x86-x64/push.sh b/builds/docker/linux/x86-x64/push.sh index f45e10bed00..f77177764cf 100755 --- a/builds/docker/linux/x86-x64/push.sh +++ b/builds/docker/linux/x86-x64/push.sh @@ -1,5 +1,5 @@ #!/bin/sh set -e -docker push asfernandes/firebird-builder:fb6-x86-ng-v1 -docker push asfernandes/firebird-builder:fb6-x64-ng-v1 +docker push firebirdsql/firebird-builder-linux:fb6-x86-ng-v2 +docker push firebirdsql/firebird-builder-linux:fb6-x64-ng-v2 diff --git a/builds/docker/linux/x86-x64/run-src-bundle.sh b/builds/docker/linux/x86-x64/run-src-bundle.sh index 5722f4c4276..25f5eac4f4c 100755 --- a/builds/docker/linux/x86-x64/run-src-bundle.sh +++ b/builds/docker/linux/x86-x64/run-src-bundle.sh @@ -1,2 +1,8 @@ #!/bin/sh -docker run --platform amd64 --rm --user `id -u`:`id -g` -v `pwd`/../../../..:/firebird -t --entrypoint /entry-src-bundle.sh asfernandes/firebird-builder:fb6-x64-ng-v1 +docker run --platform amd64 --rm \ + -e CTNG_UID=${CTNG_UID:-$(id -u)} \ + -e CTNG_GID=${CTNG_GID:-$(id -g)} \ + -v `pwd`/../../../..:/firebird \ + -v `pwd`/../../../../gen:/home/ctng/firebird-build/gen \ + --entrypoint /entry-src-bundle.sh \ + -t firebirdsql/firebird-builder-linux:fb6-x64-ng-v2 diff --git a/builds/docker/linux/x86-x64/run-x64.sh b/builds/docker/linux/x86-x64/run-x64.sh index 60cb024ad6d..d3ce638f74b 100755 --- a/builds/docker/linux/x86-x64/run-x64.sh +++ b/builds/docker/linux/x86-x64/run-x64.sh @@ -1,2 +1,8 @@ #!/bin/sh -docker run --platform amd64 --rm --user `id -u`:`id -g` -v `pwd`/../../../..:/firebird -t asfernandes/firebird-builder:fb6-x64-ng-v1 +mkdir -p `pwd`/../../../../gen +docker run --platform amd64 --rm \ + -e CTNG_UID=${CTNG_UID:-$(id -u)} \ + -e CTNG_GID=${CTNG_GID:-$(id -g)} \ + -v `pwd`/../../../..:/firebird \ + -v `pwd`/../../../../gen:/home/ctng/firebird-build/gen \ + -t firebirdsql/firebird-builder-linux:fb6-x64-ng-v2 diff --git a/builds/docker/linux/x86-x64/run-x86.sh b/builds/docker/linux/x86-x64/run-x86.sh index a07ab0b1dba..5e3eba5f162 100755 --- a/builds/docker/linux/x86-x64/run-x86.sh +++ b/builds/docker/linux/x86-x64/run-x86.sh @@ -1,2 +1,8 @@ #!/bin/sh -docker run --platform i386 --rm --user `id -u`:`id -g` -v `pwd`/../../../..:/firebird -t asfernandes/firebird-builder:fb6-x86-ng-v1 +mkdir -p `pwd`/../../../../gen +docker run --platform i386 --rm \ + -e CTNG_UID=${CTNG_UID:-$(id -u)} \ + -e CTNG_GID=${CTNG_GID:-$(id -g)} \ + -v `pwd`/../../../..:/firebird \ + -v `pwd`/../../../../gen:/home/ctng/firebird-build/gen \ + -t firebirdsql/firebird-builder-linux:fb6-x86-ng-v2 diff --git a/builds/docker/linux/x86-x64/scripts/build.sh b/builds/docker/linux/x86-x64/scripts/build.sh index 02c25e525ee..b73ef5b1b95 100755 --- a/builds/docker/linux/x86-x64/scripts/build.sh +++ b/builds/docker/linux/x86-x64/scripts/build.sh @@ -5,7 +5,9 @@ gcc -v ld -v make -v -./autogen.sh \ +cd /home/ctng/firebird-build + +/firebird/autogen.sh \ --host=$BUILD_ARCH \ --prefix=/opt/firebird \ --enable-binreloc \ diff --git a/builds/docker/linux/x86-x64/scripts/entry-common.sh b/builds/docker/linux/x86-x64/scripts/entry-common.sh new file mode 100755 index 00000000000..9ab9ec38e26 --- /dev/null +++ b/builds/docker/linux/x86-x64/scripts/entry-common.sh @@ -0,0 +1,32 @@ +#!/bin/sh +set -e + +: "${CTNG_UID:=1000}" +: "${CTNG_GID:=1000}" + +current_uid="$(id -u ctng)" +current_gid="$(id -g ctng)" + +if [ "$CTNG_GID" != "$current_gid" ]; then + # If the requested GID exists, use it as the primary group. + if getent group "$CTNG_GID" >/dev/null 2>&1; then + usermod -g "$CTNG_GID" ctng + else + groupmod -g "$CTNG_GID" ctng + fi +fi + +if [ "$CTNG_UID" != "$current_uid" ]; then + # If the requested UID is already taken by another user, keep the existing UID. + if getent passwd "$CTNG_UID" >/dev/null 2>&1 && [ "$(getent passwd "$CTNG_UID" | cut -d: -f1)" != "ctng" ]; then + echo "warning: CTNG_UID=$CTNG_UID already exists, keeping ctng uid=$current_uid" >&2 + else + usermod -u "$CTNG_UID" ctng + fi +fi + +chown ctng:ctng /home/ctng /home/ctng/firebird-build/gen + +export HOME=/home/ctng + +exec gosu ctng "$@" diff --git a/builds/docker/linux/x86-x64/scripts/entry-src-bundle.sh b/builds/docker/linux/x86-x64/scripts/entry-src-bundle.sh index 6b261fdac9c..52e53e423f0 100755 --- a/builds/docker/linux/x86-x64/scripts/entry-src-bundle.sh +++ b/builds/docker/linux/x86-x64/scripts/entry-src-bundle.sh @@ -1,6 +1,4 @@ #!/bin/sh set -e -trap exit INT TERM -setarch $SET_ARCH /src-bundle.sh & -wait $! +exec /entry-common.sh setarch $SET_ARCH /src-bundle.sh diff --git a/builds/docker/linux/x86-x64/scripts/entry.sh b/builds/docker/linux/x86-x64/scripts/entry.sh index 04558c8ede3..9a0ccefa65a 100755 --- a/builds/docker/linux/x86-x64/scripts/entry.sh +++ b/builds/docker/linux/x86-x64/scripts/entry.sh @@ -1,6 +1,4 @@ #!/bin/sh set -e -trap exit INT TERM -setarch $SET_ARCH /build.sh & -wait $! +exec /entry-common.sh setarch $SET_ARCH /build.sh diff --git a/builds/docker/linux/x86-x64/scripts/src-bundle.sh b/builds/docker/linux/x86-x64/scripts/src-bundle.sh index ffb3dd13354..e9487beca7d 100755 --- a/builds/docker/linux/x86-x64/scripts/src-bundle.sh +++ b/builds/docker/linux/x86-x64/scripts/src-bundle.sh @@ -1,7 +1,9 @@ #!/bin/sh set -e -./autogen.sh \ +cd /home/ctng/firebird-build + +/firebird/autogen.sh \ --host=$BUILD_ARCH \ --prefix=/opt/firebird \ --enable-binreloc \ diff --git a/builds/install/arch-specific/linux/makeInstallImage.sh.in b/builds/install/arch-specific/linux/makeInstallImage.sh.in index 3c2b571515a..e5545364021 100644 --- a/builds/install/arch-specific/linux/makeInstallImage.sh.in +++ b/builds/install/arch-specific/linux/makeInstallImage.sh.in @@ -33,6 +33,7 @@ fb_install_prefix=@prefix@ # Making an assumption that this program is being run in the gen directory BuildRootDir=.. BuiltFBDir=Release/firebird # Where the just build fb exists. +BuildTarget=$(basename "$(dirname "$BuiltFBDir")") TargetDir=buildroot # Where we want to build the install image SecurityDatabase=security6.fdb TomMathBuild="@TOMMATH_BUILD@" @@ -264,11 +265,11 @@ copyFiles() { if [ "$TomMathBuild" = "Y" ]; then makeDirs @FB_LIBDIR@/.tm - cp -df $BuildRootDir/extern/libtommath/.libs/libtommath.so* ${TargetDir}@FB_LIBDIR@/.tm + cp -df $BuildRootDir/temp/extern/libtommath/$BuildTarget/.libs/libtommath.so* ${TargetDir}@FB_LIBDIR@/.tm fi if [ "$TomCryptBuild" = "Y" ]; then - cp -df $BuildRootDir/extern/libtomcrypt/.libs/libtomcrypt.so* ${TargetDir}@FB_LIBDIR@ + cp -df $BuildRootDir/temp/extern/libtomcrypt/$BuildTarget/.libs/libtomcrypt.so* ${TargetDir}@FB_LIBDIR@ fi chmod 0755 ${TargetDir}@FB_LIBDIR@/*.so* diff --git a/builds/posix/Makefile.in b/builds/posix/Makefile.in index db3816710f0..11feb14b0ff 100644 --- a/builds/posix/Makefile.in +++ b/builds/posix/Makefile.in @@ -34,6 +34,7 @@ # ROOT=$(shell cd ..; pwd) +SRCDIR=@abs_top_srcdir@ ifeq ($(CROSS_OUT), Y) export CROSS:=CrossBuild @@ -182,7 +183,7 @@ $(API_PAS_FILE): $(IDL_FILE) $(PASCAL_SOURCES) $(TMP_FUNCS_PAS) updateBuildNum : $(SRC_ROOT)/jrd/build_no.h $(GEN_ROOT)/Make.Version $(SRC_ROOT)/jrd/build_no.h : $(SRC_ROOT)/misc/writeBuildNum.sh - (cd $(ROOT); ./src/misc/writeBuildNum.sh rebuildHeader) + $(SRCDIR)/src/misc/writeBuildNum.sh rebuildHeader $(GEN_ROOT)/Make.Version : $(SRC_ROOT)/misc/writeBuildNum.sh $(SRC_ROOT)/misc/writeBuildNum.sh createMakeVersion $@ @@ -194,44 +195,51 @@ $(GEN_ROOT)/Make.Version : $(SRC_ROOT)/misc/writeBuildNum.sh external: ifeq ($(CLIENT_ONLY_FLG),N) - CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(ROOT)/extern/btyacc + CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(SRCDIR)/extern/btyacc \ + PROGRAM=$(GEN_ROOT)/extern/btyacc/btyacc OBJ_DIR=$(ROOT)/temp/extern/btyacc endif mkdir -p $(GEN_ROOT)/$(TARGET)/cloop ifeq ($(PLATFORM),DARWIN) cd $(GEN_ROOT)/$(TARGET)/cloop && \ - cmake -DCMAKE_BUILD_TYPE=$(FB_CMAKE_BUILD_TYPE) -DCMAKE_CXX_COMPILER="$(CXX)" -DCLOOP_BUILD_TESTS=OFF $(ROOT)/extern/cloop + cmake -DCMAKE_BUILD_TYPE=$(FB_CMAKE_BUILD_TYPE) -DCMAKE_CXX_COMPILER="$(CXX)" -DCLOOP_BUILD_TESTS=OFF $(SRCDIR)/extern/cloop else cd $(GEN_ROOT)/$(TARGET)/cloop && \ - cmake -DCMAKE_BUILD_TYPE=$(FB_CMAKE_BUILD_TYPE) -DCMAKE_CXX_COMPILER="$(CXX)" -DCLOOP_BUILD_TESTS=OFF -DCMAKE_CXX_FLAGS="-static-libstdc++" -DCMAKE_EXE_LINKER_FLAGS="-static-libstdc++" $(ROOT)/extern/cloop + cmake -DCMAKE_BUILD_TYPE=$(FB_CMAKE_BUILD_TYPE) -DCMAKE_CXX_COMPILER="$(CXX)" -DCLOOP_BUILD_TESTS=OFF -DCMAKE_CXX_FLAGS="-static-libstdc++" -DCMAKE_EXE_LINKER_FLAGS="-static-libstdc++" $(SRCDIR)/extern/cloop endif cd $(GEN_ROOT)/$(TARGET)/cloop && \ cmake --build . - CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(ROOT)/extern/decNumber - ln -sf $(ROOT)/extern/decNumber/libdecFloat.a $(STATIC_LIB) + mkdir -p $(ROOT)/temp/extern/decNumber $(GEN_ROOT)/extern/decNumber + CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(SRCDIR)/extern/decNumber \ + SRCDIR=$(SRCDIR)/extern/decNumber \ + OBJ_DIR=$(ROOT)/temp/extern/decNumber \ + LIBRARY=$(GEN_ROOT)/extern/decNumber/libdecFloat.a + ln -sf $(GEN_ROOT)/extern/decNumber/libdecFloat.a $(STATIC_LIB) ifeq ($(ABSEIL_BUILD_FLG),Y) - CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" $(MAKE) -C $(ROOT)/extern/int128/absl/numeric - ln -sf $(ROOT)/extern/int128/absl/numeric/libi128.a $(STATIC_LIB) + CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" $(MAKE) -C $(SRCDIR)/extern/int128/absl/numeric + ln -sf $(SRCDIR)/extern/int128/absl/numeric/libi128.a $(STATIC_LIB) endif ifeq ($(CLIENT_ONLY_FLG),N) ifeq ($(RE2_BUILD_FLG),Y) - CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) -O3 -g -fPIC" AR="$(AR)" $(MAKE) -C $(ROOT)/extern/re2 - ln -sf $(ROOT)/extern/re2/obj/libre2.a $(STATIC_LIB) + @mkdir -p $(RE2_BUILD_DIR) + CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) -O3 -g -fPIC" AR="$(AR)" $(MAKE) -C $(SRCDIR)/extern/re2 OBJ_DIR=$(RE2_BUILD_DIR) + ln -sf $(RE2_BUILD_DIR)/libre2.a $(STATIC_LIB) endif $(MAKE) libcds endif ifeq ($(TOMMATH_BUILD_FLG),Y) - CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(ROOT)/extern/libtommath -f makefile.shared GCC="$(CC)" + @mkdir -p $(TOMMATH_BUILD_DIR) + CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(SRCDIR)/extern/libtommath -f makefile.shared GCC="$(CC)" OBJDIR=$(TOMMATH_BUILD_DIR) LIBNAME=$(TOMMATH_BUILD_DIR)/libtommath.la ifeq ($(PLATFORM),DARWIN) - install_name_tool -id "@rpath/lib/libtommath.dylib" $(TOMMATH)/.libs/libtommath.0.dylib - cp $(TOMMATH)/.libs/libtommath.0.dylib $(LIB)/libtommath.dylib + install_name_tool -id "@rpath/lib/libtommath.dylib" $(TOMMATH_BUILD_DIR)/.libs/libtommath.0.dylib + cp $(TOMMATH_BUILD_DIR)/.libs/libtommath.0.dylib $(LIB)/libtommath.dylib else ln -sf $(TOMMATH_SO).$(TOMMATH_VER) $(LIB) ln -sf $(TOMMATH_SO) $(LIB) @@ -239,11 +247,12 @@ endif endif ifeq ($(TOMCRYPT_BUILD_FLG),Y) - CC="$(CC)" CFLAGS="$(CFLAGS) $(TOM2TOM_CFLAGS)" $(MAKE) -C $(ROOT)/extern/libtomcrypt -f makefile.shared GCC="$(CC)" LTC_LDFLAGS=$(LTC_LDFLAGS) + @mkdir -p $(TOMCRYPT_BUILD_DIR) + CC="$(CC)" CFLAGS="$(CFLAGS) $(TOM2TOM_CFLAGS)" $(MAKE) -C $(SRCDIR)/extern/libtomcrypt -f makefile.shared GCC="$(CC)" LTC_LDFLAGS=$(LTC_LDFLAGS) OBJDIR=$(TOMCRYPT_BUILD_DIR) LIBNAME=$(TOMCRYPT_BUILD_DIR)/libtomcrypt.la ifeq ($(PLATFORM),DARWIN) - install_name_tool -id "@rpath/lib/libtomcrypt.dylib" $(TOMCRYPT)/.libs/libtomcrypt.1.dylib - cp $(TOMCRYPT)/.libs/libtomcrypt.1.dylib $(LIB)/libtomcrypt.dylib + install_name_tool -id "@rpath/lib/libtomcrypt.dylib" $(TOMCRYPT_BUILD_DIR)/.libs/libtomcrypt.1.dylib + cp $(TOMCRYPT_BUILD_DIR)/.libs/libtomcrypt.1.dylib $(LIB)/libtomcrypt.dylib else ln -sf $(TOMCRYPT_SO).$(TOMCRYPT_VER) $(LIB) ln -sf $(TOMCRYPT_SO) $(LIB) @@ -263,7 +272,7 @@ endif # create platform-specific export lists (version scripts) in gen # -%.vers: $(ROOT)/builds/posix/%.vers +%.vers: $(SRCDIR)/builds/posix/%.vers sh vers.sh $(firstword $@) export_lists: $(ALLVERS) @@ -274,7 +283,8 @@ export_lists: $(ALLVERS) .PHONY: tommath TOMMATH_LIB=$(STATIC_LIB)/libtommath.a -TOM_Objs=$(addprefix ../extern/libtommath/,$(call doObjects,$(call dirFiles,../extern/libtommath))) +TOM_Src:=$(wildcard $(SRCDIR)/extern/libtommath/*.c) +TOM_Objs=$(call doObjects,$(TOM_Src)) tommath: $(TOMMATH_LIB) @@ -289,7 +299,7 @@ $(TOMMATH_LIB): $(TOM_Objs) .PHONY: tomcrypt TOMCRYPT_LIB=$(STATIC_LIB)/libtomcrypt.a -TOM_Src:=$(shell find ../extern/libtomcrypt/src -name '*.c' -print) +TOM_Src:=$(shell find $(SRCDIR)/extern/libtomcrypt/src -name '*.c' -print) TOM_Objs=$(call doObjects,$(TOM_Src)) tomcrypt: $(TOMCRYPT_LIB) @@ -304,7 +314,7 @@ $(TOMCRYPT_LIB): $(TOM_Objs) .PHONY: re2 RE2_LIB:=$(STATIC_LIB)/libre2.a -RE2_DIR:=../extern/re2/ +RE2_DIR:=$(SRCDIR)/extern/re2/ RE2_Util:=rune.cc strutil.cc RE2_Util:=$(addprefix $(RE2_DIR)util/, $(RE2_Util)) @@ -321,17 +331,20 @@ $(RE2_LIB): $(RE2_Objs) # libcds # -.PHONY: libcds +.PHONY: libcds libcds_process libcds: - mkdir -p $(LIBCDS)/lib/$(TARGET) - cd $(LIBCDS)/lib/$(TARGET); \ + $(MAKE) TARGET?=$(DefaultTarget) libcds_process + +libcds_process: + mkdir -p $(LIBCDS_BUILD_DIR) + cd $(LIBCDS_BUILD_DIR); \ cmake -DCMAKE_BUILD_TYPE=$(FB_CMAKE_BUILD_TYPE) -DCMAKE_CXX_COMPILER="$(CXX)" -DCMAKE_CXX_FLAGS=-fPIC $(LIBCDS) - AR="$(AR)" $(MAKE) -C $(LIBCDS)/lib/$(TARGET) + AR="$(AR)" $(MAKE) -C $(LIBCDS_BUILD_DIR) ifeq ($(TARGET),Debug) - ln -sf $(LIBCDS)/lib/$(TARGET)/bin/libcds-s_d.a $(STATIC_LIB)/libcds.a + ln -sf $(LIBCDS_BUILD_DIR)/bin/libcds-s_d.a $(STATIC_LIB)/libcds.a else - ln -sf $(LIBCDS)/lib/$(TARGET)/bin/libcds-s.a $(STATIC_LIB)/libcds.a + ln -sf $(LIBCDS_BUILD_DIR)/bin/libcds-s.a $(STATIC_LIB)/libcds.a endif #___________________________________________________________________________ @@ -341,7 +354,8 @@ endif .PHONY: cross1 cross2 boot yvalve engine fbintl gpre utilities plugins rest examples cross_rest master_process: - ln -sf $(SRC_ROOT)/include/gen/autoconfig.auto $(SRC_ROOT)/include/gen/autoconfig.h + mkdir -p $(ROOT)/src/include/gen + ln -sf $(ROOT)/src/include/gen/autoconfig.auto $(ROOT)/src/include/gen/autoconfig.h $(MAKE) updateBuildNum $(MAKE) export_lists $(MAKE) external @@ -376,7 +390,8 @@ cross_process: $(MAKE) CROSS_OUT=Y cross2 cross1: - ln -sf $(SRC_ROOT)/include/gen/autoconfig.auto $(SRC_ROOT)/include/gen/autoconfig.h + mkdir -p $(ROOT)/src/include/gen + ln -sf $(ROOT)/src/include/gen/autoconfig.auto $(ROOT)/src/include/gen/autoconfig.h $(MAKE) updateBuildNum $(MAKE) export_lists $(MAKE) external @@ -399,7 +414,8 @@ ifeq ($(CLIENT_ONLY_FLG),N) endif cross2: - ln -sf $(SRC_ROOT)/include/cross/$(CROSS_CONFIG) $(SRC_ROOT)/include/gen/autoconfig.h + mkdir -p $(ROOT)/src/include/gen + ln -sf $(SRC_ROOT)/include/cross/$(CROSS_CONFIG) $(ROOT)/src/include/gen/autoconfig.h $(MAKE) prerequisites $(MAKE) tommath ifeq ($(WITH_TOMCRYPT),Y) @@ -409,10 +425,14 @@ ifeq ($(CLIENT_ONLY_FLG),N) $(MAKE) re2 $(MAKE) libcds endif - CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(ROOT)/extern/decNumber - ln -sf $(ROOT)/extern/decNumber/libdecFloat$(CROSS).a $(STATIC_LIB) - CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" $(MAKE) -C $(ROOT)/extern/int128/absl/numeric - ln -sf $(ROOT)/extern/int128/absl/numeric/libi128$(CROSS).a $(STATIC_LIB) + mkdir -p $(ROOT)/temp/extern/decNumber $(GEN_ROOT)/extern/decNumber + CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(SRCDIR)/extern/decNumber \ + SRCDIR=$(SRCDIR)/extern/decNumber \ + OBJ_DIR=$(ROOT)/temp/extern/decNumber \ + LIBRARY=$(GEN_ROOT)/extern/decNumber/libdecFloat$(CROSS).a + ln -sf $(GEN_ROOT)/extern/decNumber/libdecFloat$(CROSS).a $(STATIC_LIB) + CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" $(MAKE) -C $(SRCDIR)/extern/int128/absl/numeric + ln -sf $(SRCDIR)/extern/int128/absl/numeric/libi128$(CROSS).a $(STATIC_LIB) $(MAKE) cross_rest $(MAKE) yvalve ifeq ($(CLIENT_ONLY_FLG),Y) @@ -650,7 +670,7 @@ plugins: udr legacy_user_management legacy_auth_server srp_user_management trace udr: $(UDR_PLUGIN) $(PLUGINS)/udr_engine.conf -$(PLUGINS)/udr_engine.conf: $(ROOT)/src/plugins/udr_engine/udr_engine.conf +$(PLUGINS)/udr_engine.conf: $(SRC_ROOT)/plugins/udr_engine/udr_engine.conf cp $^ $@ $(UDR_PLUGIN): $(UDRENG_Objects) $(COMMON_LIB) @@ -734,8 +754,8 @@ $(FIREBIRD_MSG) $(FIREBIRD)/include/firebird/impl/iberror_c.h: $(BUILD_FILE) tzdata: $(TZDATA)/ids.dat -$(TZDATA)/ids.dat: $(ROOT)/extern/icu/tzdata/$(TZDATA_ZIP) - unzip -o $(ROOT)/extern/icu/tzdata/$(TZDATA_ZIP) -d $(TZDATA) +$(TZDATA)/ids.dat: $(SRCDIR)/extern/icu/tzdata/$(TZDATA_ZIP) + unzip -o $(SRCDIR)/extern/icu/tzdata/$(TZDATA_ZIP) -d $(TZDATA) touch $(TZDATA)/ids.dat $(BUILD_FILE): $(BUILD_Objects) @@ -836,7 +856,7 @@ clean: $(MAKE) TARGET?=$(DefaultTarget) clean_process clean_process: clean_objects clean_dependencies clean_extern_objects clean_build \ - clean_yacc_gen clean_gpre_gen clean_dbs clean_examples clean_cds clean_tommath \ + clean_yacc_gen clean_gpre_gen clean_dbs clean_examples clean_cds clean_re2 clean_tommath \ clean_tomcrypt clean_decfloat clean_int128 clean_vers clean_misc clean_vers: @@ -861,9 +881,10 @@ clean_config clean_all: clean clean_makefiles $(RM) $(ROOT)/config.status $(RM) $(ROOT)/libtool $(RM_R) $(ROOT)/autom4te.cache - -$(MAKE) -C $(ROOT)/extern/editline distclean + -if [ -d "$(ROOT)/temp/extern/editline" ]; then $(MAKE) -C $(ROOT)/temp/extern/editline distclean; fi + -$(RM_R) $(ROOT)/temp/extern/editline # -$(MAKE) -C $(ROOT)/extern/icu/source distclean - -$(MAKE) -C $(ROOT)/extern/btyacc distclean + -$(MAKE) -C $(SRCDIR)/extern/btyacc distclean clean_dbs: $(RM) *.fdb *.FDB @@ -878,25 +899,35 @@ clean_examples: $(RM) `find $(GEN_ROOT)/examples/ -type f ! -name 'Make*'` clean_editline: - -$(MAKE) -C $(ROOT)/extern/editline clean + -if [ -d "$(ROOT)/temp/extern/editline" ]; then $(MAKE) -C $(ROOT)/temp/extern/editline clean; fi #clean_icu: # -$(MAKE) -C $(ROOT)/extern/icu/source clean +.PHONY: clean_cds clean_cds_process clean_cds: - -$(RM_R) $(LIBCDS)/lib/$(TARGET) + $(MAKE) TARGET?=$(DefaultTarget) clean_cds_process + +clean_cds_process: + -$(RM_R) $(LIBCDS_BUILD_DIR) clean_tommath: - -$(MAKE) -C $(ROOT)/extern/libtommath clean + -$(RM_R) $(TOMMATH_BUILD_DIR) + +clean_re2: + -$(RM_R) $(RE2_BUILD_DIR) + clean_tomcrypt: - -$(MAKE) -C $(ROOT)/extern/libtomcrypt clean + -$(MAKE) -C $(SRCDIR)/extern/libtomcrypt clean + -$(RM_R) $(TOMCRYPT_BUILD_DIR) clean_decfloat: - -$(MAKE) -C $(ROOT)/extern/decNumber clean + -$(MAKE) -C $(SRCDIR)/extern/decNumber clean SRCDIR=$(SRCDIR)/extern/decNumber OBJ_DIR=$(ROOT)/temp/extern/decNumber LIBRARY=$(GEN_ROOT)/extern/decNumber/libdecFloat.a + -$(RM_R) $(ROOT)/temp/extern/decNumber clean_int128: - -$(MAKE) -C $(ROOT)/extern/int128/absl/numeric clean + -$(MAKE) -C $(SRCDIR)/extern/int128/absl/numeric clean clean_objects: $(RM) `find $(TMP_ROOT)/ -type f -name '*.o' -print` @@ -905,8 +936,8 @@ clean_objects: $(RM) `find $(TMP_ROOT)/ -type f -name '*.pas' -print` clean_extern_objects: - $(RM) `find $(ROOT)/extern/ -type f -name '*.lo' -print` - $(RM) `find $(ROOT)/extern/ -type f -name '*.o' -print` + $(RM) `find $(SRCDIR)/extern/ -type f -name '*.lo' -print` + $(RM) `find $(SRCDIR)/extern/ -type f -name '*.o' -print` # Clear out dependencies files created by the gcc compiler # since when .o and other files are deleted the dependant @@ -929,13 +960,13 @@ clean_makefiles: $(RM) `find $(GEN_ROOT)/install \( -type f -o -type l \) -print` -$(RM) $(GEN_ROOT)/examples/Make* $(RM) $(ROOT)/Makefile - $(RM) $(SRC_ROOT)/include/gen/autoconfig.h + $(RM) $(ROOT)/src/include/gen/autoconfig.h clean_gpre_gen: -$(RM) -f `find $(TMP_ROOT)/ -type f -name '*.cpp' -print` clean_yacc_gen: - $(RM) $(ROOT)/src/dsql/parse.cpp $(ROOT)/src/dsql/dsql.tab.h types.y y.* $(OBJ)/.parse-gen-sentinel + $(RM) $(ROOT)/src/dsql/parse.cpp $(ROOT)/src/dsql/dsql.tab.h $(ROOT)/src/include/gen/parse.h types.y y.* $(OBJ)/.parse-gen-sentinel #___________________________________________________________________________ # Extra platform specific targets diff --git a/builds/posix/Makefile.in.examples b/builds/posix/Makefile.in.examples index 8cfc8a7eced..c1fde79836e 100644 --- a/builds/posix/Makefile.in.examples +++ b/builds/posix/Makefile.in.examples @@ -29,6 +29,7 @@ # # ROOT=$(shell cd ../..; pwd) +SRCDIR=@abs_top_srcdir@ %.cpp: %.epp @@ -68,7 +69,7 @@ LINK_DARWIN_RPATH = -Wl,-rpath,@loader_path/../$(TARGET)/firebird LIB_LINK_MAPFILE = EXAMPLES_DEST= $(GEN_ROOT)/examples -EXAMPLES_SRC= $(ROOT)/examples +EXAMPLES_SRC= $(SRCDIR)/examples EXAMPLES_FB= $(FIREBIRD)/examples EMPBLD_Objects= $(EXAMPLES_DEST)/empbuild.o @@ -97,35 +98,36 @@ all: examples examples: $(FINAL_EMPDB) $(EXAMPLES_FB)/README $(EXTAUTH_PLUGIN) $(EXTAUTH_PLUGIN): $(EXAMPLES_FB)/extauth/Makefile + mkdir -p $(TMP_ROOT)/examples/extauth $(EXAMPLES_FB)/prebuilt CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" $(MAKE) -C $(EXAMPLES_FB)/extauth OUT=$(EXAMPLES_FB)/prebuilt INTERMED=$(TMP_ROOT)/examples/extauth $(EXAMPLES_FB)/extauth/Makefile: ifeq ($(TOMCRYPT_BUILD_FLG),Y) mkdir -p $(EXAMPLES_FB)/extauth/tomcrypt.include - $(CP) $(ROOT)/extern/libtomcrypt/src/headers/* $(EXAMPLES_FB)/extauth/tomcrypt.include + $(CP) $(SRCDIR)/extern/libtomcrypt/src/headers/* $(EXAMPLES_FB)/extauth/tomcrypt.include endif - tar cf - -C $(ROOT)/examples/extauth . | tar xf - -C $(EXAMPLES_FB)/extauth/ + tar cf - -C $(SRCDIR)/examples/extauth . | tar xf - -C $(EXAMPLES_FB)/extauth/ $(FINAL_EMPDB): $(EMPLOYEE_DB) $(RM) $(FINAL_EMPDB) $(CP) $(EMPLOYEE_DB) $(FINAL_EMPDB) $(EXAMPLES_FB)/README: - $(CP) $(ROOT)/examples/*.* $(EXAMPLES_FB)/ - $(CP) $(ROOT)/examples/api/*.* $(EXAMPLES_FB)/api/ - $(CP) $(ROOT)/examples/dbcrypt/*.* $(EXAMPLES_FB)/dbcrypt/ - $(CP) $(ROOT)/examples/include/*.* $(EXAMPLES_FB)/include/ - $(CP) $(ROOT)/examples/interfaces/*.* $(EXAMPLES_FB)/interfaces/ - $(CP) $(ROOT)/examples/package/*.* $(EXAMPLES_FB)/package/ - $(CP) $(ROOT)/examples/stat/*.* $(EXAMPLES_FB)/stat/ - $(CP) $(ROOT)/examples/udf/*.* $(EXAMPLES_FB)/udf/ - $(CP) $(ROOT)/examples/udr/*.* $(EXAMPLES_FB)/udr/ - $(CP) $(ROOT)/examples/object_pascal/*.* $(EXAMPLES_FB)/object_pascal/ - $(CP) $(ROOT)/examples/object_pascal/[mM]ake* $(EXAMPLES_FB)/object_pascal/ - $(CP) $(ROOT)/examples/object_pascal/common/*.* $(EXAMPLES_FB)/object_pascal/common/ + $(CP) $(SRCDIR)/examples/*.* $(EXAMPLES_FB)/ + $(CP) $(SRCDIR)/examples/api/*.* $(EXAMPLES_FB)/api/ + $(CP) $(SRCDIR)/examples/dbcrypt/*.* $(EXAMPLES_FB)/dbcrypt/ + $(CP) $(SRCDIR)/examples/include/*.* $(EXAMPLES_FB)/include/ + $(CP) $(SRCDIR)/examples/interfaces/*.* $(EXAMPLES_FB)/interfaces/ + $(CP) $(SRCDIR)/examples/package/*.* $(EXAMPLES_FB)/package/ + $(CP) $(SRCDIR)/examples/stat/*.* $(EXAMPLES_FB)/stat/ + $(CP) $(SRCDIR)/examples/udf/*.* $(EXAMPLES_FB)/udf/ + $(CP) $(SRCDIR)/examples/udr/*.* $(EXAMPLES_FB)/udr/ + $(CP) $(SRCDIR)/examples/object_pascal/*.* $(EXAMPLES_FB)/object_pascal/ + $(CP) $(SRCDIR)/examples/object_pascal/[mM]ake* $(EXAMPLES_FB)/object_pascal/ + $(CP) $(SRCDIR)/examples/object_pascal/common/*.* $(EXAMPLES_FB)/object_pascal/common/ # $(CP) intlemp.fdb $(EXAMPLES_FB)/empbuild/ - $(CP) $(ROOT)/examples/readme $(EXAMPLES_FB)/README - $(CP) $(ROOT)/examples/empbuild/employe2.sql $(EXAMPLES_FB)/empbuild/ + $(CP) $(SRCDIR)/examples/readme $(EXAMPLES_FB)/README + $(CP) $(SRCDIR)/examples/empbuild/employe2.sql $(EXAMPLES_FB)/empbuild/ $(EXAMPLES_DEST)% : $(EXAMPLES_SRC)% $(CP) $^ $@ diff --git a/builds/posix/Makefile.in.extern.editline b/builds/posix/Makefile.in.extern.editline index 1b4067d811e..28175016dc4 100644 --- a/builds/posix/Makefile.in.extern.editline +++ b/builds/posix/Makefile.in.extern.editline @@ -29,6 +29,7 @@ # # ROOT=.. +SRCDIR=@abs_top_srcdir@ #ObjModuleType=std ## Set your options: @@ -63,9 +64,15 @@ libeditline : $(STATIC_LIB)/libedit.a $(STATIC_LIB)/libedit.a: AR=ar - cd $(ROOT)/extern/editline; chmod +x configure; ./configure --enable-static --disable-shared --enable-widec - $(MAKE) -C $(ROOT)/extern/editline - cp $(ROOT)/extern/editline/src/libedit.a $(STATIC_LIB) + mkdir -p $(ROOT)/temp/extern/editline + cd $(ROOT)/temp/extern/editline; $(abspath $(SRCDIR))/extern/editline/configure --enable-static --disable-shared --enable-widec + $(MAKE) -C $(ROOT)/temp/extern/editline/src editlinelibrary \ + srcdir=$(abspath $(SRCDIR))/extern/editline/src \ + VPATH=$(abspath $(SRCDIR))/extern/editline/src \ + INCLUDES=-I$(abspath $(SRCDIR))/extern/editline/src \ + OBJ_DIR=$(abspath $(ROOT)/temp/extern/editline) \ + LIBRARY=$(abspath $(GEN_ROOT)/extern/editline/libedit.a) + cp $(GEN_ROOT)/extern/editline/libedit.a $(STATIC_LIB) include $(ROOT)/gen/make.shared.targets diff --git a/builds/posix/Makefile.in.plugins_examples b/builds/posix/Makefile.in.plugins_examples index fd6917b845e..27251a0dfee 100644 --- a/builds/posix/Makefile.in.plugins_examples +++ b/builds/posix/Makefile.in.plugins_examples @@ -29,6 +29,8 @@ # ROOT=$(shell cd ..; pwd) +SRCDIR=@abs_top_srcdir@ +SRC_ROOT=$(SRCDIR) ifeq ($(IsDeveloper), Y) DefaultTarget := Debug diff --git a/builds/posix/make.defaults b/builds/posix/make.defaults index 839bf9d197b..7d551ea9fb0 100755 --- a/builds/posix/make.defaults +++ b/builds/posix/make.defaults @@ -42,9 +42,10 @@ TMP_ROOT=$(ROOT)/temp/$(TARGET) GEN_ROOT=$(ROOT)/gen -SRC_ROOT=$(ROOT)/src -BLD_ROOT=$(ROOT)/builds -EXA_ROOT=$(ROOT)/examples +SRCDIR?=$(ROOT) +SRC_ROOT?=$(SRCDIR)/src +BLD_ROOT?=$(SRCDIR)/builds +EXA_ROOT?=$(SRCDIR)/examples IsCross=@IS_CROSS@ TOMMATH_BUILD_FLG=@TOMMATH_BUILD@ @@ -186,7 +187,7 @@ CAT= cat AR= ar @AR_OPTIONS@ LN= @LN_S@ RANLIB= @RANLIB@ -BTYACC=$(ROOT)/extern/btyacc/btyacc +BTYACC=$(GEN_ROOT)/extern/btyacc/btyacc CLOOP=$(GEN_ROOT)/$(TARGET)/cloop/bin/cloop AR = @AR@ @@ -282,26 +283,33 @@ IbUtilLibraryName = $(LIB_PREFIX)ib_util.$(SHRLIB_EXT) LIBIBUTIL_SO = $(LIB)/$(IbUtilLibraryName) # Own tommath support -TOMMATH=$(ROOT)/extern/libtommath +TOMMATH=$(SRCDIR)/extern/libtommath +TOMMATH_BUILD_DIR=$(ROOT)/temp/extern/libtommath/$(TARGET) TOMMATH_INC=$(TOMMATH) TOMMATH_VER=0 ifeq ($(PLATFORM),DARWIN) -TOMMATH_SO=$(TOMMATH)/.libs/libtommath.dylib +TOMMATH_SO=$(TOMMATH_BUILD_DIR)/.libs/libtommath.dylib else -TOMMATH_SO=$(TOMMATH)/.libs/libtommath.so +TOMMATH_SO=$(TOMMATH_BUILD_DIR)/.libs/libtommath.so endif # Own tomcrypt support -TOMCRYPT=$(ROOT)/extern/libtomcrypt +TOMCRYPT=$(SRCDIR)/extern/libtomcrypt +TOMCRYPT_BUILD_DIR=$(ROOT)/temp/extern/libtomcrypt/$(TARGET) TOMCRYPT_INC=$(TOMCRYPT)/src/headers -TOMCRYPT_SO=$(TOMCRYPT)/.libs/libtomcrypt.so +TOMCRYPT_SO=$(TOMCRYPT_BUILD_DIR)/.libs/libtomcrypt.so TOMCRYPT_VER=1 # Own libcds support -LIBCDS=$(ROOT)/extern/libcds +LIBCDS=$(SRCDIR)/extern/libcds LIBCDS_INC=$(LIBCDS) +LIBCDS_BUILD_DIR=$(ROOT)/temp/extern/libcds/$(TARGET) LIBCDS_DEF=CDS_BUILD_STATIC_LIB +# Own re2 support +RE2=$(SRCDIR)/extern/re2 +RE2_BUILD_DIR=$(ROOT)/temp/extern/re2/$(TARGET) + # LINKER OPTIONS # diff --git a/builds/posix/make.rules b/builds/posix/make.rules index cc12c500251..c95ee20c219 100644 --- a/builds/posix/make.rules +++ b/builds/posix/make.rules @@ -32,10 +32,10 @@ # Please don't use compiler/platform specific flags here - nmcc 02-Nov-2002 -WFLAGS =-I$(SRC_ROOT)/include/gen -I$(SRC_ROOT)/include $(CPPFLAGS) $(LTCSOURCE) +WFLAGS =-I$(ROOT)/src/include -I$(ROOT)/src/include/gen -I$(SRC_ROOT)/include/gen -I$(SRC_ROOT)/include $(CPPFLAGS) $(LTCSOURCE) ifneq ($(SYSTEM_BOOST_FLG),Y) - WFLAGS += -I$(ROOT)/extern/boost + WFLAGS += -I$(SRCDIR)/extern/boost endif WFLAGS += -I$(LIBCDS_INC) -D$(LIBCDS_DEF) @@ -49,11 +49,11 @@ ifeq ($(TOMCRYPT_BUILD_FLG),Y) endif ifeq ($(RE2_BUILD_FLG),Y) - WFLAGS += -I$(ROOT)/extern/re2 + WFLAGS += -I$(SRCDIR)/extern/re2 endif ifeq ($(ABSEIL_BUILD_FLG),Y) - WFLAGS += -I$(ROOT)/extern/int128 + WFLAGS += -I$(SRCDIR)/extern/int128 endif ifeq ($(LSB_FLG),Y) @@ -125,22 +125,27 @@ $(OBJ)/%.cpp: $(SRC_ROOT)/%.epp $(CXX) $(WCFLAGS) -c $(firstword $<) -o $@ $(OBJ)/%.o: $(SRC_ROOT)/%.c + @mkdir -p $(dir $@) $(CC) $(WCFLAGS) -c $(firstword $<) -o $@ @sed $(INLINE_EDIT_SED) -e "1,2s/:/: \$$(wildcard/" -e "\$$s/\(.*\)/\\1)/" $(patsubst %.o,%.d,$@) $(OBJ)/%.o: $(SRC_ROOT)/%.m + @mkdir -p $(dir $@) $(CC) $(WCFLAGS) -c $(firstword $<) -o $@ @sed $(INLINE_EDIT_SED) -e "1,2s/:/: \$$(wildcard/" -e "\$$s/\(.*\)/\\1)/" $(patsubst %.o,%.d,$@) $(OBJ)/%.o: $(OBJ)/%.cpp + @mkdir -p $(dir $@) $(CXX) $(WCXXFLAGS) -c $(firstword $<) -o $@ @sed $(INLINE_EDIT_SED) -e "1,2s/:/: \$$(wildcard/" -e "\$$s/\(.*\)/\\1)/" $(patsubst %.o,%.d,$@) $(OBJ)/%.o: $(SRC_ROOT)/%.cpp + @mkdir -p $(dir $@) $(CXX) $(WCXXFLAGS) -c $(firstword $<) -o $@ @sed $(INLINE_EDIT_SED) -e "1,2s/:/: \$$(wildcard/" -e "\$$s/\(.*\)/\\1)/" $(patsubst %.o,%.d,$@) $(OBJ)/%.o: $(ROOT)/%.cpp + @mkdir -p $(dir $@) $(CXX) $(WCFLAGS) -c $(firstword $<) -o $@ @sed $(INLINE_EDIT_SED) -e "1,2s/:/: \$$(wildcard/" -e "\$$s/\(.*\)/\\1)/" $(patsubst %.o,%.d,$@) diff --git a/builds/posix/make.shared.targets b/builds/posix/make.shared.targets index a838fff588f..a8f130536fa 100644 --- a/builds/posix/make.shared.targets +++ b/builds/posix/make.shared.targets @@ -42,7 +42,7 @@ # This rule creates parse.cpp from parse.y # With make 4.3 this can be simplified with a simple group target (&:) dependency. -$(OBJ)/dsql/parse.cpp $(SRC_ROOT)/include/gen/parse.h: $(OBJ)/.parse-gen-sentinel ; +$(OBJ)/dsql/parse.cpp $(ROOT)/src/include/gen/parse.h: $(OBJ)/.parse-gen-sentinel ; $(OBJ)/.parse-gen-sentinel: $(SRC_ROOT)/dsql/parse.y $(SRC_ROOT)/dsql/btyacc_fb.ske sed -n '/%type .*/p' < $< > $(GEN_ROOT)/types.y @@ -52,7 +52,8 @@ $(OBJ)/.parse-gen-sentinel: $(SRC_ROOT)/dsql/parse.y $(SRC_ROOT)/dsql/btyacc_fb. sed -n -e "s/.*btyacc: \(.*conflicts.*\)/\1/p" $(GEN_ROOT)/y.txt > $(SRC_ROOT)/dsql/parse-conflicts.txt sed -i -e 's/#define \([A-Z].*\)/#define TOK_\1/' $(GEN_ROOT)/y_tab.h sed -i -e 's/#define TOK_YY\(.*\)/#define YY\1/' $(GEN_ROOT)/y_tab.h - $(MV) $(GEN_ROOT)/y_tab.h $(SRC_ROOT)/include/gen/parse.h + mkdir -p $(ROOT)/src/include/gen + $(MV) $(GEN_ROOT)/y_tab.h $(ROOT)/src/include/gen/parse.h $(MV) $(GEN_ROOT)/y_tab.c $(OBJ)/dsql/parse.cpp touch $@ @@ -64,7 +65,7 @@ $(SRC_ROOT)/gpre/gpre_meta.cpp: $(SRC_ROOT)/gpre/gpre_meta.epp # Explicit dependence on generated header (parser) -$(OBJ)/dsql/Parser.o $(OBJ)/dsql/Keywords.o $(OBJ)/dsql/dsql.o: $(SRC_ROOT)/include/gen/parse.h +$(OBJ)/dsql/Parser.o $(OBJ)/dsql/Keywords.o $(OBJ)/dsql/dsql.o: $(ROOT)/src/include/gen/parse.h # Special cases for building cpp from epp $(OBJ)/dsql/metd.cpp: $(SRC_ROOT)/dsql/metd.epp diff --git a/builds/posix/make.shared.variables b/builds/posix/make.shared.variables index f8d15e06879..b8cf3f1b8e0 100644 --- a/builds/posix/make.shared.variables +++ b/builds/posix/make.shared.variables @@ -1,9 +1,9 @@ # Helper functions doObjects= $(patsubst %.m,%.o,$(patsubst %.cc,%.o,$(patsubst %.y,%.o,$(patsubst %.epp,%.o,$(patsubst %.c,%.o,$(1:.cpp=.o)))))) makeObjects= $(addprefix $(OBJ)/$(patsubst ../%,%,$(1))/,$(call doObjects,$2)) -dirFiles= $(sort $(notdir $(wildcard ../src/$(1)/*.cpp)) $(notdir $(wildcard ../src/$(1)/*.c)) \ - $(notdir $(wildcard ../src/$(1)/*.epp)) $(notdir $(wildcard ../src/$(1)/*.y)) \ - $(notdir $(wildcard ../src/$(1)/*.cc)) $(notdir $(wildcard ../src/$(1)/*.m))) +dirFiles= $(sort $(notdir $(wildcard $(SRC_ROOT)/$(1)/*.cpp)) $(notdir $(wildcard $(SRC_ROOT)/$(1)/*.c)) \ + $(notdir $(wildcard $(SRC_ROOT)/$(1)/*.epp)) $(notdir $(wildcard $(SRC_ROOT)/$(1)/*.y)) \ + $(notdir $(wildcard $(SRC_ROOT)/$(1)/*.cc)) $(notdir $(wildcard $(SRC_ROOT)/$(1)/*.m))) dirInPath= $(call makeObjects,$(1),$(call dirFiles,$(1))) dirMaster= $(call dirInPath,$(1)) diff --git a/builds/posix/vers.sh.in b/builds/posix/vers.sh.in index 530c9d37e6b..f7b6ad95b72 100644 --- a/builds/posix/vers.sh.in +++ b/builds/posix/vers.sh.in @@ -57,7 +57,7 @@ then exit 1 fi -FROM="../builds/posix/$FILE" +FROM="@abs_top_srcdir@/builds/posix/$FILE" if test ! -f "$FROM" then echo "vers.sh: missing $FROM" diff --git a/configure.ac b/configure.ac index e75a0c92b10..66a941252ea 100644 --- a/configure.ac +++ b/configure.ac @@ -73,11 +73,11 @@ sinclude(binreloc.m4) dnl ############################# ADD TESTS BELOW ############################## -AC_CANONICAL_BUILD -CPU_TYPE=$build_cpu +AC_CANONICAL_HOST +CPU_TYPE=$host_cpu AC_SUBST(CPU_TYPE) -case "$build" in +case "$host" in aarch64-*-darwin*) VCPKG_TRIPLET=fb-arm64-osx ;; @@ -118,7 +118,7 @@ STD_EDITLINE=false dnl Test for special ar options? AR_OPT_CHECK=false -case "$build" in +case "$host" in aarch64-*-darwin*) MAKEFILE_PREFIX=darwin_aarch64 MAKEFILE_POSTFIX=darwin @@ -176,7 +176,7 @@ dnl CPU_TYPE=ppc64 amd64-*-freebsd* | x86_64*-*-freebsd* | x86_64*-*-k*bsd*-gnu) MAKEFILE_PREFIX=freebsd_amd64 - case "$build" in + case "$host" in x86_64*-*-k*bsd-gnu) # Debian/kFreeBSD PLATFORM=GENTOOFREEBSD INSTALL_PREFIX=linux @@ -232,7 +232,7 @@ dnl CPU_TYPE=ppc64 *-*-freebsd* | *-*-k*bsd*-gnu) MAKEFILE_PREFIX=freebsd - case "$build" in + case "$host" in *-*-k*bsd-gnu) # Debian/kFreeBSD PLATFORM=GENTOOFREEBSD INSTALL_PREFIX=linux @@ -534,7 +534,7 @@ dnl CPU_TYPE=ppc64 ;; *) - AC_MSG_ERROR(unsupported platform ${build}) + AC_MSG_ERROR(unsupported platform ${host}) ;; esac @@ -651,7 +651,7 @@ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" LIBS="$LIBS $PTHREAD_LIBS" -case "$build" in +case "$host" in *-*-darwin*) CFLAGS="$CFLAGS -I${VCPKG_INSTALLED}/include" CXXFLAGS="$CXXFLAGS -nostdinc++ -isystem ${VCPKG_INSTALLED}/include/c++/v1 -I${VCPKG_INSTALLED}/include" @@ -1272,14 +1272,14 @@ AC_SUBST(CAS_OPTIONS) dnl ##################### DO NOT ADD ANY TESTS BELOW ########################### dnl The following file defines the version number strings. Specially for install/uninstall routines -CXX="$CXX" . ./src/misc/writeBuildNum.sh +CXX="$CXX" . "$srcdir/src/misc/writeBuildNum.sh" AC_SUBST(FIREBIRD_VERSION) AC_SUBST(FIREBIRD_PACKAGE_VERSION) AC_SUBST(FB_BUILD_NUM, $BuildNum) BUILD_ROOT_DIR=`pwd` -SRC_ROOT=$BUILD_ROOT_DIR/src +SRC_ROOT=$srcdir/src GEN_ROOT=$BUILD_ROOT_DIR/gen NEW_FIREBIRD_DIR=$GEN_ROOT/firebird @@ -1330,7 +1330,7 @@ dnl # output fi fi - case "$build" in + case "$host" in *-*-darwin*) cp -a $VCPKG_INSTALLED/lib/libicu* gen/\$fb_tgt/firebird/lib/ install_name_tool -id @rpath/lib/libicuuc.dylib gen/\$fb_tgt/firebird/lib/libicuuc.dylib @@ -1343,19 +1343,19 @@ dnl # output esac dnl ### TEMP ### directories for generated .cpp, .o and .d by module name - for src_dir in `cd src; ls -R -1 * | grep : | tr -d : | tr "\n" " "; cd ..`; do + for src_dir in `cd "$srcdir/src"; ls -R -1 * | grep : | tr -d : | tr "\n" " "; cd ..`; do mkdir -p temp/\$fb_tgt/\$src_dir done - for src_dir in `ls -R -1 examples | grep : | tr -d : | tr "\n" " "`; do + for src_dir in `cd "$srcdir/examples"; ls -R -1 * | grep : | tr -d : | tr "\n" " "`; do mkdir -p temp/\$fb_tgt/\$src_dir done - src/misc/writeBuildNum.sh createMakeVersion gen/Make.Version + "$srcdir/src/misc/writeBuildNum.sh" createMakeVersion gen/Make.Version done dnl # rebuild version header if needed -./src/misc/writeBuildNum.sh rebuildHeader +"$srcdir/src/misc/writeBuildNum.sh" rebuildHeader ]) diff --git a/extern/btyacc/Makefile b/extern/btyacc/Makefile index f43296526b6..a4aab7f5345 100644 --- a/extern/btyacc/Makefile +++ b/extern/btyacc/Makefile @@ -25,12 +25,27 @@ LIBS= MAKEFILE = Makefile -OBJS = closure.o error.o lalr.o lr0.o main.o mkpar.o output.o \ - mstring.o reader.o readskel.o skeleton.o symtab.o verbose.o warshall.o +OBJ_DIR = ../../temp/extern/btyacc + +all: $(PROGRAM) + +OBJS = $(OBJ_DIR)/closure.o $(OBJ_DIR)/error.o $(OBJ_DIR)/lalr.o \ + $(OBJ_DIR)/lr0.o $(OBJ_DIR)/main.o $(OBJ_DIR)/mkpar.o $(OBJ_DIR)/output.o \ + $(OBJ_DIR)/mstring.o $(OBJ_DIR)/reader.o $(OBJ_DIR)/readskel.o \ + $(OBJ_DIR)/skeleton.o $(OBJ_DIR)/symtab.o $(OBJ_DIR)/verbose.o \ + $(OBJ_DIR)/warshall.o + +$(OBJ_DIR)/%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJS): | $(OBJ_DIR) + +$(OBJ_DIR): + mkdir -p $(OBJ_DIR) PRINT = pr -f -l88 -PROGRAM = btyacc +PROGRAM = ../../gen/extern/btyacc/btyacc SRCS = closure.c error.c lalr.c lr0.c main.c mkpar.c output.c \ mstring.c reader.c readskel.c skeleton.c symtab.c verbose.c warshall.c @@ -42,6 +57,7 @@ OTHERS = README README.BYACC \ all: $(PROGRAM) $(PROGRAM): $(OBJS) $(LIBS) + mkdir -p $(dir $(PROGRAM)) $(CC) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LIBS) clean:; rm -f $(OBJS) @@ -90,16 +106,18 @@ etags TAGS: etags *.c *.h ### -closure.o: defs.h -error.o: defs.h -lalr.o: defs.h -lr0.o: defs.h -main.o: defs.h -mkpar.o: defs.h -mstring.o: mstring.h -output.o: defs.h -reader.o: defs.h mstring.h -skeleton.o: defs.h -symtab.o: defs.h -verbose.o: defs.h -warshall.o: defs.h +$(OBJ_DIR)/closure.o: defs.h +$(OBJ_DIR)/error.o: defs.h +$(OBJ_DIR)/lalr.o: defs.h +$(OBJ_DIR)/lr0.o: defs.h +$(OBJ_DIR)/main.o: defs.h +$(OBJ_DIR)/mkpar.o: defs.h +$(OBJ_DIR)/mstring.o: mstring.h +$(OBJ_DIR)/output.o: defs.h +$(OBJ_DIR)/reader.o: defs.h mstring.h +$(OBJ_DIR)/skeleton.o: defs.h +$(OBJ_DIR)/symtab.o: defs.h +$(OBJ_DIR)/verbose.o: defs.h +$(OBJ_DIR)/warshall.o: defs.h + + diff --git a/extern/decNumber/Makefile b/extern/decNumber/Makefile index 253e34c1806..e3d6f0a9a61 100644 --- a/extern/decNumber/Makefile +++ b/extern/decNumber/Makefile @@ -1,11 +1,21 @@ -LIBRARY=libdecFloat$(CROSS).a +SRCDIR ?= . +OBJ_DIR ?= . +LIBRARY ?= libdecFloat$(CROSS).a -$(LIBRARY): $(wildcard *.c) $(wildcard *.h) Makefile - $(RM) -f *.o - $(CC) $(CROSS_FLAGS) -c -O3 -fPIC $(subst decCommon.c,,$(subst decBasic.c,,$(wildcard *.c))) - $(AR) crs $(LIBRARY) *.o - $(RM) -f *.o +SOURCES := $(filter-out $(SRCDIR)/decBasic.c $(SRCDIR)/decCommon.c,$(wildcard $(SRCDIR)/*.c)) +HEADERS := $(wildcard $(SRCDIR)/*.h) +OBJECTS := $(addprefix $(OBJ_DIR)/,$(notdir $(SOURCES:.c=.o))) + +$(LIBRARY): $(SOURCES) $(HEADERS) Makefile + @mkdir -p $(OBJ_DIR) + @mkdir -p $(dir $(LIBRARY)) + $(RM) -f $(OBJECTS) + $(MAKE) $(OBJECTS) SRCDIR=$(SRCDIR) OBJ_DIR=$(OBJ_DIR) + $(AR) crs $(LIBRARY) $(OBJECTS) + +$(OBJ_DIR)/%.o: $(SRCDIR)/%.c Makefile + $(CC) $(CROSS_FLAGS) -O3 -fPIC -c $< -o $@ .PHONY: clean clean: - $(RM) -f *.o *.a + $(RM) -f $(OBJ_DIR)/*.o $(LIBRARY) diff --git a/extern/editline/src/Makefile.in b/extern/editline/src/Makefile.in index 84af2b3ec14..6df2b1c167c 100644 --- a/extern/editline/src/Makefile.in +++ b/extern/editline/src/Makefile.in @@ -34,19 +34,21 @@ SOURCES_DIST = chared.c common.c el.c emacs.c hist.c \ filecomplete.h editline/readline.h strlcpy.c strlcat.c vis.c \ unvis.c eln.c -@HAVE_STRLCPY_FALSE@objects_1 = strlcpy.o -@HAVE_STRLCAT_FALSE@objects_2 = strlcat.o -@HAVE_VIS_FALSE@objects_3 = vis.o -@HAVE_UNVIS_FALSE@objects_4 = unvis.o -@WIDECHAR_TRUE@objects_5 = eln.o -OBJECTS1 = chared.o common.o el.o emacs.o hist.o \ - keymacro.o map.o chartype.o parse.o prompt.o read.o \ - refresh.o search.o sig.o terminal.o tty.o vi.o fgetln.o \ - wcsdup.o tokenizer.o history.o filecomplete.o readline.o \ +@HAVE_STRLCPY_FALSE@objects_1 = $(OBJ_DIR)/strlcpy.o +@HAVE_STRLCAT_FALSE@objects_2 = $(OBJ_DIR)/strlcat.o +OBJ_DIR = ../../../temp/extern/editline + +@HAVE_VIS_FALSE@objects_3 = $(OBJ_DIR)/vis.o +@HAVE_UNVIS_FALSE@objects_4 = $(OBJ_DIR)/unvis.o +@WIDECHAR_TRUE@objects_5 = $(OBJ_DIR)/eln.o +OBJECTS1 = $(OBJ_DIR)/chared.o $(OBJ_DIR)/common.o $(OBJ_DIR)/el.o $(OBJ_DIR)/emacs.o $(OBJ_DIR)/hist.o \ + $(OBJ_DIR)/keymacro.o $(OBJ_DIR)/map.o $(OBJ_DIR)/chartype.o $(OBJ_DIR)/parse.o $(OBJ_DIR)/prompt.o $(OBJ_DIR)/read.o \ + $(OBJ_DIR)/refresh.o $(OBJ_DIR)/search.o $(OBJ_DIR)/sig.o $(OBJ_DIR)/terminal.o $(OBJ_DIR)/tty.o $(OBJ_DIR)/vi.o $(OBJ_DIR)/fgetln.o \ + $(OBJ_DIR)/wcsdup.o $(OBJ_DIR)/tokenizer.o $(OBJ_DIR)/history.o $(OBJ_DIR)/filecomplete.o $(OBJ_DIR)/readline.o \ $(objects_1) $(objects_2) $(objects_3) \ $(objects_4) $(objects_5) -@WIDECHAR_TRUE@objects_6 = tokenizern.o historyn.o -objects_7 = fcns.o help.o $(objects_6) +@WIDECHAR_TRUE@objects_6 = $(OBJ_DIR)/tokenizern.o $(OBJ_DIR)/historyn.o +objects_7 = $(OBJ_DIR)/fcns.o $(OBJ_DIR)/help.o $(objects_6) OBJECTS2 = $(objects_7) OBJECTS = $(OBJECTS1) $(OBJECTS2) @@ -98,7 +100,7 @@ BUILT_SOURCES = vi.h emacs.h common.h fcns.h help.h fcns.c help.c \ AHDR = vi.h emacs.h common.h ASRC = $(srcdir)/vi.c $(srcdir)/emacs.c $(srcdir)/common.c CLEANFILES = $(BUILT_SOURCES) -LIBRARY = libedit.a +LIBRARY = ../../../gen/extern/editline/libedit.a libedit_la_SOURCES = chared.c common.c el.c emacs.c hist.c keymacro.c \ map.c chartype.c parse.c prompt.c read.c refresh.c search.c \ sig.c terminal.c tty.c vi.c fgetln.c wcsdup.c tokenizer.c \ @@ -115,20 +117,24 @@ nodist_libedit_la_SOURCES = $(BUILT_SOURCES) editlinelibrary: all all: $(BUILT_SOURCES) - $(MAKE) libedit.a + $(MAKE) $(LIBRARY) .SUFFIXES: .SUFFIXES: .c .o $(LIBRARY): $(OBJECTS) + mkdir -p $(dir $@) -$(RM) $@ $(STATICLIB_LINK) $@ $^ -.c.o: +$(OBJ_DIR)/%.o: %.c | $(OBJ_DIR) $(COMPILE) $(DEPFLAGS) $(OPTFLAGS) -c $< -o $@ +$(OBJ_DIR): + mkdir -p $(OBJ_DIR) + clean: - rm -f $(CLEANFILES) $(OBJECTS) *.d + rm -f $(CLEANFILES) $(OBJECTS) $(Dependencies) distclean: clean rm -f $(LIBRARY) Makefile ../Makefile diff --git a/extern/libtomcrypt/makefile b/extern/libtomcrypt/makefile index cd94b86f774..4d70c3e47e2 100644 --- a/extern/libtomcrypt/makefile +++ b/extern/libtomcrypt/makefile @@ -38,19 +38,22 @@ EXTRALIBS += -lgcov endif #AES comes in two flavours... enc+dec and enc -src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c +$(OBJDIR_PREFIX)src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c + @mkdir -p $(dir $@) ${silent} ${CC} ${LTC_CFLAGS} -DENCRYPT_ONLY -c $< -o $@ -.c.o: +$(OBJDIR_PREFIX)%.o: %.c ifneq ($V,1) @echo " * ${CC} $@" endif + @mkdir -p $(dir $@) ${silent} ${CC} ${LTC_CFLAGS} -c $< -o $@ $(LIBNAME): $(OBJECTS) ifneq ($V,1) @echo " * ${AR} $@" endif + @mkdir -p $(dir $@) ${silent} $(AR) $(ARFLAGS) $@ $(OBJECTS) ifneq ($V,1) @echo " * ${RANLIB} $@" @@ -65,7 +68,7 @@ endif # build the demos from a template define DEMO_template -$(1): $(call print-help,$(1),Builds the library and the '$(1)' demo) demos/$(1).o $$(LIBNAME) +$(1): $(call print-help,$(1),Builds the library and the '$(1)' demo) $(OBJDIR_PREFIX)demos/$(1).o $$(LIBNAME) ifneq ($V,1) @echo " * $${CC} $$@" endif diff --git a/extern/libtomcrypt/makefile.shared b/extern/libtomcrypt/makefile.shared index c0f17a47166..85c368ce595 100644 --- a/extern/libtomcrypt/makefile.shared +++ b/extern/libtomcrypt/makefile.shared @@ -42,23 +42,41 @@ include makefile_include.mk #ciphers come in two flavours... enc+dec and enc -src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c - $(LTCOMPILE) $(LTC_CFLAGS) $(CPPFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes.c -o src/ciphers/aes/aes_enc.o +$(OBJDIR_PREFIX)src/ciphers/aes/aes_enc.lo: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c + @mkdir -p $(dir $@) + $(LTCOMPILE) $(LTC_CFLAGS) $(CPPFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes.c -o $@ -.c.o: +$(OBJDIR_PREFIX)%.lo: %.c + @mkdir -p $(dir $@) $(LTCOMPILE) $(LTC_CFLAGS) $(CPPFLAGS) -o $@ -c $< +#These are the rules to make certain object files. +$(OBJDIR_PREFIX)src/ciphers/aes/aes.lo: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c +$(OBJDIR_PREFIX)src/ciphers/twofish/twofish.lo: src/ciphers/twofish/twofish.c src/ciphers/twofish/twofish_tab.c +$(OBJDIR_PREFIX)src/hashes/whirl/whirl.lo: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c +$(OBJDIR_PREFIX)src/hashes/sha2/sha512.lo: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c +$(OBJDIR_PREFIX)src/hashes/sha2/sha512_224.lo: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_224.c +$(OBJDIR_PREFIX)src/hashes/sha2/sha512_256.lo: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_256.c +$(OBJDIR_PREFIX)src/hashes/sha2/sha256.lo: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c + LOBJECTS = $(OBJECTS:.o=.lo) +LTOBJECTS = $(TOBJECTS:.o=.lo) +LDOBJECTS = $(DOBJECTS:.o=.lo) + +$(LOBJECTS): $(HEADERS) +$(LTOBJECTS): $(HEADERS) $(THEADERS) +$(LDOBJECTS): $(HEADERS) $(THEADERS) -$(LIBNAME): $(OBJECTS) +$(LIBNAME): $(LOBJECTS) + @mkdir -p $(dir $@) $(LIBTOOL) --mode=link --tag=CC $(CC) $(LTC_LDFLAGS) $(LOBJECTS) $(EXTRALIBS) -o $@ -rpath $(LIBPATH) -version-info $(VERSION_LT) $(NO_UNDEFINED) -test: $(call print-help,test,Builds the library and the 'test' application to run all self-tests) $(LIBNAME) $(TOBJECTS) - $(LIBTOOL) --mode=link --tag=CC $(CC) $(LTC_LDFLAGS) -o $(TEST) $(TOBJECTS) $(LIBNAME) $(EXTRALIBS) +test: $(call print-help,test,Builds the library and the 'test' application to run all self-tests) $(LIBNAME) $(LTOBJECTS) + $(LIBTOOL) --mode=link --tag=CC $(CC) $(LTC_LDFLAGS) -o $(TEST) $(LTOBJECTS) $(LIBNAME) $(EXTRALIBS) # build the demos from a template define DEMO_template -$(1): $(call print-help,$(1),Builds the library and the '$(1)' demo) demos/$(1).o $$(LIBNAME) +$(1): $(call print-help,$(1),Builds the library and the '$(1)' demo) $(OBJDIR_PREFIX)demos/$(1).lo $$(LIBNAME) $$(LIBTOOL) --mode=link --tag=CC $$(CC) $$(LTC_LDFLAGS) $$^ $$(EXTRALIBS) -o $(1) endef diff --git a/extern/libtomcrypt/makefile_include.mk b/extern/libtomcrypt/makefile_include.mk index a48eefe9cca..811324cbf53 100644 --- a/extern/libtomcrypt/makefile_include.mk +++ b/extern/libtomcrypt/makefile_include.mk @@ -146,6 +146,9 @@ endif LTC_LDFLAGS := $(LTC_LDFLAGS) $(LDFLAGS) +OBJDIR ?= +OBJDIR_PREFIX := $(if $(OBJDIR),$(OBJDIR)/,) + #List of demo objects DSOURCES = $(wildcard demos/*.c) DOBJECTS = $(DSOURCES:.c=.o) @@ -366,6 +369,10 @@ tests/modes_test.o tests/mpi_test.o tests/multi_test.o tests/no_prng.o tests/pkc tests/pkcs_1_emsa_test.o tests/pkcs_1_oaep_test.o tests/pkcs_1_pss_test.o tests/pkcs_1_test.o \ tests/prng_test.o tests/rotate_test.o tests/rsa_test.o tests/store_test.o tests/test.o +DOBJECTS := $(addprefix $(OBJDIR_PREFIX),$(DOBJECTS)) +OBJECTS := $(addprefix $(OBJDIR_PREFIX),$(OBJECTS)) +TOBJECTS := $(addprefix $(OBJDIR_PREFIX),$(TOBJECTS)) + # The following headers will be installed by "make install" HEADERS=src/headers/tomcrypt.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cfg.h \ src/headers/tomcrypt_cipher.h src/headers/tomcrypt_custom.h src/headers/tomcrypt_hash.h \ @@ -374,13 +381,13 @@ src/headers/tomcrypt_misc.h src/headers/tomcrypt_pk.h src/headers/tomcrypt_pkcs. src/headers/tomcrypt_prng.h #These are the rules to make certain object files. -src/ciphers/aes/aes.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c -src/ciphers/twofish/twofish.o: src/ciphers/twofish/twofish.c src/ciphers/twofish/twofish_tab.c -src/hashes/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c -src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c -src/hashes/sha2/sha512_224.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_224.c -src/hashes/sha2/sha512_256.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_256.c -src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c +$(OBJDIR_PREFIX)src/ciphers/aes/aes.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c +$(OBJDIR_PREFIX)src/ciphers/twofish/twofish.o: src/ciphers/twofish/twofish.c src/ciphers/twofish/twofish_tab.c +$(OBJDIR_PREFIX)src/hashes/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c +$(OBJDIR_PREFIX)src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c +$(OBJDIR_PREFIX)src/hashes/sha2/sha512_224.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_224.c +$(OBJDIR_PREFIX)src/hashes/sha2/sha512_256.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_256.c +$(OBJDIR_PREFIX)src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c $(DOBJECTS): LTC_CFLAGS := -Itests $(LTC_CFLAGS) $(TOBJECTS): LTC_CFLAGS := -Itests $(LTC_CFLAGS) diff --git a/extern/libtommath/makefile.shared b/extern/libtommath/makefile.shared index 4d49b7e5922..70c2009e59f 100644 --- a/extern/libtommath/makefile.shared +++ b/extern/libtommath/makefile.shared @@ -50,7 +50,7 @@ else USER=$(INSTALL_USER) endif -default: libtommath.la +default: $(LIBNAME) #default files to install ifndef LIBNAME @@ -61,6 +61,9 @@ ifndef LIBNAME_S endif HEADERS=tommath.h tommath_class.h tommath_superclass.h +OBJDIR ?= +OBJDIR_PREFIX := $(if $(OBJDIR),$(OBJDIR)/,) + #LIBPATH-The directory for libtommath to be installed to. #INCPATH-The directory to install the header files for libtommath. #DATAPATH-The directory to install the pdf docs. @@ -97,10 +100,18 @@ bn_mp_prime_random_ex.o bn_mp_get_int.o bn_mp_sqrt.o bn_mp_is_square.o bn_mp_ini bn_mp_init_set_int.o bn_mp_invmod_slow.o bn_mp_prime_rabin_miller_trials.o \ bn_mp_to_signed_bin_n.o bn_mp_to_unsigned_bin_n.o +OBJECTS := $(addprefix $(OBJDIR_PREFIX),$(OBJECTS)) +LOBJECTS = $(OBJECTS:.o=.lo) + objs: $(OBJECTS) -$(LIBNAME): $(OBJECTS) - $(LIBTOOL) --mode=link --tag=CC $(GCC) *.lo -o $(LIBNAME) -rpath $(LIBPATH) -version-info $(VERSION) $(NO_UNDEFINED) +$(OBJDIR_PREFIX)%.lo: %.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) -c $< -o $@ + +$(LIBNAME): $(LOBJECTS) + @mkdir -p $(dir $@) + $(LIBTOOL) --mode=link --tag=CC $(GCC) $(LOBJECTS) -o $(LIBNAME) -rpath $(LIBPATH) -version-info $(VERSION) $(NO_UNDEFINED) install: $(LIBNAME) install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH) @@ -108,9 +119,10 @@ install: $(LIBNAME) install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH) install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH) -test: $(LIBNAME) demo/demo.o - $(GCC) $(CFLAGS) -c demo/demo.c -o demo/demo.o - $(LIBTOOL) --mode=link $(GCC) -o test demo/demo.o $(LIBNAME_S) +test: $(LIBNAME) $(OBJDIR_PREFIX)demo/demo.o + @mkdir -p $(dir $(OBJDIR_PREFIX)demo/demo.o) + $(GCC) $(CFLAGS) -c demo/demo.c -o $(OBJDIR_PREFIX)demo/demo.o + $(LIBTOOL) --mode=link $(GCC) -o test $(OBJDIR_PREFIX)demo/demo.o $(LIBNAME_S) mtest: test cd mtest ; $(GCC) $(CFLAGS) mtest.c -o mtest diff --git a/extern/re2/Makefile b/extern/re2/Makefile index ba5e4f6e52e..422734c9aec 100644 --- a/extern/re2/Makefile +++ b/extern/re2/Makefile @@ -24,6 +24,8 @@ ARFLAGS?=rsc NM?=nm NMFLAGS?=-p +OBJ_DIR?=obj + # Variables mandated by GNU, the arbiter of all good taste on the internet. # http://www.gnu.org/prep/standards/standards.html prefix=/usr/local @@ -69,7 +71,7 @@ MAKE_SHARED_LIBRARY=$(CXX) -shared -Wl,-soname,libre2.$(SOEXTVER),--version-scri endif .PHONY: all -all: obj/libre2.a obj/so/libre2.$(SOEXT) +all: $(OBJ_DIR)/libre2.a $(OBJ_DIR)/so/libre2.$(SOEXT) INSTALL_HFILES=\ re2/filtered_re2.h\ @@ -110,133 +112,133 @@ HFILES=\ re2/walker-inl.h\ OFILES=\ - obj/util/rune.o\ - obj/util/strutil.o\ - obj/re2/bitstate.o\ - obj/re2/compile.o\ - obj/re2/dfa.o\ - obj/re2/filtered_re2.o\ - obj/re2/mimics_pcre.o\ - obj/re2/nfa.o\ - obj/re2/onepass.o\ - obj/re2/parse.o\ - obj/re2/perl_groups.o\ - obj/re2/prefilter.o\ - obj/re2/prefilter_tree.o\ - obj/re2/prog.o\ - obj/re2/re2.o\ - obj/re2/regexp.o\ - obj/re2/set.o\ - obj/re2/simplify.o\ - obj/re2/stringpiece.o\ - obj/re2/tostring.o\ - obj/re2/unicode_casefold.o\ - obj/re2/unicode_groups.o\ + $(OBJ_DIR)/util/rune.o\ + $(OBJ_DIR)/util/strutil.o\ + $(OBJ_DIR)/re2/bitstate.o\ + $(OBJ_DIR)/re2/compile.o\ + $(OBJ_DIR)/re2/dfa.o\ + $(OBJ_DIR)/re2/filtered_re2.o\ + $(OBJ_DIR)/re2/mimics_pcre.o\ + $(OBJ_DIR)/re2/nfa.o\ + $(OBJ_DIR)/re2/onepass.o\ + $(OBJ_DIR)/re2/parse.o\ + $(OBJ_DIR)/re2/perl_groups.o\ + $(OBJ_DIR)/re2/prefilter.o\ + $(OBJ_DIR)/re2/prefilter_tree.o\ + $(OBJ_DIR)/re2/prog.o\ + $(OBJ_DIR)/re2/re2.o\ + $(OBJ_DIR)/re2/regexp.o\ + $(OBJ_DIR)/re2/set.o\ + $(OBJ_DIR)/re2/simplify.o\ + $(OBJ_DIR)/re2/stringpiece.o\ + $(OBJ_DIR)/re2/tostring.o\ + $(OBJ_DIR)/re2/unicode_casefold.o\ + $(OBJ_DIR)/re2/unicode_groups.o\ TESTOFILES=\ - obj/util/pcre.o\ - obj/re2/testing/backtrack.o\ - obj/re2/testing/dump.o\ - obj/re2/testing/exhaustive_tester.o\ - obj/re2/testing/null_walker.o\ - obj/re2/testing/regexp_generator.o\ - obj/re2/testing/string_generator.o\ - obj/re2/testing/tester.o\ + $(OBJ_DIR)/util/pcre.o\ + $(OBJ_DIR)/re2/testing/backtrack.o\ + $(OBJ_DIR)/re2/testing/dump.o\ + $(OBJ_DIR)/re2/testing/exhaustive_tester.o\ + $(OBJ_DIR)/re2/testing/null_walker.o\ + $(OBJ_DIR)/re2/testing/regexp_generator.o\ + $(OBJ_DIR)/re2/testing/string_generator.o\ + $(OBJ_DIR)/re2/testing/tester.o\ TESTS=\ - obj/test/charclass_test\ - obj/test/compile_test\ - obj/test/filtered_re2_test\ - obj/test/mimics_pcre_test\ - obj/test/parse_test\ - obj/test/possible_match_test\ - obj/test/re2_test\ - obj/test/re2_arg_test\ - obj/test/regexp_test\ - obj/test/required_prefix_test\ - obj/test/search_test\ - obj/test/set_test\ - obj/test/simplify_test\ - obj/test/string_generator_test\ + $(OBJ_DIR)/test/charclass_test\ + $(OBJ_DIR)/test/compile_test\ + $(OBJ_DIR)/test/filtered_re2_test\ + $(OBJ_DIR)/test/mimics_pcre_test\ + $(OBJ_DIR)/test/parse_test\ + $(OBJ_DIR)/test/possible_match_test\ + $(OBJ_DIR)/test/re2_test\ + $(OBJ_DIR)/test/re2_arg_test\ + $(OBJ_DIR)/test/regexp_test\ + $(OBJ_DIR)/test/required_prefix_test\ + $(OBJ_DIR)/test/search_test\ + $(OBJ_DIR)/test/set_test\ + $(OBJ_DIR)/test/simplify_test\ + $(OBJ_DIR)/test/string_generator_test\ BIGTESTS=\ - obj/test/dfa_test\ - obj/test/exhaustive1_test\ - obj/test/exhaustive2_test\ - obj/test/exhaustive3_test\ - obj/test/exhaustive_test\ - obj/test/random_test\ - -SOFILES=$(patsubst obj/%,obj/so/%,$(OFILES)) + $(OBJ_DIR)/test/dfa_test\ + $(OBJ_DIR)/test/exhaustive1_test\ + $(OBJ_DIR)/test/exhaustive2_test\ + $(OBJ_DIR)/test/exhaustive3_test\ + $(OBJ_DIR)/test/exhaustive_test\ + $(OBJ_DIR)/test/random_test\ + +SOFILES=$(patsubst $(OBJ_DIR)/%,$(OBJ_DIR)/so/%,$(OFILES)) # We use TESTOFILES for testing the shared lib, only it is built differently. -STESTS=$(patsubst obj/%,obj/so/%,$(TESTS)) -SBIGTESTS=$(patsubst obj/%,obj/so/%,$(BIGTESTS)) +STESTS=$(patsubst $(OBJ_DIR)/%,$(OBJ_DIR)/so/%,$(TESTS)) +SBIGTESTS=$(patsubst $(OBJ_DIR)/%,$(OBJ_DIR)/so/%,$(BIGTESTS)) -DOFILES=$(patsubst obj/%,obj/dbg/%,$(OFILES)) -DTESTOFILES=$(patsubst obj/%,obj/dbg/%,$(TESTOFILES)) -DTESTS=$(patsubst obj/%,obj/dbg/%,$(TESTS)) -DBIGTESTS=$(patsubst obj/%,obj/dbg/%,$(BIGTESTS)) +DOFILES=$(patsubst $(OBJ_DIR)/%,$(OBJ_DIR)/dbg/%,$(OFILES)) +DTESTOFILES=$(patsubst $(OBJ_DIR)/%,$(OBJ_DIR)/dbg/%,$(TESTOFILES)) +DTESTS=$(patsubst $(OBJ_DIR)/%,$(OBJ_DIR)/dbg/%,$(TESTS)) +DBIGTESTS=$(patsubst $(OBJ_DIR)/%,$(OBJ_DIR)/dbg/%,$(BIGTESTS)) -.PRECIOUS: obj/%.o -obj/%.o: %.cc $(HFILES) +.PRECIOUS: $(OBJ_DIR)/%.o +$(OBJ_DIR)/%.o: %.cc $(HFILES) @mkdir -p $$(dirname $@) $(CXX) -c -o $@ $(CPPFLAGS) $(RE2_CXXFLAGS) $(CXXFLAGS) -DNDEBUG $*.cc -.PRECIOUS: obj/dbg/%.o -obj/dbg/%.o: %.cc $(HFILES) +.PRECIOUS: $(OBJ_DIR)/dbg/%.o +$(OBJ_DIR)/dbg/%.o: %.cc $(HFILES) @mkdir -p $$(dirname $@) $(CXX) -c -o $@ $(CPPFLAGS) $(RE2_CXXFLAGS) $(CXXFLAGS) $*.cc -.PRECIOUS: obj/so/%.o -obj/so/%.o: %.cc $(HFILES) +.PRECIOUS: $(OBJ_DIR)/so/%.o +$(OBJ_DIR)/so/%.o: %.cc $(HFILES) @mkdir -p $$(dirname $@) $(CXX) -c -o $@ -fPIC $(CPPFLAGS) $(RE2_CXXFLAGS) $(CXXFLAGS) -DNDEBUG $*.cc -.PRECIOUS: obj/libre2.a -obj/libre2.a: $(OFILES) - @mkdir -p obj - $(AR) $(ARFLAGS) obj/libre2.a $(OFILES) +.PRECIOUS: $(OBJ_DIR)/libre2.a +$(OBJ_DIR)/libre2.a: $(OFILES) + @mkdir -p $(OBJ_DIR) + $(AR) $(ARFLAGS) $(OBJ_DIR)/libre2.a $(OFILES) -.PRECIOUS: obj/dbg/libre2.a -obj/dbg/libre2.a: $(DOFILES) - @mkdir -p obj/dbg - $(AR) $(ARFLAGS) obj/dbg/libre2.a $(DOFILES) +.PRECIOUS: $(OBJ_DIR)/dbg/libre2.a +$(OBJ_DIR)/dbg/libre2.a: $(DOFILES) + @mkdir -p $(OBJ_DIR)/dbg + $(AR) $(ARFLAGS) $(OBJ_DIR)/dbg/libre2.a $(DOFILES) -.PRECIOUS: obj/so/libre2.$(SOEXT) -obj/so/libre2.$(SOEXT): $(SOFILES) libre2.symbols libre2.symbols.darwin - @mkdir -p obj/so - $(MAKE_SHARED_LIBRARY) -o obj/so/libre2.$(SOEXTVER) $(SOFILES) +.PRECIOUS: $(OBJ_DIR)/so/libre2.$(SOEXT) +$(OBJ_DIR)/so/libre2.$(SOEXT): $(SOFILES) libre2.symbols libre2.symbols.darwin + @mkdir -p $(OBJ_DIR)/so + $(MAKE_SHARED_LIBRARY) -o $(OBJ_DIR)/so/libre2.$(SOEXTVER) $(SOFILES) ln -sf libre2.$(SOEXTVER) $@ -.PRECIOUS: obj/dbg/test/% -obj/dbg/test/%: obj/dbg/libre2.a obj/dbg/re2/testing/%.o $(DTESTOFILES) obj/dbg/util/test.o - @mkdir -p obj/dbg/test - $(CXX) -o $@ obj/dbg/re2/testing/$*.o $(DTESTOFILES) obj/dbg/util/test.o obj/dbg/libre2.a $(RE2_LDFLAGS) $(LDFLAGS) +.PRECIOUS: $(OBJ_DIR)/dbg/test/% +$(OBJ_DIR)/dbg/test/%: $(OBJ_DIR)/dbg/libre2.a $(OBJ_DIR)/dbg/re2/testing/%.o $(DTESTOFILES) $(OBJ_DIR)/dbg/util/test.o + @mkdir -p $(OBJ_DIR)/dbg/test + $(CXX) -o $@ $(OBJ_DIR)/dbg/re2/testing/$*.o $(DTESTOFILES) $(OBJ_DIR)/dbg/util/test.o $(OBJ_DIR)/dbg/libre2.a $(RE2_LDFLAGS) $(LDFLAGS) -.PRECIOUS: obj/test/% -obj/test/%: obj/libre2.a obj/re2/testing/%.o $(TESTOFILES) obj/util/test.o - @mkdir -p obj/test - $(CXX) -o $@ obj/re2/testing/$*.o $(TESTOFILES) obj/util/test.o obj/libre2.a $(RE2_LDFLAGS) $(LDFLAGS) +.PRECIOUS: $(OBJ_DIR)/test/% +$(OBJ_DIR)/test/%: $(OBJ_DIR)/libre2.a $(OBJ_DIR)/re2/testing/%.o $(TESTOFILES) $(OBJ_DIR)/util/test.o + @mkdir -p $(OBJ_DIR)/test + $(CXX) -o $@ $(OBJ_DIR)/re2/testing/$*.o $(TESTOFILES) $(OBJ_DIR)/util/test.o $(OBJ_DIR)/libre2.a $(RE2_LDFLAGS) $(LDFLAGS) # Test the shared lib, falling back to the static lib for private symbols -.PRECIOUS: obj/so/test/% -obj/so/test/%: obj/so/libre2.$(SOEXT) obj/libre2.a obj/re2/testing/%.o $(TESTOFILES) obj/util/test.o - @mkdir -p obj/so/test - $(CXX) -o $@ obj/re2/testing/$*.o $(TESTOFILES) obj/util/test.o -Lobj/so -lre2 obj/libre2.a $(RE2_LDFLAGS) $(LDFLAGS) +.PRECIOUS: $(OBJ_DIR)/so/test/% +$(OBJ_DIR)/so/test/%: $(OBJ_DIR)/so/libre2.$(SOEXT) $(OBJ_DIR)/libre2.a $(OBJ_DIR)/re2/testing/%.o $(TESTOFILES) $(OBJ_DIR)/util/test.o + @mkdir -p $(OBJ_DIR)/so/test + $(CXX) -o $@ $(OBJ_DIR)/re2/testing/$*.o $(TESTOFILES) $(OBJ_DIR)/util/test.o -L$(OBJ_DIR)/so -lre2 $(OBJ_DIR)/libre2.a $(RE2_LDFLAGS) $(LDFLAGS) # Filter out dump.o because testing::TempDir() isn't available for it. -obj/test/regexp_benchmark: obj/libre2.a obj/re2/testing/regexp_benchmark.o $(TESTOFILES) obj/util/benchmark.o - @mkdir -p obj/test - $(CXX) -o $@ obj/re2/testing/regexp_benchmark.o $(filter-out obj/re2/testing/dump.o, $(TESTOFILES)) obj/util/benchmark.o obj/libre2.a $(RE2_LDFLAGS) $(LDFLAGS) +$(OBJ_DIR)/test/regexp_benchmark: $(OBJ_DIR)/libre2.a $(OBJ_DIR)/re2/testing/regexp_benchmark.o $(TESTOFILES) $(OBJ_DIR)/util/benchmark.o + @mkdir -p $(OBJ_DIR)/test + $(CXX) -o $@ $(OBJ_DIR)/re2/testing/regexp_benchmark.o $(filter-out $(OBJ_DIR)/re2/testing/dump.o, $(TESTOFILES)) $(OBJ_DIR)/util/benchmark.o $(OBJ_DIR)/libre2.a $(RE2_LDFLAGS) $(LDFLAGS) # re2_fuzzer is a target for fuzzers like libFuzzer and AFL. This fake fuzzing # is simply a way to check that the target builds and then to run it against a # fixed set of inputs. To perform real fuzzing, refer to the documentation for # libFuzzer (llvm.org/docs/LibFuzzer.html) and AFL (lcamtuf.coredump.cx/afl/). -obj/test/re2_fuzzer: CXXFLAGS:=-I./re2/fuzzing/compiler-rt/include $(CXXFLAGS) -obj/test/re2_fuzzer: obj/libre2.a obj/re2/fuzzing/re2_fuzzer.o obj/util/fuzz.o - @mkdir -p obj/test - $(CXX) -o $@ obj/re2/fuzzing/re2_fuzzer.o obj/util/fuzz.o obj/libre2.a $(RE2_LDFLAGS) $(LDFLAGS) +$(OBJ_DIR)/test/re2_fuzzer: CXXFLAGS:=-I./re2/fuzzing/compiler-rt/include $(CXXFLAGS) +$(OBJ_DIR)/test/re2_fuzzer: $(OBJ_DIR)/libre2.a $(OBJ_DIR)/re2/fuzzing/re2_fuzzer.o $(OBJ_DIR)/util/fuzz.o + @mkdir -p $(OBJ_DIR)/test + $(CXX) -o $@ $(OBJ_DIR)/re2/fuzzing/re2_fuzzer.o $(OBJ_DIR)/util/fuzz.o $(OBJ_DIR)/libre2.a $(RE2_LDFLAGS) $(LDFLAGS) ifdef REBUILD_TABLES .PRECIOUS: re2/perl_groups.cc @@ -254,7 +256,7 @@ distclean: clean .PHONY: clean clean: - rm -rf obj + rm -rf $(OBJ_DIR) rm -f re2/*.pyc .PHONY: testofiles @@ -273,7 +275,7 @@ static-test: $(TESTS) .PHONY: shared-test shared-test: $(STESTS) - @./runtests -shared-library-path obj/so $(STESTS) + @./runtests -shared-library-path $(OBJ_DIR)/so $(STESTS) .PHONY: debug-bigtest debug-bigtest: $(DTESTS) $(DBIGTESTS) @@ -285,30 +287,30 @@ static-bigtest: $(TESTS) $(BIGTESTS) .PHONY: shared-bigtest shared-bigtest: $(STESTS) $(SBIGTESTS) - @./runtests -shared-library-path obj/so $(STESTS) $(SBIGTESTS) + @./runtests -shared-library-path $(OBJ_DIR)/so $(STESTS) $(SBIGTESTS) .PHONY: benchmark -benchmark: obj/test/regexp_benchmark +benchmark: $(OBJ_DIR)/test/regexp_benchmark .PHONY: fuzz -fuzz: obj/test/re2_fuzzer +fuzz: $(OBJ_DIR)/test/re2_fuzzer .PHONY: install install: static-install shared-install .PHONY: static -static: obj/libre2.a +static: $(OBJ_DIR)/libre2.a .PHONY: static-install -static-install: obj/libre2.a common-install - $(INSTALL) obj/libre2.a $(DESTDIR)$(libdir)/libre2.a +static-install: $(OBJ_DIR)/libre2.a common-install + $(INSTALL) $(OBJ_DIR)/libre2.a $(DESTDIR)$(libdir)/libre2.a .PHONY: shared -shared: obj/so/libre2.$(SOEXT) +shared: $(OBJ_DIR)/so/libre2.$(SOEXT) .PHONY: shared-install -shared-install: obj/so/libre2.$(SOEXT) common-install - $(INSTALL) obj/so/libre2.$(SOEXT) $(DESTDIR)$(libdir)/libre2.$(SOEXTVER00) +shared-install: $(OBJ_DIR)/so/libre2.$(SOEXT) common-install + $(INSTALL) $(OBJ_DIR)/so/libre2.$(SOEXT) $(DESTDIR)$(libdir)/libre2.$(SOEXTVER00) ln -sf libre2.$(SOEXTVER00) $(DESTDIR)$(libdir)/libre2.$(SOEXTVER) ln -sf libre2.$(SOEXTVER00) $(DESTDIR)$(libdir)/libre2.$(SOEXT) @@ -330,50 +332,50 @@ testinstall: static-testinstall shared-testinstall static-testinstall: CXXFLAGS:=-std=c++11 -pthread -I$(DESTDIR)$(includedir) $(CXXFLAGS) static-testinstall: LDFLAGS:=-pthread -L$(DESTDIR)$(libdir) -l:libre2.a $(LDICU) $(LDFLAGS) static-testinstall: - @mkdir -p obj - @cp testinstall.cc obj + @mkdir -p $(OBJ_DIR) + @cp testinstall.cc $(OBJ_DIR) ifeq ($(shell uname),Darwin) @echo Skipping test for libre2.a on Darwin. else ifeq ($(shell uname),SunOS) @echo Skipping test for libre2.a on SunOS. else - (cd obj && $(CXX) testinstall.cc -o testinstall $(CXXFLAGS) $(LDFLAGS)) - obj/testinstall + (cd $(OBJ_DIR) && $(CXX) testinstall.cc -o testinstall $(CXXFLAGS) $(LDFLAGS)) + $(OBJ_DIR)/testinstall endif .PHONY: shared-testinstall shared-testinstall: CXXFLAGS:=-std=c++11 -pthread -I$(DESTDIR)$(includedir) $(CXXFLAGS) shared-testinstall: LDFLAGS:=-pthread -L$(DESTDIR)$(libdir) -lre2 $(LDICU) $(LDFLAGS) shared-testinstall: - @mkdir -p obj - @cp testinstall.cc obj - (cd obj && $(CXX) testinstall.cc -o testinstall $(CXXFLAGS) $(LDFLAGS)) + @mkdir -p $(OBJ_DIR) + @cp testinstall.cc $(OBJ_DIR) + (cd $(OBJ_DIR) && $(CXX) testinstall.cc -o testinstall $(CXXFLAGS) $(LDFLAGS)) ifeq ($(shell uname),Darwin) - DYLD_LIBRARY_PATH="$(DESTDIR)$(libdir):$(DYLD_LIBRARY_PATH)" obj/testinstall + DYLD_LIBRARY_PATH="$(DESTDIR)$(libdir):$(DYLD_LIBRARY_PATH)" $(OBJ_DIR)/testinstall else - LD_LIBRARY_PATH="$(DESTDIR)$(libdir):$(LD_LIBRARY_PATH)" obj/testinstall + LD_LIBRARY_PATH="$(DESTDIR)$(libdir):$(LD_LIBRARY_PATH)" $(OBJ_DIR)/testinstall endif .PHONY: benchlog -benchlog: obj/test/regexp_benchmark +benchlog: $(OBJ_DIR)/test/regexp_benchmark (echo '==BENCHMARK==' `hostname` `date`; \ - (uname -a; $(CXX) --version; git rev-parse --short HEAD; file obj/test/regexp_benchmark) | sed 's/^/# /'; \ + (uname -a; $(CXX) --version; git rev-parse --short HEAD; file $(OBJ_DIR)/test/regexp_benchmark) | sed 's/^/# /'; \ echo; \ - ./obj/test/regexp_benchmark 'PCRE|RE2') | tee -a benchlog.$$(hostname | sed 's/\..*//') + ./$(OBJ_DIR)/test/regexp_benchmark 'PCRE|RE2') | tee -a benchlog.$$(hostname | sed 's/\..*//') .PHONY: log log: $(MAKE) clean $(MAKE) CXXFLAGS="$(CXXFLAGS) -DLOGGING=1" \ - $(filter obj/test/exhaustive%_test,$(BIGTESTS)) + $(filter $(OBJ_DIR)/test/exhaustive%_test,$(BIGTESTS)) echo '#' RE2 exhaustive tests built by make log >re2-exhaustive.txt echo '#' $$(date) >>re2-exhaustive.txt - obj/test/exhaustive_test |grep -v '^PASS$$' >>re2-exhaustive.txt - obj/test/exhaustive1_test |grep -v '^PASS$$' >>re2-exhaustive.txt - obj/test/exhaustive2_test |grep -v '^PASS$$' >>re2-exhaustive.txt - obj/test/exhaustive3_test |grep -v '^PASS$$' >>re2-exhaustive.txt + $(OBJ_DIR)/test/exhaustive_test |grep -v '^PASS$$' >>re2-exhaustive.txt + $(OBJ_DIR)/test/exhaustive1_test |grep -v '^PASS$$' >>re2-exhaustive.txt + $(OBJ_DIR)/test/exhaustive2_test |grep -v '^PASS$$' >>re2-exhaustive.txt + $(OBJ_DIR)/test/exhaustive3_test |grep -v '^PASS$$' >>re2-exhaustive.txt - $(MAKE) CXXFLAGS="$(CXXFLAGS) -DLOGGING=1" obj/test/search_test + $(MAKE) CXXFLAGS="$(CXXFLAGS) -DLOGGING=1" $(OBJ_DIR)/test/search_test echo '#' RE2 basic search tests built by make $@ >re2-search.txt echo '#' $$(date) >>re2-search.txt - obj/test/search_test |grep -v '^PASS$$' >>re2-search.txt + $(OBJ_DIR)/test/search_test |grep -v '^PASS$$' >>re2-search.txt diff --git a/src/misc/writeBuildNum.sh b/src/misc/writeBuildNum.sh index e481d249032..b7044012e69 100755 --- a/src/misc/writeBuildNum.sh +++ b/src/misc/writeBuildNum.sh @@ -45,8 +45,9 @@ then headerFile=$2 tempfile=$3; else - tempfile=gen/test.header.txt - headerFile=src/jrd/build_no.h; + TmpDir="${TMPDIR:-/tmp}" + tempfile=$TmpDir/test.header.txt + headerFile=$Root/src/jrd/build_no.h; fi #______________________________________________________________________________