X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f X-Recipient: djgpp AT delorie DOT com X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=lgVeXsE+ktl6WZS7kpHCT2Stcbm8Nz/f4wK+IBMnIrE=; b=ziR3e3ZzaM8RbjpnfeXwXE0e1mKRwUhZCQefWBEhZOUIzTgQtM4YLBQ1uO1HpG0uKZ bSaUP/u2X3Gh6tFIWGG5Ite7RmkosMRCxGyibyxqT2BsTQsF2F8TVis2kmcozIxIKb65 UvUbGj+ExNvpO8eKkWxzuo+U/nXgqbDAtcYYBQL2Lp3xHKR0xAFptxJaDFDGk6vyEbOx EQHukVFT3rbXYSZli9UUw3aknPi3S6o9tvTxaMZZ6CveRejAQsD1VaYmtnboNK+uxusc ikbqKQS0PHzwBTpI/4PP56kLHr1jAQCj94aXgAvK/hhPx4jTHJ6JMObq228pfka2h2LH TBvw== MIME-Version: 1.0 X-Received: by 10.50.61.241 with SMTP id t17mr10589682igr.34.1433489517766; Fri, 05 Jun 2015 00:31:57 -0700 (PDT) Date: Fri, 5 Jun 2015 10:31:57 +0300 Message-ID: Subject: dxe3gen patch From: "Ozkan Sezer (sezeroz AT gmail DOT com)" To: djgpp Content-Type: text/plain; charset=UTF-8 Reply-To: djgpp AT delorie DOT com The following patch allows users of dxe3gen to customize the build tools they use through DXE_* environment variables. OK for CVS HEAD? OK for 2.05? Index: src/dxe/makefile =================================================================== RCS file: /cvs/djgpp/djgpp/src/dxe/makefile,v retrieving revision 1.8 diff -u -r1.8 makefile --- src/dxe/makefile 21 Jul 2013 12:25:58 -0000 1.8 +++ src/dxe/makefile 28 May 2015 19:12:06 -0000 @@ -33,7 +33,7 @@ $(EXE) $(HOSTBIN)/dxegen.exe : dxe3gen.c init1.h init2.h init3.h init4.h init5.h fini1.h fini2.h fini3.h fini4.h fini5.h - $(GCC) -DDXE_LD=\"$(CROSS_LD)\" dxe3gen.c -o $@ + $(GCC) dxe3gen.c -o $@ clean :: @-$(MISC) rm *.o *.h $(HOSTBIN)/dxegen.exe Index: src/libemu/makefile =================================================================== RCS file: /cvs/djgpp/djgpp/src/libemu/makefile,v retrieving revision 1.3 diff -u -r1.3 makefile --- src/libemu/makefile 6 Sep 1999 11:37:39 -0000 1.3 +++ src/libemu/makefile 28 May 2015 19:12:07 -0000 @@ -8,11 +8,17 @@ LIBNAME=emu include $(TOP)/../makefile.lib +DXE_SC=../../lib/dxe.ld +export DXE_SC +ifeq ($(CROSS_BUILD),1) +DXE_LD=$(CROSS_LD) +export DXE_LD +endif all :: $(BIN)/emu387.dxe $(BIN)/emu387.dxe : src/emu387.o src/emudummy.o $(HOSTBIN)/dxegen.exe $(BIN)/emu387.dxe __emu_entry src/emu387.o id_emu.o src/emudummy.o -L../../lib $(LIBGCCA) -lc $(LIBGCCA) - + clean :: $(MISC) rm makefile.sub Index: src/dxe/dxe3gen.c =================================================================== RCS file: /cvs/djgpp/djgpp/src/dxe/dxe3gen.c,v retrieving revision 1.20 diff -u -r1.20 dxe3gen.c --- src/dxe/dxe3gen.c 23 May 2015 08:20:05 -0000 1.20 +++ src/dxe/dxe3gen.c 28 May 2015 19:12:06 -0000 @@ -165,10 +165,6 @@ #endif /* !DEBUG_SUPPORT_PRINT_RELOCATION_DIRECTIVES */ -#ifndef DXE_LD -/* Cross compile ld name/location */ -#define DXE_LD "ld" -#endif #ifdef _POSIX_SOURCE /* Linux violates POSIX.1 and defines this, but it shouldn't.. */ #undef _POSIX_SOURCE @@ -297,6 +293,15 @@ }; +static char *libdir; +/* build tools */ +static char *dxe_cc; /* default: "gcc" */ +static char *dxe_as; /* default: "as" */ +static char *dxe_ar; /* default: "ar" */ +static char *dxe_ld; /* default: "ld" */ +/* linker script */ +static char *dxe_sc; /* default: "dxe.ld" */ + /* Desc: replaces backslash with slash in a path * @@ -410,6 +415,45 @@ +/* Desc: process the DXE_?? environment variables + */ +static void process_env(void) +{ + const char *e; + + if ((e = getenv("DXE_CC")) != NULL) + dxe_cc = strdup(e); + else dxe_cc = strdup("gcc"); + + if ((e = getenv("DXE_AS")) != NULL) + dxe_as = strdup(e); + else dxe_as = strdup("as"); + + if ((e = getenv("DXE_AR")) != NULL) + dxe_ar = strdup(e); + else dxe_ar = strdup("ar"); + + if ((e = getenv("DXE_LD")) != NULL) + dxe_ld = strdup(e); + else dxe_ld = strdup("ld"); + + if ((e = getenv("DXE_SC")) != NULL) + dxe_sc = strdup(e); + else dxe_sc = strdup("dxe.ld"); + + if ((e = getenv("DXE_LD_LIBRARY_PATH")) != NULL) + libdir = strdup(e); + else if ((e = getenv("DJDIR")) != NULL) { + size_t sz = strlen(e) + 5U; + libdir = malloc(sz); + strcpy(libdir, e); + strcat(libdir, "/lib"); + canonicalize_path(libdir); + } + else libdir = NULL; +} + + /* Desc: process command line args * * In : no of arguments, argument list, ptr to store linker args @@ -419,30 +463,15 @@ */ static void process_args(int argc, char *argv[], const char *new_argv[]) { - static char libdir[FILENAME_MAX]; - char *p; int i, new_argc = NUMBER_OF_LINKER_ARGS; - p = getenv("DXE_LD_LIBRARY_PATH"); - if (p) - strcpy(libdir, p); - else + if (!libdir) { - p = getenv("DJDIR"); - if (p) - { - strcpy(libdir, p); - strcat(libdir, "/lib"); - canonicalize_path(libdir); - } - else - { fprintf(stderr, "Error: neither DXE_LD_LIBRARY_PATH nor DJDIR are set in environment\n"); exit(1); - } } - new_argv[0] = DXE_LD; + new_argv[0] = dxe_ld; new_argv[1] = "-X"; new_argv[2] = "-S"; new_argv[3] = "-r"; @@ -451,7 +480,7 @@ new_argv[6] = "-L"; new_argv[7] = libdir; new_argv[8] = "-T"; - new_argv[9] = "dxe.ld"; + new_argv[9] = dxe_sc; if (!strcmp(base_name(argv[0]), "dxegen")) /* invoked as `dxegen' */ @@ -736,7 +765,7 @@ if ((rv = my_spawn(argv)) != 0) { if (rv == -1) - perror(DXE_LD); + perror("ld"); exit(rv); } @@ -861,7 +890,7 @@ if (rv) { if (rv == -1) - perror(DXE_LD); + perror("ld"); exit(rv); } @@ -1336,7 +1365,8 @@ } /* Pre-compile the resolver's output. */ - rv = system("gcc -o "TEMP_S_FILE" -O2 -S "TEMP_BASE".c"); + sprintf(cmdbuf, "%s -o %s -O2 -S %s.c", dxe_cc, TEMP_S_FILE, TEMP_BASE); + rv = system(cmdbuf); remove(TEMP_BASE".c"); if (rv != 0) { @@ -1420,7 +1450,8 @@ atexit(exit_cleanup); /* Allright, now run the assembler on the resulting file */ - if ((rv = system("as -o "TEMP_O_FILE" "TEMP_S_FILE)) != 0) + sprintf(cmdbuf, "%s -o %s %s", dxe_as, TEMP_O_FILE, TEMP_S_FILE); + if ((rv = system(cmdbuf)) != 0) { if (rv == -1) perror("as"); @@ -1428,7 +1459,7 @@ } /* Okey-dokey, let's stuff the object file into the archive */ - sprintf(cmdbuf, "ar crs %s "TEMP_O_FILE, opt.implib); + sprintf(cmdbuf, "%s crs %s "TEMP_O_FILE, dxe_ar, opt.implib); if ((rv = system(cmdbuf)) != 0) { if (rv == -1) @@ -1512,6 +1543,7 @@ progname = argv[0]; /* Prepare the command line for ld */ new_argv = (const char **)malloc((argc - 1 + NUMBER_OF_LINKER_ARGS + NUMBER_OF_ADDITIONAL_LOADED_LIBS + 2 + 1) * sizeof(char *)); + process_env(); process_args(argc, argv, new_argv); if (opt.showdep || opt.showexp || opt.showunres) -- O.S.