@@ -336,91 +336,32 @@ static int dispatchPRM(int argc, const char* argv[]) {
336336
337337 } else if (strcmp (sub , "run" ) == 0 || strcmp (sub , "build" ) == 0 ||
338338 strcmp (sub , "test" ) == 0 || strcmp (sub , "watch" ) == 0 ) {
339- // Load project.pxcf
340- FILE * mf = fopen ("project.pxcf" , "r" );
341- if (!mf ) {
342- fprintf (stderr , "Error: No project.pxcf found in the current directory.\n" );
343- fprintf (stderr , "Run 'prm init <name>' to create a new project.\n" );
339+ // Unified manifest loading
340+ Manifest m ;
341+ const char * hint = (argc >= 3 && strcmp (argv [2 ], "web" ) != 0 ) ? argv [2 ] : NULL ;
342+
343+ if (!prm_load_manifest_auto (& m , hint )) {
344+ fprintf (stderr , "Error: No project.pxcf found in the current directory or specified path.\n" );
345+ fprintf (stderr , "Run 'prm init <name>' to create a new project, or 'cd' into your project folder.\n" );
344346 exit (1 );
345347 }
346- char pname [64 ] = "untitled" ;
347- char pversion [32 ] = "0.1.0" ;
348- char pentry [1024 ] = "src/main.prox" ;
349- char mline [512 ];
350- while (fgets (mline , sizeof (mline ), mf )) {
351- char key [64 ], val [256 ];
352- char * nl = strchr (mline , '\n' ); if (nl ) * nl = '\0' ;
353- if (mline [0 ] == '[' || mline [0 ] == '#' || mline [0 ] == '\0' ) continue ;
354- if (sscanf (mline , " %63[^ =] = \"%255[^\"]\"" , key , val ) == 2 ) {
355- if (strcmp (key , "name" ) == 0 ) { strncpy (pname , val , 63 ); pname [63 ] = '\0' ; }
356- if (strcmp (key , "version" ) == 0 ) { strncpy (pversion , val , 31 ); pversion [31 ] = '\0' ; }
357- if (strcmp (key , "entry" ) == 0 ) { strncpy (pentry , val , 1023 ); pentry [1023 ] = '\0' ; }
358- }
359- }
360- fclose (mf );
361348
362349 if (strcmp (sub , "run" ) == 0 ) {
363- printf ("[PRM] Running project: %s v%s\n" , pname , pversion );
364- printf ("[PRM] Executing: %s %s\n" , argv [0 ], pentry );
365-
366- int code = -1 ;
367- #ifdef _WIN32
368- code = _spawnl (_P_WAIT , argv [0 ], argv [0 ], pentry , NULL );
369- #else
370- pid_t pid = fork ();
371- if (pid == 0 ) {
372- execl (argv [0 ], argv [0 ], pentry , (char * )NULL );
373- exit (1 );
374- } else if (pid > 0 ) {
375- int status ;
376- waitpid (pid , & status , 0 );
377- if (WIFEXITED (status )) code = WEXITSTATUS (status );
378- }
379- #endif
380-
381- if (code != 0 ) printf ("[PRM] Process exited with code %d\n" , code );
350+ prm_run (& m );
382351
383352 } else if (strcmp (sub , "build" ) == 0 ) {
384353 if (argc >= 3 && strcmp (argv [2 ], "web" ) == 0 ) {
385- Manifest m ;
386- // Try to load manifest, if fails, use defaults
387- if (!prm_load_manifest (& m )) {
388- strcpy (m .name , "untitled" );
389- strcpy (m .version , "0.1.0" );
390- strcpy (m .entryPoint , (argc >= 4 && argv [3 ][0 ] != '-' ) ? argv [3 ] : "src/main.prox" );
391- }
392-
393354 const char * outDir = NULL ;
394355 for (int i = 2 ; i < argc ; i ++ ) {
395356 if (strcmp (argv [i ], "--output" ) == 0 && i + 1 < argc ) {
396357 outDir = argv [i + 1 ];
397358 break ;
398359 }
399360 }
400-
401361 prm_build_web (& m , outDir );
402362 } else {
403- int releaseMode = (argc >= 3 && strcmp (argv [2 ], "--release" ) == 0 );
404- printf ("[PRM] Building project: %s v%s%s\n" , pname , pversion , releaseMode ? " (release)" : "" );
405- printf ("Compile-only mode not fully supported yet, running instead...\n" );
406- printf ("[PRM] Executing: %s %s\n" , argv [0 ], pentry );
407-
408- int res = -1 ;
409- #ifdef _WIN32
410- res = _spawnl (_P_WAIT , argv [0 ], argv [0 ], pentry , NULL );
411- #else
412- pid_t pid = fork ();
413- if (pid == 0 ) {
414- execl (argv [0 ], argv [0 ], pentry , (char * )NULL );
415- exit (1 );
416- } else if (pid > 0 ) {
417- int status ;
418- waitpid (pid , & status , 0 );
419- if (WIFEXITED (status )) res = WEXITSTATUS (status );
420- }
421- #endif
422-
423- (void )res ;
363+ bool releaseMode = (argc >= 3 && strcmp (argv [2 ], "--release" ) == 0 );
364+ prm_build (& m , releaseMode );
424365 }
425366
426367 } else if (strcmp (sub , "test" ) == 0 ) {
0 commit comments