Ooops
March 01, 2021, 10:25:59 PM

Author Topic: [bmx] mcc (module cleaner) by plash [ 1+ years ago ]  (Read 570 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bmx] mcc (module cleaner) by plash [ 1+ years ago ]
« on: June 29, 2017, 12:28:41 AM »
Title : mcc (module cleaner)
Author : plash
Posted : 1+ years ago

Description : mcc deletes the compiled modules format ('.a' and '.i'), as well as '.bmx' folders in a module folder.

I built this for module releases (give it the mod folder and you have less space in your download), and for backing-up my source.

Commands:
-help (list commands, or 'help $COMMAND$' to get information on a command)
-dir (set the directory to be searched, if this is not used mcc will ask for a folder)
-recursive [or -r] (do recursive search, can be 'on', 'off', 'true', 'false' etc)

COMPILING NOTES: Remember to turn on command-line build! (for MaxIDE users, that is GUI mode off)

<a href="http://hosted.filefront.com/poqls/2336671" target="_blank">Binary and source packages[/url]
Current Version: 0.79


Code :
Code: BlitzMax
  1. Rem
  2.        
  3.         MCC is public-domain
  4.        
  5.         CHANGES (v0.79)
  6.                 Changed file checking routine and added support for threaded compilations ('.mt')
  7.                
  8.         CHANGES (v0.78)
  9.                 Inital, public release
  10.        
  11.         Copyright Tim Howard 2008 (aka Plash)
  12.        
  13. End Rem
  14.  
  15. SuperStrict
  16.  
  17.  
  18. Framework brl.standardio
  19.  
  20. Import brl.system
  21.  
  22. 'Take away the directory
  23. Global appargslen:Int = AppArgs.Length - 1
  24.  
  25. Global VERSION:String = "0.79"
  26. Global prop_dir:String = "", prop_recursive:Int = True
  27.  
  28. Global plats:String[] = ["win32", "linux", "macos"]
  29.  
  30. Print("MCC -- version " + VERSION)
  31.  
  32. 'Internally, blitzmax sends its directory to itself, we need to skip over this line
  33. If appargslen > 0 'AppArgs.Length > 1
  34.        
  35.         For Local i:Int = 1 To appargslen
  36.           Local a:String = AppArgs[i].ToLower()
  37.                
  38.                 Select(a)
  39.                         Case "-dir", "/dir"
  40.                                 If (appargslen - (i - 1)) >= 2
  41.                                   Local b:String = AppArgs[i + 1]
  42.                                        
  43.                                         Select(b.ToLower())
  44.                                                 Case "/?"
  45.                                                         Print("USAGE:")
  46.                                                                 Print("~t-dir ~q/directory/path~q")
  47.                                                                 Print()
  48.                                                                
  49.                                                         Print("DESCRIPTION:")
  50.                                                                 Print("~tSet the path to remove files from (will recursively search all")
  51.                                                                 Print("~tchild directories if 'recursive' is turned on)")
  52.                                                        
  53.                                                 Default
  54.                                                        
  55.                                                         If (appargslen - (i - 1)) >= 2
  56.                                                           Local tmp:String
  57.                                                                
  58.                                                                 tmp = AppArgs[i + 1]
  59.                                                                
  60.                                                                 If tmp[0] = 34 And tmp[tmp.Length - 1] = 34
  61.                                                                        
  62.                                                                         prop_dir = tmp[1..tmp.Length - 1]
  63.                                                                        
  64.                                                                 Else
  65.                                                                        
  66.                                                                         prop_dir = tmp
  67.                                                                        
  68.                                                                 End If
  69.                                                                
  70.                                                                 prop_dir = prop_dir.Replace("", "/")
  71.                                                                 If prop_dir[prop_dir.Length - 1] = 47 Then prop_dir = prop_dir[0..prop_dir.Length - 1]
  72.                                                                
  73.                                                                 i:+1
  74.                                                         Else
  75.                                                                
  76.                                                                 InvalidNOps(a + " " + b)
  77.                                                                
  78.                                                         End If
  79.                                                        
  80.                                         End Select
  81.                                        
  82.                                 Else
  83.                                        
  84.                                         InvalidNOps(a)
  85.                                        
  86.                                 End If
  87.                                
  88.                         Case "-recursive", "-r", "/recursive", "/r"
  89.                                 If (appargslen - (i - 1)) >= 2
  90.                                   Local b:String = AppArgs[i + 1]
  91.                                        
  92.                                         Select(b.ToLower())
  93.                                                 Case "/?"
  94.                                                         Print("USAGE:")
  95.                                                                 Print("~t-recursive 1, true, on/0, false, off")
  96.                                                                 Print()
  97.                                                                
  98.                                                         Print("DESCRIPTION:")
  99.                                                                 Print("~tIf set to true, the directory ('-help dir') will be recursively searched")
  100.                                                        
  101.                                                 Default
  102.                                                        
  103.                                                         If (appargslen - (i - 1)) >= 2
  104.                                                           Local tmp:String
  105.                                                                
  106.                                                                 tmp = AppArgs[i + 1].ToLower()
  107.                                                                
  108.                                                                 Select(tmp)
  109.                                                                         Case "1", "true", "on"
  110.                                                                                 prop_recursive = True
  111.                                                                                
  112.                                                                         Case "0", "false", "off"
  113.                                                                                 prop_recursive = False
  114.                                                                                
  115.                                                                 End Select
  116.                                                                
  117.                                                                 i:+1
  118.                                                         Else
  119.                                                                
  120.                                                                 InvalidNOps(a + " " + b)
  121.                                                                
  122.                                                         End If
  123.                                                        
  124.                                         End Select
  125.                                        
  126.                                 Else
  127.                                        
  128.                                         InvalidNOps(a)
  129.                                        
  130.                                 End If
  131.                                
  132.                         Case "-help", "/help"
  133.                                 If (appargslen - (i - 1)) >= 2
  134.                                   Local b:String = AppArgs[i + 1]
  135.                                        
  136.                                         Select(b.ToLower())
  137.                                                 Case "dir"
  138.                                                         Print("USAGE:")
  139.                                                                 Print("~t-dir ~q/directory/path~q")
  140.                                                                 Print()
  141.                                                                
  142.                                                         Print("DESCRIPTION:")
  143.                                                                 Print("~tSet the path to remove files from (will recursively search all")
  144.                                                                 Print("~tchild directories if 'recursive' is turned on)")
  145.                                                        
  146.                                                 Case "recursive", "r"
  147.                                                         Print("USAGE:")
  148.                                                                 Print("~t-recursive 1, true, on/0, false, off")
  149.                                                                 Print()
  150.                                                                
  151.                                                         Print("DESCRIPTION:")
  152.                                                                 Print("~tIf set to true, the directory ('-help dir') will be recursively searched")
  153.                                                        
  154.                                                 Case "help"
  155.                                                         Print("DESCRIPTION:")
  156.                                                                 Print("~tGives informa-- wait a second.. haha! funny, very funny.")
  157.                                                        
  158.                                                 Case "/?"
  159.                                                         Print("USAGE:")
  160.                                                                 Print("~t-help $COMMAND$ ~t~t(for help on a command)")
  161.                                                                 Print("~t-help ~t~t(for a list of commands)")
  162.                                                                 Print()
  163.                                                                
  164.                                                         Print("DESCRIPTION:")
  165.                                                                 Print("~tGives information on commands")
  166.                                                        
  167.                                                 Default
  168.                                                         Print("Unknown command, type '-help' for a list of commands")
  169.                                                        
  170.                                         End Select
  171.                                        
  172.                                 Else
  173.                                        
  174.                                         Print("LIST OF PROPERTIES/COMMANDS:")
  175.                                                 Print("~t-dir ~t~t(type '-dir /?', or '-help dir' for more information)")
  176.                                                 Print("~t-recursive ~t(type '-recursive /?', or '-help recursive' for more information)")
  177.                                                 Print()
  178.                                                 Print("~t-help ~t~t(type '-help' for this list, or '-help $COMMAND$' for command information)")
  179.                                                
  180.                                 End If
  181.                                
  182.                                 End
  183.                                
  184.                         Default
  185.                                 Print("Unknown command: " + a + " ~t~t(type '-help' for a list of commands)")
  186.                                 End
  187.                                
  188.                 End Select
  189.                
  190.         Next
  191.        
  192. Else
  193.        
  194.         RQDir()
  195.        
  196. End If
  197.  
  198. If prop_dir = Null
  199.        
  200.         RQDir()
  201.        
  202. End If
  203.  
  204. If FileType(prop_dir) = FILETYPE_DIR
  205.        
  206.         Print("Removing 'win32', 'macos', 'linux' module compilations, and '.bmx' folders from ~q" + prop_dir + "/~q")
  207.         DoModRemove()
  208.        
  209. Else
  210.        
  211.         Print("The path, ~q" + prop_dir + "~q, does not exist (or it is a file, and not a directory)")
  212.         End
  213.        
  214. End If
  215.  
  216.  
  217. ''
  218. Function DoModRemove()
  219.        
  220.         prop_dir:+"/"
  221.        
  222.         DoFolder(prop_dir, prop_recursive)
  223.        
  224. End Function
  225.  
  226. Function DoFolder(path:String, orr_recursive:Int)
  227.   Local dir:Int, file:String
  228.        
  229.         dir = ReadDir(path)
  230.        
  231.         Repeat
  232.                
  233.                 'No NextDir function :(
  234.                 file = NextFile(dir)
  235.                
  236.                 If file = "" Then Exit
  237.                 If file <> "." And file <> ".." Then
  238.                        
  239.                         Select(FileType(path + file))
  240.                                 Case FILETYPE_FILE
  241.                                        
  242.                                         If file[file.Length - 1] = 97 Or file[file.Length - 1] = 105
  243.                                                 If IsFileBad(file, 1)
  244.                                                        
  245.                                                         'Print(".." + MinimizePath(path) + file)
  246.                                                         RemoveFile(path + file)
  247.                                                        
  248.                                                 Else
  249.                                                        
  250.                                                         If IsFileBad(file, 2)
  251.                                                                
  252.                                                                 'Print(".." + MinimizePath(path) + file)
  253.                                                                 RemoveFile(path + file)
  254.                                                                
  255.                                                         End If
  256.                                                        
  257.                                                 End If
  258.                                         End If
  259.                                        
  260.                                 Case FILETYPE_DIR
  261.                                        
  262.                                         'Print("dd: ~q" + file + "~q")
  263.                                         If file.ToLower() = ".bmx"
  264.                                                
  265.                                                 'Print(".." + MinimizePath(path) + file)
  266.                                                 DeleteDir(path + file, True)
  267.                                                
  268.                                         Else If orr_recursive = True And file[file.Length - 4..file.Length].ToLower() = ".mod"
  269.                                                
  270.                                                 DoFolder(path + file + "/", True)
  271.                                                
  272.                                         End If
  273.                                        
  274.                         End Select
  275.                        
  276.                 EndIf
  277.                
  278.         Forever
  279.        
  280.         CloseDir(dir)
  281.        
  282. End Function
  283.  
  284. Function IsFileBad:Int(file:String, _type:Int)
  285.   Local fend:String, fendt:String
  286.        
  287.         If _type = 1
  288.                
  289.                 fend = file[file.Length - 20..file.Length].ToLower()
  290.                 fendt = file[file.Length - 23..file.Length].ToLower()
  291.                
  292.                 For Local i:Int = 0 To 2
  293.                         If fend = ".release." + plats[i] + ".x86.a" Or fend = ".release." + plats[i] + ".x86.i"
  294.                                
  295.                                 Return(True)
  296.                                
  297.                         Else If fendt = ".release.mt." + plats[i] + ".x86.a" Or fendt = ".release.mt." + plats[i] + ".x86.i"
  298.                                
  299.                                 Return(True)
  300.                                
  301.                         End If
  302.                 Next
  303.                
  304.         Else If _type = 2
  305.                
  306.                 fend = file[file.Length - 18..file.Length].ToLower()
  307.                 fendt = file[file.Length - 21..file.Length].ToLower()
  308.                
  309.                 For Local i:Int = 0 To 2
  310.                        
  311.                         If fend = ".debug." + plats[i] + ".x86.a" Or fend = ".debug." + plats[i] + ".x86.i"
  312.                                
  313.                                 Return(True)
  314.                                
  315.                         Else If fendt = ".debug.mt." + plats[i] + ".x86.a" Or fendt = ".debug.mt." + plats[i] + ".x86.i"
  316.                                
  317.                                 Return(True)
  318.                                
  319.                         End If
  320.                                
  321.                 Next
  322.                
  323.         End If
  324.        
  325.         Return(False)
  326.        
  327. End Function
  328.  
  329. Function RemoveFile(path:String)
  330.        
  331.         Print(".." + MinimizePath(path))
  332.         DeleteFile(path)
  333.        
  334. End Function
  335.  
  336. Function MinimizePath:String(path:String)
  337.        
  338.   Local ind:Int, lind:Int = -1
  339.        
  340.         Repeat
  341.                 ind = path.Find("/", ind + 1)
  342.                
  343.                 If ind > -1
  344.                        
  345.                         If path.Find("/", ind + 1)= -1 Then Exit
  346.                        
  347.                 Else
  348.                         Exit
  349.                 End If
  350.                
  351.                 lind = ind
  352.         Forever
  353.        
  354.         Return(path[lind..path.Length])
  355.        
  356. End Function
  357.  
  358.  
  359. Function RQDir()
  360.        
  361.         prop_dir = RequestDir("Select path for mcc", CurrentDir())
  362.        
  363.         If prop_dir = Null
  364.                
  365.                 Print("No directory selected (cancelled)")
  366.                 End
  367.                
  368.         Else
  369.                
  370.                 prop_dir = prop_dir.Replace("", "/")
  371.                 If prop_dir[prop_dir.Length - 1] = 47 Then prop_dir = prop_dir[0..prop_dir.Length - 1]
  372.                
  373.         End If
  374.        
  375. End Function
  376.  
  377. Function InvalidNOps(cmd:String)
  378.        
  379.         Print("ERROR: Invalid number of arguments, see '" + cmd + " /?'")
  380.         End
  381.        
  382. End Function


Comments :


Ked(Posted 1+ years ago)

 Why are you deleting the A and I files? Aren't those the compiled modules?


plash(Posted 1+ years ago)

 Yes those are the compiled modules (notice the name of the application).The reasons being:1) Less space used (good for backups, not essentially for ONE module, but when you backup your whole blitzmax/mod folder it tends to.. add up)2) I find it best to make the users compile the modules (to report any missing modules/code from the package, and for me: forgetting to compile the module before packaging it)3) I use this on any mods I copy from windows to Linux to, again, save space (no sense having win32 compilations on a Linux machine)


degac(Posted 1+ years ago)

 As you are working on it you should make it compatible with MultiThreading support...Example:
Code: [Select]
freeaudio.debug.win32.x86.i
freeaudio.debug.mt.win32.x86.a
freeaudio.release.mt.win32.x86.i
freeaudio.release.mt.win32.x86.a
Your program cant' reconigze the 'mt variation'


plash(Posted 1+ years ago)

 @degac: Done.


slenkar(Posted 1+ years ago)

 thanks, good app [/i]

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal