From: Andrew C. <ac...@us...> - 2003-12-23 00:20:39
|
Update of /cvsroot/planeshift/planeshift/mk/msvcgen In directory sc8-pr-cvs1:/tmp/cvs-serv14479/mk/msvcgen Added Files: Jamconfig mergeres.sh mkverres.sh msvcgen.mak msvcgen.pl msvcgen.sh required.mak win32.mak Log Message: Added stuff for msvc generation --- NEW FILE: Jamconfig --- # This is a Jamconfig which contains definitions for msvcgen # @@@ This is duplicated from $(TOP)/Jamconfig ... PACKAGE_NAME = "Planeshift" ; PACKAGE_VERSION = "0.1" ; PACKAGE_STRING = "Planeshift 0.1" ; PACKAGE_BUGREPORT = "pla...@li..." ; #PACKAGE.LONGNAME ?= "Planeshift" ; #PACKAGE.HOMEPAGE ?= "http://crystal.sourceforge.net/" ; #PACKAGE.COPYRIGHT ?= "Copyright (C)1998-2003 Jorrit Tyberghein and others" ; #PACKAGE.VERSION.LIST ?= 0 97 ; # Target PERL = "perl" ; TARGET = "msvc" ; TARGET.OS = "WIN32" ; TARGET.PROCESSOR = "X86" ; MODE = "debug" ; # msvcgen will create rules for debug and optimize USE_PLUGINS = "yes" ; # msvcgen flags MSVC.DEPEND = ; MSVC.LIBRARY = libcsengine libcsappframe libcsgeom libcsgfx libcstool libcsutil libcsws ; MSVC.LFLAGS = ; MSVC.CFLAGS = ; MSVC.DEPEND.appgui = ; MSVC.LIBRARY.appgui = wsock32 ; MSVC.LFLAGS.appgui = ; MSVC.CFLAGS.appgui = ; MSVC.DEPEND.appcon = ; MSVC.LIBRARY.appcon = wsock32 ; MSVC.LFLAGS.appcon = ; MSVC.CFLAGS.appcon = ; MSVC.DEPEND.plugin = ; MSVC.LIBRARY.plugin = wsock32 ; MSVC.LFLAGS.plugin = ; MSVC.CFLAGS.plugin = ; MSVC.DEPEND.library = ; MSVC.LIBRARY.library = ; MSVC.LFLAGS.library = ; MSVC.CFLAGS.library = ; # common flags (ignored from msvcgen) PYTHON.CFLAGS = "" ; PYTHON.LFLAGS = "" ; # Tools (this won't be used in the msvcmakefiles but only for the msvcgen run) CMD.MKDIR = "mkdir" ; CMD.MKDIRS = "mkdir -p" ; NASM.AVAILABLE = "no" ; PERL5.AVAILABLE = "no" ; PYTHON.AVAILABLE = "no" ; # I dont think we need these but i will see later. # Libraries #PTHREAD.AVAILABLE = "no" ; #X11.AVAILABLE = "no" ; #GL.AVAILABLE = "yes" ; #GL.CFLAGS = "" ; #GL.MSVCLIBS = "opengl32.lib" ; #GLU.AVAILABLE = "no" ; #GLX.AVAILABLE = "no" ; #ZLIB.AVAILABLE = "yes" ; #ZLIB.MSVCLIBS = "zlib.lib" ; #PNG.AVAILABLE = "yes" ; #PNG.MSVCLIBS = "libpng.lib" ; #JPEG.AVAILABLE = "yes" ; #JPEG.MSVCLIBS = "libjpeg.lib" ; #MNG.AVAILABLE = "yes" ; #MNG.MSVCLIBS = "libmng.lib" ; #MIKMOD.AVAILABLE = "no" ; #MIKMOD.MSVCLIBS = "mikmod.lib" ; #VORBISFILE.AVAILABLE = "yes" ; #VORBISFILE.MSVCLIBS = "vorbisfile.lib" "vorbis.lib" "ogg.lib" ; #3DS.AVAILABLE = "yes" ; #3DS.MSVCLIBS = "lib3ds-120.lib" ; #ODE.AVAILABLE = "yes" ; #ODE.MSVCLIBS = "ode.lib" ; #OPENAL.AVAILABLE = "yes" ; #OPENAL.MSVCLIBS = "openal32.lib" "alut.lib" ; #FT2.AVAILABLE = "yes" ; #FT2.CFLAGS = "-I \"..\\..\\include\\cssys\\win32\\freetype2\"" ; #FT2.MSVCLIBS = "freetype2.lib" ; #OSS.AVAILABLE = "no" ; #SOCKET.AVAILABLE = "yes" ; #SOCKET.MSVCLIBS = "wsock32.lib" ; #DIRECTX.AVAILABLE = "yes" ; #DIRECTX.MSVCLIBS = "dsound.lib" "ddraw.lib" ; #WAVEOUT.AVAILABLE = "yes" ; #WAVEOUT.MSVCLIBS = "winmm.lib" ; #CG.AVAILABLE = "yes" ; #CG.MSVCLIBS = "cg.lib" "cgGL.lib" ; # ok JAMCONFIG_READ = "yes" ; MSVCGEN_CONFIG = "yes" ; --- NEW FILE: mergeres.sh --- #!/bin/sh #------------------------------------------------------------------------------ # mergeres.sh # Merge one or more windows .rc files into one; fix some file paths. #------------------------------------------------------------------------------ outfile=$1 shift root=$1 shift fixup=$1 shift sources=$* root=`echo ${root} | sed "s:\.:\\.:g"` echo > ${outfile} for rcfile in ${sources}; do rcbase=`echo ${rcfile} | sed "s:.*/::"` rcbase=`echo ${rcbase} | sed "s:\.:\\.:g"` rcpath=`echo ${rcfile} | sed "s:${root}/::"` rcpath=`echo ${rcpath} | sed "s:${rcbase}$::"` # Replace icon file paths. Though not very flexible, it will do it as # long there isn't demand for any other type of resources... newpath=`echo "${fixup}/${rcpath}" | sed "s/\//\\\\\\\\\\\\//g"` # Older sed commands do not understand alternation (`|' operator), thus # \(ICON\|icon\) fails, so use two expressions instead. expression1="s:\(.*\) ICON \\\"\(.*\)\\\":\1 ICON \\\"${newpath}\2\\\":g" expression2="s:\(.*\) icon \\\"\(.*\)\\\":\1 icon \\\"${newpath}\2\\\":g" cat ${rcfile} | sed "${expression1};${expression2}" >> ${outfile} echo >> ${outfile} done --- NEW FILE: mkverres.sh --- #!/bin/sh #------------------------------------------------------------------------------ # mkverres.sh # make a windows version resource. #------------------------------------------------------------------------------ outfile=$1 description=$2 if test -n "$3"; then verfile=$3 else verfile=include/csver.h fi vmajor=`sed -e '/#define[ ][ ]*CS_VERSION_MAJOR/!d' -e 's/#define[ ][ ]*CS_VERSION_MAJOR[ ][ ]*CS_VER_QUOTE(\(..*\)).*/\1/' < ${verfile}` vminor=`sed -e '/#define[ ][ ]*CS_VERSION_MINOR/!d' -e 's/#define[ ][ ]*CS_VERSION_MINOR[ ][ ]*CS_VER_QUOTE(\(..*\)).*/\1/' < ${verfile}` vminor=`echo ${vminor} | sed -e 's/[^0-9]//g'` if [ -z "$vminor" ]; then vminor=0 fi fileversion=`echo "${vmajor},${vminor},0" | sed -e 's/\./,/'` cat > ${outfile} << EOF // This file is automatically generated. #include "volatile.h" #include "csver.h" #define CS_VERSION_W_DATE CS_VERSION " (" CS_RELEASE_DATE ")" 1 VERSIONINFO FILEVERSION ${fileversion} PRODUCTVERSION ${fileversion} #ifdef CS_DEBUG FILEFLAGS 0x1 #else FILEFLAGS 0x0 #endif { BLOCK "StringFileInfo" { BLOCK "040904E4" { VALUE "ProductName", "CrystalSpace" VALUE "ProductVersion", CS_VERSION_W_DATE VALUE "FileVersion", CS_VERSION_NUMBER VALUE "LegalCopyright", "(C)1998-2003 Jorrit Tyberghein and others." VALUE "FileDescription", "${description}" #ifdef CS_DEBUG VALUE "Comments", "Debug build" #else VALUE "Comments", "Release build" #endif VALUE "WWW", "http://crystal.sourceforge.net/" } } } EOF --- NEW FILE: msvcgen.mak --- #============================================================================== # # Automatic MSVC-compliant DSW and DSP generation makefile # Copyright (C) 2000-2003 by Eric Sunshine <sun...@su...> # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #============================================================================== #------------------------------------------------------------------------------ # msvcgen.mak # # A makefile for synthesizing a complete set of MSVC-compliant workspace # and project files based upon information gleaned from GNU makefiles # project-wide. # # This process strives to enforce the fundamental invariant that if the # GNU makefile builds a working target (application, plug-in, library, # etc.), then the synthesized workspace (DSW/SLN) and project files # (DSP/VCPROJ) will also build a working target. Thus, the headache # associated with manual maintenance of the MSVC project files becomes a # problem of the past. # # IMPORTS # In the discussion which follows, assume that "PROJECT" is the core name # of the module represented by a particular makefile. # # The following general-purpose makefile variables are imported from # other makefiles, project-wide, in order to glean information needed to # generate MSVC project files. # # o SRC.PROJECT -- List of source files which comprise this module. # # o INC.PROJECT -- List of header files related to this module. # # o DEP.PROJECT -- List of projects (typically library projects) upon # which this module depends. Each item in this list is the core name # of some other module, such as "CSGEOM", "CSUTIL", or "CSTOOL". # # o INF.PROJECT -- The meta-data file for this project. This optional # file contains information related to this project which can be # accessed at run-time. For example, for plugin modules, the meta-data # file (in XML format) contains information about the SCF classes # published by the plugin, in addition to other information the plugin # might want to publish. Typically, the meta-data file has the same # basename as the generated target (see DSP.PROJECT.NAME), but with a # different file extension. For instance, .csplugin is the extension # used for meta-data files for plugin modules. # # o CFG.PROJECT -- List of configuration files related to this module. # # Furthermore, the following variables specifically control DSW and # DSP project file creation. These variables should only appear in # makefiles for which a corresponding DSP file should be generated. # # o MSVC.DSP -- Master list of modules for which project files should be # generated. Entries must be *appended* to this list with the "+=" # operator. Each entry is the core name of a module as used within its # makefile. For example, soft3d.mak, modifies this variable with the # expression "MSVC.DSP += SOFT3D". # # o DSP.PROJECT.NAME -- Base name (such as "soft3d") for the generated # project and target. This name is used to compose the DSP file name, # the end target name (such as "soft3d.dll"), and the displayed project # name in the Visual-C++ IDE. In general, it should be identical to # the base name of the target which is generated for non-Windows # platforms. # # o DSP.PROJECT.TYPE -- Module's type. It should be one of "appgui", # "appcon", "library", "plugin", or "group", which stand for GUI # application, console application, static library, plug-in module, and # pseudo-dependency group, respectively. # # o DSP.PROJECT.RESOURCES -- List of extra human-readable resources # related to this module which are not covered by CFG.PROJECT. These # resources are made available for browsing in the Visual-C++ IDE as a # convenience to the user. Some good candidates, among others, for # this variable are files having the suffixes .inc, .y (yacc), .l # (lex), and .txt. # # o $(PROJECT.EXE).WINRSRC -- List of .rc files related to this project. # These files are combined and fed to MSVC's resource compiler. Note # that this is expanded with $($(PROJECT.EXE).WINRSRC). # # o DSP.PROJECT.DEPEND -- List of extra dependencies for this module. # Entries in this list have the same format as those in the DEP.PROJECT # list. This variable is generally only used for pseudo-dependency # group projects (see CS/mk/msvcgen/win32.mak). # # o DSP.PROJECT.LIBS -- List of extra Windows-specific libraries with # which this module should be linked in addition to those already # mentioned in the template file for this project type. A .lib suffix # is automatically added to each item in this list if absent. # Typically, libraries are only specified for executable and plug-in # projects. This variable differs from DSP.PROJECT.DEPEND in that it # refers to libraries which exist outside of the project graph (such as # wsock32.lib or opengl32.lib), whereas DSP.PROJECT.DEPEND always # refers to modules which are members of the project graph. # # o DSP.PROJECT.DELAYLIBS -- List of DLLs (sans suffix) which should be # delay-loaded (that is, they are not loaded when the # application/plugin itself is loaded, but rather the first time a # contained function is invoked.) # # o DSP.PROJECT.LFLAGS -- Specifies extra Windows-specific linker options # which should be used in addition to those already mentioned in the # template file. Typically, linker options are only specified for # executable and plug-in projects. Keep in mind that these flags are # passed through the (Bourne) shell during the project file generation # process, thus it may be necessary to specially protect any embedded # quote characters. # # o DSP.PROJECT.CFLAGS -- Specifies extra Windows-specific compiler # options which should be used in addition to those already mentioned # in the template file. Keep in mind that these flags are passed # through the (Bourne) shell during the project file generation # process, thus it may be necessary to specially protect embedded quote # characters. # # The automatic MSVC project file generation mechanism also employs # additional makefile components from the CS/mk/msvcgen directory. # # o win32.mak -- Extends MSVC.DSP with extra project targets which are # specific to Windows or which are not otherwise represented by # stand-alone makefiles within the project hierarchy. # # o required.mak -- Sets the value of the MSVC.PLUGINS.REQUIRED and # MSVC.MAKE.FLAGS variables. MSVC.PLUGINS.REQUIRED supplements the # list of plug-in modules defined by the PLUGINS variable (see # CS/mk/user.mak) and ensures that the correct set of DSP files are # generated even when invoking the project file generation process from # a non-Windows platform such as Unix. MSVC.MAKE.FLAGS allows # additional flags to be sent to the child "make" invocation. This is # useful when one needs to define additional make variables which # affect the synthesis process. # # EXPORTS # The following files are exported by this makefile: # # o A DSP/VCPROJ project file is generated for each project mentioned by # the MSVC.DSP variable. # # o A single DSW/SLN workspace file, named psall.dsw/csall.sln, is # generated. It contains dependency information for all generated # DSP/VCPROJ projects. # # The following makefile targets are exported: # # o msvc6gen -- Generates the MSVC6 DSW workspace psall.dsw, as well as # one DSP project files for each module mentioned by the MSVC.DSP # variable. # # o msvc7gen -- Generates the MSVC7 SLN workspace psall.sln, as well as # one VCPROJ project files for each module mentioned by the MSVC.DSP # variable. # # o msvc6inst -- Copies the newly generated DSW and DSP files over top of # the existing files from the CVS repository and informs the user as to # exactly which CVS commands must be invoked in order to permanently # commit the new files to the repository. # # o msvc7inst -- Copies the newly generated SLN and VCPROJ files over top # of the existing files from the CVS repository and informs the user as # to exactly which CVS commands must be invoked in order to permanently # commit the new files to the repository. # # The following makefile variables are exported by this makefile: # # o DO_MSVCGEN has the value `yes' while the `msvc6gen' or `msvc7gen' # makefile target is running. In general, this variable can be # ignored, but in special cases a makefile may check this variable to # alter its behavior. For instance, in rare circumstances, a makefile # may need to use a different $(wildcard) expression during the # generation process. # # o MSVCGEN_VERSION is either '6' or '7' and is used internally to # determine the right behaviour for either MSVC 6 or 7 projects. # #------------------------------------------------------------------------------ # Target description DESCRIPTION.msvc6gen = MSVC DSW and DSP resources DESCRIPTION.msvc6inst = $(DESCRIPTION.msvc6gen) DESCRIPTION.msvc7gen = MSVC7 SLN and VCPROJ resources DESCRIPTION.msvc7inst = $(DESCRIPTION.msvc7gen) #------------------------------------------------------------- rootdefines ---# ifeq ($(MAKESECTION),rootdefines) PSEUDOHELP += \ $(NEWLINE)echo $" make msvc6gen Rebuild the $(DESCRIPTION.msvc6gen)$" \ $(NEWLINE)echo $" make msvc6inst Install the $(DESCRIPTION.msvc6inst)$" \ $(NEWLINE)echo $" make msvc7gen Rebuild the $(DESCRIPTION.msvc7gen)$" \ $(NEWLINE)echo $" make msvc7inst Install the $(DESCRIPTION.msvc7inst)$" # Set MSVC.PLUGINS.REQUIRED to a list of plug-ins for which DSP/VCPROJ files # must be generated even if the currently configured platform (i.e. Unix) # would not normally build those plug-ins. This list augments the normal # PLUGINS list. Also set MSVC.MAKE.FLAGS for additional flags for the child # "make" invocation. include $(SRCDIR)/mk/msvcgen/required.mak endif # ifeq ($(MAKESECTION),rootdefines) #------------------------------------------------------------- roottargets ---# ifeq ($(MAKESECTION),roottargets) .PHONY: msvc6gen msvc6inst msvcgenclean msvc7gen msvc7inst msvc7genclean define MSVCGEN_BUILD @echo $(SEPARATOR) @echo $" Generating $(DESCRIPTION.$@)$" @echo $(SEPARATOR) @$(MAKE) $(RECMAKEFLAGS) -f $(SRCDIR)/mk/cs.mak msvcgen \ DO_MSVCGEN=yes DO_ASM=no USE_MAKEFILE_CACHE=no $(MSVC.MAKE.FLAGS) \ PLUGINS='$(PLUGINS) $(PLUGINS.DYNAMIC) $(MSVC.PLUGINS.REQUIRED)' endef define MSVCGEN_INSTALL @echo $(SEPARATOR) @echo $" Installing $(DESCRIPTION.$@)$" @echo $(SEPARATOR) @$(MAKE) $(RECMAKEFLAGS) -f $(SRCDIR)/mk/cs.mak msvcinst endef define MSVCGEN_CLEAN @echo $(SEPARATOR) @echo $" Cleaning up the $(DESCRIPTION.$(subst clean,,$@))$" @echo $(SEPARATOR) +@$(MAKE) $(RECMAKEFLAGS) -f $(SRCDIR)/mk/cs.mak msvcgenclean endef msvc6gen: $(MSVCGEN_BUILD) MSVCGEN_VERSION=6 msvc6inst: msvc6gen $(MSVCGEN_INSTALL) MSVCGEN_VERSION=6 msvc6genclean: $(MSVCGEN_CLEAN) MSVCGEN_VERSION=6 msvc7gen: $(MSVCGEN_BUILD) MSVCGEN_VERSION=7 msvc7inst: msvc7gen $(MSVCGEN_INSTALL) MSVCGEN_VERSION=7 msvc7genclean: $(MSVCGEN_CLEAN) MSVCGEN_VERSION=7 endif # ifeq ($(MAKESECTION),roottargets) #------------------------------------------------------------- postdefines ---# ifeq ($(MAKESECTION),postdefines) MSVCGEN = $(PERL) $(SRCDIR)/mk/msvcgen/msvcgen.pl ifeq ($(MSVCGEN_VERSION),6) MSVCGEN.EXTRA = MSVC.TEMPLATE.DIR = $(SRCDIR)/mk/msvcgen/template6 MSVC.CVS.FLAGS = -kb else MSVCGEN.EXTRA = --xml-protect MSVC.TEMPLATE.DIR = $(SRCDIR)/mk/msvcgen/template7 MSVC.CVS.FLAGS = endif ifneq (,$(MSVC_QUIET)) MSVC.SILENT = @ endif MSVC.CVS.BASE = $(SRCDIR)/mk MSVC.OUT.BASE.0 = $(OUTBASE)/mk MSVC.OUT.BASE = $(MSVC.OUT.BASE.0)/msvcgen ifeq ($(MSVCGEN_VERSION),6) MSVC.CVS.DIR = $(MSVC.CVS.BASE)/visualc6 MSVC.OUT.DIR = $(MSVC.OUT.BASE)/visualc6 MSVC.OUT.FRAGMENT = $(MSVC.OUT.BASE)/fragment6 MSVC.EXT.PROJECT = dsp MSVC.EXT.WORKSPACE = dsw else MSVC.CVS.DIR = $(MSVC.CVS.BASE)/visualc7 MSVC.OUT.DIR = $(MSVC.OUT.BASE)/visualc7 MSVC.OUT.FRAGMENT = $(MSVC.OUT.BASE)/fragment7 MSVC.EXT.PROJECT = vcproj MSVC.EXT.WORKSPACE = sln endif MSVC.EXT.FRAGMENT = frag MSVC.EXT.RESOURCES = rc MSVC.WORKSPACE = psall.$(MSVC.EXT.WORKSPACE) # Prefixes for particular project types. For instance, the name "csgeom" # which is of type "library" is transformed into a project name "libcsgeom". MSVC.PREFIX.appgui = app MSVC.PREFIX.appcon = app MSVC.PREFIX.plugin = plg MSVC.PREFIX.library = lib MSVC.PREFIX.group = grp # Special dependencies for particular project types. MSVC.DEPEND.appgui = MSVC.DEPEND.appcon = MSVC.DEPEND.plugin = MSVC.DEPEND.library = MSVC.DEPEND.group = # Project types for which version information should be generated. MSVC.MAKEVERRC.appgui = $(MSVC.MAKEVERRC.COMMAND) MSVC.MAKEVERRC.appcon = $(MSVC.MAKEVERRC.COMMAND) MSVC.MAKEVERRC.plugin = $(MSVC.MAKEVERRC.COMMAND) MSVC.MAKEVERRC.library = MSVC.MAKEVERRC.group = MSVC.MAKEMETARC.appgui = MSVC.MAKEMETARC.appcon = MSVC.MAKEMETARC.plugin = $(MSVC.MAKEMETARC.COMMAND) MSVC.MAKEMETARC.library = MSVC.MAKEMETARC.group = MSVC.MERGERC.appgui = $(MSVC.MERGERC.COMMAND) MSVC.MERGERC.appcon = $(MSVC.MERGERC.COMMAND) MSVC.MERGERC.plugin = $(MSVC.MERGERCMETA.COMMAND) MSVC.MERGERC.library = MSVC.MERGERC.group = # Name of project.rc file for types which require version information. MSVC.VERSIONRC.CVS.appgui = $(MSVC.VERSIONRC.CVS.NAME) MSVC.VERSIONRC.OUT.appgui = $(MSVC.VERSIONRC.OUT.NAME) MSVC.VERSIONRC.CVS.appcon = $(MSVC.VERSIONRC.CVS.NAME) MSVC.VERSIONRC.OUT.appcon = $(MSVC.VERSIONRC.OUT.NAME) MSVC.VERSIONRC.CVS.plugin = $(MSVC.VERSIONRC.CVS.NAME) MSVC.VERSIONRC.OUT.plugin = $(MSVC.VERSIONRC.OUT.NAME) MSVC.VERSIONRC.CVS.library = MSVC.VERSIONRC.OUT.library = MSVC.VERSIONRC.CVS.group = MSVC.VERSIONRC.OUT.group = # Define extra Windows-specific targets which do not have associated makefiles. include $(SRCDIR)/mk/msvcgen/win32.mak # Macro to compose project name. (ex: "CSGEOM" becomes "libcsgeom") MSVC.PROJECT = $(MSVC.PREFIX.$(DSP.$*.TYPE))$(DSP.$*.NAME) # Macro to compose full project pathname. # (ex: "CSGEOM" becomes "out/mk/visualc/libcsgeom.dsp") MSVC.OUTPUT = $(MSVC.OUT.DIR)/$(MSVC.PROJECT).$(MSVC.EXT.PROJECT) # Macro to compose full fragment pathname. # (ex: "CSGEOM" becomes "out/mk/fragment/libcsgeom.frag") MSVC.FRAGMENT = $(MSVC.OUT.FRAGMENT)/$(MSVC.PROJECT).$(MSVC.EXT.FRAGMENT) # Macros to compose project.rc filename for standard and build locations. MSVC.VERSIONRC.CVS.NAME = $(MSVC.CVS.DIR)/$(MSVC.PROJECT).$(MSVC.EXT.RESOURCES) MSVC.VERSIONRC.OUT.NAME = $(MSVC.OUT.DIR)/$(MSVC.PROJECT).$(MSVC.EXT.RESOURCES) # Macros to compose project.rc filename for a given project. MSVC.VERSIONRC.CVS = $(MSVC.VERSIONRC.CVS.$(DSP.$*.TYPE)) MSVC.VERSIONRC.OUT = $(MSVC.VERSIONRC.OUT.$(DSP.$*.TYPE)) MSVC.VERSIONRC.TEMP = $(MSVC.OUT.FRAGMENT)/version.tmp MSVC.METARC.TEMP = $(MSVC.OUT.FRAGMENT)/meta.tmp # Module name/description for project.rc. MSVC.VERSIONDESC = $(DESCRIPTION.$(DSP.$*.NAME)) # Command to generate the project.rc file. MSVC.MAKEVERRC.COMMAND = $(RUN_SCRIPT) $(SRCDIR)/libs/cssys/win32/mkverres.sh \ '$(MSVC.VERSIONRC.TEMP)' '$(MSVC.VERSIONDESC)' '$(SRCDIR)/include/csver.h' MSVC.MAKEMETARC.COMMAND = $(RUN_SCRIPT) $(SRCDIR)/libs/cssys/win32/mkmetadatares.sh \ '$(MSVC.METARC.TEMP)' '$(INF.$*)' MSVC.MERGERC.COMMAND = $(RUN_SCRIPT) $(SRCDIR)/libs/cssys/win32/mergeres.sh \ '$(MSVC.VERSIONRC.OUT)' '$(SRCDIR)' '../..' '$(MSVC.VERSIONRC.TEMP)' \ '$($($*.EXE).WINRSRC)' MSVC.MERGERCMETA.COMMAND = $(RUN_SCRIPT) $(SRCDIR)/libs/cssys/win32/mergeres.sh \ '$(MSVC.VERSIONRC.OUT)' '$(SRCDIR)' '../..' '$(MSVC.VERSIONRC.TEMP)' \ '$($($*.EXE).WINRSRC)' '$(MSVC.METARC.TEMP)' # Command to generate the project.rc file for a given project. MSVC.MAKEVERRC = $(MSVC.MAKEVERRC.$(DSP.$*.TYPE)) MSVC.MAKEMETARC = $(MSVC.MAKEMETARC.$(DSP.$*.TYPE)) MSVC.MERGERC = $(MSVC.MERGERC.$(DSP.$*.TYPE)) # Macro to compose entire list of resources which comprise a project. MSVC.CONTENTS = $(subst $(SRCDIR)/,, \ $(SRC.$*) $(INC.$*) $(CFG.$*) $(DSP.$*.RESOURCES) $(MSVC.VERSIONRC.CVS)) # Macro to compose the optional --meta-file option from INF.PROJECT. MSVC.METAFILE.DIRECTIVE = \ $(subst $(SRCDIR)/,,$(foreach m,$(INF.$*),--meta-file=$m)) # Macro to compose the entire dependency list for a particular project. # Dependencies are gleaned from three variables: DSP.PROJECT.DEPEND, # DEP.PROJECT, and MSVC.DEPEND.TYPE where "PROJECT" represents the current # project identifier and "TYPE" represents the current project's type (i.e. # appgui, appcon, plugin, library, etc.). Items in these lists are indirect # project names (i.e. "CSGEOM") which are tranformed into actual project names # (i.e. "libcsgeom") via the variables DSP.PROJECT.NAME and DSP.PROJECT.TYPE. MSVC.DEPEND.LIST = $(foreach d,$(sort \ $(DEP.$*) $(DSP.$*.DEPEND) $(MSVC.DEPEND.$(DSP.$*.TYPE))),\ $(MSVC.PREFIX.$(DSP.$d.TYPE))$(DSP.$d.NAME)) # Macro to compose list of --depend directives from MSVC.DEPEND.LIST. MSVC.DEPEND.DIRECTIVES = $(foreach d,$(MSVC.DEPEND.LIST),--depend=$d) # Macro to compose list of --library and --delaylibs directives from # DSP.PROJECT.LIBS. MSVC.LIBRARY.DIRECTIVES = \ $(foreach l,$(DSP.$*.LIBS),--library=$l) \ $(foreach l,$(DSP.$*.DELAYLIBS),--delaylib=$l) # Macros to compose --lflags and --cflags directives from DSP.PROJECT.LFLAGS # and DSP.PROJECT.CFLAGS. These are slightly complicated because it is valid # for LFLAGS and CFLAGS to contain embedded whitespace, and also by the fact # that --lflags and --cflags should only appear on the command-line if the # corresponding values of LFLAGS and CFLAGS, respectively, are non-empty. The # extra $(subst) step is used to eliminate the --lflags or --cflags directive # in the event that LFLAGS or CFLAGS is empty. MSVC.LFLAGS.DIRECTIVE = $(subst --lflags='',,--lflags='$(DSP.$*.LFLAGS)') MSVC.CFLAGS.DIRECTIVE = $(subst --cflags='',,--cflags='$(DSP.$*.CFLAGS)') # Macro to compose a list of generated fragment file basenames (without the # .pjf, .cff, .dpf suffixes. MSVC.FRAG.FILES = $(sort \ $(patsubst %.pjf,%, \ $(patsubst %.cff,%, \ $(patsubst %.dpf,%, \ $(wildcard $(MSVC.OUT.FRAGMENT)/*.$(MSVC.EXT.FRAGMENT).*))))) # Macros to compose lists of existing and newly created DSW/SLN and DSP/VCPROJ # files. MSVC.CVS.FILES = $(sort $(subst $(MSVC.CVS.DIR)/,,\ $(wildcard $(addprefix $(MSVC.CVS.DIR)/*,\ .$(MSVC.EXT.PROJECT) .$(MSVC.EXT.WORKSPACE) \ .$(MSVC.EXT.RESOURCES))))) MSVC.OUT.FILES = $(sort $(subst $(MSVC.OUT.DIR)/,,\ $(wildcard $(addprefix $(MSVC.OUT.DIR)/*,\ .$(MSVC.EXT.PROJECT) .$(MSVC.EXT.WORKSPACE) \ .$(MSVC.EXT.RESOURCES))))) # Quick'n'dirty macro to compare two file lists and report the appropriate # CVS "add" and "remove" commands which the user will need to invoke in order # to update the CVS repository with the newly generated files. MSVC.DIFF = $(PERL) -e '\ @d1=($(foreach f,$(MSVC.CVS.FILES),"$f"$(COMMA))); $$f1 = shift @d1; \ @d2=($(foreach f,$(MSVC.OUT.FILES),"$f"$(COMMA))); $$f2 = shift @d2; \ while (defined($$f1) or defined($$f2)) { \ if (!defined($$f2) or (defined($$f1) and $$f1 lt $$f2)) { \ print "cvs remove $$f1\n"; $$f1 = shift @d1; } \ elsif (!defined($$f1) or $$f1 gt $$f2) { \ print "cvs add $(MSVC.CVS.FLAGS) $$f2\n"; $$f2 = shift @d2; } \ else { $$f1 = shift @d1; $$f2 = shift @d2; } \ }' # Messages informing the user that the reported CVS commands must be invoked # in order to update the CVS repository with the newly generated project files. MSVC.CVS.WARNING.1 = \ *ATTENTION* You must invoke the following commands in order to MSVC.CVS.WARNING.2 = \ *ATTENTION* You must invoke the commands listed above in order to MSVC.CVS.WARNING.3 = \ permanently commit the generated project files to the CVS repository. endif # ifeq ($(MAKESECTION),postdefines) #----------------------------------------------------------------- targets ---# ifeq ($(MAKESECTION),targets) .PHONY: msvcgen msvcinst msvcgenclean dswgen # Directory creation targets. $(MSVC.OUT.BASE.0): $(OUTBASE) -$(MSVC.SILENT)$(MKDIR) $(MSVC.OUT.BASE): $(MSVC.OUT.BASE.0) -$(MSVC.SILENT)$(MKDIR) $(MSVC.OUT.DIR) $(MSVC.OUT.FRAGMENT): $(MSVC.OUT.BASE) $(MSVC.SILENT)$(MKDIR) # Build a project project file and an associated DSW/SLN fragment file. %.MAKEPROJECT: $(MSVC.SILENT)$(MSVC.MAKEVERRC) $(MSVC.SILENT)$(MSVC.MAKEMETARC) $(MSVC.SILENT)$(MSVC.MERGERC) $(MSVC.SILENT)$(MSVCGEN) \ --quiet \ --project \ --project-extension=$(MSVC.EXT.PROJECT) \ --name=$(DSP.$*.NAME) \ --template=$(DSP.$*.TYPE) \ --template-dir=$(MSVC.TEMPLATE.DIR) \ --project-name=$(MSVC.PROJECT) \ --output=$(MSVC.OUTPUT) \ --fragment=$(MSVC.FRAGMENT) \ $(MSVC.METAFILE.DIRECTIVE) \ $(MSVC.DEPEND.DIRECTIVES) \ $(MSVC.LIBRARY.DIRECTIVES) \ $(MSVC.LFLAGS.DIRECTIVE) \ $(MSVC.CFLAGS.DIRECTIVE) \ $(MSVCGEN.EXTRA) \ $(MSVC.CONTENTS) # Build the project-wide workspace file (psall.dsw/.sln). workspacegen: $(MSVC.SILENT)$(MSVCGEN) \ --quiet \ --workspace \ --workspace-extension=$(MSVC.EXT.WORKSPACE) \ --output=$(MSVC.OUT.DIR)/$(MSVC.WORKSPACE) \ --template-dir=$(MSVC.TEMPLATE.DIR) \ $(MSVCGEN.EXTRA) \ $(MSVC.FRAG.FILES) # Build all Visual C++ DSW/SLN workspace and DSP/VCPROJ project files. The # DSW/SLN workspace is built last since it is composed of the fragment files # generated as part of the DSP/VCPROJ file synthesis process. msvcgen: \ msvcgenclean \ $(MSVC.OUT.DIR) \ $(MSVC.OUT.FRAGMENT) \ $(addsuffix .MAKEPROJECT,$(MSVC.DSP)) \ workspacegen # Install the generated project files in place of the files from the CVS # repository and inform the user as to which CVS commands must be manually # invoked in order to permanently commit the generated files to the repository. msvcinst: ifneq (,$(strip $(MSVC.CVS.FILES) $(MSVC.OUT.FILES))) @echo $"Installing project files.$" endif ifneq (,$(strip $(MSVC.CVS.FILES))) @$(RM) $(addprefix $(MSVC.CVS.DIR)/,$(MSVC.CVS.FILES)) endif ifneq (,$(strip $(MSVC.OUT.FILES))) @$(CP) $(addprefix $(MSVC.OUT.DIR)/,$(MSVC.OUT.FILES)) $(MSVC.CVS.DIR) endif @echo $(SEPARATOR) @echo $" $(MSVC.CVS.WARNING.1)$" @echo $" $(MSVC.CVS.WARNING.3)$" @echo $(SEPARATOR) @echo $"$(CD) $(MSVC.CVS.DIR)$" @$(MSVC.DIFF) @echo $"cvs commit$" @echo $(SEPARATOR) @echo $" $(MSVC.CVS.WARNING.2)$" @echo $" $(MSVC.CVS.WARNING.3)$" @echo $(SEPARATOR) # Scrub the sink; mop the floor; wash the dishes; paint the door. clean: msvcgencleanall # Clean all files, regardless of MSVCGEN_VERSION. msvcgencleanall: $(MSVC.SILENT)$(RMDIR) $(MSVC.OUT.BASE) # Clean the files the invocation specified by MSVCGEN_VERSION. msvcgenclean: $(MSVC.SILENT)$(RMDIR) $(MSVC.OUT.DIR) $(MSVC.OUT.FRAGMENT) endif # ifeq ($(MAKESECTION),targets) --- NEW FILE: msvcgen.pl --- #!/usr/bin/perl -w #============================================================================== # # Microsoft Visual C++ project and workspace file generator. # Copyright (C) 2000-2003 by Eric Sunshine <sun...@su...> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA [...1153 lines suppressed...] sub print_help { print_usage(\*STDOUT); exit(0); } sub usage_error { my $msg = shift; print STDERR "ERROR: $msg\n" if $msg; print STDERR "ERROR: Use the --help option for instructions.\n"; exit(1); } #------------------------------------------------------------------------------ # Perform the complete repair process. #------------------------------------------------------------------------------ process_options(); summarize_options() if verbose(); load_templates(); create_project() if $main::opt_project; create_workspace() if $main::opt_workspace; --- NEW FILE: msvcgen.sh --- #!/bin/sh # Use this script to generate msvc project files from the Jamfiles if test "$1" = "--help"; then echo " mk/msvcgen/msvcgen.sh [6|7]" echo "Generates msvc projectfiles. You may specify version 6 or 7 if you" echo "only want to generate for a specific version (default is both)" exit 0 fi DO_MSVC6=no DO_MSVC7=no if test "$1" = 7; then DO_MSVC7=yes shift fi if test "$1" = 6; then DO_MSVC6=yes shift fi if test "$DO_MSVC6" = no -a "$DO_MSVC7" = no; then DO_MSVC6=yes DO_MSVC7=yes fi if test "$DO_MSVC6" = yes; then jam $@ -sJAMCONFIG=mk/msvcgen/Jamconfig -sMSVC_VERSION=6 msvcgen fi if test "$DO_MSVC7" = yes; then jam $@ -sJAMCONFIG=mk/msvcgen/Jamconfig -sMSVC_VERSION=7 msvcgen fi --- NEW FILE: required.mak --- #============================================================================== # # Automatic MSVC-compliant DSW and DSP generation component # Copyright (C) 2000 by Eric Sunshine <sun...@su...> # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #============================================================================== #------------------------------------------------------------------------------ # required.mak # # This makefile component sets the value of the MSVC.PLUGINS.REQUIRED # variable. MSVC.PLUGINS.REQUIRED supplements the list of plug-in # modules defined by its brother variable PLUGINS (see CS/mk/user.mak). # It also sets MSVC.MAKE.FLAGS which specifies additional flags to pass # to the child "make" invocation. This is useful when one needs to set # additional make variables specially for the synthesis process. # # Like the PLUGINS variable, MSVC.PLUGINS.REQUIRED defines a list of # plug-in modules. Unlike PLUGINS, however, MSVC.PLUGINS.REQUIRED # defines the list of plug-in modules for which Visual-C++ DSP project # files must be generated, unconditionally, regardless of the currently # configured makefile environment. # # Because MSVC.PLUGINS.REQUIRED supplements PLUGINS, the Visual-C++ # project file generation mechanism is able to generate DSP files for # Windows-specific plug-in modules even when the makefiles are # configured for a different platform, such as Unix, which would not # normally process Windows-specific modules. # #------------------------------------------------------------------------------ MSVC.MAKE.FLAGS = \ HAS_CAL3D=yes \ 3DS.AVAILABLE=yes \ ODE.AVAILABLE=yes \ CSPYTHON_MSVC_EXCLUDE=yes MSVC.PLUGINS.REQUIRED = \ cscript/cspython \ documentsystem/xml \ filesys/vfs \ font/server/freefnt2 \ mesh/impexp/3ds \ net/driver/socket \ net/driver/ensocket \ physics/odedynam \ physics/loader \ sound/driver/waveoutsd \ sound/loader/ogg \ sound/renderer/ds3d \ sound/renderer/openal \ sound/renderer/software \ video/canvas/ddraw \ video/canvas/openglwin \ video/format/avi \ video/format/codecs/rle \ video/loader/png \ video/loader/jpg \ video/loader/jng \ video/renderer/opengl --- NEW FILE: win32.mak --- #============================================================================== # # Automatic MSVC-compliant workspace and project generation component # Copyright (C) 2000 by Eric Sunshine <sun...@su...> # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #============================================================================== #------------------------------------------------------------------------------ # win32.mak # # This makfile component extends the value of MSVC.DSP with extra # targets which are specific to Windows or which are not otherwise # represented by stand-alone makefiles within the project hierarchy. # # *NOTE* AUGMENTED # The macro MSVC.DSP.AUGMENTED generates a type-augmented project list. # For example, (CSGEOM CSFONT VFS) becomes (library.CSGEOM plugin.CSFONT # plugin.VFS). Later, the DSP.PROJECT.DEPEND variables filter the list # by type and strip off the type-prefix in order to arrive at a # bare-word dependency list. For instance, for the pseudo-project # "grpplugins", the list is filtered to (plugin.CSFONT plugin.VFS), and # then transformed into (CSFONT VFS), which is exactly the list of # bare-word project names upon which "grpplugins" should depend. # # *NOTE* CSSYS # We override the INC.CSSYS and SRC.CSSYS variables from the # platform-specific makefile since, for project file generation, the # Windows-specific resources must be used. We can not rely upon the # default SRC.CSSYS and INC.CSSYS definitions (see # CS/libs/cssys/cssys.mak) since they may reference inappropriate # resources if the project is configured for a non-Windows platform. For # example, it is possible to generate the project files from Unix. #------------------------------------------------------------------------------ # Macro to generate a type-augmented project list. (*NOTE* AUGMENTED) MSVC.DSP.AUGMENTED = $(foreach d,$(MSVC.DSP),$(DSP.$d.TYPE).$d) # Platform-specific implementation for Windows. (*NOTE* CSSYS) ifeq ($(DO_MSVCGEN),yes) INC.CSSYS = \ $(wildcard $(SRCDIR)/include/cssys/win32/*.h) \ $(wildcard $(SRCDIR)/libs/cssys/win32/*.h) SRC.CSSYS = \ $(wildcard $(SRCDIR)/libs/cssys/*.cpp $(SRCDIR)/libs/cssys/win32/*.cpp) \ $(SRCDIR)/libs/cssys/general/csprocessorcap.cpp \ $(SRCDIR)/libs/cssys/general/findlib.cpp \ $(SRCDIR)/libs/cssys/general/getopt.cpp \ $(SRCDIR)/libs/cssys/general/pluginpaths.cpp \ $(SRCDIR)/libs/cssys/general/resdir.cpp \ $(SRCDIR)/libs/cssys/general/runloop.cpp endif # grpall -- represents all other projects indirectly through grpapps, # grpplugins, and grplibs. MSVC.DSP += ALL DSP.ALL.NAME = all DSP.ALL.TYPE = group DSP.ALL.DEPEND = APPS PLUGINS LIBS # grpapps -- represents all GUI and console application projects. MSVC.DSP += APPS DSP.APPS.NAME = apps DSP.APPS.TYPE = group DSP.APPS.DEPEND = $(patsubst appgui.%,%,$(patsubst appcon.%,%,\ $(filter appgui.% appcon.%,$(MSVC.DSP.AUGMENTED)))) # grpplugins -- represents all plug-in projects. MSVC.DSP += PLUGINS DSP.PLUGINS.NAME = plugins DSP.PLUGINS.TYPE = group DSP.PLUGINS.DEPEND = \ $(patsubst plugin.%,%,$(filter plugin.%,$(MSVC.DSP.AUGMENTED))) # grplibs -- represents all static library projects. MSVC.DSP += LIBS DSP.LIBS.NAME = libs DSP.LIBS.TYPE = group DSP.LIBS.DEPEND = \ $(patsubst library.%,%,$(filter library.%,$(MSVC.DSP.AUGMENTED)))) |