From 65e12afde4bd9cd32e206f874cfa378708248918 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Tue, 30 Oct 2018 22:53:30 +0100
Subject: Defined the parent directory as the working location for generation.

---
 plugins/arm/v7/opdefs/Makefile.am     |  4 ++--
 plugins/dalvik/v35/opdefs/Makefile.am |  4 ++--
 tools/d2c/coder.c                     | 18 +++++++++---------
 tools/d2c/coder.h                     |  3 ++-
 tools/d2c/d2c.c                       |  7 +++++--
 5 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/plugins/arm/v7/opdefs/Makefile.am b/plugins/arm/v7/opdefs/Makefile.am
index 59b69a4..2fb3c4a 100644
--- a/plugins/arm/v7/opdefs/Makefile.am
+++ b/plugins/arm/v7/opdefs/Makefile.am
@@ -6,7 +6,7 @@ D2C_BIN = $(top_srcdir)/tools/d2c/d2c
 GEN_BIN = $(top_srcdir)/tools/d2c/d2c_genmakefile.sh
 
 
-D2C_OUTDIR = $(PWD)/../opcodes/
+D2C_OUTDIR = $(shell readlink -f $(PWD)/.. )/
 
 D2C_TYPE = raw
 
@@ -461,7 +461,7 @@ dist-hook:
 all: $(ARMV7_DEFS:.d=.g) fmk.done d2c_final_rules
 
 fmk.done: $(ARMV7_DEFS)
-	$(GEN_BIN) $(D2C_OUTDIR) arm thumb_32 thumb_16
+	$(GEN_BIN) $(D2C_OUTDIR)opcodes/ arm thumb_32 thumb_16
 	touch $@
 
 clean:
diff --git a/plugins/dalvik/v35/opdefs/Makefile.am b/plugins/dalvik/v35/opdefs/Makefile.am
index 0684c53..535d5c1 100644
--- a/plugins/dalvik/v35/opdefs/Makefile.am
+++ b/plugins/dalvik/v35/opdefs/Makefile.am
@@ -6,7 +6,7 @@ D2C_BIN = $(top_srcdir)/tools/d2c/d2c
 GEN_BIN = $(top_srcdir)/tools/d2c/d2c_genmakefile.sh
 
 
-D2C_OUTDIR = $(PWD)/../opcodes/
+D2C_OUTDIR = $(shell readlink -f $(PWD)/.. )/
 
 D2C_TYPE = format
 
@@ -321,7 +321,7 @@ dist-hook:
 all: $(DALVIK_DEFS:.d=.g) fmk.done d2c_final_rules
 
 fmk.done: $(DALVIK_DEFS)
-	$(GEN_BIN) $(D2C_OUTDIR) -
+	$(GEN_BIN) $(D2C_OUTDIR)opcodes/ -
 	touch $@
 
 clean:
diff --git a/tools/d2c/coder.c b/tools/d2c/coder.c
index 9066869..61527bf 100644
--- a/tools/d2c/coder.c
+++ b/tools/d2c/coder.c
@@ -888,7 +888,7 @@ bool output_coder_body(const rented_coder *coder, const output_info *info)
             if (!has_encoding_spec_prefix(coder->specs[j], enc_name->src))
                 continue;
 
-            header_fd = open_header_file(info->directory, enc_name->dest, "opcodes", &header_new);
+            header_fd = open_header_file(info->opcodes_dir, enc_name->dest, "opcodes", &header_new);
             if (header_fd == -1)
             {
                 result = false;
@@ -910,7 +910,7 @@ bool output_coder_body(const rented_coder *coder, const output_info *info)
 
             }
 
-            code_fd = open_code_file(coder, info->directory, enc_name->dest, &code_new);
+            code_fd = open_code_file(coder, info->opcodes_dir, enc_name->dest, &code_new);
             if (code_fd == -1)
             {
                 result = false;
@@ -965,7 +965,7 @@ bool output_coder_body(const rented_coder *coder, const output_info *info)
             if (!has_encoding_spec_prefix(coder->specs[j], enc_name->src))
                 continue;
 
-            header_fd = open_header_file(info->directory, enc_name->dest, "opcodes", &header_new);
+            header_fd = open_header_file(info->opcodes_dir, enc_name->dest, "opcodes", &header_new);
             if (header_fd == -1)
             {
                 result = false;
@@ -974,7 +974,7 @@ bool output_coder_body(const rented_coder *coder, const output_info *info)
 
             assert(!header_new);
 
-            code_fd = open_code_file(coder, info->directory, enc_name->dest, &code_new);
+            code_fd = open_code_file(coder, info->opcodes_dir, enc_name->dest, &code_new);
             if (code_fd == -1)
             {
                 result = false;
@@ -1513,7 +1513,7 @@ bool output_coder_identifier(const rented_coder *coder, const output_info *info)
 
     /* Ouverture de la destination */
 
-    fd = open_header_file(info->directory, NULL, "identifiers", &created);
+    fd = open_header_file(info->opcodes_dir, NULL, "identifiers", &created);
     if (fd == -1) goto oci_exit;
 
     if (created)
@@ -1658,7 +1658,7 @@ bool output_coder_sub_identifier(const rented_coder *coder, const output_info *i
 
     /* Ouverture de la destination */
 
-    fd = open_header_file(info->directory, NULL, "subidentifiers", &created);
+    fd = open_header_file(info->opcodes_dir, NULL, "subidentifiers", &created);
     if (fd == -1) goto ocsi_exit;
 
     if (created)
@@ -1823,7 +1823,7 @@ bool output_coder_keyword(const rented_coder *coder, const output_info *info)
 
     /* Ouverture de la destination */
 
-    fd = open_header_file(info->directory, NULL, "keywords", &created);
+    fd = open_header_file(info->opcodes_dir, NULL, "keywords", &created);
     if (fd == -1) goto ock_exit;
 
     if (created)
@@ -2017,7 +2017,7 @@ bool output_coder_hooks(const rented_coder *coder, const output_info *info)
 
     /* Ouverture de la destination */
 
-    fd = open_header_file(info->directory, NULL, "hooks", &created);
+    fd = open_header_file(info->opcodes_dir, NULL, "hooks", &created);
     if (fd == -1) goto och_exit;
 
     if (created)
@@ -2179,7 +2179,7 @@ bool output_coder_description(const rented_coder *coder, const output_info *info
 
     /* Ouverture de la destination */
 
-    fd = open_header_file(info->directory, NULL, "descriptions", &created);
+    fd = open_header_file(info->opcodes_dir, NULL, "descriptions", &created);
     if (fd == -1) goto ocd_exit;
 
     if (created)
diff --git a/tools/d2c/coder.h b/tools/d2c/coder.h
index 143b969..2164097 100644
--- a/tools/d2c/coder.h
+++ b/tools/d2c/coder.h
@@ -106,7 +106,8 @@ typedef enum _InputOutputType
 /* Regroupement des informations utiles à la génération */
 typedef struct _output_info
 {
-    const char *directory;                  /* Répertoire de destination   */
+    char *opcodes_dir;                      /* Répertoire pour les opcodes */
+
     InputOutputType type;                   /* Type des définitions (E/S)  */
     const char *arch;                       /* Architecture à traiter      */
     const char *arch_cn;                    /* Nom de code de l'archi.     */
diff --git a/tools/d2c/d2c.c b/tools/d2c/d2c.c
index 9cb2df4..fddee6a 100644
--- a/tools/d2c/d2c.c
+++ b/tools/d2c/d2c.c
@@ -196,7 +196,7 @@ int main(int argc, char **argv)
                 break;
 
             case 'o':
-                info.directory = optarg;
+                asprintf(&info.opcodes_dir, "%sopcodes%c", optarg, optarg[strlen(optarg) - 1]);
                 break;
 
             case 't':
@@ -274,7 +274,7 @@ int main(int argc, char **argv)
     if (execute == ADC_NONE)
         has_error = true;
 
-    if (info.directory == NULL || info.arch == NULL || info.arch_cn == NULL || info.guard == NULL)
+    if (info.opcodes_dir == NULL || info.arch == NULL || info.arch_cn == NULL || info.guard == NULL)
         has_error = true;
 
     if (need_help || has_error || (optind + 1) != argc)
@@ -372,6 +372,9 @@ int main(int argc, char **argv)
 
  exit:
 
+    if (info.opcodes_dir != NULL)
+        free(info.opcodes_dir);
+
     return result;
 
 }
-- 
cgit v0.11.2-87-g4458