Skip to content

Commit

Permalink
optimized
Browse files Browse the repository at this point in the history
  • Loading branch information
leleliu008 committed Dec 13, 2024
1 parent a3b6795 commit c6d8be6
Showing 1 changed file with 161 additions and 126 deletions.
287 changes: 161 additions & 126 deletions xcpkg
Original file line number Diff line number Diff line change
Expand Up @@ -3204,12 +3204,6 @@ __install_the_given_package() {

#########################################################################################

# these two variable might be set in formula file to control cmakew's behavor
unset CMAKE_BUILD_TARGETS
unset CMAKE_INSTALL_COMPONENTS

#########################################################################################

if [ "$LOG_LEVEL" -ge "$LOG_LEVEL_VERBOSE" ] ; then
cat <<EOF
NATIVE_PLATFORM_KIND = $NATIVE_PLATFORM_KIND
Expand Down Expand Up @@ -5793,97 +5787,139 @@ ninjaw() {
fi
}

cmakew_parse_args() {
# }}}
##############################################################################
# {{{ cmakew

# cmakew [2] [--targets=<comma-separated list>] [--components=<comma-separated list>] [CMAKE-OPTIONS]
cmakew() {
unset CMAKE_EXTRA_ARGS
unset CMAKE_BUILD_TARGETS
unset CMAKE_INSTALL_COMPONENTS
unset CMAKE_BUILD_STATIC_SHARED_LIBRARY_SEPARATEDLY

if [ "$1" = 2 ] ; then
CMAKE_BUILD_STATIC_SHARED_LIBRARY_SEPARATEDLY=1
shift
fi

while [ -n "$1" ]
do
case $1 in
-S) shift; PACKAGE_BSCRIPT_DIR="$1" ;;
-B) shift; PACKAGE_BCACHED_DIR="$1" ;;
--targets=*)
TARGETS="${1#*=}"

export IFS=','

for item in $TARGETS
do
CMAKE_BUILD_TARGETS="$CMAKE_BUILD_TARGETS $item"
done

unset IFS
;;
--components=*)
COMPONENTS="${1#*=}"

export IFS=','

for item in $COMPONENTS
do
CMAKE_INSTALL_COMPONENTS="$CMAKE_INSTALL_COMPONENTS $item"
done

unset IFS
;;
*) CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS $1"
esac
shift
done
}

# https://cmake.org/cmake/help/latest/command/enable_testing.html?highlight=build_testing
# https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling
#
# https://cmake.org/cmake/help/latest/variable/CMAKE_EXPORT_COMPILE_COMMANDS.html
# https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html
# https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
# https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html
#
# https://cmake.org/cmake/help/latest/variable/CMAKE_FIND_ROOT_PATH.html
# https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html
#
# run in a subshell
cmakew() {
cmakew_parse_args "$@"
if [ "$CMAKE_BUILD_STATIC_SHARED_LIBRARY_SEPARATEDLY" = 1 ] ; then
cmakew_internal $CMAKE_EXTRA_ARGS -DBUILD_SHARED_LIBS=OFF
cmakew_internal $CMAKE_EXTRA_ARGS -DBUILD_SHARED_LIBS=ON
else
cmakew_internal $CMAKE_EXTRA_ARGS
fi
}

cmakew_internal() {
if [ "$BUILD_FOR_NATIVE" = 1 ] ; then
if [ "$PACKAGE_USE_BSYSTEM_NINJA" = 1 ] ; then
CMAKE_GENERATOR='Ninja'
else
CMAKE_GENERATOR='Unix Makefiles'
fi
cmakew_for_native "$@"
else
cmakew_for_target "$@"
fi
}

if [ "$VERBOSE_CMAKE" = 1 ] ; then
CMAKE_VERBOSE_MAKEFILE=ON
CMAKE_COLOR_MAKEFILE=ON
else
CMAKE_VERBOSE_MAKEFILE=OFF
CMAKE_COLOR_MAKEFILE=OFF
fi
cmakew_for_native() {
if [ "$PACKAGE_USE_BSYSTEM_NINJA" = 1 ] ; then
CMAKE_GENERATOR='Ninja'
else
CMAKE_GENERATOR='Unix Makefiles'
fi

if [ "$DEBUG_CMAKE" = 1 ] ; then
CMAKE_FIND_DEBUG_MODE=ON
else
CMAKE_FIND_DEBUG_MODE=OFF
fi
if [ "$VERBOSE_CMAKE" = 1 ] ; then
CMAKE_VERBOSE_MAKEFILE=ON
CMAKE_COLOR_MAKEFILE=ON
else
CMAKE_VERBOSE_MAKEFILE=OFF
CMAKE_COLOR_MAKEFILE=OFF
fi

run "$CMAKE" \
-Wno-dev \
-G "'$CMAKE_GENERATOR'" \
-S "$PACKAGE_BSCRIPT_DIR" \
-B "$PACKAGE_BCACHED_DIR" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$PACKAGE_INSTALL_DIR" \
-DCMAKE_FIND_DEBUG_MODE="$CMAKE_FIND_DEBUG_MODE" \
-DCMAKE_VERBOSE_MAKEFILE="$CMAKE_VERBOSE_MAKEFILE" \
-DCMAKE_COLOR_MAKEFILE="$CMAKE_COLOR_MAKEFILE" \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_TESTING=OFF \
"$@" &&
run "$CMAKE" --build "$PACKAGE_BCACHED_DIR" -- "-j$BUILD_NJOBS" &&
run "$CMAKE" --install "$PACKAGE_BCACHED_DIR"
if [ "$DEBUG_CMAKE" = 1 ] ; then
CMAKE_FIND_DEBUG_MODE=ON
else
CMAKE_TOOLCHAIN_FILE="$PACKAGE_WORKING_DIR/toolchain.cmake"
CMAKE_FIND_DEBUG_MODE=OFF
fi

run "$CMAKE" \
-Wno-dev \
-G "'$CMAKE_GENERATOR'" \
-S "$PACKAGE_BSCRIPT_DIR" \
-B "$PACKAGE_BCACHED_DIR" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$PACKAGE_INSTALL_DIR" \
-DCMAKE_FIND_DEBUG_MODE="$CMAKE_FIND_DEBUG_MODE" \
-DCMAKE_VERBOSE_MAKEFILE="$CMAKE_VERBOSE_MAKEFILE" \
-DCMAKE_COLOR_MAKEFILE="$CMAKE_COLOR_MAKEFILE" \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_TESTING=OFF \
"$@" &&
run "$CMAKE" --build "$PACKAGE_BCACHED_DIR" -- "-j$BUILD_NJOBS" &&
run "$CMAKE" --install "$PACKAGE_BCACHED_DIR"
}

cat > "$CMAKE_TOOLCHAIN_FILE" <<EOF
cmakew_for_target() {
CMAKE_TOOLCHAIN_FILE="$PACKAGE_WORKING_DIR/toolchain.cmake"

cat > "$CMAKE_TOOLCHAIN_FILE" <<EOF
set(CMAKE_SYSTEM_VERSION $TARGET_PLATFORM_VERS)
set(CMAKE_SYSTEM_PROCESSOR $TARGET_PLATFORM_ARCH)
EOF

if [ "$CROSS_COMPILING" = 1 ] ; then
# https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-ios-tvos-or-watchos
case $TARGET_PLATFORM_NAME in
iPhoneOS|iPhoneSimulator)
CMAKE_SYSTEM_NAME=iOS
;;
WatchOS|WatchSimulator)
CMAKE_SYSTEM_NAME=watchOS
;;
AppleTVOS|AppleTVSimulator)
CMAKE_SYSTEM_NAME=tvOS
;;
*) CMAKE_SYSTEM_NAME=Darwin
esac
if [ "$CROSS_COMPILING" = 1 ] ; then
# https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-ios-tvos-or-watchos
case $TARGET_PLATFORM_NAME in
iPhoneOS|iPhoneSimulator)
CMAKE_SYSTEM_NAME=iOS
;;
WatchOS|WatchSimulator)
CMAKE_SYSTEM_NAME=watchOS
;;
AppleTVOS|AppleTVSimulator)
CMAKE_SYSTEM_NAME=tvOS
;;
*) CMAKE_SYSTEM_NAME=Darwin
esac

cat >> "$CMAKE_TOOLCHAIN_FILE" <<EOF
cat >> "$CMAKE_TOOLCHAIN_FILE" <<EOF
set(CMAKE_SYSTEM_NAME $CMAKE_SYSTEM_NAME)
EOF
fi
fi

cat >> "$CMAKE_TOOLCHAIN_FILE" <<EOF
cat >> "$CMAKE_TOOLCHAIN_FILE" <<EOF

message(STATUS "CMake command: \${CMAKE_COMMAND}")
message(STATUS "CMake version: \${CMAKE_VERSION}")
Expand Down Expand Up @@ -5941,68 +5977,67 @@ endif()

set(CMAKE_INSTALL_MESSAGE $CMAKE_INSTALL_MESSAGE)
EOF
[ "$VERBOSE_CMAKE" = 1 ] && {
run bat --language=cmake --paging=never --style=numbers,grid "$CMAKE_TOOLCHAIN_FILE"
}
[ "$VERBOSE_CMAKE" = 1 ] && {
run bat --language=cmake --paging=never --style=numbers,grid "$CMAKE_TOOLCHAIN_FILE"
}

unset CMAKE_PROJECT_INCLUDE
unset CMAKE_PROJECT_INCLUDE

if [ "$PACKAGE_PKGTYPE" = exe ] ; then
# https://cmake.org/cmake/help/latest/variable/CMAKE_PROJECT_INCLUDE.html
CMAKE_PROJECT_INCLUDE="$PACKAGE_WORKING_DIR/project-after.cmake"
if [ "$PACKAGE_PKGTYPE" = exe ] ; then
# https://cmake.org/cmake/help/latest/variable/CMAKE_PROJECT_INCLUDE.html
CMAKE_PROJECT_INCLUDE="$PACKAGE_WORKING_DIR/project-after.cmake"

# https://cmake.org/cmake/help/latest/variable/CMAKE_FIND_LIBRARY_SUFFIXES.html
printf 'set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".dylib")\n' > "$CMAKE_PROJECT_INCLUDE"
# https://cmake.org/cmake/help/latest/variable/CMAKE_FIND_LIBRARY_SUFFIXES.html
printf 'set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".dylib")\n' > "$CMAKE_PROJECT_INCLUDE"

if [ "$VERBOSE_CMAKE" = 1 ] ; then
run bat --language=cmake --paging=never --style=plain "$CMAKE_PROJECT_INCLUDE"
fi
if [ "$VERBOSE_CMAKE" = 1 ] ; then
run bat --language=cmake --paging=never --style=plain "$CMAKE_PROJECT_INCLUDE"
fi
fi

if [ -f "$PACKAGE_BCACHED_DIR/CMakeCache.txt" ] ; then
rm "$PACKAGE_BCACHED_DIR/CMakeCache.txt"
fi
if [ -f "$PACKAGE_BCACHED_DIR/CMakeCache.txt" ] ; then
rm "$PACKAGE_BCACHED_DIR/CMakeCache.txt"
fi

BUILD_SHARED_LIBS_IS_SPECIFIED=0
BUILD_SHARED_LIBS_IS_SPECIFIED=0

for OPT in "$@"
do
case $OPT in
-DBUILD_SHARED_LIBS=*) BUILD_SHARED_LIBS_IS_SPECIFIED=1; break
esac
done

if [ -z "$CMAKE_PROJECT_INCLUDE" ] ; then
CMAKE_CONFIG_OPTIONS_EXTRA=
else
CMAKE_CONFIG_OPTIONS_EXTRA="-DCMAKE_PROJECT_INCLUDE='$CMAKE_PROJECT_INCLUDE'"
fi
for OPT in "$@"
do
case $OPT in
-DBUILD_SHARED_LIBS=*) BUILD_SHARED_LIBS_IS_SPECIFIED=1; break
esac
done

run "$CMAKE" \
-Wno-dev \
-S "$PACKAGE_BSCRIPT_DIR" \
-B "$PACKAGE_BCACHED_DIR" \
-DBUILD_TESTING=OFF \
-DCMAKE_INSTALL_PREFIX="$PACKAGE_INSTALL_DIR" \
-DCMAKE_TOOLCHAIN_FILE="$CMAKE_TOOLCHAIN_FILE" \
-DCMAKE_VERBOSE_MAKEFILE="$CMAKE_VERBOSE_MAKEFILE" \
-DCMAKE_COLOR_MAKEFILE="$CMAKE_COLOR_MAKEFILE" \
"$CMAKE_CONFIG_OPTIONS_EXTRA" "$@"

if [ -z "$CMAKE_BUILD_TARGETS" ] ; then
run "$CMAKE" --build "$PACKAGE_BCACHED_DIR"
else
run "$CMAKE" --build "$PACKAGE_BCACHED_DIR" --target "$CMAKE_BUILD_TARGETS"
fi
if [ -z "$CMAKE_PROJECT_INCLUDE" ] ; then
CMAKE_CONFIG_OPTIONS_EXTRA=
else
CMAKE_CONFIG_OPTIONS_EXTRA="-DCMAKE_PROJECT_INCLUDE='$CMAKE_PROJECT_INCLUDE'"
fi

run "$CMAKE" \
-Wno-dev \
-S "$PACKAGE_BSCRIPT_DIR" \
-B "$PACKAGE_BCACHED_DIR" \
-DBUILD_TESTING=OFF \
-DCMAKE_INSTALL_PREFIX="$PACKAGE_INSTALL_DIR" \
-DCMAKE_TOOLCHAIN_FILE="$CMAKE_TOOLCHAIN_FILE" \
-DCMAKE_VERBOSE_MAKEFILE="$CMAKE_VERBOSE_MAKEFILE" \
-DCMAKE_COLOR_MAKEFILE="$CMAKE_COLOR_MAKEFILE" \
"$CMAKE_CONFIG_OPTIONS_EXTRA" "$@"

if [ -z "$CMAKE_BUILD_TARGETS" ] ; then
run "$CMAKE" --build "$PACKAGE_BCACHED_DIR"
else
run "$CMAKE" --build "$PACKAGE_BCACHED_DIR" --target "$CMAKE_BUILD_TARGETS"
fi

if [ -z "$CMAKE_INSTALL_COMPONENTS" ] ; then
run "$CMAKE" --install "$PACKAGE_BCACHED_DIR"
else
for component in $CMAKE_INSTALL_COMPONENTS
do
run "$CMAKE" --install "$PACKAGE_BCACHED_DIR" --component "$component"
done
fi
if [ -z "$CMAKE_INSTALL_COMPONENTS" ] ; then
run "$CMAKE" --install "$PACKAGE_BCACHED_DIR"
else
for component in $CMAKE_INSTALL_COMPONENTS
do
run "$CMAKE" --install "$PACKAGE_BCACHED_DIR" --component "$component"
done
fi
}

Expand Down Expand Up @@ -8050,7 +8085,7 @@ fi

##################################################################################

XCPKG_VERSION=0.26.3
XCPKG_VERSION=0.26.4

XCPKG_ARG0="$0"
XCPKG_ARG1="$1"
Expand Down

0 comments on commit c6d8be6

Please sign in to comment.