Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
maurosoria
GitHub Repository: maurosoria/dirsearch
Path: blob/master/pyinstaller/build.sh
896 views
1
#!/bin/bash
2
# Build script for dirsearch PyInstaller binaries
3
# Builds for the current platform
4
#
5
# Usage:
6
# ./build.sh
7
8
set -e
9
10
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
12
13
# Colors
14
RED='\033[0;31m'
15
GREEN='\033[0;32m'
16
YELLOW='\033[1;33m'
17
NC='\033[0m'
18
19
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
20
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
21
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
22
23
# Create dist directory
24
mkdir -p "$SCRIPT_DIR/dist"
25
26
build() {
27
log_info "Building for current platform..."
28
cd "$PROJECT_ROOT"
29
30
# Determine platform suffix
31
PLATFORM=$(uname -s | tr '[:upper:]' '[:lower:]')
32
ARCH=$(uname -m)
33
34
if [[ "$PLATFORM" == "darwin" ]]; then
35
if [[ "$ARCH" == "arm64" ]]; then
36
SUFFIX="macos-silicon"
37
else
38
SUFFIX="macos-intel"
39
fi
40
elif [[ "$PLATFORM" == "linux" ]]; then
41
SUFFIX="linux-amd64"
42
elif [[ "$PLATFORM" == "mingw"* ]] || [[ "$PLATFORM" == "msys"* ]]; then
43
SUFFIX="windows-x64"
44
else
45
SUFFIX="$PLATFORM-$ARCH"
46
fi
47
48
# Check for Python
49
if ! command -v python3 &> /dev/null && ! command -v python &> /dev/null; then
50
log_error "Python 3 is required"
51
exit 1
52
fi
53
54
PYTHON_CMD=$(command -v python3 || command -v python)
55
56
# Install dependencies
57
log_info "Installing dependencies..."
58
$PYTHON_CMD -m pip install --upgrade pip setuptools wheel
59
$PYTHON_CMD -m pip install -r requirements.txt
60
$PYTHON_CMD -m pip install pyinstaller==6.3.0
61
62
# Build
63
log_info "Running PyInstaller..."
64
$PYTHON_CMD -m PyInstaller \
65
--onefile \
66
--name dirsearch \
67
--paths=. \
68
--collect-submodules=lib \
69
--add-data "db:db" \
70
--add-data "config.ini:." \
71
--add-data "lib/report:lib/report" \
72
--hidden-import=lib \
73
--hidden-import=lib.core \
74
--hidden-import=lib.core.settings \
75
--hidden-import=lib.core.options \
76
--hidden-import=lib.controller \
77
--hidden-import=lib.controller.controller \
78
--hidden-import=lib.controller.session \
79
--hidden-import=lib.connection \
80
--hidden-import=lib.parse \
81
--hidden-import=lib.report \
82
--hidden-import=lib.utils \
83
--hidden-import=lib.view \
84
--hidden-import=requests \
85
--hidden-import=httpx \
86
--hidden-import=urllib3 \
87
--hidden-import=charset_normalizer \
88
--hidden-import=certifi \
89
--hidden-import=PySocks \
90
--hidden-import=socks \
91
--hidden-import=jinja2 \
92
--hidden-import=defusedxml \
93
--hidden-import=OpenSSL \
94
--hidden-import=ntlm_auth \
95
--hidden-import=requests_ntlm \
96
--hidden-import=bs4 \
97
--hidden-import=colorama \
98
--hidden-import=defusedcsv \
99
--hidden-import=httpx_ntlm \
100
--hidden-import=httpcore \
101
--hidden-import=h11 \
102
--hidden-import=anyio \
103
--hidden-import=sniffio \
104
--hidden-import=socksio \
105
--strip \
106
--clean \
107
dirsearch.py
108
109
# Move and rename binary
110
if [[ "$SUFFIX" == "windows"* ]]; then
111
mv dist/dirsearch.exe "$SCRIPT_DIR/dist/dirsearch-$SUFFIX.exe"
112
log_info "Binary created: pyinstaller/dist/dirsearch-$SUFFIX.exe"
113
else
114
mv dist/dirsearch "$SCRIPT_DIR/dist/dirsearch-$SUFFIX"
115
chmod +x "$SCRIPT_DIR/dist/dirsearch-$SUFFIX"
116
log_info "Binary created: pyinstaller/dist/dirsearch-$SUFFIX"
117
fi
118
}
119
120
show_help() {
121
echo "dirsearch PyInstaller Build Script"
122
echo ""
123
echo "Usage: $0"
124
echo ""
125
echo "Builds a standalone executable for the current platform."
126
echo ""
127
echo "Supported platforms:"
128
echo " - Linux AMD64"
129
echo " - macOS Intel / Silicon"
130
echo " - Windows x64"
131
}
132
133
case "${1:-build}" in
134
build|"")
135
build
136
;;
137
help|--help|-h)
138
show_help
139
;;
140
*)
141
log_error "Unknown command: $1"
142
show_help
143
exit 1
144
;;
145
esac
146
147
log_info "Build complete!"
148
ls -la "$SCRIPT_DIR/dist/"
149
150