Changeset 2096


Ignore:
Timestamp:
Jun 28, 2005, 1:50:04 AM (20 years ago)
Author:
bird
Message:

Generate .def-file for dlls without one.

Location:
trunk/src/emx
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/emx/ChangeLog.LIBC

    • Property cvs2svn:cvs-rev changed from 1.66 to 1.67
    r2095 r2096  
    11/* $Id$ */
     2
     32005-06-27: knut st. osmundsen <bird-gccos2-spam@anduin.net>
     4    - emxomfld, ld:
     5        o Generate .def-file for dlls without one. (This only makes sense for
     6          emxomfld since ld doesn't implement __declspec(dllexport) yet, but
     7          anyway.)
    28
    392005-06-26: knut st. osmundsen <bird-gccos2-spam@anduin.net>
  • trunk/src/emx/src/emxomf/emxomfld.c

    • Property cvs2svn:cvs-rev changed from 1.39 to 1.40
    r2095 r2096  
    11851185}
    11861186
     1187/* Generates a definition file for a dll which doesn't have one. */
     1188static void gen_deffile(void)
     1189{
     1190    char *psz = xmalloc(_MAX_PATH);
     1191    if (!make_tempfile(psz, "lddef", ".def", NULL))
     1192    {
     1193        FILE *pFile = fopen(psz, "w");
     1194        if (pFile)
     1195        {
     1196            const char *pszName = _getname(output_fname);
     1197            size_t cchName = strlen(pszName);
     1198            if (cchName > 4 && !stricmp(pszName + cchName - 4, ".dll"))
     1199                cchName -= 4;
     1200            fprintf(pFile,
     1201                    ";; Autogenerated by emxomfld\n"
     1202                    "LIBRARY %.*s INITINSTANCE TERMINSTANCE\n"
     1203                    "DATA MULTIPLE\n"
     1204                    "CODE SHARED\n"
     1205                    "\n",
     1206                    cchName, pszName);
     1207            fclose(pFile);
     1208            def_fname = psz;
     1209            if (opt_t)
     1210                fprintf(stderr,
     1211                        "--- Generated def-file %s:\n"
     1212                        ";; Autogenerated by emxomfld\n"
     1213                        "LIBRARY %.*s INITINSTANCE TERMINSTANCE\n"
     1214                        "DATA MULTIPLE NONSHARED\n"
     1215                        "CODE SINGLE SHARED\n"
     1216                        "---- End of generated def-file.\n",
     1217                        psz, cchName, pszName);
     1218            return;
     1219        }
     1220    }
     1221    free(psz);
     1222}
    11871223
    11881224/* -t output. We dump the commandline and responsefile. */
     
    16611697    }
    16621698
     1699  /* generate .def-file for dlls. */
     1700
     1701  if (!def_fname && dll_flag)
     1702    gen_deffile();
    16631703
    16641704  /* Do the weak prelinking unless GCC_WEAKSYMS are set.
  • trunk/src/emx/src/ld/ld.c

    • Property cvs2svn:cvs-rev changed from 1.17 to 1.18
    r2095 r2096  
    929929int assign_string_table_index (char *name);
    930930unsigned long check_each_file (register unsigned long (*function)(), register int arg);
     931static int      make_tempfile(char *pszFile, const char *pszPrefix, const char *pszSuffix);
    931932
    932933
     
    39063907}
    39073908
     3909/* Generates a definition file for a dll which doesn't have one. */
     3910
     3911static void gen_deffile(void)
     3912{
     3913    char *psz = xmalloc(_MAX_PATH);
     3914    if (!make_tempfile(psz, "lddef", ".def"))
     3915    {
     3916        FILE *pFile = fopen(psz, "w");
     3917        if (pFile)
     3918        {
     3919            const char *pszName = _getname(exe_filename);
     3920            size_t cchName = strlen(pszName);
     3921            if (cchName > 4 && !stricmp(pszName + cchName - 4, ".dll"))
     3922                cchName -= 4;
     3923            fprintf(pFile,
     3924                    ";; Autogenerated by ld\n"
     3925                    "LIBRARY %.*s INITINSTANCE TERMINSTANCE\n"
     3926                    "DATA MULTIPLE\n"
     3927                    "CODE SHARED\n"
     3928                    "\n",
     3929                    cchName, pszName);
     3930            if (trace_files)
     3931                fprintf(stderr,
     3932                        "--- Generated def-file %s:\n"
     3933                        ";; Autogenerated by ld\n"
     3934                        "LIBRARY %.*s INITINSTANCE TERMINSTANCE\n"
     3935                        "DATA MULTIPLE NONSHARED\n"
     3936                        "CODE SINGLE SHARED\n"
     3937                        "---- End of generated def-file.\n",
     3938                        psz, cchName, pszName);
     3939            fclose(pFile);
     3940            def_filename = psz;
     3941            return;
     3942        }
     3943    }
     3944    free(psz);
     3945}
     3946
     3947
    39083948/* Write the output file */
    39093949
     
    39794019      if (emxbind_strip)
    39804020        nargv[i++] = "-s";
     4021      if (dll_flag && !def_filename)
     4022          gen_deffile();
    39814023      if (def_filename != NULL)
    39824024        {
     
    39874029        }
    39884030      else if (dll_flag)
    3989         nargv[i++] = "-d";
     4031          nargv[i++] = "-d";
    39904032      if (stack_size != 0)
    39914033        {
     
    40194061      nargv[i++] = output_filename;
    40204062      nargv[i] = NULL;
     4063      if (trace_files)
     4064        {
     4065          fprintf(stderr, "Invoking emxbind:");
     4066          for (i = 0; nargv[i]; i++)
     4067            fprintf(stderr, " %s", nargv[i]);
     4068          fprintf(stderr, "\n");
     4069        }
    40214070      i = spawnvp (P_WAIT, "emxbind", nargv);
    40224071      saved_errno = errno; unlink (output_filename); errno = saved_errno;
Note: See TracChangeset for help on using the changeset viewer.