Commit 5a532bf8 authored by jan.koester's avatar jan.koester
Browse files

fresh libs by build

parent b58d5826
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ ifndef ROOTBUILD
	@if [ "$@" = "clean" ]; then \
		rm -f debian/.nspawn-done debian/files; \
	elif { [ "$@" = "binary" ] || [ "$@" = "binary-arch" ]; } && [ ! -f debian/.nspawn-done ]; then \
		sudo packaging/build-nspawn.sh blogi && \
		sudo packaging/build-nspawn.sh update-libs blogi && \
		for deb in packaging/output/*.deb; do \
			cp "$$deb" ../ && \
			dpkg-distaddfile "$$(basename "$$deb")" \
+130 −6
Original line number Diff line number Diff line
@@ -73,10 +73,10 @@ while [[ $# -gt 0 ]]; do
        -h|--help)
            echo "Usage: $0 [--clean] [--arch amd64] [PHASE...]"
            echo ""
            echo "Phases: chroot, toolchain, libraries, blogi, all (default)"
            echo "Phases: chroot, toolchain, libraries, update-libs, blogi, all (default)"
            exit 0
            ;;
        chroot|toolchain|libraries|blogi|all)
        chroot|toolchain|libraries|update-libs|blogi|all)
            PHASES+=("$1"); shift ;;
        *) echo "Unknown option: $1"; exit 1 ;;
    esac
@@ -467,6 +467,129 @@ build_libraries() {
    "
}

# ─────────────────────────────────────────────────────────────
# Phase 3b: Update (git pull) and rebuild custom libraries
# ─────────────────────────────────────────────────────────────
update_libraries() {
    echo "==> Updating dependency libraries inside nspawn..."

    systemd-nspawn -D "$CHROOT_DIR" --pipe -- bash -c "
        set -e
        TOOLCHAIN=/usr/local/musl/share/musl-llvm-toolchain.cmake
        PREFIX=/usr/local

        cd /build/libs

        update_lib() {
            local name=\$1
            local url=\$2
            local extra_args=\${3:-}

            if [ ! -d \$name ]; then
                echo \"  [clone] \$name\"
                git clone --depth 1 \$url \$name
            else
                echo \"  [pull] \$name\"
                cd \$name
                git fetch --depth 1 origin
                LOCAL=\$(git rev-parse HEAD)
                REMOTE=\$(git rev-parse FETCH_HEAD)
                if [ \"\$LOCAL\" = \"\$REMOTE\" ]; then
                    echo \"  [skip] \$name already up-to-date\"
                    cd /build/libs
                    return
                fi
                git reset --hard FETCH_HEAD
                cd /build/libs
            fi

            # Remove done marker and rebuild
            rm -f .\${name}.done
            rm -rf \$name/build
            mkdir -p \$name/build && cd \$name/build
            cmake .. -G Ninja \\
                -DCMAKE_TOOLCHAIN_FILE=\$TOOLCHAIN \\
                -DCMAKE_INSTALL_PREFIX=\$PREFIX \\
                -DCMAKE_BUILD_TYPE=Release \\
                -DCMAKE_POSITION_INDEPENDENT_CODE=ON \\
                \$extra_args
            ninja
            ninja install
            cd /build/libs
            touch .\${name}.done
        }

        # ── System/third-party dependencies ──
        update_lib json-c '${LIBS[json-c]}' '-DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DDISABLE_WERROR=ON'
        update_lib libyaml '${LIBS[libyaml]}' '-DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DINSTALL_CMAKE_DIR=lib/cmake/yaml'
        update_lib brotli '${LIBS[brotli]}' '-DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF'
        update_lib tinyxml2 '${LIBS[tinyxml2]}' '-DBUILD_SHARED_LIBS=OFF -Dtinyxml2_BUILD_TESTING=OFF'

        # SQLite (autoconf-based)
        if [ -d sqlite ]; then
            echo \"  [pull] sqlite\"
            cd sqlite
            git fetch --depth 1 origin
            LOCAL=\$(git rev-parse HEAD)
            REMOTE=\$(git rev-parse FETCH_HEAD)
            if [ \"\$LOCAL\" != \"\$REMOTE\" ]; then
                git reset --hard FETCH_HEAD
                rm -f /build/libs/.sqlite.done
                CC=/usr/local/musl/bin/musl-clang ./configure --prefix=\$PREFIX --disable-shared --enable-static
                make -j\$(nproc)
                make install
                touch /build/libs/.sqlite.done
            else
                echo \"  [skip] sqlite already up-to-date\"
            fi
            cd /build/libs
        fi

        # PostgreSQL libpq (autoconf-based)
        if [ -d postgres ]; then
            echo \"  [pull] libpq\"
            cd postgres
            git fetch --depth 1 origin
            LOCAL=\$(git rev-parse HEAD)
            REMOTE=\$(git rev-parse FETCH_HEAD)
            if [ \"\$LOCAL\" != \"\$REMOTE\" ]; then
                git reset --hard FETCH_HEAD
                rm -f /build/libs/.libpq.done
                CC=/usr/local/musl/bin/musl-clang CXX=/usr/local/musl/bin/musl-clang++ \\
                    ./configure --prefix=\$PREFIX --without-readline --without-zlib --without-icu \\
                    --host=x86_64-linux-musl --build=x86_64-linux-gnu
                cd src/interfaces/libpq
                make -j\$(nproc)
                make install
                cd /build/libs/postgres/src/include
                make install
                cd /build/libs/postgres/src/bin/pg_config
                make install
                touch /build/libs/.libpq.done
            else
                echo \"  [skip] libpq already up-to-date\"
            fi
            cd /build/libs
        fi

        # ── Custom libraries ──
        update_lib libcmdplus '${LIBS[libcmdplus]}'
        update_lib uuidplus '${LIBS[uuidplus]}'
        update_lib libnetplus '${LIBS[libnetplus]}'
        update_lib libhtmlpp '${LIBS[libhtmlpp]}'
        update_lib libhttppp '${LIBS[libhttppp]}'
        update_lib libconfplus '${LIBS[libconfplus]}'
        update_lib libdbpp '${LIBS[libdbpp]}'
        update_lib libgameinfoplus '${LIBS[libgameinfoplus]}'
        update_lib libparitypp '${LIBS[libparitypp]}'
        update_lib authdb '${LIBS[authdb]}' '-DBUILD_BINDINGS=OFF'
        update_lib mediadb '${LIBS[mediadb]}' '-DCLIENT_ONLY=ON'
        update_lib smtpclient '${LIBS[smtpclient]}' '-DCMAKE_INSTALL_LIBDIR=/usr/local/lib -DCMAKE_INSTALL_INCLUDEDIR=/usr/local/include'

        echo '==> All libraries updated successfully'
    "
}

# ─────────────────────────────────────────────────────────────
# Phase 4: Build blogi .deb packages (dpkg-buildpackage handles cmake)
# ─────────────────────────────────────────────────────────────
@@ -517,6 +640,7 @@ run_phase() {
        chroot)      setup_chroot ;;
        toolchain)   setup_toolchain ;;
        libraries)   build_libraries ;;
        update-libs) update_libraries ;;
        blogi)       build_blogi ;;
        all)
            setup_chroot