#!/bin/sh

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

set -e
CLOUDUTILS_DIR="/usr/share/pyshared/"

# distutils was removed in Python 3.12 (Ubuntu 24.04); the Debian/Ubuntu-patched
# sysconfig 'deb_system' scheme gives the same /usr/lib/python3/dist-packages path.
DIST_DIR=$(python3 -c "import sysconfig; print(sysconfig.get_path('platlib', 'deb_system'))")

if command -v py3compile >/dev/null 2>&1; then
    py3compile -p cloudstack-common 2>/dev/null || echo "Warning: py3compile failed for cloudstack-common" >&2
    py3compile -p cloudstack-common /usr/share/cloudstack-common 2>/dev/null || echo "Warning: py3compile failed for cloudstack-common (/usr/share/cloudstack-common)" >&2
fi

cp $CLOUDUTILS_DIR/cloud_utils.py $DIST_DIR
cp -R $CLOUDUTILS_DIR/cloudutils $DIST_DIR
python3 -m py_compile $DIST_DIR/cloud_utils.py
python3 -m compileall $DIST_DIR/cloudutils
