Bläddra i källkod

Convert settings.data_var and settings.pack_name from/to calculator charset.
Also convert project name to calculator charset in process_settings.
Add --outputbin to the linker options when packing.
Prompt for saving when trying to link (Make or Build) an unsaved project.
Compute correct file names for assembly/object files when compiling a file before it has been saved and create the destination directory if it doesn't exist yet.


git-svn-id: file:///var/svn/tigccpp/trunk@653 9552661e-59e3-4036-b4f2-dbe53926924f

kevinkofler 18 år sedan
förälder
incheckning
f81c07e71b
3 ändrade filer med 69 tillägg och 11 borttagningar
  1. 25 0
      ktigcc/mainform.ui.h
  2. 39 10
      ktigcc/tpr.cpp
  3. 5 1
      ktigcc/tpr.h

+ 25 - 0
ktigcc/mainform.ui.h

@@ -3457,11 +3457,28 @@ void MainForm::compileFile(void *srcFile, bool inProject, bool force)
     int dotPos=origFileName->findRev('.');
     int slashPos=origFileName->findRev('/');
     if (dotPos>slashPos) objectFile.truncate(dotPos);
+    // Compute correct file names for unsaved files.
+    if (objectFile[0]!='/') {
+      if (inProject) {
+        ListViewFile *sourceFile=reinterpret_cast<ListViewFile *>(srcFile);
+        QListViewItem *item=sourceFile->parent();
+        while (!IS_CATEGORY(item)) {
+          objectFile.prepend('/');
+          objectFile.prepend(item->text(0));
+          item=item->parent();
+        }
+      }
+      if (!projectFileName.isEmpty()) {
+        objectFile.prepend('/');
+        objectFile.prepend(QFileInfo(projectFileName).dirPath(TRUE));
+      }
+    }
     QString asmFile=objectFile;
     objectFile.append(".o");
     deletableObjectFiles.append(objectFile);
     objectFiles.append(objectFile);
     asmFile.append(".s");
+    mkdir_multi(objectFile);
     if (category==cFilesListItem || category==qllFilesListItem)
       deletableAsmFiles.append(asmFile);
     // Figure out whether to recompile the file.
@@ -3717,6 +3734,10 @@ void MainForm::projectCompile()
 void MainForm::projectMake()
 {
   if (compiling) return;
+  // Can't link a project without saving it first.
+  if (projectFileName.isEmpty()) {
+    if (!fileSave() || projectFileName.isEmpty()) return;
+  }
   startCompiling();
   compileProject(FALSE);
   if (!errorsCompilingFlag && !stopCompilingFlag) linkProject();
@@ -3726,6 +3747,10 @@ void MainForm::projectMake()
 void MainForm::projectBuild()
 {
   if (compiling) return;
+  // Can't link a project without saving it first.
+  if (projectFileName.isEmpty()) {
+    if (!fileSave() || projectFileName.isEmpty()) return;
+  }
   startCompiling();
   compileProject(TRUE);
   if (!errorsCompilingFlag && !stopCompilingFlag) linkProject();

+ 39 - 10
ktigcc/tpr.cpp

@@ -35,6 +35,7 @@
 #include <kaboutdata.h>
 #include <qstring.h>
 #include <qstringlist.h>
+#include <qcstring.h>
 #include <qregexp.h>
 #include <qtextcodec.h>
 #include <glib.h>
@@ -215,7 +216,7 @@ static int parse_file(FILE *f,TPRDataStruct *dest)
 
             boolean_param("Archive=",archive)
             boolean_param("Pack=",pack)
-            string_param("Packed Variable=",pack_name)
+            tistring_param("Packed Variable=",pack_name)
             tistring_vparam("Project Name=",prj_name)
             string_param("GCC Switches=",cc_switches)
             string_param("Assembler Switches=",a68k_switches)
@@ -228,7 +229,7 @@ static int parse_file(FILE *f,TPRDataStruct *dest)
             tistring_param("Command Line=",cmd_line)
             string_param("Post-Build Process=",post_build)
             boolean_param("Use Data Variable=",use_data_var)
-            string_param("Data Variable=",data_var)
+            tistring_param("Data Variable=",data_var)
             boolean_param("Copy Data Variable=",copy_data_var)
             boolean_param("Copy Data Variable if Archived=",copy_data_var_arc)
             boolean_param("Optimize NOPs=",optimize_nops)
@@ -576,7 +577,7 @@ static int save_tpr(FILE *f,TPRDataStruct *dest)
     if (fputs("[Settings]\r\n",f)<0) return -2;
     boolean_param("Archive=",archive)
     boolean_param("Pack=",pack)
-    string_param("Packed Variable=",pack_name)
+    tistring_param("Packed Variable=",pack_name)
     tistring_vparam("Project Name=",prj_name)
     string_param("GCC Switches=",cc_switches)
     string_param("Assembler Switches=",a68k_switches)
@@ -589,7 +590,7 @@ static int save_tpr(FILE *f,TPRDataStruct *dest)
     tistring_param("Command Line=",cmd_line)
     string_param("Post-Build Process=",post_build)
     boolean_param("Use Data Variable=",use_data_var)
-    string_param("Data Variable=",data_var)
+    tistring_param("Data Variable=",data_var)
     boolean_param("Copy Data Variable=",copy_data_var)
     boolean_param("Copy Data Variable if Archived=",copy_data_var_arc)
     boolean_param("Optimize NOPs=",optimize_nops)
@@ -733,7 +734,7 @@ int saveTPR(const QString &fileName,TPRDataStruct *src)
   return ret;
 }
 
-static void mkdir_multi(const char *fileName)
+void mkdir_multi(const char *fileName)
 {
   int l=strlen(fileName);
   char buffer[l+2];
@@ -1236,19 +1237,47 @@ QStringList process_libopts(void)
 /*
    Build linker command line arguments
 */
-QStringList process_settings(void)
+QStringList process_settings(const QString &prjNameUnicode,
+                             QCString &projectName, QCString &dataVarName,
+                             QCString &packName)
 {
   QStringList args;
 
+  // Convert the project name to the calculator charset.
+  {
+    const unsigned short *utf16=prjNameUnicode.ucs2();
+    if (utf16) {
+      char *ti=ticonv_charset_utf16_to_ti(CALC_TI89,utf16);
+      projectName=ti; // This is a hidden strdup (see QCString::operator=).
+      g_free(ti);
+    } else projectName=QCString();
+  }
+
+  // Convert the PPG name to the calculator charset.
+  {
+    const unsigned short *utf16=settings.pack_name.ucs2();
+    if (utf16) {
+      char *ti=ticonv_charset_utf16_to_ti(CALC_TI89,utf16);
+      packName=ti; // This is a hidden strdup (see QCString::operator=).
+      g_free(ti);
+    } else packName=QCString();
+  }
+
   if (settings.use_data_var && !settings.data_var.isEmpty()) {
-    args.append("-d ");
-    args.append(settings.data_var);
+    // We can't just append this to the argument list because this needs to be
+    // in the calculator charset.
+    const unsigned short *utf16=settings.data_var.ucs2();
+    if (utf16) {
+      char *ti=ticonv_charset_utf16_to_ti(CALC_TI89,utf16);
+      dataVarName=ti; // This is a hidden strdup (see QCString::operator=).
+      g_free(ti);
+    } else dataVarName=QCString();
     if (!settings.copy_data_var) {
       args.append("--data-var-copy=never");
     } else if (!settings.copy_data_var_arc) {
       args.append("--data-var-copy=always");
     }
-  }
+  } else dataVarName=QCString();
 
   if (settings.optimize_nops) {
     args.append("--optimize-nops");
@@ -1285,7 +1314,7 @@ QStringList process_settings(void)
     args.append("--merge-constants");
   }
 
-  if (settings.outputbin) {
+  if (settings.outputbin || settings.pack) {
     args.append("--outputbin");
   }
 

+ 5 - 1
ktigcc/tpr.h

@@ -26,6 +26,7 @@
 class KURL;
 #include <qstring.h>
 #include <qstringlist.h>
+#include <qcstring.h>
 #include <qvaluevector.h>
 #include <qpair.h>
 
@@ -168,6 +169,7 @@ int loadTPR(const QString &fileName,TPRDataStruct *dest);
 QString loadFileText(const char *fileName);
 
 int saveTPR(const QString &fileName,TPRDataStruct *src);
+void mkdir_multi(const char *fileName);
 int saveAndSplitFileText(const char *fileName, const QString &fileText,
                          bool split, bool addCLineDirective,
                          bool addASMLineDirective, const QString &origFileName,
@@ -182,4 +184,6 @@ int copyFile(const char *src, const char *dest);
 int getPathType(const QString &thePath);
 
 QStringList process_libopts(void);
-QStringList process_settings(void);
+QStringList process_settings(const QString &prjNameUnicode,
+                             QCString &projectName, QCString &dataVarName,
+                             QCString &packName);