-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdev.sh
More file actions
executable file
·327 lines (276 loc) · 8.64 KB
/
dev.sh
File metadata and controls
executable file
·327 lines (276 loc) · 8.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
#!/bin/bash
# Script de desarrollo para Arcris 2.0
# Facilita la compilación, testing y desarrollo del proyecto
set -e # Salir si hay errores
# Colores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Variables del proyecto
PROJECT_NAME="Arcris"
BUILD_DIR="builddir"
EXECUTABLE="src/arcris"
# Función para mostrar mensajes con colores
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Función para mostrar ayuda
show_help() {
echo -e "${BLUE}Script de Desarrollo - Arcris 2.0${NC}"
echo ""
echo "Uso: $0 [COMANDO]"
echo ""
echo "Comandos disponibles:"
echo " build, b - Compilar el proyecto"
echo " clean, c - Limpiar archivos de compilación"
echo " run, r - Ejecutar la aplicación"
echo " debug, d - Ejecutar con información de debug"
echo " setup, s - Configurar el entorno de compilación"
echo " install, i - Instalar la aplicación"
echo " reconfigure - Reconfigurar el sistema de build"
echo " test, t - Ejecutar tests básicos"
echo " check - Verificar dependencias"
echo " watch, w - Compilar y ejecutar automáticamente al cambiar archivos"
echo " help, h - Mostrar esta ayuda"
echo ""
echo "Ejemplos:"
echo " $0 build # Compilar el proyecto"
echo " $0 run # Ejecutar la aplicación"
echo " $0 debug # Ejecutar con logs detallados"
echo " $0 clean build # Limpiar y compilar"
}
# Función para verificar dependencias
check_dependencies() {
log_info "Verificando dependencias..."
local missing_deps=()
# Verificar herramientas de build
if ! command -v meson &> /dev/null; then
missing_deps+=("meson")
fi
if ! command -v ninja &> /dev/null; then
missing_deps+=("ninja")
fi
# Verificar dependencias de desarrollo
if ! pkg-config --exists gtk4; then
missing_deps+=("gtk4-devel")
fi
if ! pkg-config --exists libadwaita-1; then
missing_deps+=("libadwaita-devel")
fi
if [ ${#missing_deps[@]} -eq 0 ]; then
log_success "Todas las dependencias están disponibles"
return 0
else
log_error "Dependencias faltantes: ${missing_deps[*]}"
log_info "Instala las dependencias faltantes antes de continuar"
return 1
fi
}
# Función para configurar el entorno
setup_build() {
log_info "Configurando entorno de compilación..."
if [ -d "$BUILD_DIR" ]; then
log_warning "Directorio de build existe, reconfigurando..."
meson setup $BUILD_DIR --reconfigure
else
meson setup $BUILD_DIR
fi
log_success "Entorno configurado correctamente"
}
# Función para compilar
build_project() {
log_info "Compilando $PROJECT_NAME..."
if [ ! -d "$BUILD_DIR" ]; then
log_warning "Directorio de build no existe, configurando..."
setup_build
fi
ninja -C $BUILD_DIR
if [ $? -eq 0 ]; then
log_success "Compilación exitosa"
else
log_error "Error en la compilación"
exit 1
fi
}
# Función para limpiar
clean_build() {
log_info "Limpiando archivos de compilación..."
if [ -d "$BUILD_DIR" ]; then
rm -rf $BUILD_DIR
log_success "Archivos de compilación eliminados"
else
log_warning "No hay archivos de compilación para limpiar"
fi
}
# Función para ejecutar
run_application() {
log_info "Ejecutando $PROJECT_NAME..."
if [ ! -f "$BUILD_DIR/$EXECUTABLE" ]; then
log_warning "Ejecutable no encontrado, compilando primero..."
build_project
fi
./$BUILD_DIR/$EXECUTABLE
}
# Función para ejecutar con debug
debug_application() {
log_info "Ejecutando $PROJECT_NAME con información de debug..."
if [ ! -f "$BUILD_DIR/$EXECUTABLE" ]; then
log_warning "Ejecutable no encontrado, compilando primero..."
build_project
fi
# Configurar variables de entorno para debug
export G_MESSAGES_DEBUG=all
export GTK_DEBUG=interactive
./$BUILD_DIR/$EXECUTABLE
}
# Función para reconfigurar
reconfigure_build() {
log_info "Reconfigurando sistema de build..."
meson setup $BUILD_DIR --reconfigure
log_success "Reconfiguración completada"
}
# Función para instalar
install_application() {
log_info "Instalando $PROJECT_NAME..."
if [ ! -f "$BUILD_DIR/$EXECUTABLE" ]; then
log_warning "Ejecutable no encontrado, compilando primero..."
build_project
fi
sudo ninja -C $BUILD_DIR install
log_success "Instalación completada"
}
# Función para tests básicos
test_application() {
log_info "Ejecutando tests básicos..."
# Test 1: Verificar que el ejecutable existe
if [ ! -f "$BUILD_DIR/$EXECUTABLE" ]; then
log_error "Test fallido: Ejecutable no encontrado"
return 1
fi
log_success "✓ Ejecutable encontrado"
# Test 2: Verificar que el ejecutable tiene permisos de ejecución
if [ ! -x "$BUILD_DIR/$EXECUTABLE" ]; then
log_error "Test fallido: Ejecutable sin permisos de ejecución"
return 1
fi
log_success "✓ Permisos de ejecución correctos"
# Test 3: Verificar que los recursos UI existen
if [ ! -f "data/window.ui" ]; then
log_error "Test fallido: Archivo UI principal no encontrado"
return 1
fi
log_success "✓ Archivos UI encontrados"
# Test 4: Verificar compilación reciente
local exec_time=$(stat -c %Y "$BUILD_DIR/$EXECUTABLE" 2>/dev/null || echo 0)
local source_time=$(find src -name "*.c" -exec stat -c %Y {} \; | sort -n | tail -1)
if [ "$exec_time" -lt "$source_time" ]; then
log_warning "⚠ El ejecutable parece desactualizado respecto al código fuente"
else
log_success "✓ Ejecutable actualizado"
fi
log_success "Todos los tests básicos pasaron"
}
# Función para watch (compilar automáticamente)
watch_and_run() {
log_info "Iniciando modo watch - compilación automática..."
log_info "Presiona Ctrl+C para salir"
# Verificar si inotify-tools está disponible
if ! command -v inotifywait &> /dev/null; then
log_error "inotify-tools no está instalado. Usando fallback con sleep."
while true; do
build_project
run_application &
APP_PID=$!
sleep 5
kill $APP_PID 2>/dev/null || true
done
else
while true; do
build_project
run_application &
APP_PID=$!
# Esperar cambios en archivos fuente
inotifywait -q -r -e modify,create,delete src/ data/
# Matar la aplicación anterior
kill $APP_PID 2>/dev/null || true
sleep 1
done
fi
}
# Función principal
main() {
case "${1:-help}" in
build|b)
build_project
;;
clean|c)
clean_build
;;
run|r)
run_application
;;
debug|d)
debug_application
;;
setup|s)
check_dependencies && setup_build
;;
install|i)
install_application
;;
reconfigure)
reconfigure_build
;;
test|t)
test_application
;;
check)
check_dependencies
;;
watch|w)
watch_and_run
;;
help|h|--help|-h)
show_help
;;
*)
# Permitir múltiples comandos
for cmd in "$@"; do
case "$cmd" in
build|b) build_project ;;
clean|c) clean_build ;;
run|r) run_application ;;
debug|d) debug_application ;;
setup|s) check_dependencies && setup_build ;;
install|i) install_application ;;
reconfigure) reconfigure_build ;;
test|t) test_application ;;
check) check_dependencies ;;
*)
log_error "Comando desconocido: $cmd"
show_help
exit 1
;;
esac
done
;;
esac
}
# Verificar que estamos en el directorio correcto
if [ ! -f "meson.build" ]; then
log_error "Este script debe ejecutarse desde el directorio raíz del proyecto"
exit 1
fi
# Ejecutar función principal con todos los argumentos
main "$@"