Problem
You're creating an Ant build script, and you need to determine the operating system the script is running on, so you can make conditional decisions within the build script. You typically want/need to do this if you're going to run tasks/targets that are different for each operating system (Mac, Windows, Unix, etc.).
Solution
First, create several small Ant condition tests that check the "os family". Here's a check I created to test for the Mac OS X operating system:
<condition property="isMac"> <os family="mac" /> </condition>
The property created here named isMac
will now hold a true/false boolean value that you can test with you Ant target later, like this:
<target name="doMac" if="isMac"> <echo message="Came into the Mac target" /> <!-- do whatever you want to do here for Mac systems --> </target>
Now just perform this same condition/property/test sequence for the other operating systems you want to handle, including Windows and Unix systems.
The source code for my Ant build script
Here's the complete source code for an Ant build script that demonstrates this process of detecting the current operating system, and then conditionally performing certain operating system specific tasks:
<?xml version="1.0"?> <!-- Ant Ant build script that demonstrates how to test to see which operating system (computer platform) the Ant build script is currently running on. Currently tests for Mac OS X, Windows, and Unix systems. Created by Alvin Alexander, http://alvinalexander.com --> <project default="OS-TEST" name="Ant Operating System Test" > <!-- set the operating system test properties --> <condition property="isMac"> <os family="mac" /> </condition> <condition property="isWindows"> <os family="windows" /> </condition> <condition property="isUnix"> <os family="unix" /> </condition> <!-- define the operating system specific targets --> <target name="doMac" if="isMac"> <echo message="Came into the Mac target" /> <!-- do whatever you want to do here for Mac systems --> </target> <target name="doWindows" if="isWindows"> <echo message="Came into the Windows target" /> </target> <target name="doUnix" if="isUnix"> <echo message="Came into the Unix target" /> </target> <!-- define our main/default target --> <target name="OS-TEST" depends="doMac, doWindows, doUnix"> <echo message="Running OS-TEST target" /> </target> </project>
The output from this Ant build script
When I run this Ant build script on my Mac OS X 10.5.7 system using Ant version 1.7.0, I get the following output:
Buildfile: build.xml doMac: [echo] Came into the Mac target doWindows: doUnix: [echo] Came into the Unix target OS-TEST: [echo] Running OS-TEST target BUILD SUCCESSFUL Total time: 0 seconds
As I mentioned in a previous blog entry, this build script responds to both the isMac
and isUnix
test properties, and I'm going to dig into this and see if I can understand why. (Mac OS X is build on top of a BSD/Mach base, so I'm assuming that's the answer, but I don't know for sure.)