Tools/udibuild - Cleanup (can find udibuild.ini if invoked relatively)
authorJohn Hodge <[email protected]>
Tue, 1 Oct 2013 08:00:24 +0000 (16:00 +0800)
committerJohn Hodge <[email protected]>
Tue, 1 Oct 2013 08:00:24 +0000 (16:00 +0800)
Tools/udibuild/src/build.c
Tools/udibuild/src/main.c

index ed5d528..b070c37 100644 (file)
@@ -7,8 +7,8 @@
  */
 #include <stdlib.h>
 #include <stdio.h>
-#include <stdarg.h>
 #include "include/build.h"
+#include "include/common.h"
 
 #ifndef __GNUC__
 # define __attribute__(...)
@@ -16,7 +16,6 @@
 
 // === PROTOTYPES ===
 char   *get_objfile(tIniFile *opts, const char *srcfile);
-char   *mkstr(const char *fmt, ...) __attribute__((format(printf,1,2)));
 
 // === CODE ===
 int Build_CompileFile(tIniFile *opts, const char *abi, tUdiprops *udiprops, tUdiprops_Srcfile *srcfile)
@@ -57,17 +56,3 @@ char *get_objfile(tIniFile *opts, const char *srcfile)
 {
        return mkstr("%s.o", srcfile);
 }
-
-char *mkstr(const char *fmt, ...)
-{
-       va_list args;
-       va_start(args, fmt);
-       size_t len = vsnprintf(NULL, 0, fmt, args);
-       va_end(args);
-       va_start(args, fmt);
-       char *ret = malloc(len+1);
-       vsnprintf(ret, len+1, fmt, args);
-       va_end(args);
-       return ret;
-}
-
index 06ac58d..51ecbb5 100644 (file)
@@ -9,7 +9,9 @@
 #include <stdlib.h>
 #include <unistd.h>    // getopt
 #include <getopt.h>
+#include <string.h>    // strrchr
 #include <assert.h>
+#include "include/common.h"
 #include "include/build.h"
 #include "include/inifile.h"
 #include "include/udiprops.h"
@@ -41,19 +43,35 @@ int main(int argc, char *argv[])
        }
 
        // Locate udibuild.ini
-       if( NULL == gsOpt_ConfigFile )
-       {
-               // 1. Check CWD
+       // 1. Check CWD
+       if( !gsOpt_ConfigFile ) {
                //if( file_exists("./udibuild.ini") )
                //{
                //      gsOpt_ConfigFile = "udibuild.ini";
                //}
-               // 2. Check program dir (if not invoked from PATH)
-               // 3. Check ~/.config/udi/udibuild.ini
-               // 4. Check CONFIGNAME
-               
+       }
+       // 2. Check program dir (if not invoked from PATH)
+       if( !gsOpt_ConfigFile && (argv[0][0] == '.' || argv[0][0] == '/') ) {
+               char *last_slash = strrchr(argv[0], '/');
+               if( last_slash ) {
+                       gsOpt_ConfigFile = mkstr("%.*s/udibuild.ini",
+                               last_slash-argv[0], argv[0]);
+               }
+               //if( !file_exists(gsOpt_ConfigFile) ) {
+               //      free(gsOpt_ConfigFile);
+               //      gsOpt_ConfigFile = NULL;
+               //}
+       }
+       // 3. Check ~/.config/udi/udibuild.ini
+       // 4. Check CONFIGNAME
+
+       // #. Oh well   
+       if( !gsOpt_ConfigFile ) {
+               fprintf(stderr, "Can't locate udibuild.ini file, please specify using '-c'\n");
                exit(2);
        }
+       
+       // Load udibuild.ini
        gpOptions = IniFile_Load(gsOpt_ConfigFile);
        assert(gpOptions);
 
@@ -128,3 +146,16 @@ void Usage(const char *progname)
                "\n");
 }
 
+char *mkstr(const char *fmt, ...)
+{
+       va_list args;
+       va_start(args, fmt);
+       size_t len = vsnprintf(NULL, 0, fmt, args);
+       va_end(args);
+       va_start(args, fmt);
+       char *ret = malloc(len+1);
+       vsnprintf(ret, len+1, fmt, args);
+       va_end(args);
+       return ret;
+}
+

UCC git Repository :: git.ucc.asn.au