You are viewing a plain text version of this content. The canonical link for it is here.
Posted to test-dev@httpd.apache.org by "William A. Rowe, Jr." <wr...@apache.org> on 2003/02/04 17:33:24 UTC
Re: [PATCH] flood: Fixed floodenv.bat environment problem in
Makefile.win.
I liked the earlier patch to enable/disable OpenSSL. But the patches
below indicate why we don't use batch files... we can't go digging
throughout the system and order the various VisualStudios and
PlatformSDKs correctly; that has to be up to the developer.
SO...
The update to VisualStudio 6.0 format? +1
Cleaning up the SSL envvars list and detection? +1
Using floodenv as an 'invoker' of make? --1
Let me take your patches and experiment later today. I believe we
can use this general structure to create a 'config' set of envvars that
can be #include'd into makefile.win. This gets the developer back
to nmake'ing -f makefile.win - after they've run a configure.bat style
app to set up the SSL environment (and perhaps - even capture the
then-current state of the compiler options so that 'memory' of /useenv
is consistent from then on.)
I should have a better sense for this by tomorrow.
Bill
At 08:32 PM 2/3/2003, ptran@pobox.com wrote:
>Summary:
> Fixed floodenv.bat environment problem in Makefile.win.
>
>This submission fixes the floodenv.bat environment problem. This problem
>occurs when Makefile.win tries to set up variables for use by external
>prorams using floodenv.bat. For example, Makefile.win invokes MSDEV
>like this:
> floodenv.bat
> msdev flood.dsw /useenv /make ...
>The invocation of floodenv.bat and MSDEV occur in independent
>environments, so MSDEV does not inherit the environment variables set
>by floodenv.bat. For the build to complete, you need to generate and
>invoke floodenv.bat before building with NMAKE and Makefile.win.
>For example:
> nmake -f makefile.win floodenv.bat
> floodenv.bat
> nmake -f makefile.win
>
>This patch fixes the problem by allowing Makefile.win to tell floodenv.bat
>to set up the environment variables and optionally run some commands in
>the new environment. When we need to invoke an external program like
>DevStudio, we tell floodenv.bat to execute the program so that it gets
>a properly initialized environment. The arguments to floodenv.bat
>are optional, so you can still set up your environment using just
>floodenv.bat.
>
>NOTE: This patch is based on the patch for building without OpenSSL.
>I sent this patch in an e-mail titled:
> [PATCH] flood: Fixed Win32 build when not using OpenSSL
>
>Below is a summary of the file changes.
>
> * Added macro CFG_FLOOD to consolidate all the places
> that evaluate:
> flood - Win32 $(LONG)
> They now just reference $(CFG_FLOOD).
> * Added commentary to our floodenv.bat target.
> * The floodenv.bat target no longer inserts an:
> @echo off
> at the top of the file. We now suppress the output
> of each line with a leading "@" symbol. We do so
> because we want the line invoking the optional
> external command to echo the command so we can tell
> what arguments and options are used.
> * The floodenv.bat target now also writes to "$@", which
> is "floodenv.bat". The usage helps minimize the places
> that use "floodenv.bat", thereby making it easier to
> maintain if we need to change the name in the future.
> * Changed floodenv.bat so that when we specify optional
> arguments to it, then it will execute the commands.
> If you do not specify arguments, you get the old
> behavior---floodenv.bat sets up your environment
> and then exits.
> * Created new macros to represent the different build
> tools we use:
> DEVENV_FLOOD: Uses DEVENV.
> MAKE_FLOOD: Uses NMAKE to invoke flood.mak
> (you need to generate flood.mak from within
> DevStudio).
> MSDEV_FLOOD: Uses MSDEV to invoke the VC6 flood.dsp
> using the flood.dsw.
> * Consolidated the build and clean targets with the new
> macros:
> DEVENV_FLOOD, MAKE_FLOOD, MSDEV_FLOOD
> These macros consolidate the usage between the build and
> clean targets. Several of the redundancy spread across
> multiple lines are now in macros, and their uses are
> simpler single lines.
> * Added .a and .y files to the clean target. They are
> "generated" files from the "install" target.
>
>--- Makefile.win.orig Mon Feb 03 13:55:57 2003
>+++ Makefile.win Mon Feb 03 17:56:40 2003
>@@ -101,16 +101,31 @@
> LONG=Release
> !ENDIF
>
>+CFG_FLOOD = flood - Win32 $(LONG)
>+
>+# Floodenv.bat sets up environment variables and will optionally
>+# execute any command in the new environment. If we're guaranteed we
>+# ran on Windows NT and newer versions, then we can make use of:
>+# goto :EOF
>+# instead of:
>+# goto :end
>+# and
>+# %*
>+# instead of:
>+# %1 ... %9
>+# See "goto /?" and "call /?" for details.
> floodenv.bat: Makefile.win
>- echo @echo off>floodenv.bat
>- echo set SRCLIB=$(SRCLIB)>>floodenv.bat
>- echo set APRPATH=$(APRPATH)>>floodenv.bat
>- echo set APRUTILPATH=$(APRUTILPATH)>>floodenv.bat
>- echo set OPENSSLPATH=$(OPENSSLPATH)>>floodenv.bat
>- echo set REGEXPATH=$(REGEXPATH)>>floodenv.bat
>+ echo @set SRCLIB=$(SRCLIB)>$@
>+ echo @set APRPATH=$(APRPATH)>>$@
>+ echo @set APRUTILPATH=$(APRUTILPATH)>>$@
>+ echo @set OPENSSLPATH=$(OPENSSLPATH)>>$@
>+ echo @set REGEXPATH=$(REGEXPATH)>>$@
> !IF "$(HAVE_SSL)" == "1"
>- echo set LINKSSL=libeay32.lib ssleay32.lib /libpath:"$(SSLBIN)">>floodenv.bat
>+ echo @set LINKSSL=libeay32.lib ssleay32.lib /libpath:"$(SSLBIN)">>$@
> !ENDIF
>+ echo @if "%%1" == "" goto :end>>$@
>+ echo call %%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9 1>>$@
>+ echo :end>>$@
>
> regex.h: $(REGEXPATH)\pcreposix.h
> copy "$(REGEXPATH)\pcreposix.h" regex.h < <<
>@@ -146,41 +161,28 @@
> !ENDIF
> !ENDIF
>
>-!IF EXIST("flood.mak")
>-
>-clean:
>- -floodenv.bat
>- $(MAKE) $(MAKEOPT) -f flood.mak CFG="flood - Win32 $(LONG)" RECURSE=0 CLEAN
>- del config.h floodenv.bat regex.h
>-
>-build: config.h
>- floodenv.bat
>- $(MAKE) $(MAKEOPT) -f flood.mak CFG="flood - Win32 $(LONG)" RECURSE=0
>+DEVENV_FLOOD = call floodenv.bat devenv flood.sln /useenv
>+MAKE_FLOOD = call floodenv.bat $(MAKE) $(MAKEOPT) -f flood.mak \
>+ "CFG=$(CFG_FLOOD)" "RECURSE=0"
>+MSDEV_FLOOD = call floodenv.bat msdev flood.dsw /useenv /make "$(CFG_FLOOD)"
>
>+clean: floodenv.bat
>+!IF EXIST("flood.mak")
>+ $(MAKE_FLOOD) CLEAN
> !ELSEIF EXIST("flood.sln")
>-
>-clean:
>- -floodenv.bat
>- devenv flood.sln /useenv /clean $(LONG) /project flood
>- del config.h floodenv.bat regex.h
>-
>-build: config.h
>- floodenv.bat
>- devenv flood.sln /useenv /build $(LONG) /project flood
>-
>+ $(DEVENV_FLOOD) /clean $(LONG) /project flood
> !ELSE
>-
>-clean:
>- -floodenv.bat
>- msdev flood.dsw /USEENV /MAKE \
>- "flood - Win32 $(LONG)" /CLEAN
>- del config.h floodenv.bat regex.h
>+ $(MSDEV_FLOOD) /clean
>+!ENDIF
>+ del .a .y config.h floodenv.bat regex.h
>
> build: config.h
>- floodenv.bat
>- msdev flood.dsw /USEENV /MAKE \
>- "flood - Win32 $(LONG)"
>-
>+!IF EXIST("flood.mak")
>+ $(MAKE_FLOOD)
>+!ELSEIF EXIST("flood.sln")
>+ $(DEVENV_FLOOD) /build $(LONG) /project flood
>+!ELSE
>+ $(MSDEV_FLOOD)
> !ENDIF
>
> install: