Tim Baumgartner wrote:
Ari Johnson wrote:
On Tue, Aug 26, 2008 at 10:36 AM, Freddie Witherden
<[EMAIL PROTECTED]> wrote:
Hi Ari, Tim,
Good news about the Xcode project!
However, do you know if it is possible to comment out a target for
10.5 (which ships with Bison 2.3)? So far as 10.5 goes, trunk builds
(with a slight modification to multiint.c IIRC).
I don't have 10.5. There would, however, be more than just leaving
out the Bison target required to make it work on both 10.4 and 10.5
with its included copy of Bison. A more likely solution would be for
the Bison target to do the following:
1. If the installed Bison is not 2.3 or better, fetch and build Bison 2.3.
2. No matter what, create a wrapper script that will call Bison 2.3,
whether it was built in step 1 or not.
Then the Xcode project can point to the wrapper script for its build rules.
Ari, thanks for committing the Bison patch.
A quick Google search led me to a page
(http://www.mail-archive.com/[EMAIL PROTECTED]/msg01100.html) that claims the
location of the Bison distribution files can be set with the env var
BISON_PKGDATADIR but a configure flag might be better (I'll look into it).
The Bison wrapper script sounds like a good idea and I don't see any reason why
it shouldn't be implemented as Ari suggested. I'll work on this tomorrow
(Wednesday) and post back to this thread with the details of the final script
and Xcode project setup.
Alright, I have a patch that downloads Bison only if needed and that adds a
Bison wrapper script (located at 'macosx/external/bison.sh'). The patch is
attached and I would appreciate it if someone else could test the patch to make
sure there are no problems on other systems and to give me some feedback before
I commit it.
The script determines the version of Bison by parsing the version value from the
output of the "--version" paramter. If the version of Bison on the system is
older than a minimum version (currently 1.31) or if it is blacklisted (although
none currently are), the build process will attempt to download and build Bison
2.3. To simplify things, if a binary in "macosx/external/bison/" exists, this
version is used regardless.
During the build process, instead of calling Bison directly, bison.sh is called.
If a Bison binary exists in an expected location inside of
"macosx/external/bison/", it is used. Otherwise, the command 'bison' is executed.
Tim
Index: macosx/Warzone.xcodeproj/project.pbxproj
===================================================================
--- macosx/Warzone.xcodeproj/project.pbxproj (revision 5880)
+++ macosx/Warzone.xcodeproj/project.pbxproj (working copy)
@@ -681,7 +681,7 @@
"${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}.tab.h",
"${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}.tab.c",
);
- script = "external/bison/src/bison -y -d
-o\"${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}\".tab.h \"${INPUT_FILE_PATH}\" ||
exit 1\nexternal/bison/src/bison -y -d
-o\"${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}\".tab.c \"${INPUT_FILE_PATH}\" ||
exit 1";
+ script = "external/bison.sh -y -d
-o\"${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}\".tab.h \"${INPUT_FILE_PATH}\" ||
exit 1\nexternal/bison.sh -y -d
-o\"${DERIVED_FILES_DIR}/${INPUT_FILE_BASE}\".tab.c \"${INPUT_FILE_PATH}\" ||
exit 1";
};
0246AA730BD3E47F004D1C70 /* PBXBuildRule */ = {
isa = PBXBuildRule;
@@ -3793,7 +3793,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript =
"DIRECTORY=\"bison-2.3\"\nOUTDIR=\"bison\"\nEXECUTABLE=\"`pwd`/$OUTDIR/src/bison\"\nFILENAME=\"bison-2.3.tar.bz2\"\nSOURCE=\"http://ftp.gnu.org/gnu/bison/bison-2.3.tar.bz2\"\nMD5=\"c18640c6ec31a169d351e3117ecce3ec\"\n\n##
Fetch source ##\n\ncd external\n\nif [ -d \"$OUTDIR\" ]; then\n echo
\"$OUTDIR exists, skipping\"\n exit 0\nfi\n\nif [ -d \"$DIRECTORY\" ]; then\n
echo \"$DIRECTORY exists, probably from an earlier failed run\" >&2\n exit
1\nfi\n\nif [ ! -r \"$FILENAME\" ]; then\n echo \"Fetching $SOURCE\"\n if !
curl -L -o \"$FILENAME\" \"$SOURCE\"; then\n echo \"Unable to fetch
$SOURCE\" >&2\n exit 1\n fi\nfi\n\nHAVEMD5=`md5 \"$FILENAME\" | sed -n -e
's/^MD5 (\\(.*\\)) = \\(.*\\)$/\\2/p'`\n\nif [ -z \"$HAVEMD5\" ]; then\n echo
\"Unable to compute md5 for $FILENAME\" >&2\n exit 1\nfi\n\nif [ \"$HAVEMD5\"
!= \"$MD5\" ]; then\n echo \"Md5 does not match for $FILENAME\" >&2\n exit
1\nfi\n\nEXTENSION=`echo $FILENAME | sed -e 's/^.*\\.\\([^.]*\\)/\\1/'`\n\nif [
\"$EXTENSION\" = \"gz\" ]; then\n if ! tar -zxf \"$FILENAME\"; then\n echo
\"Unpacking $FILENAME failed\" >&2\n exit 1\n fi\nelif [ \"$EXTENSION\" =
\"bz2\" ]; then\n if ! tar -jxf \"$FILENAME\"; then\n echo \"Unpacking
$FILENAME failed\" >&2\n exit 1\n fi\nelse\n echo \"Unable to unpack
$FILENAME\" >&2\n exit 1\nfi\n\nif [ ! -d \"$DIRECTORY\" ]; then\n echo
\"Can't find $DIRECTORY to rename\" >&2\n exit 1\nfi\n\nmv \"$DIRECTORY\"
\"$OUTDIR\"\n\n## Build source ##\n\ncd \"$OUTDIR\"\n\necho \"Configuring GNU
Bison\"\n./configure\n\nif [ \"$?\" -ne 0 ]; then\n\techo \"GNU Bison configure
operation failed\" >&2\n\texit 1\nfi\n\necho \"Compiling GNU
Bison\"\nmake\n\nif [ \"$?\" -ne 0 ]; then\n\techo \"GNU Bison make operation
failed\" >&2\n\texit 1\nfi\n";
+ shellScript = "#!/bin/bash\n\nOUTDIR=\"bison\" # Dir
in macosx/external to unpack Bison to\nSYS_BISON=\"bison\" # System Bison
executable\nLOCAL_BISON=\"`pwd`/$OUTDIR/src/bison\" # Local Warzone Bison
executable\n\n# getLocalBison\n# \n# Attempts to build and (if needed) download
a version of Bison that is\n# compatible with Warzone. Returns 0 if successful,
else 1.\nfunction getLocalBison\n{\n\tlocal DIRECTORY=\"bison-2.3\"\n\tlocal
EXECUTABLE=$LOCAL_BISON\n\tlocal FILENAME=\"bison-2.3.tar.bz2\"\n\tlocal
SOURCE=\"http://ftp.gnu.org/gnu/bison/bison-2.3.tar.bz2\"\n\tlocal
MD5=\"c18640c6ec31a169d351e3117ecce3ec\"\n\t\n\t## Fetch source ##\n\t\n\tcd
external\n\t\n\tif [ -d \"$OUTDIR\" ]; then\n\t echo \"$OUTDIR exists,
skipping\"\n\t return 0\n\tfi\n\t\n\tif [ -d \"$DIRECTORY\" ]; then\n\t echo
\"$DIRECTORY exists, probably from an earlier failed run\" >&2\n\t return
1\n\tfi\n\t\n\tif [ ! -r \"$FILENAME\" ]; then\n\t echo \"Fetching
$SOURCE\"\n\t if ! curl -L -o \"$FILENAME\" \"$SOURCE\"; then\n\t echo
\"Unable to fetch $SOURCE\" >&2\n\t return 1\n\t fi\n\tfi\n\t\n\tlocal
HAVEMD5=`md5 \"$FILENAME\" | sed -n -e 's/^MD5 (\\(.*\\)) =
\\(.*\\)$/\\2/p'`\n\t\n\tif [ -z \"$HAVEMD5\" ]; then\n\t echo \"Unable to
compute md5 for $FILENAME\" >&2\n\t return 1\n\tfi\n\t\n\tif [ \"$HAVEMD5\" !=
\"$MD5\" ]; then\n\t echo \"Md5 does not match for $FILENAME\" >&2\n\t return
1\n\tfi\n\t\n\tlocal EXTENSION=`echo $FILENAME | sed -e
's/^.*\\.\\([^.]*\\)/\\1/'`\n\t\n\tif [ \"$EXTENSION\" = \"gz\" ]; then\n\t if
! tar -zxf \"$FILENAME\"; then\n\t echo \"Unpacking $FILENAME failed\"
>&2\n\t return 1\n\t fi\n\telif [ \"$EXTENSION\" = \"bz2\" ]; then\n\t if
! tar -jxf \"$FILENAME\"; then\n\t echo \"Unpacking $FILENAME failed\"
>&2\n\t return 1\n\t fi\n\telse\n\t echo \"Unable to unpack $FILENAME\"
>&2\n\t return 1\n\tfi\n\t\n\tif [ ! -d \"$DIRECTORY\" ]; then\n\t echo
\"Can't find $DIRECTORY to rename\" >&2\n\t return 1\n\tfi\n\t\n\tmv
\"$DIRECTORY\" \"$OUTDIR\"\n\t\n\t## Build source ##\n\t\n\tcd
\"$OUTDIR\"\n\t\n\techo \"Configuring GNU Bison\"\n\t./configure\n\t\n\tif [
\"$?\" -ne 0 ]; then\n\t\techo \"GNU Bison configure operation failed\"
>&2\n\t\treturn 1\n\tfi\n\t\n\techo \"Compiling GNU Bison\"\n\tmake\n\t\n\tif [
\"$?\" -ne 0 ]; then\n\t\techo \"GNU Bison make operation failed\"
>&2\n\t\treturn 1\n\tfi\n\t\n\treturn 0\n}\n\n# isValidBison executable\n#\n#
Determines if a version of Bison is compatible with Warzone. The argument\n#
'executable' specifies the location of the Bison executable to test. Returns\n#
1 if the version of Bison is valid, else 0\nfunction isValidBison\n{\n\tlocal
BISON=$1 # Bison command to check version of\n\tlocal
MIN_BISON_MAJOR=1 # Minimum major version of Bison to allow\n\tlocal
MIN_BISON_MINOR=31 # Minimum minor version of Bison to allow\n\tlocal
BISON_BLACKLIST=() # Bison versions to blacklist (e.g. \"2.1\")\n\t\n\t#
Expects the Bison version to be the only token of the form #.# on the
first\n\t# line of the output from ./bison --version, where the first # is the
major\n\t# version and the second # is the minor version\n\tlocal
BISON_VER=`$BISON --version | sed -En '1 s:.*([0-9]+\\.[0-9]+):\\1:
p'`\n\tlocal BISON_MAJOR=`echo $BISON_VER | sed -E
's:([0-9]+)\\.[0-9]+:\\1:'`\n\tlocal BISON_MINOR=`echo $BISON_VER | sed -E
's:[0-9]+\\.([0-9]+):\\1:'`\n\t\n\tlocal VALID_BISON=$(( (BISON_MAJOR >
MIN_BISON_MAJOR)\n\t || ( BISON_MAJOR == MIN_BISON_MAJOR\n\t
&& BISON_MINOR >= MIN_BISON_MINOR) ))\n\t\n\t# If version
is valid so far, check the blacklist\n\tif [ $VALID_BISON -eq 1 ];
then\n\t\tfor (( i = 0; i < [EMAIL PROTECTED]; ++i )); do\n\t\t\tif [
$BISON_VER == ${BISON_BLACKLIST[${i}]} ];
then\n\t\t\t\tVALID_BISON=0\n\t\t\tfi\n\t\tdone\n\tfi\n\t\n\treturn
$VALID_BISON\n}\n\n## Main ##\n#\n# If there is not already a local version of
Bison (one in macosx/external/) and\n# the version of Bison on the system is
incompatible with the build process,\n# attempt to download a compatible
version of Bison.\n\n# Check any local version of Bison\nif [ -e $LOCAL_BISON
]; then\n\tisValidBison $LOCAL_BISON\n\t\n\tif [ $? -eq 1 ]; then\n\t\t# Local
version is valid (nothing further needs to be done)\n\t\texit 0\n\telse\n\t\t#
Local version is invalid\n\t\techo \"The local executable of GNU Bison is of an
incompatible version\" >&2\n\t\texit 1\n\tfi\nfi\n\n# If the system version of
Bison is incompatible, download a compatible version\nisValidBison
$SYS_BISON\nif [ $? -ne 1 ]; then\n\techo \"The version of Bison on your system
is not compatible with Warzone\"\n\techo \"A compatible version will be
attempted to be downloaded and used\"\n\t\n\tgetLocalBison\n\tif [ $? -ne 0 ];
then\n\t\techo \"Retrieval of a compatible version of Bison has failed\"
>&2\n\t\texit 1\n\tfi\nfi\n\nexit 0\n";
};
/* End PBXShellScriptBuildPhase section */
Index: macosx/external/bison.sh
===================================================================
--- macosx/external/bison.sh (revision 0)
+++ macosx/external/bison.sh (revision 0)
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+SYS_BISON="bison" # System Bison executable
+LOCAL_BISON="`pwd`/external/bison/src/bison" # Local Warzone Bison executable
+
+# If a Warzone Bison executable exists, use instead of the system executable
+if [ -e $LOCAL_BISON ]; then
+ $LOCAL_BISON $*
+else
+ $SYS_BISON $*
+fi
Property changes on: macosx/external/bison.sh
___________________________________________________________________
Name: svn:executable
+ *
_______________________________________________
Warzone-dev mailing list
[email protected]
https://mail.gna.org/listinfo/warzone-dev