Return-Path: Delivered-To: apmail-new-httpd-archive@apache.org Received: (qmail 9612 invoked by uid 500); 20 Mar 2000 22:46:32 -0000 Mailing-List: contact new-httpd-help@apache.org; run by ezmlm Precedence: bulk X-No-Archive: yes Reply-To: new-httpd@apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list new-httpd@apache.org Received: (qmail 9601 invoked from network); 20 Mar 2000 22:46:30 -0000 From: "William A. Rowe, Jr." To: Subject: RE: [Patch 2.0] Win32 Build Structure Date: Mon, 20 Mar 2000 16:44:15 -0600 Message-ID: <000101bf92be$1c63b040$345985d0@corecomm.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0002_01BF928B.D1CAC6E0" X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook 8.5, Build 4.71.2173.0 Importance: Normal In-Reply-To: <007e01bf92b7$2b7631e0$020000c5@moon1> X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600 X-Spam-Rating: locus.apache.org 1.6.2 0/1000/N This is a multi-part message in MIME format. ------=_NextPart_000_0002_01BF928B.D1CAC6E0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Depends on what q. you are asking.... If you are asking how to create your vanilla http.conf, save httpd.conf-dist-win as httpd.conf and replace @@ServerRoot@@ with the server root path. If you are asking how do we start building the install binaries, I'd suggest we hack it one of the three ways I mentioned, just pick your poison. But... if we are asking to bundle the alpha to end user-testers as binaries, I'd ask if we are even ready for that yet. It won't run on 95 (kernel32 GetFileAttributesExA is missing, of course) without a rewrite using FindFirstFile, and until the final touches are put on the apr, I'd suggest we are way ahead of the curve. I know my personal list of things I want to see working needs no help yet from the bugdb. Since you are keenly interested, though, I've attached the files for os/win32/installer/installdll and will post up the diffs in the next go around. Before anyone thinks of committing these though - Brian, give them a whack. Bill > -----Original Message----- > From: Brian Moon [mailto:brianm@dealnews.com] > Sent: Monday, March 20, 2000 3:57 PM > To: new-httpd@apache.org > Subject: Re: [Patch 2.0] Win32 Build Structure > > > > 1) Don't try aprlib.dll on installdll unless we want > > the headache - either strip ap_snprintf requirements, > > plan on linking in aprlib.dll to installdll (yuck), > > or tightly bind to the c code (not pleasent either). > > So basically the installer is broke for now. Is that right? > How else can I > get the conf files built? > > Brian Moon > ---------------------------------------------------------------------- > dealnews LLC > Makers of dealnews, dealmac > http://dealnews.com/ | http://dealmac.com/ > > ------=_NextPart_000_0002_01BF928B.D1CAC6E0 Content-Type: text/plain; name="install.c" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="install.c" /* Apache Installer */ /* * 26/06/97 PCS 1.000 Initial version * 22/02/98 PCS 1.001 Used the excellent NTemacs to apply proper = formating * 04/05/98 PCS 1.002 Copy conf files to *.conf.default, then to *.conf * 16/02/99 PCS 1.003 Add logging to "install.log" in the installed = directory */ #define VERSION ( "1.003 " __DATE__ " " __TIME__ ) #include #include #include #include #include #include "apr_winconfig.h" #include "apr_lib.h" #ifdef strftime #undef strftime #endif #define AP_WIN32ERROR 1 /* Global to store the instance handle */ HINSTANCE hInstance =3D NULL; static char *szLogFilename =3D NULL; static FILE *fpLog =3D NULL; void LogMessage(char *fmt, ...) { char buf[4000]; va_list ap; struct tm *tms; time_t nowtime; char *bp =3D buf; int rv; int free =3D sizeof(buf); if (!fpLog) { return; } nowtime =3D time(NULL); tms =3D localtime(&nowtime); rv =3D strftime(bp, free, "%c", tms); bp +=3D rv; free -=3D rv; if (free) { *bp++ =3D ' '; free--; } va_start(ap, fmt); rv =3D ap_vsnprintf(bp, free, fmt, ap); va_end(ap); free -=3D rv; fprintf(fpLog, "%s\n", buf); } /* * MessageBox_error() is a helper function to display an error in a=20 * message box, optionally including a Win32 error message. If * the "opt" argument is value AP_WIN32ERROR then get the last Win32 * error (with GetLastError()) and add it on to the end of * the output string. The output string is given as a printf-format * and replacement arguments. The hWnd, title and mb_opt fields are=20 * passed on to the Win32 MessageBox() call. */ int MessageBox_error(HWND hWnd, int opt, char *title,=20 int mb_opt, char *fmt, ...) { char buf[1000]; va_list ap; int free =3D sizeof(buf); /* Number of bytes free in the = buffer */ int rv; char *p; va_start(ap, fmt); rv =3D ap_vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); free -=3D rv; if (opt & AP_WIN32ERROR && free > 3) { /* We checked in the "if" that we have enough space in buf for * at least three extra characters. */ p =3D buf + strlen(buf); *p++ =3D '\r'; *p++ =3D '\r'; *p++ =3D '('; free -=3D 3; /* NB: buf is now not null terminated */ /* Now put the error message straight into buf. This function * takes the free buffer size as the 6th argument. */ rv =3D FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, p, free, NULL); if (rv =3D=3D 0) { /* FormatMessage failed, so get rid of the "\r\r(" we just = placed * in the buffer, since there is no system error message. */ p -=3D 3; *p =3D '\0'; free +=3D 3; } else { free -=3D rv; p +=3D rv; /* Strip any trailing \r or \n characters to make it look nice = on * the screen. */ while (*(p-1) =3D=3D '\r' || *(p-1) =3D=3D '\n') p--, free++; *p =3D '\0'; /* Append a trailing ) */ if (free >=3D 1) { *p++ =3D ')'; *p++ =3D '\0'; } } } for (p =3D buf; *p; p++) { if (*p =3D=3D '\n' || *p =3D=3D '\r') { *p =3D ' '; } } LogMessage("MSG %s", buf); return MessageBox(hWnd, buf, title, mb_opt); } int OpenLog(HWND hwnd, char *dir, char *fn) { szLogFilename =3D malloc(strlen(dir) + 1 + strlen(fn) + 1); sprintf(szLogFilename, "%s\\%s", dir, fn); if ((fpLog =3D fopen(szLogFilename, "a+")) =3D=3D NULL) { MessageBox_error(hwnd,=20 AP_WIN32ERROR, "Installation Problem", MB_OK | MB_ICONSTOP, "Cannot open log file %s", szLogFilename); return -1; } return 0; } void CloseLog(void) { if (fpLog) { fclose(fpLog); } } /* * The next few functions handle expanding the @@ServerRoot@@ type * sequences found in the distribution files. The main entry point * is expandFile(), which is given a file to expand and the filename * to write the expanded file it. It reads a line at a time, and * if the line includes an "@@" sequence, calls expandLine() to * expand the sequences. * * expandLine() looks for @@ sequences in the line, and when it finds * one, looks for a corresponding entry in the replaceTable[]. If it * finds one it writes the replacement value from the ap_table_t into * an output string. * * The helper function appendText() is used when expanding strings. It * is called to copy text into an output buffer. If the output buffer * is not big enough, it is expanded. This function also ensures that * the output buffer is null terminated after each append operation. * * A ap_table_t is used of values to replace, rather than just = hardcoding * the functionality, so we could replace additional values in the * future. We also take care to ensure that the expanded line can be * arbitrary length (though at the moment the lines read from the * configuration files can only be up to 2000 characters). */ /* * Table of items to replace. The "value" elements are filled in at = runtime * by FillInReplaceTable(). Note that the "tmpl" element is case * sensitive. */ typedef struct { char *tmpl; char *value; } REPLACEITEM; typedef REPLACEITEM *REPLACETABLE; REPLACEITEM replaceHttpd[] =3D { { "@@ServerRoot@@", NULL }, /* ServerRoot directory (i.e. install = dir) */ { NULL, NULL } }; /* * A relatively intelligent version of strcat, that expands the = destination * buffer if needed. * * On entry, ppBuf points to the output buffer, pnPos points to the = offset * of the current position within that buffer, and pnSize points to the * current size of *ppBuf. pSrc points to the string to copy into the = buffer, * and nToCopy gives the number of characters to copy from pSrc. * * On exit, *ppBuf, *pnPos and *pnSize may have been updated if the = output * buffer needed to be expanded. The output buffer will be null = terminated. * Returns 0 on success, -1 on error. Does not report errors to the = user. */ int appendText(char **ppBuf, int *pnPos, int *pnSize, char *pSrc, int = nToCopy) { char *pBuf =3D *ppBuf; /* output buffer */ int nPos =3D *pnPos; /* current offset into pBuf */ int nSize =3D *pnSize; /* current size of pBuf */ while (nPos + nToCopy >=3D nSize) { /* Not enough space, double size of output buffer. Note we use * >=3D not > so that we have enough space for the NULL character * in the output buffer */ char *pBufNew; pBufNew =3D realloc(pBuf, nSize * 2); if (!pBufNew) return -1; nSize *=3D 2; /* Update the max size and buffer pointer */ *pnSize =3D nSize; *ppBuf =3D pBuf =3D pBufNew; } /* Ok, now we have enough space, copy the stuff */ strncpy(pBuf+nPos, pSrc, nToCopy); nPos +=3D nToCopy; *pnPos =3D nPos; /* update current position */ pBuf[nPos] =3D '\0'; /* append trailing NULL */ return 0; } /* * Expand all the sequences in an input line. Returns a pointer to the * expanded line. The caller should free the returned data. * The replaceTable argument is a ap_table_t of sequences to expand. * * Returns NULL on error. Does not report errors to the user. */ char *expandLine(char *in, REPLACETABLE replaceTable) { REPLACEITEM *item; char *pos; /* current position in input buffer */ char *outbuf; /* output buffer */ int outbuf_size; /* current size of output buffer */ int outbuf_position; /* current position in output buffer */ char *start; /* position to copy from in input buffer */ /* Create an initial output buffer. Guess that twice the input size * is a good length, after expansion. Don't worry if we need more * though, appendText() will expand as needed. */ outbuf_size =3D strlen(in) * 2; outbuf_position =3D 0; outbuf =3D malloc(outbuf_size); if (!outbuf) return NULL; start =3D in; /* mark the start of uncopied data */ pos =3D in; /* current position in input buffer */ while (1) { /* Look for '@@' sequence, or end of input */ if (*pos && !(*pos =3D=3D '@' && *(pos+1) =3D=3D '@')) { pos++; continue; } if (!*pos) { /* End of input string, copy the uncopied data */ if (appendText(&outbuf, &outbuf_position, &outbuf_size,=20 start, pos-start) < 0) { return NULL; } break; } /* Found first @ of a possible token to replace. Look for end * of the token */ for (item =3D replaceTable; item->tmpl; ++item) { if (!strncmp(pos, item->tmpl, strlen(item->tmpl))) break; } if (item->tmpl) { /* Found match. First copy the uncopied data from the input * buffer (start through to pos-1), then copy the expanded * value. */ if (appendText(&outbuf, &outbuf_position, &outbuf_size, start, pos-start) < 0) { return NULL; } if (appendText(&outbuf, &outbuf_position, &outbuf_size, item->value, strlen(item->value)) < 0) { return NULL; } /* Update current position to skip over the input buffer * @@...@@ sequence, and update the "start" pointer to uncopied * data */ pos +=3D strlen(item->tmpl); start =3D pos; }=20 else { /* The sequence did not exist in the replace table, so copy * it as is to the output. */ pos++;=20 } } return outbuf; } /* * Some options to determine how we copy a file. Apart from OPT_NONE, = these should * be OR'able */ typedef enum {=20 OPT_NONE =3D 0,=20 OPT_OVERWRITE =3D 1, /* Always overwrite destination file */ OPT_EXPAND =3D 2, /* Expand any @@...@@ tokens in replaceHttpd = */ OPT_DELETESOURCE =3D 4, /* Delete the source file after the copy = */ OPT_SILENT =3D 8, /* Don't tell use about failures */ } options_t; /*=20 * Copy a file, expanding sequences from the replaceTable argument. * Returns 0 on success, -1 on error. Reports errors to user. */ #define MAX_INPUT_LINE 2000 int WINAPI ExpandConfFile(HWND hwnd, LPSTR szInst, LPSTR szinFile, LPSTR = szoutFile, REPLACETABLE replaceTable, options_t options) { char inFile[_MAX_PATH]; char outFile[_MAX_PATH]; char inbuf[MAX_INPUT_LINE]; FILE *infp; FILE *outfp; ap_snprintf(inFile, sizeof(inFile), "%s\\%s", szInst, szinFile); ap_snprintf(outFile, sizeof(outFile), "%s\\%s", szInst, szoutFile); if (!(infp =3D fopen(inFile, "r"))) { MessageBox_error(hwnd,=20 AP_WIN32ERROR, "Installation Problem", MB_OK | MB_ICONSTOP, "Cannot read file %s", inFile); return -1; } if (! (options & OPT_OVERWRITE)) { /* Overwrite not allowed if file does not exist */ if ((outfp =3D fopen(outFile, "r"))) { if (! (options & OPT_SILENT)) { MessageBox_error(hwnd, 0, "File not overwritten", MB_OK | MB_ICONWARNING, "Preserving existing file %s.\r\r" "The new version of this file has been left in %s",=20 outFile, inFile); } fclose(outfp); fclose(infp); return 0; } /* To get here, output file does not exist */ } if (!(outfp =3D fopen(outFile, "w"))) { MessageBox_error(hwnd,=20 AP_WIN32ERROR, "Installation Problem", MB_OK | MB_ICONSTOP, "Cannot write to file %s", outFile); fclose(infp); return -1; } while (fgets(inbuf, MAX_INPUT_LINE, infp)) { char *pos; char *outbuf; /* Quickly look to see if this line contains any * @@ tokens. If it doesn't, we don't need to bother * called expandLine() or taking a copy of the input * buffer. */ if (options & OPT_EXPAND) { for (pos =3D inbuf; *pos; ++pos) if (*pos =3D=3D '@' && *(pos+1) =3D=3D '@') break; } if (options & OPT_EXPAND && *pos) { /* The input line contains at least one '@@' sequence, so * call expandLine() to expand any sequences we know about. */ outbuf =3D expandLine(inbuf, replaceTable); if (outbuf =3D=3D NULL) { fclose(infp); fclose(outfp); MessageBox_error(hwnd, 0, "Installation Problem", MB_OK|MB_ICONSTOP, "An error occurred during installation"); return -1; } } else { outbuf =3D NULL; } /* If outbuf is NULL, we did not need to expand sequences, so * just output the contents of the input buffer. */ fwrite(outbuf ? outbuf : inbuf, 1,=20 strlen(outbuf ? outbuf : inbuf), outfp); if (outbuf) free(outbuf); } fclose(infp); fclose(outfp); LogMessage("COPY: expanded %s to %s", inFile, outFile); if (options & OPT_DELETESOURCE) { unlink(inFile); LogMessage("COPY: deleted file %s", inFile); } return 0; } int FillInReplaceTable(HWND hwnd, REPLACETABLE table, char *szInst) { REPLACEITEM *item; for (item =3D table; item->tmpl; ++item) { if (!strcmp(item->tmpl, "@@ServerRoot@@")) { char *p; #if NEED_SHORT_PATHS int len; len =3D GetShortPathName(szInst, NULL, 0); if (len > 0) { item->value =3D (char*)malloc(len+1); GetShortPathName(szInst, item->value, len); } #else if ((item->value =3D strdup(szInst)) =3D=3D NULL) return -1; #endif for (p =3D item->value; *p; p++) if (*p =3D=3D '\\') *p =3D '/'; LogMessage("FillInReplaceTable tmpl=3D%s value=3D%s", item->tmpl, = item->value); continue; } #if NEED_FQDN if (!strcmp(item->tmpl, "FQDN")) { item->value =3D GetHostName(hwnd); continue; } #endif } return 0; } /* * actionTable[] contains things we do when this DLL is called by = InstallShield * during the install. It is like a simple script, without us having to * worry about parsing, error checking, etc. * * Each item in the ap_table_t is of type ACTIONITEM. The first element = is the action=20 * to perform (e.g. CMD_COPY). The second and third elements are = filenames * (e.g. for CMD_COPY, the first filename is the source and the second = filename * is the destination). The final element of ACTIONITEM is a set of = options * which apply to the current "command". For example, OPT_EXPAND on a = CMD_COPY * line, tells the copy function to expand @@ServerRoot@@ tokens found = in the * source file. * * The contents of this ap_table_t are performed in order, top to = bottom. This lets * us expand the files to the *.conf.default names, then copy to *.conf = only * if the corresponding *.conf file does not already exist. If it does = exist, * it is not overwritten. * * Return 1 on success, 0 on error. */ typedef enum { CMD_COPY =3D 0, CMD_RMDIR, CMD_RM, CMD_END } cmd_t; typedef struct { cmd_t command; char *in; char *out; options_t options; } ACTIONITEM; typedef ACTIONITEM *ACTIONTABLE; ACTIONITEM actionTable[] =3D { /* * Installation of the configuraton files. These are installed into = the ".tmp" * directory by the installer. We first move them to conf\*.default = (overwriting * any *.default file from a previous install). The *.conf-dist-win = files * are also expanded for any @@...@@ tokens. Then we copy the = conf\*.default * file to corresponding conf\* file, unless that would overwrite an = existing file. */ { CMD_COPY, ".tmp\\mime.types", "conf\\mime.types.default", OPT_OVERWRITE|OPT_DELETESOURCE }, { CMD_COPY, ".tmp\\magic", "conf\\magic.default", OPT_OVERWRITE|OPT_DELETESOURCE }, { CMD_COPY, ".tmp\\httpd.conf-dist-win", "conf\\httpd.conf.default", = OPT_OVERWRITE|OPT_EXPAND|OPT_DELETESOURCE }, { CMD_COPY, ".tmp\\srm.conf-dist-win", "conf\\srm.conf.default",=20 OPT_OVERWRITE|OPT_EXPAND|OPT_DELETESOURCE }, { CMD_COPY, ".tmp\\access.conf-dist-win", = "conf\\access.conf.default",=20 OPT_OVERWRITE|OPT_EXPAND|OPT_DELETESOURCE }, /* Now copy to the 'live' files, unless they already exist */ { CMD_COPY, "conf\\httpd.conf.default", "conf\\httpd.conf", OPT_NONE = }, { CMD_COPY, "conf\\srm.conf.default", "conf\\srm.conf", OPT_NONE }, { CMD_COPY, "conf\\access.conf.default", "conf\\access.conf", = OPT_NONE }, { CMD_COPY, "conf\\magic.default", "conf\\magic", OPT_NONE }, { CMD_COPY, "conf\\mime.types.default", "conf\\mime.types", OPT_NONE = }, { CMD_COPY, ".tmp\\highperformance.conf-dist", = "conf\\highperformance.conf-dist",=20 OPT_EXPAND|OPT_OVERWRITE|OPT_DELETESOURCE }, { CMD_RMDIR, ".tmp", NULL }, { CMD_END, NULL, NULL, OPT_NONE } }; /* * BeforeExit() is the DLL call from InstallShield. The arguments and * return value as defined by the installer. We are only interested * in the install directory, szInst. Return 0 on error and 1 on * success (!?). */ CHAR WINAPI BeforeExit(HWND hwnd, LPSTR szSrcDir, LPSTR szSupport, LPSTR = szInst, LPSTR szRes) { ACTIONITEM *pactionItem; int end =3D 0; OpenLog(hwnd, szInst, "install.log"); LogMessage("STARTED %s", VERSION); LogMessage("src=3D%s support=3D%s inst=3D%s", szSrcDir, szSupport, szInst); FillInReplaceTable(hwnd, replaceHttpd, szInst); pactionItem =3D actionTable; while (!end) { LogMessage("command=3D%d 1in=3D%s out=3D%s options=3D%d", pactionItem->command, pactionItem->in ? pactionItem->in : "NULL", pactionItem->out ? pactionItem->out : "NULL", pactionItem->options); switch(pactionItem->command) { case CMD_END: end =3D 1; break; case CMD_COPY: if (ExpandConfFile(hwnd, szInst,=20 pactionItem->in,=20 pactionItem->out, replaceHttpd, pactionItem->options) < 0) { /* Error has already been reported to the user */ return 0; } break; case CMD_RM: { char inFile[MAX_INPUT_LINE]; ap_snprintf(inFile, sizeof(inFile), "%s\\%s", szInst, = pactionItem->in); if (unlink(inFile) < 0 && !(pactionItem->options & OPT_SILENT)) { MessageBox_error(hwnd, AP_WIN32ERROR, "Error during configuration", MB_ICONHAND, "Could not remove file %s",=20 inFile); return 0; } LogMessage("RM: deleted file %s", inFile); break; } case CMD_RMDIR: { char inFile[MAX_INPUT_LINE]; ap_snprintf(inFile, sizeof(inFile), "%s\\%s", szInst, = pactionItem->in); if (rmdir(inFile) < 0) { MessageBox_error(hwnd, AP_WIN32ERROR, "Error during configuration", MB_ICONHAND, "Could not delete temporary directory %s",=20 inFile); return 0; } LogMessage("RMDIR: deleted directory %s", inFile); break; } default: MessageBox_error(hwnd, 0, "Error during configuration", MB_ICONHAND, "An error has occurred during configuration\r" "(Error: unknown command %d)", (int)pactionItem->command); end =3D 1; break; } pactionItem++; } LogMessage("FINISHED OK"); CloseLog(); return 1; } BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID = lpvReserved) { if (fdwReason =3D=3D DLL_PROCESS_ATTACH) hInstance =3D hInstDLL; return TRUE; } ------=_NextPart_000_0002_01BF928B.D1CAC6E0 Content-Type: application/octet-stream; name="install.dsp" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="install.dsp" # Microsoft Developer Studio Project File - Name=3D"install" - Package = Owner=3D<4> # Microsoft Developer Studio Generated Build File, Format Version 5.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=3Dinstall - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using = NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE=20 !MESSAGE NMAKE /f "install.mak". !MESSAGE=20 !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE=20 !MESSAGE NMAKE /f "install.mak" CFG=3D"install - Win32 Debug" !MESSAGE=20 !MESSAGE Possible choices for configuration are: !MESSAGE=20 !MESSAGE "install - Win32 Release" (based on\ "Win32 (x86) Dynamic-Link Library") !MESSAGE "install - Win32 Debug" (based on "Win32 (x86) Dynamic-Link = Library") !MESSAGE=20 # Begin Project # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=3Dcl.exe MTL=3Dmidl.exe RSC=3Drc.exe !IF "$(CFG)" =3D=3D "install - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D = "_WINDOWS" /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../../include" /D "WIN32" /D = "NDEBUG" /D "_WINDOWS" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=3Dbscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=3Dlink.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib = comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib = odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib = advapi32.lib shell32.lib wsock32.lib /nologo /subsystem:windows /dll = /machine:I386 !ELSEIF "$(CFG)" =3D=3D "install - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" = /D "_WINDOWS" /FD /c # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../../../include" /D = "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=3Dbscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=3Dlink.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib = comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib = odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug = /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib = advapi32.lib shell32.lib wsock32.lib /nologo /subsystem:windows /dll = /debug /machine:I386 /pdbtype:sept !ENDIF=20 # Begin Target # Name "install - Win32 Release" # Name "install - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "" # Begin Source File SOURCE=3D..\..\..\..\lib\apr\lib\apr_snprintf.c # End Source File # Begin Source File SOURCE=3D.\install.c # End Source File # Begin Source File SOURCE=3D.\install.def # End Source File # End Group # End Target # End Project ------=_NextPart_000_0002_01BF928B.D1CAC6E0 Content-Type: application/octet-stream; name="install.mak" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="install.mak" # Microsoft Developer Studio Generated NMAKE File, Based on install.dsp !IF "$(CFG)" =3D=3D "" CFG=3Dinstall - Win32 Debug !MESSAGE No configuration specified. Defaulting to install - Win32 = Debug. !ENDIF=20 !IF "$(CFG)" !=3D "install - Win32 Release" && "$(CFG)" !=3D\ "install - Win32 Debug" !MESSAGE Invalid configuration "$(CFG)" specified. !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE=20 !MESSAGE NMAKE /f "install.mak" CFG=3D"install - Win32 Debug" !MESSAGE=20 !MESSAGE Possible choices for configuration are: !MESSAGE=20 !MESSAGE "install - Win32 Release" (based on\ "Win32 (x86) Dynamic-Link Library") !MESSAGE "install - Win32 Debug" (based on "Win32 (x86) Dynamic-Link = Library") !MESSAGE=20 !ERROR An invalid configuration is specified. !ENDIF=20 !IF "$(OS)" =3D=3D "Windows_NT" NULL=3D !ELSE=20 NULL=3Dnul !ENDIF=20 !IF "$(CFG)" =3D=3D "install - Win32 Release" OUTDIR=3D.\Release INTDIR=3D.\Release # Begin Custom Macros OutDir=3D.\Release # End Custom Macros !IF "$(RECURSE)" =3D=3D "0"=20 ALL : "$(OUTDIR)\install.dll" !ELSE=20 ALL : "$(OUTDIR)\install.dll" !ENDIF=20 CLEAN : -@erase "$(INTDIR)\apr_snprintf.obj" -@erase "$(INTDIR)\install.obj" -@erase "$(INTDIR)\vc50.idb" -@erase "$(OUTDIR)\install.dll" -@erase "$(OUTDIR)\install.exp" -@erase "$(OUTDIR)\install.lib" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=3Dcl.exe CPP_PROJ=3D/nologo /MT /W3 /GX /O2 /I "../../../../lib/apr/include" /D = "WIN32" /D\ "NDEBUG" /D "_WINDOWS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c=20 CPP_OBJS=3D.\Release/ CPP_SBRS=3D. .c{$(CPP_OBJS)}.obj:: $(CPP) @<< $(CPP_PROJ) $<=20 << .cpp{$(CPP_OBJS)}.obj:: $(CPP) @<< $(CPP_PROJ) $<=20 << .cxx{$(CPP_OBJS)}.obj:: $(CPP) @<< $(CPP_PROJ) $<=20 << .c{$(CPP_SBRS)}.sbr:: $(CPP) @<< $(CPP_PROJ) $<=20 << .cpp{$(CPP_SBRS)}.sbr:: $(CPP) @<< $(CPP_PROJ) $<=20 << .cxx{$(CPP_SBRS)}.sbr:: $(CPP) @<< $(CPP_PROJ) $<=20 << MTL=3Dmidl.exe MTL_PROJ=3D/nologo /D "NDEBUG" /mktyplib203 /o NUL /win32=20 RSC=3Drc.exe BSC32=3Dbscmake.exe BSC32_FLAGS=3D/nologo /o"$(OUTDIR)\install.bsc"=20 BSC32_SBRS=3D \ =09 LINK32=3Dlink.exe LINK32_FLAGS=3Dkernel32.lib user32.lib gdi32.lib winspool.lib = comdlg32.lib\ advapi32.lib shell32.lib wsock32.lib /nologo /subsystem:windows /dll\ /incremental:no /pdb:"$(OUTDIR)\install.pdb" /machine:I386 = /def:".\install.def"\ /out:"$(OUTDIR)\install.dll" /implib:"$(OUTDIR)\install.lib"=20 DEF_FILE=3D \ ".\install.def" LINK32_OBJS=3D \ "$(INTDIR)\apr_snprintf.obj" \ "$(INTDIR)\install.obj" "$(OUTDIR)\install.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" =3D=3D "install - Win32 Debug" OUTDIR=3D.\Debug INTDIR=3D.\Debug # Begin Custom Macros OutDir=3D.\Debug # End Custom Macros !IF "$(RECURSE)" =3D=3D "0"=20 ALL : "$(OUTDIR)\install.dll" !ELSE=20 ALL : "$(OUTDIR)\install.dll" !ENDIF=20 CLEAN : -@erase "$(INTDIR)\apr_snprintf.obj" -@erase "$(INTDIR)\install.obj" -@erase "$(INTDIR)\vc50.idb" -@erase "$(INTDIR)\vc50.pdb" -@erase "$(OUTDIR)\install.dll" -@erase "$(OUTDIR)\install.exp" -@erase "$(OUTDIR)\install.ilk" -@erase "$(OUTDIR)\install.lib" -@erase "$(OUTDIR)\install.pdb" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=3Dcl.exe CPP_PROJ=3D/nologo /MTd /W3 /Gm /GX /Zi /Od /I = "../../../../lib/apr/include" /D\ "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD = /c=20 CPP_OBJS=3D.\Debug/ CPP_SBRS=3D. .c{$(CPP_OBJS)}.obj:: $(CPP) @<< $(CPP_PROJ) $<=20 << .cpp{$(CPP_OBJS)}.obj:: $(CPP) @<< $(CPP_PROJ) $<=20 << .cxx{$(CPP_OBJS)}.obj:: $(CPP) @<< $(CPP_PROJ) $<=20 << .c{$(CPP_SBRS)}.sbr:: $(CPP) @<< $(CPP_PROJ) $<=20 << .cpp{$(CPP_SBRS)}.sbr:: $(CPP) @<< $(CPP_PROJ) $<=20 << .cxx{$(CPP_SBRS)}.sbr:: $(CPP) @<< $(CPP_PROJ) $<=20 << MTL=3Dmidl.exe MTL_PROJ=3D/nologo /D "_DEBUG" /mktyplib203 /o NUL /win32=20 RSC=3Drc.exe BSC32=3Dbscmake.exe BSC32_FLAGS=3D/nologo /o"$(OUTDIR)\install.bsc"=20 BSC32_SBRS=3D \ =09 LINK32=3Dlink.exe LINK32_FLAGS=3Dkernel32.lib user32.lib gdi32.lib winspool.lib = comdlg32.lib\ advapi32.lib shell32.lib wsock32.lib /nologo /subsystem:windows /dll\ /incremental:yes /pdb:"$(OUTDIR)\install.pdb" /debug /machine:I386\ /def:".\install.def" /out:"$(OUTDIR)\install.dll"\ /implib:"$(OUTDIR)\install.lib" /pdbtype:sept=20 DEF_FILE=3D \ ".\install.def" LINK32_OBJS=3D \ "$(INTDIR)\apr_snprintf.obj" \ "$(INTDIR)\install.obj" "$(OUTDIR)\install.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ENDIF=20 !IF "$(CFG)" =3D=3D "install - Win32 Release" || "$(CFG)" =3D=3D\ "install - Win32 Debug" SOURCE=3D..\..\..\..\lib\apr\lib\apr_snprintf.c !IF "$(CFG)" =3D=3D "install - Win32 Release" DEP_CPP_APR_S=3D\ "..\..\..\..\..\..\..\platform sdk\include\basetsd.h"\ "..\..\..\..\..\..\..\platform sdk\include\guiddef.h"\ "..\..\..\..\..\..\..\platform sdk\include\msxml.h"\ "..\..\..\..\..\..\..\platform sdk\include\propidl.h"\ "..\..\..\..\..\..\..\platform sdk\include\qos.h"\ "..\..\..\..\..\..\..\platform sdk\include\rpcasync.h"\ "..\..\..\..\..\..\..\platform sdk\include\tvout.h"\ "..\..\..\..\..\..\..\platform sdk\include\winefs.h"\ "..\..\..\..\..\..\..\platform sdk\include\winscard.h"\ "..\..\..\..\..\..\..\platform sdk\include\winsmcrd.h"\ "..\..\..\..\lib\apr\include\apr_errno.h"\ "..\..\..\..\lib\apr\include\apr_file_io.h"\ "..\..\..\..\lib\apr\include\apr_general.h"\ "..\..\..\..\lib\apr\include\apr_lib.h"\ "..\..\..\..\lib\apr\include\apr_thread_proc.h"\ "..\..\..\..\lib\apr\include\apr_time.h"\ "..\..\..\..\lib\apr\include\apr_win.h"\ "..\..\..\..\lib\apr\include\apr_winconfig.h"\ =09 "$(INTDIR)\apr_snprintf.obj" : $(SOURCE) $(DEP_CPP_APR_S) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" =3D=3D "install - Win32 Debug" DEP_CPP_APR_S=3D\ "..\..\..\..\..\..\..\platform sdk\include\basetsd.h"\ "..\..\..\..\..\..\..\platform sdk\include\guiddef.h"\ "..\..\..\..\..\..\..\platform sdk\include\msxml.h"\ "..\..\..\..\..\..\..\platform sdk\include\propidl.h"\ "..\..\..\..\..\..\..\platform sdk\include\qos.h"\ "..\..\..\..\..\..\..\platform sdk\include\rpcasync.h"\ "..\..\..\..\..\..\..\platform sdk\include\tvout.h"\ "..\..\..\..\..\..\..\platform sdk\include\winefs.h"\ "..\..\..\..\..\..\..\platform sdk\include\winscard.h"\ "..\..\..\..\..\..\..\platform sdk\include\winsmcrd.h"\ "..\..\..\..\lib\apr\include\apr_errno.h"\ "..\..\..\..\lib\apr\include\apr_file_io.h"\ "..\..\..\..\lib\apr\include\apr_general.h"\ "..\..\..\..\lib\apr\include\apr_lib.h"\ "..\..\..\..\lib\apr\include\apr_thread_proc.h"\ "..\..\..\..\lib\apr\include\apr_time.h"\ "..\..\..\..\lib\apr\include\apr_win.h"\ "..\..\..\..\lib\apr\include\apr_winconfig.h"\ =09 "$(INTDIR)\apr_snprintf.obj" : $(SOURCE) $(DEP_CPP_APR_S) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF=20 SOURCE=3D.\install.c !IF "$(CFG)" =3D=3D "install - Win32 Release" DEP_CPP_INSTA=3D\ "..\..\..\..\..\..\..\platform sdk\include\basetsd.h"\ "..\..\..\..\..\..\..\platform sdk\include\guiddef.h"\ "..\..\..\..\..\..\..\platform sdk\include\msxml.h"\ "..\..\..\..\..\..\..\platform sdk\include\propidl.h"\ "..\..\..\..\..\..\..\platform sdk\include\qos.h"\ "..\..\..\..\..\..\..\platform sdk\include\rpcasync.h"\ "..\..\..\..\..\..\..\platform sdk\include\tvout.h"\ "..\..\..\..\..\..\..\platform sdk\include\winefs.h"\ "..\..\..\..\..\..\..\platform sdk\include\winscard.h"\ "..\..\..\..\..\..\..\platform sdk\include\winsmcrd.h"\ "..\..\..\..\lib\apr\include\apr_errno.h"\ "..\..\..\..\lib\apr\include\apr_file_io.h"\ "..\..\..\..\lib\apr\include\apr_general.h"\ "..\..\..\..\lib\apr\include\apr_lib.h"\ "..\..\..\..\lib\apr\include\apr_thread_proc.h"\ "..\..\..\..\lib\apr\include\apr_time.h"\ "..\..\..\..\lib\apr\include\apr_win.h"\ "..\..\..\..\lib\apr\include\apr_winconfig.h"\ =09 "$(INTDIR)\install.obj" : $(SOURCE) $(DEP_CPP_INSTA) "$(INTDIR)" !ELSEIF "$(CFG)" =3D=3D "install - Win32 Debug" DEP_CPP_INSTA=3D\ "..\..\..\..\..\..\..\platform sdk\include\basetsd.h"\ "..\..\..\..\..\..\..\platform sdk\include\guiddef.h"\ "..\..\..\..\..\..\..\platform sdk\include\msxml.h"\ "..\..\..\..\..\..\..\platform sdk\include\propidl.h"\ "..\..\..\..\..\..\..\platform sdk\include\qos.h"\ "..\..\..\..\..\..\..\platform sdk\include\rpcasync.h"\ "..\..\..\..\..\..\..\platform sdk\include\tvout.h"\ "..\..\..\..\..\..\..\platform sdk\include\winefs.h"\ "..\..\..\..\..\..\..\platform sdk\include\winscard.h"\ "..\..\..\..\..\..\..\platform sdk\include\winsmcrd.h"\ "..\..\..\..\lib\apr\include\apr_errno.h"\ "..\..\..\..\lib\apr\include\apr_file_io.h"\ "..\..\..\..\lib\apr\include\apr_general.h"\ "..\..\..\..\lib\apr\include\apr_lib.h"\ "..\..\..\..\lib\apr\include\apr_thread_proc.h"\ "..\..\..\..\lib\apr\include\apr_time.h"\ "..\..\..\..\lib\apr\include\apr_win.h"\ "..\..\..\..\lib\apr\include\apr_winconfig.h"\ =09 "$(INTDIR)\install.obj" : $(SOURCE) $(DEP_CPP_INSTA) "$(INTDIR)" !ENDIF=20 !ENDIF=20 ------=_NextPart_000_0002_01BF928B.D1CAC6E0--