diff options
Diffstat (limited to 'db-4.8.30/dist/s_windows_dsp')
-rwxr-xr-x | db-4.8.30/dist/s_windows_dsp | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/db-4.8.30/dist/s_windows_dsp b/db-4.8.30/dist/s_windows_dsp new file mode 100755 index 0000000..a4a9bda --- /dev/null +++ b/db-4.8.30/dist/s_windows_dsp @@ -0,0 +1,276 @@ +#!/bin/bash - +# $Id$ +# +# Build Windows .dsp files. +# Build Windows Mobile .dsp and .vcproj files +# Build Windows .vcproj files. + +. RELEASE + +SRCFILES=srcfiles.in + +create_dsp() +{ + projname="$1" # name of the .dsp file + match="$2" # the string used to egrep the $sources file + sources="$3" # a modified version of $SRCFILES to facilitate matches + dsptemplate="$4" # overall template file for the .dsp + extra_cppflags="$5" # extra flags to send to compiler + release_libs="$6" # libraries to link against in Release builds + debug_libs="$7" # libraries to link against in Debug builds + lib_suffix="$8" # the library name is libdb@lib_suffix@@VERSION@ + proj_type="$9" # the project type dsp or vcp + proj_guid="${10}" # The project guid for VS2005 projects + + # Set the default project type to be "dsp" + if [ ! "$proj_type" ] ; then + proj_type=dsp + fi + + # template file for the src file fragments + srctemplate="$BUILDDIR/srcfile_$proj_type.src" + rsrctemplate="$BUILDDIR/rsrcfile_$proj_type.src" + dspoutput=$BUILDDIR/$projname.$proj_type + + postbuild=$dspoutput.postbuild + if [ ! -f $postbuild ] ; then + postbuild=/dev/null + fi + + rm -f $dspoutput.insert + for srcpath in `egrep "$match" $sources | sed -e 's/[ ].*//'` + do + # take the path name and break it up, converting / to \\. + # so many backslashes needed because of shell quoting and + # sed quoting -- we'll end up with two backslashes for every + # forward slash, but we need that when feeding that to the + # later sed command. + set - `echo $srcpath | sed -e 's;\(.*\)/;../\\1 ;' \ + -e "s;$BUILDDIR;.;" \ + -e 's;/;\\\\\\\\;g'` + srcdir="$1" + srcfile="$2" + if [ "${srcfile##*.}" = "rc" -a "$proj_type" = "vcproj" ] ; then + inptemplate=$rsrctemplate + else + inptemplate=$srctemplate + fi + + sed -e "s/@srcdir@/$srcdir/g" \ + -e "s/@srcfile@/$srcfile/g" \ + < $inptemplate >> $dspoutput.insert + done + sed -e "/@SOURCE_FILES@/r$dspoutput.insert" \ + -e "/@SOURCE_FILES@/d" \ + -e "/@POST_BUILD@/r$postbuild" \ + -e "/@POST_BUILD@/d" \ + -e "s/@project_name@/$projname/g" \ + -e "s,@extra_cppflags@,$extra_cppflags,g" \ + -e "s,@release_libs@,$release_libs,g" \ + -e "s,@debug_libs@,$debug_libs,g" \ + -e "s,@lib_suffix@,$lib_suffix,g" \ + -e "s/@DB_VERSION_MAJOR@/$DB_VERSION_MAJOR/g" \ + -e "s/@DB_VERSION_MINOR@/$DB_VERSION_MINOR/g" \ + -e "s/@PROJ_GUID@/$proj_guid/g" \ + < $dsptemplate > $dspoutput.new + + # We run this script on Windows (under Cygwin). Fix up the line-endings + # for the temporary files. We don't test the platform, just run unix2dos + # if the command exists, ignoring any not-found error message. + (unix2dos.exe $dspoutput.new) >/dev/null 2>&1 + + # Set the file mode to 644 because the VC++ IDE needs a writeable file + # in our development environment. + cmp $dspoutput.new $dspoutput > /dev/null 2>&1 || + (echo "Building $dspoutput" && rm -f $dspoutput && + cp $dspoutput.new $dspoutput && chmod 664 $dspoutput) + rm -f $dspoutput.insert $dspoutput.new +} + +TMPA=/tmp/swindsp$$a +trap "rm -f $TMPA; exit 1" 1 2 3 15 + +# create a copy of the srcfiles with comments and empty lines removed. +# add a space at the end of each list of modules so that each module +# can be unambiguously matched e.g. ' dynamic ' +sed -e "s/#.*$//" \ + -e "/^[ ]*$/d" \ + -e "s/[ ][ ]*/ /" \ + -e "s/[ ]*$//" \ + -e "/[ ]/!d" \ + -e "s/$/ /" < $SRCFILES > $TMPA + +# get a list of all modules mentioned +# +MODULES="`sed -e 's/^[^ ]* //' < $TMPA | tr ' ' '\012' | sort | uniq`" + +for module in $MODULES +do + case "$module" in + dynamic ) + BUILDDIR=../build_windows + create_dsp db_dll " $module " $TMPA $BUILDDIR/dynamic_dsp.src \ + '' 'ws2_32.lib' 'ws2_32.lib' + ;; + small ) + BUILDDIR=../build_windows + create_dsp db_small " $module " $TMPA $BUILDDIR/static_dsp.src \ + '/D "HAVE_SMALLBUILD"' '' '' _small + ;; + static ) + BUILDDIR=../build_windows + create_dsp db_static " $module " $TMPA $BUILDDIR/static_dsp.src + ;; + ce) + BUILDDIR=../build_wince + create_dsp db_static " $module " $TMPA \ + ../build_wince/static_vcp.src '' '' '' '' vcp + # Build VS2005 projects. + # The GUID passed in must match that in the .sln workspace. + # It would be ideal to grab the GUID from there if this + # project is already included there. + create_dsp db_static " $module " $TMPA \ + ../build_wince/static_vcproj.src '' '' '' '' vcproj \ + "4AB4958F-8DD0-49B5-8C02-014B5637C59A" + ;; + ce_small) + BUILDDIR=../build_wince + create_dsp db_small " $module " $TMPA \ + ../build_wince/static_vcp.src '/D "HAVE_SMALLBUILD"' \ + '' '' _small vcp + # Build VS2005 projects. + # The GUID passed in must match that in the .sln workspace. + # It would be ideal to grab the GUID from there if this + # project is already included there. + create_dsp db_small " $module " $TMPA \ + ../build_wince/static_vcproj.src 'HAVE_SMALLBUILD' \ + '' '' _small vcproj "6A2849DA-8F7C-4B50-BDAE-AE7752EF8213" + ;; + java ) + BUILDDIR=../build_windows + create_dsp db_java " $module " $TMPA $BUILDDIR/dynamic_dsp.src '' \ + 'libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib' \ + 'libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib' _java + ;; + tcl ) + BUILDDIR=../build_windows + create_dsp db_tcl " $module " $TMPA $BUILDDIR/dynamic_dsp.src \ + '/D "DB_TCL_SUPPORT"' \ + 'libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib tcl84.lib' \ + 'libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib tcl84g.lib' _tcl + ;; + testutil ) + BUILDDIR=../build_windows + create_dsp db_test " $module " $TMPA $BUILDDIR/app_dsp.src \ + '' '/out:"Win32\\Release\\dbkill.exe"' '/out:"Win32\\Debug\\dbkill.exe"' + ;; + app=* ) + BUILDDIR=../build_windows + appname=`echo $module | sed -e 's/^app=//'` + case "$appname" in + ex_rep_base ) + libs='ws2_32.lib' + ;; + * ) + libs='' + ;; + esac + # Split into Windows CE and Win32/64 project creation. + case "$appname" in + wce_tpcb ) + BUILDDIR=../build_wince + create_dsp $appname " $module " $TMPA \ + ../build_wince/app_vcp.src '/D "__NO_SYSTEM_INCLUDES"' \ + '' '' '' vcp + # The GUID passed in must match that in the .sln workspace. + # It would be ideal to grab the GUID from there if this + # project is already included there. + create_dsp $appname " $module " $TMPA \ + ../build_wince/app_vcproj.src '__NO_SYSTEM_INCLUDES' \ + '' '' '' vcproj "F2CE670A-ABAE-414A-9A17-8079AB58613F" + BUILDDIR=../build_windows + ;; + * ) + create_dsp $appname " $module " $TMPA $BUILDDIR/app_dsp.src \ + '' $libs $libs + ;; + esac + ;; + brew|s60|vx|vxsmall|vx6 ) + ;; + * ) + echo \ + "s_windows_dsp: module name $module in $SRCFILES is unknown type" + ;; + esac +done + +rm -f $TMPA + +# +# Drive construction of Visual Studio (version 7.1) projects +# files, using an xquery script (genproject.template),an input XML +# document, and a file containing a list of project names. +# + +# Source the Berkeley DB release version numbers. +cd win_projects + +# project name list +PROJECTS=db.projects + +# xquery script template, called genproject.template in DBXML tree. +TEMPLATE=genproject.template + +# temporary script, post-sed-replacement +TEMP_SCRIPT=genproject.script + +# xml document input template, called dbxml.template.xml in DBXML tree. +CONFIG_INPUT=projects.template.xml + +# temporary xml document, post-sed-replacement, called dbxml.projects in DBXML +CONFIG_OUTPUT=projects.xml + +# location for output project files +PROJECT_OUTPUT_DIR=../../build_windows + +# substitute some variables in the XML document template +sed -e "s/@DB_VERSION_MAJOR@/$DB_VERSION_MAJOR/g" \ + -e "s/@DB_VERSION_MINOR@/$DB_VERSION_MINOR/g" \ + < $CONFIG_INPUT > $CONFIG_OUTPUT + +echo "Building Visual Studio project files -- " +echo " output only for modified projects (this can take a while)" + +# for each project, substitute 2 variables in the XQuery script, then run it +for v in VC8 +do + if [ $v = "VC7.1" ]; then + VERSION="7.10" + else + VERSION="8.00" + fi + + echo "Building for Visual Studio version $VERSION" + + for i in `cat $PROJECTS` + do + sed -e "s!@PROJECT_NAME@!$i!g" -e "s!@PROJECT_INPUT@!$CONFIG_OUTPUT!g" -e "s!@VISUAL_STUDIO_VERSION@!$VERSION!g" < $TEMPLATE > $TEMP_SCRIPT + TMP=$PROJECT_OUTPUT_DIR/$i.tmp.vcproj + if [ $v = "VC7.1" ]; then + TARG=$PROJECT_OUTPUT_DIR/${i}_vs71.vcproj + else + TARG=$PROJECT_OUTPUT_DIR/${i}.vcproj + fi + xqilla -o $TMP $TEMP_SCRIPT + rm -f $TEMP_SCRIPT + cmp $TMP $TARG > /dev/null 2>&1 || + (echo "Building $TARG" && rm -f $TARG && + cp $TMP $TARG && chmod 664 $TARG) + rm -f $TMP + done +done + +# Cleanup. +rm -f $CONFIG_OUTPUT +cd .. |