Add Linux compatibility for LoginServer
- Updated main.cpp with platform-specific code for Windows/Linux - Modified stdafx.h to include Linux headers and definitions - Updated signal_handler.cpp for cross-platform signal handling - Added Linux-compatible types and macros - Created CMakeLists.txt for Linux build system - Added build.sh script for automated building - Added loginserver.sh script for server management - Created comprehensive README_LINUX.md with deployment instructions - All changes maintain Windows compatibility using preprocessor directives
This commit is contained in:
@@ -0,0 +1,248 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Knight Online Login Server Build Script for Linux
|
||||
# Author: Levent Ferrah
|
||||
|
||||
# Set script directory
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
BUILD_DIR="build"
|
||||
JOBS=$(nproc)
|
||||
|
||||
# Functions
|
||||
log_message() {
|
||||
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ERROR:${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] SUCCESS:${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] WARNING:${NC} $1"
|
||||
}
|
||||
|
||||
# Check dependencies
|
||||
check_dependencies() {
|
||||
log_message "Checking build dependencies..."
|
||||
|
||||
# Check for cmake
|
||||
if ! command -v cmake &> /dev/null; then
|
||||
log_error "cmake is not installed"
|
||||
echo "Please install cmake: sudo apt-get install cmake"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check for g++
|
||||
if ! command -v g++ &> /dev/null; then
|
||||
log_error "g++ is not installed"
|
||||
echo "Please install g++: sudo apt-get install g++ build-essential"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check for ODBC
|
||||
if ! pkg-config --exists odbc &> /dev/null; then
|
||||
log_warning "ODBC development files might not be installed"
|
||||
echo "Consider installing: sudo apt-get install unixodbc-dev"
|
||||
fi
|
||||
|
||||
log_success "Dependencies check completed"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Clean build directory
|
||||
clean_build() {
|
||||
log_message "Cleaning build directory..."
|
||||
if [ -d "$BUILD_DIR" ]; then
|
||||
rm -rf "$BUILD_DIR"
|
||||
log_success "Build directory cleaned"
|
||||
fi
|
||||
}
|
||||
|
||||
# Build project
|
||||
build_project() {
|
||||
log_message "Starting build process..."
|
||||
|
||||
# Create build directory
|
||||
mkdir -p "$BUILD_DIR"
|
||||
cd "$BUILD_DIR"
|
||||
|
||||
# Configure with cmake
|
||||
log_message "Configuring project with CMake..."
|
||||
if ! cmake ..; then
|
||||
log_error "CMake configuration failed"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Build project
|
||||
log_message "Building project with $JOBS parallel jobs..."
|
||||
if ! make -j$JOBS; then
|
||||
log_error "Build failed"
|
||||
return 1
|
||||
fi
|
||||
|
||||
cd ..
|
||||
log_success "Build completed successfully"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Install project
|
||||
install_project() {
|
||||
log_message "Installing project..."
|
||||
|
||||
# Create bin directory if it doesn't exist
|
||||
mkdir -p bin
|
||||
|
||||
# Copy binary
|
||||
if [ -f "$BUILD_DIR/bin/LoginServer" ]; then
|
||||
cp "$BUILD_DIR/bin/LoginServer" bin/
|
||||
chmod +x bin/LoginServer
|
||||
log_success "LoginServer binary installed to bin/"
|
||||
else
|
||||
log_error "LoginServer binary not found in build directory"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Make scripts executable
|
||||
chmod +x loginserver.sh
|
||||
log_success "Scripts made executable"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Show usage
|
||||
show_usage() {
|
||||
echo "Knight Online Login Server Build Script"
|
||||
echo ""
|
||||
echo "Usage: $0 [OPTIONS] [COMMAND]"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " build - Build the project (default)"
|
||||
echo " clean - Clean build directory"
|
||||
echo " rebuild - Clean and build"
|
||||
echo " install - Install built binaries"
|
||||
echo " all - Clean, build, and install"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -h, --help - Show this help message"
|
||||
echo " -j, --jobs N - Use N parallel jobs (default: $JOBS)"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 # Build project"
|
||||
echo " $0 clean # Clean build files"
|
||||
echo " $0 rebuild # Clean and rebuild"
|
||||
echo " $0 all # Full build and install"
|
||||
echo " $0 -j 4 build # Build with 4 parallel jobs"
|
||||
}
|
||||
|
||||
# Parse command line arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
show_usage
|
||||
exit 0
|
||||
;;
|
||||
-j|--jobs)
|
||||
JOBS="$2"
|
||||
shift 2
|
||||
;;
|
||||
clean)
|
||||
COMMAND="clean"
|
||||
shift
|
||||
;;
|
||||
build)
|
||||
COMMAND="build"
|
||||
shift
|
||||
;;
|
||||
rebuild)
|
||||
COMMAND="rebuild"
|
||||
shift
|
||||
;;
|
||||
install)
|
||||
COMMAND="install"
|
||||
shift
|
||||
;;
|
||||
all)
|
||||
COMMAND="all"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown option: $1"
|
||||
show_usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Default command
|
||||
if [ -z "$COMMAND" ]; then
|
||||
COMMAND="build"
|
||||
fi
|
||||
|
||||
# Main execution
|
||||
log_message "Knight Online Login Server Build Script"
|
||||
log_message "Build command: $COMMAND"
|
||||
log_message "Parallel jobs: $JOBS"
|
||||
echo ""
|
||||
|
||||
case "$COMMAND" in
|
||||
clean)
|
||||
clean_build
|
||||
;;
|
||||
build)
|
||||
if ! check_dependencies; then
|
||||
exit 1
|
||||
fi
|
||||
if ! build_project; then
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
rebuild)
|
||||
if ! check_dependencies; then
|
||||
exit 1
|
||||
fi
|
||||
clean_build
|
||||
if ! build_project; then
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
install)
|
||||
if ! install_project; then
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
all)
|
||||
if ! check_dependencies; then
|
||||
exit 1
|
||||
fi
|
||||
clean_build
|
||||
if ! build_project; then
|
||||
exit 1
|
||||
fi
|
||||
if ! install_project; then
|
||||
exit 1
|
||||
fi
|
||||
log_success "Build and installation completed successfully!"
|
||||
echo ""
|
||||
echo "To start the server:"
|
||||
echo " ./loginserver.sh start"
|
||||
echo ""
|
||||
echo "To check server status:"
|
||||
echo " ./loginserver.sh status"
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user