diff --git a/uppsrc/ide/Core/Core.h b/uppsrc/ide/Core/Core.h index 3969dde9b..b8bf384c3 100644 --- a/uppsrc/ide/Core/Core.h +++ b/uppsrc/ide/Core/Core.h @@ -219,8 +219,6 @@ void SetVar(const String& var, const String& val, bool save = true); String GetCurrentBuildMethod(); String GetCurrentMainPackage(); -int GetHydraThreads(); - String GetAnyFileName(const char *path); String GetAnyFileTitle(const char *path); String CatAnyPath(String path, const char *more); diff --git a/uppsrc/ide/app.tpp/umk_en-us.tpp b/uppsrc/ide/app.tpp/umk_en-us.tpp index dc23ed2bf..11b97633a 100644 --- a/uppsrc/ide/app.tpp/umk_en-us.tpp +++ b/uppsrc/ide/app.tpp/umk_en-us.tpp @@ -18,30 +18,37 @@ topic "UMK - Command line builder"; [s11; [* UMK] (U`+`+ MaKe) is a command line utility to build the U`+`+ program, with U`+`+ assembly/package/build method system.&] [s0; &] -[s0;i224;O9; [*C3 umk ][*C@(0.0.255)3 assembly package build`_method][*C@4;3 -][*C3 `[`-`[][*C@4;3 a][*C3 `]`[][*C@4;3 b][*C3 `]`[][*C@4;3 u][*C3 `]`[][*C@4;3 r][*C3 `]`[][*C@4;3 s -][*C3 `]`[][*C@4;3 S][*C3 `]`[][*C@4;3 v][*C3 `]`[][*C@4;3 m][*C3 `]`[][*C@4;3 d][*C3 `]`[][*C@4;3 M][*C3 `] -`[][*C@4;3 l][*C3 `]`[][*C@4;3 x][*C3 `]`[][*C@4;3 X][*C3 `]`[][%-*C@4;3 H][%-*/C@3;3 n][*C3 `]`]][*C@4;3 -][*C3 `[`+][*C@(0.0.255)3 FLAG][*C3 `[,][*C@(0.0.255)3 FLAG][*C3 `]...`]][*C@4;3 -][*C3 `[][*C@(0.0.255)3 out][*C3 `]]&] +[s0;i224;O9; [*C3 umk ][*C@(0.0.255)3 assembly package ][*C3 `[][*C@(0.0.255)3 build`_method][*C3 `] +][*C@4;3 ][*C3 `[`-`[][*C@4;3 a][*C3 `]`[][*C@4;3 b][*C3 `]`[][*C@4;3 u][*C3 `]`[][*C@4;3 r][*C3 `]`[ +][*C@4;3 s][*C3 `]`[][*C@4;3 S][*C3 `]`[][*C@4;3 v][*C3 `]`[][*C@4;3 m][*C3 `]`[][*C@4;3 d][*C3 `]`[][*C@4;3 M +][*C3 `]`[][*C@4;3 M`=][*/C@3;3 makefile][*C3 `]`[][*C@4;3 l][*C3 `]`[][*C@4;3 x][*C3 `]`[][*C@4;3 X +][*C3 `]`[][%-*C@4;3 H][%-*/C@3;3 n][*C3 `]`]..][*C@4;3 ][*C3 `[`+][*C@(0.0.255)3 FLAG][*C3 `[,][*C@(0.0.255)3 F +LAG][*C3 `]..`]][*C@4;3 ][*C3 `[][*C@(0.0.255)3 out][*C3 `] `[][*C@4;3 !][*C3 +`[][*C@(0.0.255)3 runarg][*C3 `]..`]]&] [s0;3 &] -[s11; [*@(0.0.255) assembly] can be a predefined assembly (in .var file) -which is in Win32 in directory where is located umk.exe or in -POSIX systems in directories [@3 `~], [@3 `~/.upp/umk], [@3 `~/.upp/theide] -or [@3 `~/.upp/theide]. Alternatively, it is a direct set of directories -that represent U`+`+ assembly separated by `',`'.&] +[s11; [*@(0.0.255) assembly] is a direct set of package nest directories +relative to working directory that represent U`+`+ assembly separated +by `',`'. Alternatively it can be a predefined assembly (in .var +file) which is in Win32 in directory where is located umk.exe +or in POSIX systems in directories [@3 .config/u`+`+/umk ]or [@3 .config/u`+`+/theide +] or direct path to .var file.&] [s11; [*@(0.0.255) package ]is the main package (a program to build).&] [s11; [*@(0.0.255) build`_method] is build method that is to be used to build the resulting executable, specified either as name of -build method (which is then searched for in [@3 `~], [@3 `~/.upp/umk], -[@3 `~/.upp/theide] [@3 `~/.upp/theide] directories) or it is a direct -path to the .bm file.&] +build method (which is then searched for in [@3 .config/u`+`+/umk +]or [@3 .config/u`+`+/theide] directories) or it is a direct path +to the .bm file. If not specified, [* CLANG] build method is assumed. +Note that in POSIX, umk automatically creates [* CLANG] and [* GCC] +build methods if they do not exist.&] [s11; [*@(0.0.255) FLAG][* s] are [^topic`:`/`/ide`/app`/Flags`$en`-us^ compilation flags]. If flags are not specified, the first main configuration entry in .upp file is used.&] -[s11; [*@(0.0.255) out] is output file or directory.&] +[s11; [*@(0.0.255) out] overrides output name, file or directory.&] +[s11; [*C@4;3 !] means the the resulting binary should be also executed +after successful build, using optional arguments after [*C@4;3 !] +as its arguments.&] [s0;*C@4;3 &] -[ {{1089:8911h1;@1 [s0; [3 Option]] +[ {{1914:8086h1;@1 [s0; [3 Option]] :: [s0; [3 Description]] ::^@2 [s0; [*C@4;3 a]] ::= [s0; [3 Rebuild all.]] @@ -54,7 +61,7 @@ entry in .upp file is used.&] ::^ [s0; [*C@4;3 m]] ::= [s0; [3 Create a map file.]] ::^ [s0; [*C@4;3 r]] -::= [s0; [3 Release mode]] +::= [s0; [3 Release mode (default is debug mode with full debug).]] ::^ [s0; [*C@4;3 d]] ::= [s0; [3 Debug mode without debug symbols.]] ::^ [s0; [*C@4;3 s]] @@ -64,19 +71,12 @@ entry in .upp file is used.&] ::^ [s0; [*C@4;3 v]] ::= [s0; [3 Be verbose.]] ::^ [s0; [*C@4;3 M]] -::= [s0; [3 Create makefile (to file ][*@4;3 out][3 ).]] -::^ [s0; [*C@4;3 x]] -::= [s0; [3 Export project (to directory ][*@4;3 out][3 ), export only files -used.]] -::^ [s0; [*C@4;3 X]] -::= [s0; [3 Export project (to directory ][*@4;3 out][3 ), export all files.]] -::^ [s0; [*C@4;3 xM]] -::= [s0; [3 Export makefile (to directory ][*@4;3 out][3 ).]] -::^ [s0;%- [*C@4;3 k]] -::= [s0; [3 Do not delete target directory ][*@4;3 out][3 when exporting.]] +::= [s0; [3 Create makefile (to file ][*3 Makefile][3 ).]] +::^ [s0; [%-*C@4;3 M`=][*/C@3;3 makefile]] +::= [s0; [3 Create mafile with given name.]] ::^ [s0;%- [*C@4;3 H][*/C@3;3 n]] -::= [s0; [3 Number of threads used for building (single digit). Default -is number of logical cores available.]]}}&] +::= [s0; [3 Number of threads used for building. Default is number of logical +cores available.]]}}&] [s12; &] [s12; 2. Examples&] [s0;*C@5+92 &] diff --git a/uppsrc/ide/app.tpp/umk_en-us.tppi b/uppsrc/ide/app.tpp/umk_en-us.tppi index 34e7129ca..2432ec3db 100644 --- a/uppsrc/ide/app.tpp/umk_en-us.tppi +++ b/uppsrc/ide/app.tpp/umk_en-us.tppi @@ -1,10 +1,10 @@ TITLE("UMK - Command line builder") COMPRESSED -120,156,173,87,11,79,220,70,16,254,43,43,145,180,16,140,111,95,126,221,169,18,9,144,4,37,36,85,40,106,212,147,19,175,237,189,187,45,126,213,246,17,80,20,126,123,103,215,62,195,17,231,81,169,8,113,190,241,204,55,51,223,60,118,153,43,206,253,153,160,206,236,242,213,219,96,70,209,163,71,196,194,59,204,35,204,119,24,225,212,133,63,132,17,234,80,198,137,79,3,238,51,230,227,105,146,137,166,9,231,25,245,125,99,68,45,186,67,61,135,18,143,251,220,39,204,243,41,216,82,140,41,246,168,67,56,243,169,51,77,101,147,132,115,12,234,12,124,4,46,11,48,193,216,35,4,51,234,97,230,112,66,24,5,8,234,81,130,157,169,44,210,112,254,210,157,105,3,14,6,216,113,49,198,46,160,113,142,1,93,155,113,70,24,166,204,33,129,227,78,99,185,84,69,56,255,58,37,231,135,41,121,120,170,90,153,247,25,9,62,123,114,232,204,8,152,186,150,187,227,129,91,238,128,179,64,103,196,192,140,82,215,9,136,195,33,36,142,233,180,150,255,172,85,45,115, -89,180,61,130,34,132,146,89,76,188,25,132,112,123,123,107,19,142,59,166,60,136,133,96,136,155,18,144,65,30,30,113,2,28,56,62,241,49,243,56,117,60,72,189,18,181,200,251,76,98,78,103,125,30,190,229,239,184,196,5,70,177,15,241,59,1,0,96,72,2,62,129,72,7,126,153,63,109,123,99,109,167,141,2,43,216,1,146,152,131,189,0,123,220,115,56,100,66,137,75,128,72,172,243,135,50,76,139,178,206,69,22,206,133,207,102,79,222,185,186,13,176,38,13,120,194,196,165,28,2,195,64,52,7,175,196,247,57,241,28,159,5,174,59,77,68,213,170,178,232,188,137,222,35,33,22,33,59,28,234,201,52,115,158,3,132,17,227,25,7,132,114,32,29,59,142,55,109,229,53,208,21,107,143,92,91,81,109,133,61,223,229,4,252,113,40,15,88,128,95,48,32,240,76,28,207,245,192,74,181,153,12,231,218,143,142,16,255,224,103,122,44,23,98,157,129,163,207,31,191,60,62,121,115,112,113,142,230,13,193,51,52,223,39,62,71,23,103,175,80,116,128,142,202,60,23, -69,138,50,85,72,20,175,85,150,202,58,252,37,4,77,58,67,196,70,167,69,91,151,233,58,209,201,26,49,1,128,39,218,58,68,187,23,209,126,180,143,206,196,43,185,135,84,131,4,74,238,163,173,91,149,169,246,6,181,101,7,140,218,149,68,157,73,85,151,75,168,149,133,62,169,118,213,203,96,174,100,30,103,55,147,74,36,151,98,41,39,157,81,46,219,85,153,162,230,166,129,54,181,117,8,144,66,247,161,40,229,186,67,32,160,35,134,214,249,37,10,225,233,112,23,219,216,134,38,217,99,3,38,234,49,187,64,162,143,29,168,209,230,51,134,140,29,67,209,60,58,136,230,131,84,244,210,240,158,44,30,145,213,35,178,102,68,118,62,34,187,26,145,229,35,178,116,68,118,54,34,203,70,100,215,35,178,247,247,101,143,15,122,233,75,243,60,57,58,100,240,165,24,84,194,17,162,246,31,82,253,252,245,211,23,155,183,214,119,94,134,182,109,143,33,62,52,41,215,237,198,34,236,202,205,208,93,3,222,105,14,53,14,81,34,10,20,75,104,195,170,150,169,92,64,15, -166,119,29,176,171,10,100,95,137,26,45,84,6,237,250,105,165,146,149,110,90,16,255,169,10,70,245,67,10,187,44,105,203,250,6,94,203,90,234,215,89,153,136,22,112,160,187,108,121,45,81,89,107,197,223,223,158,159,190,239,123,178,185,111,169,100,131,230,135,16,244,109,104,245,15,19,123,93,85,19,176,127,32,129,105,80,169,12,53,226,136,216,70,79,179,86,214,133,104,213,149,204,110,44,164,218,110,196,58,79,168,145,45,42,23,91,126,219,149,104,81,45,33,249,6,246,241,131,169,2,3,189,30,117,42,241,13,138,126,181,162,95,237,81,58,55,147,18,170,198,12,108,46,32,189,141,112,87,108,70,119,152,234,189,113,152,237,65,211,161,111,141,179,137,85,123,40,117,197,214,13,132,181,181,38,32,7,216,93,170,88,34,32,61,89,183,34,206,164,133,154,74,38,106,161,64,89,194,222,144,53,100,135,10,145,75,205,196,22,252,238,80,94,80,43,32,119,81,39,43,48,91,116,229,251,143,21,26,147,221,35,126,207,52,197,118,121,42,1,123,13,50,210,185,216,113, -110,154,110,156,168,126,52,96,99,32,1,45,55,255,208,150,149,74,162,105,52,137,38,224,41,154,136,170,138,38,207,51,177,108,162,71,178,136,14,214,205,7,189,103,43,149,9,189,148,209,66,191,130,126,57,93,116,143,6,166,40,219,59,182,44,19,198,66,213,77,219,149,51,41,139,133,90,174,235,14,0,154,5,58,94,143,7,36,104,34,213,169,232,154,140,71,172,39,83,107,192,103,181,110,59,3,96,96,24,158,126,73,247,3,14,95,208,231,207,4,251,193,212,15,8,89,145,217,33,65,102,137,207,25,122,219,29,162,225,116,58,136,142,225,174,84,171,65,254,225,144,246,175,134,173,12,210,223,6,245,119,178,43,188,200,50,219,232,111,107,199,219,218,23,141,68,207,94,159,254,241,215,152,110,182,173,123,14,121,193,24,229,101,42,199,180,243,109,237,163,90,194,112,65,3,228,162,227,112,204,166,126,24,123,38,5,68,164,93,140,104,167,219,218,199,144,233,210,232,154,83,19,216,71,169,17,53,55,121,92,102,205,152,195,230,235,244,155,21,244,135,62,161,227,90,232, -238,29,51,59,255,177,25,210,199,124,79,125,243,83,160,87,219,160,207,36,186,146,117,92,54,163,76,157,141,178,155,139,75,105,218,109,23,70,203,60,192,228,24,125,115,90,48,180,55,134,117,189,141,117,114,93,149,117,171,247,216,223,122,82,53,212,221,222,127,136,103,193,254,49,234,101,1,59,84,187,236,39,99,196,207,251,255,195,15,244,113,231,102,52,147,179,81,23,91,180,124,219,199,61,196,199,7,3,230,229,131,46,43,205,238,72,161,53,129,240,86,212,75,56,104,190,137,169,207,201,162,15,29,150,245,184,7,184,85,220,221,41,182,156,189,89,231,49,108,113,216,222,237,10,42,156,118,220,154,45,109,90,75,239,255,221,6,254,66,110,169,90,170,118,207,70,253,181,86,47,160,98,48,207,202,165,74,68,6,139,173,214,173,121,37,96,57,198,102,6,191,124,217,92,102,55,159,212,6,222,68,94,1,199,195,162,114,246,3,218,95,42,77,216,230,187,190,80,194,70,108,234,4,193,34,70,47,142,142,224,194,28,215,40,218,127,113,113,106,157,159,159,80,235,252,229, -211,119,39,199,250,112,232,207,133,31,96,76,214,77,61,49,195,50,209,135,9,64,234,195,225,39,81,191,23,167,236,51,66,207,202,60,110,250,88,69,188,65,29,0,99,253,250,91,81,78,54,40,150,57,15,187,176,59,64,48,29,130,173,175,190,134,133,127,63,123,208,48,252,23,38,108,133,136, +120,156,157,87,137,110,219,72,18,253,149,94,56,217,177,99,89,234,131,167,132,1,156,216,57,140,92,139,120,141,29,172,192,12,155,100,75,34,204,67,195,38,29,27,65,242,237,83,213,164,104,209,230,38,193,26,134,69,21,171,94,85,189,58,186,189,76,45,203,91,72,110,47,174,223,126,244,23,156,60,121,194,38,244,64,184,76,120,182,96,22,119,224,15,19,140,219,92,88,204,227,190,229,9,225,209,121,156,73,173,131,101,198,61,207,24,241,9,63,224,174,205,153,107,121,150,199,132,235,113,176,229,148,114,234,114,155,89,194,227,246,60,81,58,14,150,20,212,5,248,240,29,225,83,70,169,203,24,21,220,165,194,182,24,19,28,32,184,203,25,181,231,170,72,130,229,27,103,129,6,22,24,80,219,161,148,58,128,102,89,20,208,209,204,18,76,80,46,108,230,219,206,60,82,235,180,8,150,143,83,178,127,154,146,75,231,105,173,242,46,35,105,45,158,157,218,11,6,166,206,196,57,112,193,173,101,131,51,31,51,18,96,198,185,99,251,204,182,32,36,139,242,121,165,254,106, +210,74,229,170,168,59,132,148,49,206,22,17,115,23,16,194,247,239,223,167,204,162,45,83,46,196,194,40,196,205,25,200,32,15,151,217,62,245,109,143,121,84,184,22,183,93,72,125,43,43,153,119,153,68,22,95,116,121,120,19,239,192,97,14,48,74,61,136,223,246,1,128,66,18,240,9,68,218,240,43,188,121,221,25,163,29,26,249,19,255,0,72,18,54,117,125,234,90,174,109,65,38,156,57,12,136,164,152,63,148,97,94,148,85,46,179,96,41,61,177,120,246,201,193,54,160,72,26,240,68,153,195,45,8,140,2,209,22,120,101,158,103,49,215,246,132,239,56,243,88,110,235,180,44,90,111,178,243,200,216,132,177,3,11,234,41,144,57,215,6,194,152,241,76,125,198,45,32,157,218,182,59,175,213,45,208,21,161,71,11,173,56,90,81,215,115,44,6,254,44,40,15,88,128,95,48,96,240,204,108,215,113,193,42,173,51,21,44,209,15,70,72,127,242,51,63,87,43,217,100,224,232,235,159,223,158,190,252,112,114,117,73,150,154,209,5,89,30,51,207,34,87,239,223,146,240, +132,156,149,121,46,139,132,100,105,161,72,212,164,89,162,170,224,159,1,104,242,5,97,83,114,81,212,85,153,52,49,38,107,196,12,0,158,161,117,64,14,175,194,227,240,152,188,151,111,213,17,73,53,145,36,222,71,107,234,52,75,235,59,82,151,45,48,169,55,138,180,38,219,170,92,67,173,38,228,75,90,111,58,25,204,149,202,163,236,110,182,149,241,181,92,171,89,107,148,171,122,83,38,68,223,105,104,211,41,134,0,41,180,31,41,231,22,118,8,4,116,38,72,147,95,147,0,158,78,15,233,148,78,161,73,142,68,143,73,58,76,163,32,72,184,124,168,104,124,133,127,182,206,58,165,192,40,89,11,65,122,179,240,164,51,69,169,220,233,237,201,162,17,89,51,34,171,70,100,122,68,118,57,34,187,25,145,229,35,178,100,68,246,126,76,22,254,14,207,179,179,83,129,64,242,90,173,82,108,180,71,122,217,136,236,118,68,246,199,190,236,233,73,39,125,99,158,59,47,69,175,18,76,167,35,52,31,63,172,207,171,119,207,95,239,222,78,126,240,18,224,198,234,246,208,162, +108,234,157,1,217,139,252,31,173,112,196,160,106,10,89,173,7,78,218,30,20,228,126,42,238,13,250,198,11,218,185,72,96,73,198,53,209,170,38,229,170,111,198,66,233,186,123,85,86,169,210,164,82,153,172,211,27,133,35,243,165,172,174,211,98,221,191,135,57,218,200,26,84,182,149,210,176,111,31,76,13,96,227,250,171,85,66,162,59,18,254,54,9,127,155,146,231,89,173,170,194,64,130,70,90,147,88,22,36,82,16,16,128,36,80,231,2,212,123,132,195,180,32,211,27,89,17,172,255,17,249,178,73,227,13,134,15,226,255,164,133,224,248,112,31,205,151,141,170,20,190,206,202,216,184,133,249,155,170,91,69,202,10,21,255,245,241,242,226,143,110,106,245,190,37,230,185,60,21,100,26,151,197,42,93,207,26,76,99,102,134,23,44,31,191,129,165,145,38,42,64,216,142,197,173,132,157,1,12,245,177,78,71,75,208,143,60,196,136,155,39,151,16,197,78,120,40,119,59,168,95,79,71,227,48,195,205,128,9,15,246,146,41,10,122,40,145,216,70,3,17,131,125,7,197,130, +37,140,133,4,110,226,166,150,81,166,38,68,111,85,156,174,82,80,86,176,0,85,5,69,32,133,204,21,118,199,0,254,176,175,2,168,21,80,100,89,197,27,48,91,181,44,255,63,68,238,21,226,200,20,171,30,244,232,142,93,12,126,26,229,45,193,228,98,69,138,178,190,143,123,130,135,192,217,187,231,31,94,7,195,128,17,74,235,38,87,201,148,124,40,107,213,17,212,53,196,196,108,105,217,212,101,14,93,25,203,12,218,46,174,20,244,143,222,3,196,19,4,190,189,62,59,27,130,67,31,173,48,174,59,146,148,38,28,117,155,234,122,188,108,221,78,128,165,74,36,244,233,242,115,93,110,211,56,156,135,179,112,6,52,132,51,185,221,134,179,87,153,92,235,240,137,42,194,147,70,127,198,227,107,155,226,8,150,5,89,225,171,192,100,110,30,13,204,3,14,144,163,85,90,193,20,155,230,106,233,110,170,22,0,102,20,198,4,103,170,217,110,13,141,72,14,118,200,120,196,184,147,72,121,163,170,10,226,211,248,117,219,212,166,43,38,173,117,63,1,48,126,123,16,187,213, +5,36,201,162,109,245,97,227,69,41,236,46,88,16,155,178,1,42,113,252,51,93,118,237,136,243,191,130,37,65,116,19,199,74,235,85,147,181,148,67,165,52,26,151,230,154,35,51,72,127,221,224,61,79,119,6,123,142,161,121,83,148,239,52,186,83,186,83,128,47,228,235,87,230,51,107,238,81,207,217,176,197,41,35,230,20,95,10,242,177,189,69,5,243,121,47,58,135,203,114,149,246,242,207,167,188,123,213,31,187,32,253,189,87,255,164,218,22,129,94,154,26,253,161,118,52,212,190,210,138,188,120,119,241,239,255,142,233,102,67,221,75,32,29,246,108,94,38,106,76,187,121,140,92,3,5,170,222,171,210,136,89,62,52,59,51,221,15,227,151,203,182,73,198,108,170,135,41,103,74,130,59,140,140,28,38,237,61,15,155,43,1,46,214,173,216,92,172,160,154,89,43,60,26,131,77,134,176,231,67,107,104,192,14,80,223,229,81,153,233,49,8,253,152,4,189,129,73,193,43,96,84,73,92,50,99,102,151,63,55,51,91,160,43,173,254,37,208,155,33,232,11,69,96,152,162, +82,143,82,250,126,180,12,187,219,15,57,132,13,104,30,96,135,128,114,127,41,18,100,200,100,127,189,25,191,68,141,251,48,192,166,64,107,56,153,11,51,227,123,168,79,79,250,40,223,220,99,22,67,176,15,77,30,193,20,150,184,16,1,55,105,55,139,57,23,12,105,48,187,83,114,126,223,26,69,175,159,149,107,220,188,176,173,42,100,249,70,194,198,139,76,223,125,251,182,187,248,239,62,249,148,188,188,149,249,54,83,186,159,105,251,216,231,221,5,220,196,105,190,227,90,135,53,167,171,152,192,246,194,213,13,255,92,68,21,9,143,95,95,93,76,46,47,95,242,201,229,155,231,159,94,158,147,240,251,238,36,250,9,198,172,209,213,204,212,125,6,210,25,64,226,113,244,139,168,63,138,83,117,25,145,23,101,30,233,46,86,25,237,80,123,192,8,95,255,175,40,103,59,148,9,126,233,194,110,1,193,180,15,182,186,121,12,11,255,170,119,160,65,240,55,46,145,234,251, diff --git a/uppsrc/umk/umake.cpp b/uppsrc/umk/umake.cpp index 68d8563d7..297d67122 100644 --- a/uppsrc/umk/umake.cpp +++ b/uppsrc/umk/umake.cpp @@ -4,6 +4,8 @@ bool SilentMode; String GetUmkFile(const char *fn) { + if(DirectoryExists(fn) || *fn == '.') + return Null; String h = ConfigFile(fn); if(FileExists(h)) return h; @@ -48,21 +50,6 @@ void Puts(const char *s) Cout() << s; } -int CommaSpace(int c) -{ - return c == ',' ? ' ' : c; -} - -int IsCommaOrColon(int c) -{ - return c == ':' || c == ',' ? c : 0; -} - -int GetHydraThreads() -{ - return CPU_Cores(); -} - String GetAndroidSDKPath() { return String(); @@ -82,24 +69,100 @@ CONSOLE_APP_MAIN TheIde(&ide); ide.console.SetSlots(CPU_Cores()); ide.console.console = true; - const Vector& arg = CommandLine(); - if(arg.GetCount() >= 3) { - for(int i = 3; i < arg.GetCount(); i++) - if(arg[i][0] == '-') { - String x = arg[i]; - for(int i = 1; i < x.GetCount(); i++) { - if(x[i] == 'l') - SilentMode = true; - if(x[i] == 'v') - ide.console.verbosebuild = true; + + ide.debug.def.blitz = ide.release.def.blitz = 0; + ide.debug.def.debug = 2; + ide.release.def.debug = 0; + ide.debug.package.Clear(); + ide.release.package.Clear(); + ide.debug.linkmode = ide.release.linkmode = 0; + ide.release.createmap = ide.debug.createmap = false; + ide.targetmode = 0; + ide.use_target = false; + ide.makefile_svn_revision = false; + bool clean = false; + bool makefile = false; + bool deletedir = true; + int exporting = 0; + bool run = false; + String mkf; + + Vector param, runargs; + + const Vector& args = CommandLine(); + for(int i = 0; i < args.GetCount(); i++) { + String a = args[i]; + if(*a == '-') { + for(const char *s = ~a + 1; *s; s++) + switch(*s) { + case 'a': clean = true; break; + case 'r': ide.targetmode = 1; break; + case 'm': ide.release.createmap = ide.debug.createmap = true; break; + case 'b': ide.release.def.blitz = ide.debug.def.blitz = 1; break; + case 's': ide.debug.linkmode = ide.release.linkmode = 1; break; + case 'd': ide.debug.def.debug = 0; break; + case 'S': ide.debug.linkmode = ide.release.linkmode = 2; break; + case 'v': ide.console.verbosebuild = true; break; + case 'l': SilentMode = true; break; + case 'x': exporting = 1; break; + case 'X': exporting = 2; break; + case 'k': deletedir = false; break; + case 'u': ide.use_target = true; break; + case 'M': { + makefile = true; + if(s[1] == '=') { + mkf = NormalizePath(s + 2); + PutVerbose("Generating Makefile: " + mkf); + goto endopt; + } + else + PutVerbose("Generating Makefile"); + break; } - } - String v = GetUmkFile(arg[0] + ".var"); - if(*arg[0] == '.' || IsNull(v) || !FileExists(v)) { + case 'H': { + int n = 0; + while(IsDigit(s[1])) { + n = 10 * n + s[1] - '0'; + s++; + } + n = minmax(n, 1, 32); + PutVerbose("Hydra threads: " + AsString(n)); + ide.console.SetSlots(n); + break; + } + default: + SilentMode = false; + Puts("Invalid build option(s)"); + SetExitCode(3); + return; + } + endopt:; + } + else + if(*a == '+') + ide.mainconfigparam = Filter(~a + 1, [](int c) { return c == ',' ? ' ' : c; }); + else + if(*a == '!') { + run = true; + for(int j = i + 1; j < args.GetCount(); j++) + runargs.Add(args[j]); + if(runargs) + PutVerbose("Set to execute the result with args: " << Join(runargs, " ")); + else + PutVerbose("Set to execute the result"); + break; + } + else + param.Add(a); + } + + if(param.GetCount() >= 2) { + String v = GetUmkFile(param[0] + ".var"); + if(IsNull(v)) { #ifdef PLATFORM_POSIX - Vector h = Split(arg[0], IsCommaOrColon); + Vector h = Split(param[0], [](int c) { return c == ':' || c == ',' ? c : 0; }); #else - Vector h = Split(arg[0], ','); + Vector h = Split(param[0], ','); #endif for(int i = 0; i < h.GetCount(); i++) h[i] = GetFullPath(TrimBoth(h[i])); @@ -120,14 +183,14 @@ CONSOLE_APP_MAIN PutVerbose("Assembly: " + GetVar("UPP")); } PutVerbose("Output directory: " + GetVar("OUTPUT")); - v = SourcePath(arg[1], GetFileTitle(arg[1]) + ".upp"); + v = SourcePath(param[1], GetFileTitle(param[1]) + ".upp"); PutVerbose("Main package: " + v); if(!FileExists(v)) { Puts("Package does not exist\n"); SetExitCode(2); return; } - ide.main = arg[1]; + ide.main = param[1]; ide.wspc.Scan(ide.main); const Workspace& wspc = ide.IdeWorkspace(); if(!wspc.GetCount()) { @@ -138,7 +201,7 @@ CONSOLE_APP_MAIN const Array& f = wspc.GetPackage(0).config; if(f.GetCount()) ide.mainconfigparam = f[0].param; - String m = arg[2]; + String m = 2 < param.GetCount() ? param[2] : "CLANG"; String bp = GetBuildMethodPath(m); PutVerbose("Build method: " + bp); if(bp.GetCount() == 0) { @@ -147,90 +210,14 @@ CONSOLE_APP_MAIN SetExitCode(3); return; } - ide.method = m; - ide.debug.def.blitz = ide.release.def.blitz = 0; - ide.debug.def.debug = 2; - ide.release.def.debug = 0; - ide.debug.package.Clear(); - ide.release.package.Clear(); - ide.debug.linkmode = ide.release.linkmode = 0; - ide.release.createmap = ide.debug.createmap = false; - ide.targetmode = 0; - ide.use_target = false; - ide.makefile_svn_revision = false; - bool clean = false; - bool makefile = false; - bool deletedir = true; - int exporting = 0; - String mkf; - for(int i = 3; i < arg.GetCount(); i++) - if(arg[i][0] == '+' || arg[i][0] == '>') - ide.mainconfigparam = Filter(~arg[i] + 1, CommaSpace); - else - if(arg[i][0] == '-') { - String x = arg[i]; - for(int i = 1; i < x.GetCount(); i++) - switch(x[i]) { - case 'a': - clean = true; - break; - case 'r': - ide.targetmode = 1; - break; - case 'm': - ide.release.createmap = ide.debug.createmap = true; - break; - case 'b': - ide.release.def.blitz = ide.debug.def.blitz = 1; - break; - case 's': - ide.debug.linkmode = ide.release.linkmode = 1; - break; - case 'd': - ide.debug.def.debug = 0; - break; - case 'S': - ide.debug.linkmode = ide.release.linkmode = 2; - break; - case 'M': - makefile = true; - break; - case 'v': - ide.console.verbosebuild = true; - break; - case 'l': - break; - case 'x': - exporting = 1; - break; - case 'X': - exporting = 2; - break; - case 'k': - deletedir = false; - break; - case 'H': - if(i + 1 < x.GetCount() && x[i + 1] >= '1' && x[i + 1] <= '9') - ide.console.SetSlots(x[++i] - '0'); - else - ide.console.SetSlots(1); - break; - case 'u': - ide.use_target = true; - break; - default: - SilentMode = false; - Puts("Invalid build option(s)"); - SetExitCode(3); - return; - } - } - else { - ide.debug.target_override = ide.release.target_override = true; - ide.debug.target = ide.release.target = NormalizePath(arg[i]); - PutVerbose("Target override: " << ide.debug.target); - } + if(3 < param.GetCount()) { + ide.debug.target_override = ide.release.target_override = true; + ide.debug.target = ide.release.target = NormalizePath(param[3]); + PutVerbose("Target override: " << ide.debug.target); + } + + ide.method = m; if(clean) ide.Clean(); @@ -249,13 +236,29 @@ CONSOLE_APP_MAIN SetExitCode(0); } else - if(ide.Build()) + if(ide.Build()) { SetExitCode(0); + if(run) { + Vector args; + Vector> buffer; + auto Add = [&](const String& s) { + auto& b = buffer.Add(); + b.Alloc(s.GetCount() + 1); + memcpy(b, s, s.GetCount() + 1); + args.Add(b); + }; + Add(ide.target); + for(const String& s : runargs) + Add(s); + args.Add(NULL); + SetExitCode(execv(ide.target, args.begin())); + } + } else SetExitCode(1); } else - Puts("Usage: umk assembly main_package build_method -options [+flags] [output]\n\n" + Puts("Usage: [-options] umk assembly main_package [build_method] [+flags] [output]\n\n" "Examples: umk examples Bombs GCC -ab +GUI,SHARED ~/bombs\n" " umk examples,uppsrc Bombs ~/GCC.bm -rv +GUI,SHARED ~/bin\n\n" "See http://www.ultimatepp.org/app$ide$umk$en-us.html for details\n");