 |
My Ant Adventure (Updated 1/23/2007)
Posted by kellyohair on January 03, 2007 at 01:46 PM | Comments (4)
Update for 1/23/2007, just a very short note on windows.
The findbugs target needs to add vmlauncher="false", so the line:
<exec executable="findbugs" failonerror="true">
changes to
<exec executable="findbugs" failonerror="true" vmlauncher="false">
It's not exactly clear why this is necessary, but this allows
the findbugs target to work on windows, and also works everywhere else. The findbugs -version exec was also removed because this
will trigger the GUI to start up if it runs findbugs.bat,
and findbugs.bat doesn't seem to have a -version option.
In addition, the ant 1.7.0 install bits seem to have a windows
bin/ant.cmd file that does not have execute permissions,
by adding execute permissions to this file, ant can be run from a
Makefile. Again, it's not exactly clear why this is needed, but
it makes sense for it to have execute permissions, so this seems
harmless.
Updated 1/22/2007, tried to mark
changes in bold underline.
Also added the actual
build.xml
to download.
Now I have never liked ants (see my
ants
blog), but
this story is about my adventure with the
Apache Ant
build system.
I can safely say that I still hate ants, all ants, but even ants
have a place in the world, ant build scripts included.
So I was crawling along with my little
NetBeans
Java project just happy as a clam using NetBeans 5.5 with the
findbugs
plugin,
and the
JUnit
tests that NetBeans help me to create and run so easily.
I never had to write an Ant script before, I just pointed NetBeans
at my sources, set a few properties and
let NetBeans handle it. Overall it was pretty easy, and simple.
But when it came time for a batch product build, I had used a Makefile and a separate build process. So the romantic picnic at the park was over, it was time
for the ants to take over. :^)
The Makefile worked, but
wasn't ideal, and it was always a temporary thing, but
it did create the bin scripts and run some bin script tests
that I hadn't managed to get the NetBeans building to do.
First off, it's never good to have two different ways to build a product, you never know for sure if the two build mechanisms really built the same thing. So in general, when it comes to a build process,
everyone should follow the
Highlander
rule of "There can be only one".
Granted, a "development build" will always be slightly different,
probably a subset, but it should be using the same basic mechanisms
as a more formal and complete product build.
Second, I was missing some of the things I wanted built into the batch
build process, namely running findbugs and running all my JUnit tests.
So I wasn't happy with my existing batch build process.
Ideally I want a batch build process to:
-
compile with
full javac error checking and treat all errors as fatal
(javac -Xlint:all -Werror)
-
construct the
'dist' area (the jar file and including any necessary bin scripts)
-
run all the JUnit tests
-
run the bin script tests
-
run javadoc and treat all errors as fatal
-
run findbugs with full checking and treat all errors as fatal
Lucky for me I've got a very clean set of source files, and I
want to keep them that way, otherwise I'd have to back off on some
of my "treat all errors as fatal" requirements. ;^)
The first two items above represent the typical development
build or "full build"
while inside NetBeans, but it was important to me that all the
steps should be manually runnable inside NetBeans too.
So I started my adventure to make this happen.
My first thought was about having the Makefile
run findbugs and JUnit directly,
but that seemed wrong and didn't solve
my first problem above. So the answer was fairly obvious, if I
needed a Makefile, it would be trivial to have it run
the ant script, right? So I just needed to create an ant script.
Of course it's never that easy. I did manage to get this to work,
and I did learn enough about ant to create this standalone ant script,
one that did everything I wanted, but it was NOT simple and easy,
and the end result
was not very satisfactory.
It turns out that when you create a NetBeans project with
an existing ant script, some of the NetBeans features
(like debugging a JUnit test) will not work. :^(
So some NetBeans features (or what I perceive to be features) are tied to the specific ant build scripts that
NetBeans creates.
Then there were the ant problems, which involved having a
version of ant that would work with the latest
findbugs
ant task and the
junit
ant task. I finally settled on using ant 1.7 but
since I allow for my project to build anywhere, I needed ant 1.7
everywhere, and that meant I had to manage my own version of ant
(I could not trust all systems to have an ant that would work for me).
I think the ant inside NetBeans 5.5 was 1.6 something, and it
didn't work with the findbugs ant task for some reason, but that was ok because while
inside NetBeans you really want to use the findbugs plugin for the
best interaction with your sources.
So I finally gave up on the findbugs ant task and just used:
<condition property="findbugs.home" value="/Applications/findbugs">
<os family="mac"/>
</condition>
<target name="findbugs-batch" depends="init"
description="Run findbugs in batch mode">
<exec
executable="${findbugs.home}/bin/findbugs"
failonerror="true">
<arg value="-textui"/>
<arg value="-effort:max"/>
<arg value="-low"/>
<arg path="${dist.jar}"/>
</exec>
</target>
An UPDATE on this.
Turns out that Windows is giving me
no end of grief regarding pathnames,
so this was changed to assume findbugs was in
the PATH setting, overall this seems to make life easier.
In general avoiding having ant deal with full paths is ideal,
that also means avoiding the ant property ${basedir}
which WILL be a full path.
The Makefile changed too, see below.
I want this ant script
to work on MacOSX, Solaris, Linux, and Windows, others
may not have this requirement.
I also wanted it to work no matter where the source
was moved to, so again, avoid fullpaths.
I also added the findbugs
-exitcode option so that errors trigger a
non-zero process exit code and also the
-maxHeap 512 option to give findbugs lots of heap space
(it seems to need it, and runs a bit faster this way).
So now I use something more like:
<target name="myfindbugs" depends="init"
description="Run findbugs in batch mode">
<exec
executable="findbugs"
failonerror="true">
<arg value="-maxHeap"/>
<arg value="512"/>
<arg value="-textui"/>
<arg value="-effort:max"/>
<arg value="-low"/>
<arg value="-exitcode"/>
<arg path="${dist.jar}"/>
</exec>
</target>
As it turns out, because using the
findbugs ant task
causes the ant VM to run out of memory, so you had to restart ant
with more memory, what a pain.
Using my above batch target the findbugs process
uses it's own VM. This really doesn't change the performance much since findbugs takes a few minutes to run anyway, and just using the bin findbugs script must set the max memory up higher or something.
So now I had to deal with this loss of NetBeans Junit debug
capability.
I did like how NetBeans automatically created the menu for the
targets in my build.xml file, but I could not live without the
ability to quickly debug any JUnit test. So I needed to either
configure my build.xml file better, or try another approach.
So I went back to letting NetBeans create it's own ant scripts
and when I found where NetBeans placed these files (build.xml plus the nbproject directory),
I just copied over all the nbproject directory and the build.xml
file to my project's
Mercurial
repository and reopened the repository as a
pre-configured NetBeans project.
That way I didn't have to worry about matching the NetBeans ant
conventions to get the JUnit debug feature to work.
An update on this, first, do NOT include the nbproject/private directory
in your repository.
And second,
if you tell NetBeans to use anything other than the default
Java platform, things don't work very well.
This was easy for me to avoid, but the way the Java platforms
are defined in the ant scripts didn't make the files transportable.
Maybe this was a Mac specific thing?
Then I edited the NetBeans generated build.xml file
(which is now my primary product build.xml file) and
added to it.
-
Some properties and hooks into the NetBeans ant scripts I needed
to set for some reason.
Some of these properties
should not need to be set since they are set for you
already in the nbproject files, so I'm puzzled why you have to set
property values sometimes and not others.
You will also notice the echo targets I have created, which is
just my style, I like to know when targets are being run, and the
ant verbose option is too verbose, so I added appropriate echo
commands.
<!-- project name (determines jar and script name) -->
<property name="project.name" value="jprt"/>
<!-- top level package name -->
<property name="package.name" value="jprt"/>
<!-- top level paths -->
<property name="src.dir" value="src"/>
<property name="test.src.dir" value="test"/>
<property name="lib.dir" value="lib"/>
<!-- source paths -->
<property name="bin.src" value="${src.dir}/bin"/>
<property name="sbin.src" value="${src.dir}/sbin"/>
<property name="doc.files.src" value="${src.dir}/${package.name}/doc-files"/>
<!-- build paths -->
<property name="build.dir" value="build"/>
<property name="manifest.file" value="${build.dir}/mainfest.mf"/>
<property name="build.classes.dir" value="${build.dir}/classes"/>
<property name="build.test.classes.dir" value="${build.dir}/test/classes"/>
<!-- dist paths -->
<property name="dist.dir" value="dist"/>
<property name="bin.dir" value="${dist.dir}/bin"/>
<property name="sbin.dir" value="${dist.dir}/sbin"/>
<property name="dist.jar" value="${dist.dir}/${project.name}.jar"/>
<!-- path to test scripts -->
<property name="test.script" value="${test.src.dir}/test.sh"/>
<property name="test.system.script" value="${test.src.dir}/test_system.sh"/>
<!-- javadoc paths -->
<property name="dist.javadoc.dir" value="${dist.dir}/javadoc"/>
<property name="doc.files" value="${dist.javadoc.dir}/${package.name}/doc-files"/>
<!-- classpath settings -->
<property name="javac.classpath" value=""/>
<property name="run.classpath" value="${build.classes.dir}"/>
<property name="javac.test.classpath" value="${build.classes.dir}:${lib.dir}/junit.jar"/>
<property name="run.test.classpath" value="${build.test.classes.dir}:${javac.test.classpath}"/>
<!-- default system options -->
<condition property="system.instance" value="testsystem-ant">
<not> <isset property="system.instance"/> </not>
</condition>
<!-- always provide debugging information -->
<property name="javac.debug" value="true"/>
<!-- the main class for the project -->
<property name="main.class" value="${package.name}.tools.Main"/>
<!-- make sure netbeans knows we have a manifest file -->
<property name="manifest.available" value="true"/>
<!-- hooks into netbeans ant files -->
<target name="-pre-compile" depends="mycompilestart"/>
<target name="-post-compile" depends="mycompileend"/>
<target name="-do-jar-with-manifest" depends="mymanifest"/>
<target name="-pre-jar" depends="myjarstart,mymanifest"/>
<target name="-post-jar" depends="myjarend,mybinfiles,mysbinfiles,mypropfiles,myjartests"/>
<target name="javadoc" depends="myjavadoc"/>
-
The special targets of my own:
<!-- just used to add messages at certain points -->
<target name="mycompilestart"> <echo message="COMPILING"/> </target>
<target name="mycompileend"> <echo message="COMPILING COMPLETED"/> </target>
<target name="myjarstart"> <echo message="BUILDING JAR"/> </target>
<target name="myjarend"> <echo message="JAR COMPLETED"/> </target>
<!-- create my own manifest file -->
<target name="mymanifest" description="Create manifest file">
<echo message="Creating manifest file: ${manifest.file}"/>
<manifest file="${manifest.file}">
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</target>
<!-- copy the bin files -->
<target name="mybinfiles" description="Create bin files">
<echo message="Populating bin files"/>
<mkdir dir="${bin.dir}"/>
<copy todir="${bin.dir}">
<fileset dir="${bin.src}" casesensitive="yes">
<include name="*"/>
</fileset>
</copy>
<chmod dir="${bin.dir}" perm="ugo+rx" includes="*"/>
</target>
<!-- copy the sbin files -->
<target name="mysbinfiles" description="Create sbin files">
<echo message="Populating sbin files"/>
<mkdir dir="${sbin.dir}"/>
<copy todir="${sbin.dir}">
<fileset dir="${sbin.src}" casesensitive="yes">
<include name="*"/>
</fileset>
</copy>
<chmod dir="${sbin.dir}" perm="ugo+rx" includes="*"/>
</target>
<!-- copy the property files into the sbin directory -->
<target name="mypropfiles" description="Create sbin property files">
<echo message="Populating ${dist.dir} with prop files"/>
<mkdir dir="${dist.dir}"/>
<copy todir="${dist.dir}">
<fileset dir="${src.dir}" casesensitive="yes">
<include name="*.properties"/>
</fileset>
</copy>
<echo message="System instance: ${system.instance}"/>
<!-- Ant echo is Broken: <echo file="${dist.dir}/config-default.properties"
message="jprt.system.instance=${system.instance}"/> -->
<exec executable="echo" failonerror="true"
output="${dist.dir}/config-default.properties">
<arg value="jprt.system.instance=${system.instance}"/>
</exec>
</target>
<!-- test the jar file -->
<target name="myjartests" description="Test jar.">
<echo message="Testing: java -jar ${dist.jar} "/>
<java jar="${dist.jar}" fork="true" failonerror="true">
<assertions> <enable/> </assertions>
</java>
<echo message="Testing: java -jar ${dist.jar} help"/>
<java jar="${dist.jar}" fork="true" failonerror="true">
<arg value="help"/>
<assertions> <enable/> </assertions>
</java>
<echo message="Testing: java -jar ${dist.jar} usage"/>
<java jar="${dist.jar}" fork="true" failonerror="true">
<arg value="usage"/>
<assertions> <enable/> </assertions>
</java>
<echo message="Testing: java -jar ${dist.jar} version"/>
<java jar="${dist.jar}" fork="true" failonerror="true">
<arg value="version"/>
<assertions> <enable/> </assertions>
</java>
<echo message="TESTING JAR COMPLETED."/>
</target>
<!-- test the bin script -->
<target name="mybintests" description="Test bin.">
<chmod file="${test.script}" perm="ugo+rx"/>
<echo message="Testing: sh -c ${test.script} ${dist.dir}"/>
<exec executable="sh" failonerror="true">
<arg value="-c"/>
<arg value="${test.script} ${dist.dir}"/>
</exec>
<echo message="TESTING BIN SCRIPT COMPLETED."/>
</target>
<!-- test the system script -->
<target name="mysystemtest" description="Test system.">
<chmod file="${test.system.script}" perm="ugo+rx"/>
<echo message="Testing: sh -c ${test.system.script} ${dist.dir} ."/>
<exec executable="sh" failonerror="true">
<arg value="-c"/>
<arg value="${test.system.script} ${dist.dir} ."/>
</exec>
<echo message="TESTING SYSTEM SCRIPT COMPLETED."/>
</target>
<!-- findbugs target -->
<target name="findbugs" depends="myfindbugs"
description="Run findbugs in batch mode"/>
<!-- my target that runs findbugs directly (in separate VM with 512M heap) -->
<target name="myfindbugs" description="Run findbugs in batch mode">
<echo message="findbugs -maxHeap 512 -textui -effort:max -low -exitcode ${dist.jar}"/>
<exec executable="findbugs" failonerror="true" vmlauncher="false">
<arg value="-maxHeap"/>
<arg value="512"/>
<arg value="-textui"/>
<arg value="-effort:max"/>
<arg value="-low"/>
<arg value="-exitcode"/>
<arg path="${dist.jar}"/>
</exec>
<echo message="FINDBUGS COMPLETED."/>
</target>
<!-- my own javadoc target because doc-files don't seem to get copied over -->
<target name="myjavadoc" depends="init,-javadoc-build,-javadoc-browse"
description="Build Javadoc.">
<mkdir dir="${doc.files}"/>
<echo message="Populating doc-files directory: ${doc.files}"/>
<copy todir="${doc.files}">
<fileset dir="${doc.files.src}" casesensitive="yes">
<include name="*"/>
</fileset>
</copy>
<echo message="JAVADOC COMPLETED."/>
</target>
<!-- all target -->
<target name="all" depends="jar,test,mybintests,javadoc,findbugs"
description="Do everything"/>
So all the above is new and updated.
I could not get the echo to add a newline to the file, even following
all the documentation on echo, so I just used the exec target and the
echo command of the system.
I also had problems with javadoc populating the doc-files, so I
had to add my own doc-files copy. I'm not sure what I did
to break this. The javadoc command seemed to be sensitive to
relative vs. full paths, or the current directory setting.
My recommendation again is to avoid the use of full paths
everywhere you can, it just makes life easier.
Also, any need to do simple shell commands like:
domainname | cut -d'.' -f2 | tr '[:upper:]' '[:lower:]'
had better be done in a shell script or in the Makefile.
In my real Makefile I do some system specific shell commands
to determine the value of an ant property that I pass into ant.
This works well for me because when running ant directly I don't
need this setting.
The other way to do this would be to exec a shell script and
capture it's output.
Running shell scripts in ant seems to work best when you
run them with sh command.
Windows often will not recognize a shell script.
The findbugs task was not connected into the NetBeans
build/test system, and is just used by the Makefile or directly
from the ant script.
Well, it turns out that this works very nicely.
The following Makefile was updated to avoid the use
of full paths and simplify how the ant targets are used.
The Makefile was trivial, and looks like:
# Makefile to simulate a NetBeans build
# This Makefile is located one directory below the ant basedir
TOPDIR = ..
# Value of ant property that needed to be created OS specific
system_instance=testsystem
# How to run ant
ANT_OPTIONS += -Djprt.system.instance=${system_instance}
ANT = ant $(ANT_OPTIONS)
# All ant targets of interest
ANT_TARGETS = all jar test javadoc findbugs clean init compile
# Create a make target for each
$(ANT_TARGETS):
( cd $(TOPDIR) && $(ANT) $@ )
# Declare these phony (not filenames)
.PHONY: $(ANT_TARGETS)
Update, now the path to ant and findbugs
just need to be put in your PATH.
I'm sure there are better ways to do some of this, but I
did get the above working, and I am just an ant beginner.
I still don't see any easy way to loop over a set of names
with ant, and the 'condition' task is really confusing.
(No wonder there are 600+ page books on how to write ant scripts.)
I suppose people say the same thing about Makefiles. ;^)
Hope someone gets something out of this, and yes I've learned
to live with ants. ;^)
-kto
Bookmark blog post: del.icio.us Digg DZone Furl Reddit
Comments
Comments are listed in date ascending order (oldest first) | Post Comment
-
Ant Adventure == Antventure!
Dmitri
Posted by: trembovetski on January 25, 2007 at 02:18 PM
-
Kelly,
I was having some trouble figuring out generating and using manifests and jar files using Ant using just the Ant docs. The Ant docs seem fairly comprehensive and correct, but I was still getting a bit lost. This post was a real help! Thanks!
regards,
-Frank Hardisty
Posted by: geovizer on March 11, 2007 at 07:56 AM
-
Hey.
Here is some really quick set of examples of ANT for those interested: Ant Scripts at Coder's Log.
The site serves as a non-profit resource on large scale java applications, a coder's journal.
Thanks
Posted by: screenedtwenty on June 05, 2007 at 02:05 PM
-
#
Hey. Here is some really quick set of examples of ANT for those interested: Ant Scripts at Coder's Log. The site serves as a non-profit resource on large scale java applications, a coder's journal. Thanks
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
sexe
porno-extrem-gratos-gay-sexe-porno-free-sexe-gratuit-emule
sex-hard-xxx-walt-disney-xxx-gratuit-perso-amateur-sexe-
photo-porno-gratuit-amateur-gratuit-sexe-mature-meilleur
de-and-sexe-video-porno-clara-morgane-nu-chat-direct-sexe-
strapon-girls-porno-porno-lesbienne-gratuit-veritable-photo
mure-pipe-sexe-gratruit-mangas-porno-sexe-xxx-jeune-garcon
free-streaming-porno-telechargement-film-xxx-gratuit-
porno-porno-gay-gros-mature-video-lesbienne-porno-porno
telecharger-histoire-hard-cul-sexe-galerie-porno-gay-
mature-porno-star-extrait-porno-gay-humour-sexe-gratuit-
xxx-star-photo-sexe-bite-mangas-film-xxx-gratuit
vente-dvd-xxx-extrait-galerie-video-porno-gratuite-live-and
photo-porno-des-africain-sexe-video-cinema-film-charm-free
sexe-jeune-etudiante-newsletter-and-sexe-and-histoire-
porno-video-avec-image-telecharger-gratuitement-film-sexe-
galerie-sexe-amateur-sexe-shop-sm-image-sexe-gratui-porno
image-drole-et-sexe-video-gay-gratuit-sexe-page-video
star-du-porno-x-gratuit-photo-et-video-porno-hot-sexy-xxx-
gay-ado-porno-gros-sexe-poilu-mini-clip-xxx-video-gratuite
sexe-avec-amateur-porno-couple-mature-image-x-porno-sexe
bd-dragon-ball-gt-xxx-forum-probleme-sexe-pps-porno
porno-gay-video-gratuit-bd-classique-porno-arabe-sexe-porno
homme-and-sexe-galerie-sexe-tgp-black-ass-candy-beauty-xxx-
sexe-hard-gros-sein-sexe-chatte-anal-galerie-amateur-sexe-
sexe-bizarre-sexe-arabe-photo-sexe-mangas-gay-porno-photo
photo-porno-sexe-gay-gratuit-video-cul-xxx-voir-film-porno-
photo-sexe-hard-gratuit-photo-porno-vieille-femme-black
clip-sexe-photo-and-and-sexe-and-gratuit-free-movies-xxx
gay-porno-video-gratuite-libertin-sexe-blog-les-femme-arabe
ingrid-chauvin-extrait-film-porno-grande-image-porno-blog
photo-gratuite-sexe-femme-mature-beurette-nu-sexe-
free-porno-clip-visualise-video-porno-gratuite-extrait-de
photo-sexe-xxx-gratuit-fotos-xxx-blonde-anime-flash-hard
voyeur-photo-gratuit-porno-web-cam-porno-amateur-gratuite-
porno-amateur-gratuit-extrait-video-xxx-and-gay-porno-anal
amateur-sexe-web-cam-femme-mariee-arabe-sexe-photo-sexe-plus
nice-girls-xxx-amateur-casting-and-porno-and-france-galerie
vogue-and-xxx-free-histoire-xxx-blog-rencontre-sexe-
mature-men-porno-pic-arabe-sexe-x-web-cam-amateur-sexe-
sexe-gratuit-extrait-taille-moyenne-du-sexe-l-homme-sexe
film-and-porno-and-amateur-and-gratis-sexe-video-gratuite
porno-gay-et-hetero-hard-and-xxx-extrait-sexe-totalement
xxx-gay-free-amateur-and-porno-porno-africain-gratuit-video
extret-film-porno-gratuit-clip-video-porno-gratos-bd-xxx
blog-and-amatrice-and-and-sexe-porno-hard-gratuit-sexe
lien-emule-porno-video-star-sexe-sexe-black-video-black-x
cul-meme-xxx-mangas-porno-sexe-sex-porno-video-gratuit-
film-porno-annuaire-video-porno-x-sexe-porno-free-gay-anal
blog-hot-sex-xxx-clip-avec-sexe-photo-porno-gratuit-galerie
video-and-sexe-and-gratuite-free-sexe-bizarre-film-porno-xxx
extrait-flim-porno-gratuit-porno-sexo-xxx-emule-divx-girl
video-casting-sexe-amateur-photo-sex-porno-gratui-sexy
video-photo-porno-du-sex-hard-xxx-photo-xxx-clara-morgane
school-girls-xxx-dessin-representant-sexe-masculin-feminin-
histoire-sexuelle-porno-femme-sexe-amateur-web-cam-porno
clip-video-sexe-gratuite-xxx-clip-video-emule-porno-xxx
sexe-homme-afrique-histoire-sexe-homme-nu-image-insolite
cinema-porno-girones-pps-sexe-diaporama-amatrice-sexe-clip-
sexe-hard-core-porno-gay-gratuite-clip-porno-elisa-actrice
adult-xxx-general-hentai-dragon-ball-xxx-forum-free-password
image-sexe-gratuite-blog-porno-gay-gratuit-film-porno-classe-x-telecharger-gratuit-film-xxx-flash-jeu-sexe-porno-photo-lesbienne-gratuite-xxx-jeu-de-sexe-gratui-porno-sex-clip-sexe-femme-vieille-porno-gay-xxx
pamela-xxx-video-amateur-hot-video-sexe-sexe-depucelage-puceau-mature-porno-gratuit-chatte-sexe-cochon-salope-lesbienne-porno-x-de-qualite-gay-gratuit-blog-photo-sexe-extrait-gonzos-porno-gratuit
sexe-mangas-free-sexe-gratuit-galerie-photo-porno-hard-fr-sexmefree-and-annuaire-and-sexe-photo-gratuite-sexe-couple-amateur-histoire-and-sexe-bella-dona-mature-sexe-extrait-and-casting-and-porno
hard-sex-porno-telechargement-jeu-xxx-free-blog-perso-sexe-cul-extrait-clip-video-sexe-gratuit-film-dvd-graduit-porno-exhibition-sexe-francais-cine-porno-arabe-free-mature-sexe-porno-star-du-x
hard-xxx-vids-porno-cinema-voir-film-porno-x-xxx-gay-leather-chat-land-sexe-mangas-porno-image-porno-xxx-femme-vieille-mure-savannah-samson-photo-xxx-brunette-star-porno-video-gratuite-sexe-gogo
sexe-and-free-femme-blacks-xxx-sexe-tres-hot-porno-gay-amateur-gratuit-julie-and-porno-sexe-lesbienne-cunnilingus-live-webcam-sexe-minet-gay-sexe-mangas-x-porno-photo-porno-black-gratuite
blog-xxx-porno-dialogue-porno-telephone-et-webcam-photo-d-homme-sexe-video-porno-sur-femme-ivoirienne-jeu-hard-porno-xxx-visionner-des-video-porno-gratuite-film-black-porno-film-francais-pied-sexe
sex-porno-extrait-gratuit-porno-and-hard-video-gratuit-extrait-sexe-porno-anal-blonde-sexe-jeu-sexe-gratuit-humour-pique-nique-xxx-photo-lesbienne-xxx-domain-ifrancecom-sexe-feminin-avec-legume
sexe-homme-masturbation-xxx-film-free-vagin-cul-sexe-hard-gratuit-sexe-gros-plan-jpeg-xxx-and-vogue-photo-sexe-gratuite-femme-arabe-photo-de-star-du-porno-gratuite-xxx-zone-movies-sexe-hard-x
xtrait-de-video-xxx-gratos-sexe-jeune-galerie-video-porno-telecharge-film-porno-gratui-sexe-gaulois-com-realisateur-film-porno-francais-porn-and-gay-and-sexe-and-mpg-easy-rencontre-sexe-sexe-hard-free
amatrice-hard-xxx-plus-video-porno-gay-gratuit-annuaire-site-video-sexe-gratuit-jeu-pc-sexe-voir-photo-porno-photo-video-sexe-gratuit-porno-gay-maroc-arabe-gratuit-lolo-ferrari-film-porno-gratis
sexe-feminin-enorme-video-and-sexe-and-hard-and-gratuit-video-free-porno-sexe-video-hard-webcam-xxx-libre-acces-image-porno-de-femme-gay-men-xxx-free-password-xxx-extrait-video-gratuite-porno
film-video-porno-film-video-porno-gratuit-sexe-mangas-gay-sexe-de-vieille-mamie-porno-star-anal-porno-xxx-photo-porno-amateur-francais-adsl-annuaire-porno-amat-gratuit-francais-porno-skyblog-salope-porno
xxx-ancia-voir-le-sexe-des-homme-blog-sexe-gratuit-rencontre-sexe-melun-video-perso-porno-amateur-extrait-sexe-gratuit-fetiche-gratuit-extrait-femme-video-sexe-live-rencontre-chat-sexe-gratuit
lieux-de-rencontre-sexe-star-porno-black-galerie-sexe-mangas-live-shows-sexe-amateur-porno-specia-grosse-sexe-and-gay-and-xxx-sexe-webcam-gratuite-lesbienne-hot-porno-cul-lagitane-sexe-xxx-categorie
xxx-galerie-movies-meilleur-sexe-shop-vente-ligne-porno-star-baisees-gratuit-video-xxx-gratuite-a-telecharger-sexe-arabe-beurette-skyblog-amateur-sexe-video-and-sexe-and-gratuit-hot-sexe-video
jeune-chinoise-sexe-gay-gay-sexe-sexe-caresse-anal-nouvelle-star-porno-extrait-sexe-gratuit-photo-gratuit-porno-gay-photo-video-porno-jeune-gay-photo-sexe-gratuite-suisse-blog-sexe-couple-exib
skyblog-gif-anime-sexe-hot-and-toulouse-and-sexe-initiation-sexe-porno-portail-du-sexe-com-actualite-porno-x-porno-gratui-video-sexe-cam-direct-girlwebcamfreefr-xxx-planete-webcam-sexe-vieux-et-jeune
hard-porno-francais-video-extrait-porno-belle-femme-sexys-xxx-gratuit-film-xxx-film-porno-femme-algerienne-lire-video-porno-emule-porno-photo-trans-gratuit-xxx-free-sex-movies-amateur-photo-porno
hot-sexe-photo-femme-exhibitionniste-libertin-aimant-sexe-google-porno-gratuit-photo-toutes-photo-sur-sexe-hard-sexe-et-anal-star-xxx-sexe-gratuit-a-gogo-afrique-sex-porno-and-porno-and-francais
cinema-porno-x-beurette-algerienne-xxx-porno-bite-gay-cul-sexe-hot-galerie-sexe-photo-gratuite-xxx-archive-girls-hard-sexe-asiatique-ratuit-black-mature-xxx-nivon-julie-porno-image-sur-le-sexe
regarder-video-porno-gratuite-jeune-sexe-nu-video-porno-black-enceinte-gratuite-yasmine-porno-photo-jeu-hardcore-sexe-password-and-free-and-xxx-sexe-nu-cam-sexe-shop-trio-xxx-blonde
cam-live-free-sexe-video-and-porno-and-gratui-sexe-anal-gratuitcom-xxx-gay-cul-film-xxx-free-extrait-clip-et-film-sexe-gratuit-sex-porno-arabe-telecharger-divx-porno-annuaire-de-sexe-totalement-gratuit
gratuit-porno-gay-extrait-de-video-de-sexe-gratuit-a-telecharger-sexe-hot-string-cinema-porno-video-porno-totalement-gratuite-photo-porno-ancienne-porno-sex-video-star-porno-francaise-histoire-rasage-sexe
image-femme-porno-chat-sexe-ado-video-porno-francaise-gratuite-sexe-sexy-hot-photo-yasmine-actrice-porno-video-sexe-entierement-gratuite-black-hardcore-sexe-anal-porno-movies-forum-video-xxx
photo-sexe-gratui-arabe-donne-mature-porno-gratuito-jaquette-dvd-xxx-sexe-video-gratuit-hard-sexe-chez-l-homme-jeu-and-xxx-beurette-sexe-amateur-video-xxx-amateur-cul-sexe-porno
film-xxx-nouveaute-film-porno-gratuit-sur-webcam-femme-mure-gratuit-xxx-boutique-film-porno-dvd-blog-and-sexe-and-amatrice-mini-extrait-film-porno-sexe-and-amateur-and-video-video-porno-fichier-jpeg-free-download
casting-tourner-film-porno-google-site-porno-gratis-sponsorise-visionner-film-xxx-gratuit-video-xxx-jpeg-galerie-sexe-et-cul-fr-sexe-et-star-telechargement-video-sexe-porno-with-black-women-dbz-xxx-porno
porno-star-americaine-xxx-porno-sex-femme-sexe-porno-top-hard-xxx-video-sexe-amatrice-video-production-film-porno-amateur-cannelle-actrice-porno-francais-sexe-de-vieille-grosse-sexe
amina-maroc-sexe-porno-amatrice-montfermeil-sexe-sexe-shop-fr-vraie-photo-amateur-sexe-galerie-porno-tout-genres-sexe-porno-gay-movies-free-sexe-extrait-video-porno-sans-abonnement-femme-mure-sexe-gratuit
porno-femme-mure-gratuit-sexe-tgp-gratuit-mangas-adulte-sexe-photo-xxx-porno-photo-gratuite-de-sexe-feminin-gay-sexe-gratuit-photo-xxx-gratuit-sexe-geant-sexe-tres-vieille-extrait-gratuit-video-porno-video
film-porno-video-jeu-erotique-porno-sexy-aicha-x-porno-bollywood-actress-xxx-photo-annuaire-forum-sexe-galerie-sexe-photo-video-gratuit-extrait-porno-agence-de-casting-porno-clip-porno-anal
free-porno-pics-jeu-humour-xxx-photo-et-video-de-sexe-gratuite-simpsons-toon-xxx-video-sexe-gratuite-yasmine-sexe-anal-photo-xxx-world-index-image-jpeg-porno-sexe-gros-plan-live-show-audio-sexe
sexe-xxx-star-academie-xxx-photo-arabe-porno-sexe-shop-thionville-porno-video-gratuit-a-telecharger-porno-hard-asiatique-porno-xxx-video-gratuit-video-sex-xxx-extrait-xxx-film-porno-photo-gratuit-de-sexe-amateur
video-gratuite-porno-portail-free-preview-porno-sexe-black-brutal-xxx-site-sexe-page-rank-high-dvd-porno-japon-sexe-shop-usa-sexe-and-gratuit-and-sado-and-femme-mure-sexe-homme-homme
photo-sexe-lingerie-gratuite-pokemon-and-xxx-xxx-sexe-xxx-sex-lolita-xxx-xxx-gom-com-skyblog-porno-video-porno-anal-indians-black-sexe-sex-gratui-porno-actrice-porno-italienne-gros-black-porno
mini-clip-sexe-gratuit-demo-virtuelle-film-xxx-gratuit-sans-connexion-gay-and-porno-and-gratuit-bulle-actrice-porno-moteur-and-and-recherche-and-sexe-and-sexe-gratuit-and-annuaire-sexe-and-annuaire-charme-and-site
photo-d-un-sexe-feminin-gratuit-grosse-arabe-sexe-galerie-femme-manque-sexe-film-porno-boure-sexe-clip-xxx-free-extrait-film-gratuit-porno-sexe-gay-fr-blog-retro-porno-clip-sexe-amateur-photo-xxx
jeune-gay-sexe-porno-gay-sexe-xxx-black-porn-sexe-annonces-bretagne-mangas-super-sexe-galerie-xxx-mature-free-sexe-live-cam-contribution-amateur-sexe-photo-sexe-poilu-photo-xxx-recherche
video-casting-porno-novelle-star-porno-photo-porno-amateur-discipline-gratuit-fouet-bd-and-xxx-maroc-sex-porno-porno-gay-extrait-video-gratuit-porno-sex-lesbienne-blog-sexe-amateur-gratuit-beurette-sexe-xxx-hard
sexe-porno-amateur-porno-and-retro-porno-avec-pied-asiatique-mangas-porno-gratui-video-gratuite-sexe-amateur-photo-sex-porno-sexe-amateur-francais-annuaire-sexe-bonne-webcam-free-porno
rencontre-sexe-toulouse-skyblog-j-adore-sexe-petit-sexe-xxx-divx-porno-gratuit-sexe-coquin-xxx-cite-porno-gratuit-vente-de-dvd-porno-gay-telecharger-video-xxx-video-extrait-gratuit-de-porno
xxx-sample-movies-annuaire-sexe-video-gratuit-amateur-sexe-video-video-russe-porno-xxx-video-porno-retro-gratos-sex-porno-photo-nami-one-piece-xxx-hentai-photo-gratuite-sexe-gratuit-portail-sexe-amateur-gratuit
pokemon-xxx-sex-mangas-porno-gratuite-sexe-porno-gratos-porno-gratuit-avec-clip-gratuit-video-porno-gay-beur-porno-gay-gratos-mature-mother-sexe-sexe-porno-mature
montreal-sexe-conversation-lesbienne-annuaire-porno-couple-rencontre-sexe-webcam-gratuit-dbz-mangas-xxx-free-sexe-amateur-photo-sexe-gratuit-bizarre-telechargez-sex-xxx-gratuit-sexe-gay-extrait-video-gratuit
video-et-photo-sexe-gratuite-crade-sexe-xxlfr-video-sexe-xxx-gratuit-video-hard-de-sexe-amateur-photo-de-sexe-mature-gratuit-xxx-collection-avec-xxx-collection-et-collection-photo-porno-hards-xxx-choquantes
sexe-sous-jupe-star-sexe-gaulois-tgp-photo-sexe-homme-nu-grosse-femme-sexe-blog-sex-porno-porno-and-free-porno-film-gratos-video-porno-gratuite-est-sans-inscription-arabe-sexe-free-dvd-bel-ami-xxx
liste-des-star-du-porno-francais-sexe-couple-x-video-gratuite-extrait-porno-star-nu-celebrite-sexe-sexe-blog-bd-mangas-porno-gratuite-galerie-video-baise-ronde-sexe-grosse-photo-belle-femme-mure-sexe-gratuit
sexe-jeune-beurette-free-porno-site-jeune-pucelle-sexe-image-and-porno-and-gratuite-cleopatra-private-xxx-big-black-sexe-forum-sexe-adulte-femme-rencontre-homme-sexe-belgique-adult-xxx-movies
gratuit-video-sexe-sexy-xxx-porno-sexe-shop-a-pigalle-jeu-sexe-flash-gratuit-photo-porno-mec-maroc-sexe-cam-cam-amateur-arabe-femme-sexe-xxx-mangas-hentai-sakura-sexe-gratuit-bizarre-gros-sexe-gay-black
black-and-xxx-photo-extreme-sexe-extrait-video-gratuit-film-porno-sexe-asiatique-gratuite-video-sexe-black-mapouka/
mature-porno-video-sexe-hot-blonde-mangas-porno-hentai-gratuit-divx-and-emule/
sexe-image-sexe-clip-annuaire-sexe-gratuit-sexe-porno-xxx-martinique-guadeloupe-cinema-porno-gay-bruxelles/
sexe-hard-core-clip-sample-movies-mum-gratuit-amateur-sexe-asiatique-sexe-couple-libertin/
sexe-sexe-and-ultime-x-film-porno-sexe-amateur-gratos-annuaire-sexe-suisse-sexe-photo-hard-gratuite/
porno-x-gratuit-sexe-porno-du-maroc-photo-porno-nancy-ajram-lolita-porno-hard-sex-femme-xxx/
free-xxx-toon-gay-gothique-amatrice-video-xxx-gratuit-catoons-gay-xxx-casting-cinema-porno/
demo-de-film-xxx-wanadoo-sexe-amateur-webcam-film-porno-mangas-gratuit/
salope-arabe-photo-xxx-femme-sexe-poilue-hot-sexe-sexe-hard-photo-extrait-video-porno-gratuit-video/
sexe-et-porno-femme-mature-video-galerie-porno-gratuit-z-extrait-video-porno-porno-star-video-extrait-porno-video-amateur/
sexe2
sexe3
sexe4
sexe5
sexe6
sexe7
sexe8
sexe9
sexe10
sexe11
sexe2
sexe3
sexe4
sexe5
sexe6
sexe7
sexe8
sexe9
sexe10
sexe11
sexe12
sexe5897
sexe5669
sexe5441
sexe5213
sexe4985
sexe4757
sexe4529
sexe6581
sexe6353
sexe6125
sexe9636
sexe9408
sexe9180
sexe8952
sexe8724
sexe8496
sexe8268
sexe
sexe9864
sodomie-gay-xxx-voissa-annuaire-gratuit-sexe-gay-sexe
gratuit-xxx-lesbienne-gratuit-extrait-film-porno-long
video-film-sexe-gros-cul-sexe-histoire-porno-xxx-
sex-porno-photo-sexe-xxx-gratuit-sexe-video-hard-clip
avec-photo-et-tel-porno-film-x-sexe-gros-salope-amateur
sexe-histoire-petit-sexe-free-xxx-video-download-sexe
anal-porno-gay-gratuit-canada-jeu-sexe-gratuit-avec-son-
gratuit-page-perso-histoire-sexe-histoire-sexe-sexephile-
ultime-sexe-dvd-image-torture-electrique-sexe-homme-film
sexe-photo-free-sexe-shop-catalogue-vieille-cochon-du-sexe-
amiens-annuaire-photo-sexe-photo-sexe-gratuite-celebrite
amatrice-libertin-sexe-xxx-porno-exhibitionniste-image-sexe-de
hard-xxx-video-video-sexe-gratuit-gay-crade-sexe-xxl-fr-
movies-jenna-sexe-shop-thionville-photo-gratuite-sexe
star-porno-porno-gratuit-sexephile-sexe-devant-cam-xxx
hard-gratuit-photo-video-clip-gratuit-porno-gay-sexe-video
sexe833
sexe834
sexe835
sexe836
sexe837
sexe838
sexe839
sexe840
sexe841
sexe842
sexe843
sexe844
sexe845
sexe846
sexe847
sexe848
sexe849
sexe850
sexe851
sexe852
sexe853
sexe854
sexe855
sexe856
sexe857
sexe858
sexe859
sexe860
sexe861
sexe862
sexe863
sexe864
sexe865
sexe866
sexe867
sexe868
sexe869
sexe870
sexe871
sexe872
sexe873
sexe874
sexe875
sexe876
sexe877
sexe878
sexe879
sexe880
sexe881
sexe882
sexe883
sexe884
sexe
sexe
sexe8892
sexe8893
sexe8894
sexe8895
sexe8896
sexe8897
sexe8898
sexe8899
sexe8900
sexe8901
sexe8902
sexe8903
sexe8904
sexe8905
sexe8906
sexe8907
sexe8908
sexe8909
sexe8910
sexe8911
sexe8912
sexe8913
sexe8914
sexe8915
sexe8916
sexe8917
sexe8918
sexe8919
sexe8920
sexe8921
sexe8922
sexe8923
sexe8924
sexe8925
sexe8926
sexe8927
sexe8928
sexe8929
sexe8930
sexe8931
sexe8932
sexe8933
sexe8934
sexe8935
sexe8936
sexe8937
sexe8938
sexe8939
sexe8940
sexe8941
sexe8942
sexe8943
sexe8944
sexe8945
sexe8946
sexe8947
sexe8948
sexe8949
sexe8950
sexe8951
sexe8952
sexe8953
sexe8954
sexe8955
sexe8956
sexe8957
sexe8958
sexe8959
sexe9160
Posted by: ikermollas on June 12, 2007 at 12:12 AM
|