ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/build.xml
(Generate patch)

Comparing jsr166/build.xml (file contents):
Revision 1.114 by jsr166, Sun Jan 20 04:44:26 2013 UTC vs.
Revision 1.119 by jsr166, Mon Jan 21 02:31:40 2013 UTC

# Line 62 | Line 62
62    <property name="build.jsr166e.classes.dir"    location="${build.jsr166e.dir}/classes"/>
63    <property name="build.extra166y.classes.dir"  location="${build.extra166y.dir}/classes"/>
64  
65 <  <!-- JDK binary locations -->
65 >  <!-- JDK locations -->
66    <property name="jdks.home"  location="${user.home}/jdk"/>
67  
68    <macrodef name="defjdklocations">
# Line 72 | Line 72
72      <property name="java@{v}"       location="${jdk@{v}.home}/bin/java"/>
73      <property name="javac@{v}"      location="${jdk@{v}.home}/bin/javac"/>
74      <property name="javadoc@{v}"    location="${jdk@{v}.home}/bin/javadoc"/>
75    <property name="bootdir@{v}"    location="${jdk@{v}.home}/jre/lib"/>
75      <property name="jdk@{v}src.dir" location="${jdks.home}/src/jdk@{v}/jdk/src/share/classes"/>
76 <    <property name="bootclasspath@{v}"
77 <     value="${bootdir@{v}}/resources.jar:${bootdir@{v}}/rt.jar:${bootdir@{v}}/jsse.jar:${bootdir@{v}}/jce.jar:${bootdir@{v}}/:${bootdir@{v}}/charsets.jar"/>
76 >    <local name="boot.jar.dir"/>
77 >    <property name="boot.jar.dir"   location="${jdk@{v}.home}/jre/lib"/>
78 >    <path id="bootclasspath@{v}">
79 >      <pathelement path="${boot.jar.dir}/resources.jar"/>
80 >      <pathelement path="${boot.jar.dir}/rt.jar"/>
81 >      <pathelement path="${boot.jar.dir}/jsse.jar"/>
82 >      <pathelement path="${boot.jar.dir}/jce.jar"/>
83 >      <pathelement path="${boot.jar.dir}/charsets.jar"/>
84 >    </path>
85 >    <property name="bootclasspath@{v}" value="${toString:bootclasspath@{v}}"/>
86      </sequential>
87    </macrodef>
88  
# Line 83 | Line 90
90    <defjdklocations v="7"/>
91    <defjdklocations v="8"/>
92  
86  <macrodef name="run-tck-tests">
87    <attribute name="jvm"/>
88    <attribute name="tck.classes"/>
89    <attribute name="product.jar" default="${product.jar}"/>
90    <attribute name="jvmflags" default=""/>
91    <sequential>
92    <java classname="JSR166TestCase"
93          jvm="@{jvm}" fork="true">
94        <jvmarg value="-Xbootclasspath/p:@{product.jar}"/>
95        <jvmarg line="@{jvmflags}"/>
96        <classpath>
97          <pathelement location="${junit.jar}"/>
98          <pathelement location="@{tck.classes}"/>
99        </classpath>
100    </java>
101    </sequential>
102  </macrodef>
103
93    <!-- Source locations -->
94    <property name="src.dir"              location="${basedir}/src/main"/>
95    <property name="test.src.dir"         location="${basedir}/src/test"/>
# Line 133 | Line 122
122    <property name="extra166y.jar"    location="${build.extra166y.dir}/extra166y.jar"/>
123    <property name="junit.jar"        location="${lib.dir}/junit.jar"/>
124  
136  <!-- Bootclasspath argument -->
137  <property name="bootclasspath.args"   value="-Xbootclasspath/p:${product.jar}"/>
138
125    <!-- Canonical location of jdk API docs, to use with javadoc link attribute -->
126    <property name="jdkapi5docs.url"      value="http://docs.oracle.com/javase/1.5.0/docs/api/"/>
127    <property name="jdkapi6docs.url"      value="http://docs.oracle.com/javase/6/docs/api/"/>
# Line 148 | Line 134
134    <!-- Default jdk api doc location (latest stable release seems best) -->
135    <property name="jdkapidocs.url"       value="${jdkapi7docs.url}"/>
136  
137 +  <!-- Define the "jtreg" task -->
138 +  <!-- See the docs in "jtreg -onlineHelp" -->
139 +  <taskdef name="jtreg" classname="com.sun.javatest.regtest.Main$$Ant"
140 +           classpath="${lib.dir}/jtreg.jar" />
141 +
142    <!-- Test classpath -->
143    <path id="test.classpath">
144      <pathelement location="${build.testcases.dir}"/>
145      <pathelement location="${junit.jar}"/>
146    </path>
147  
148 +  <macrodef name="run-tck-tests">
149 +    <attribute name="target"/>
150 +    <attribute name="workdir"/>
151 +    <attribute name="product.jar" default="${product.jar}"/>
152 +    <attribute name="jvmflags" default=""/>
153 +    <sequential>
154 +
155 +    <mkdir dir="@{workdir}/tck-classes"/>
156 +
157 +    <javac srcdir="${tck.src.dir}"
158 +           destdir="@{workdir}/tck-classes"
159 +           debug="${build.debug}"
160 +           debuglevel="${build.debuglevel}"
161 +           deprecation="${build.deprecation}"
162 +           source="6"
163 +           classpath="${junit.jar}"
164 +           bootclasspath="@{product.jar}:${bootclasspath6}"
165 +           includeAntRuntime="false"
166 +           includeJavaRuntime="false"
167 +           executable="${javac@{target}}"
168 +           fork="true">
169 +
170 +      <include name="JSR166TestCase.java"/>
171 +      <compilerarg value="-XDignore.symbol.file=true"/>
172 +      <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation"/>
173 +      <compilerarg line="${build.args}"/>
174 +
175 +    </javac>
176 +
177 +    <java classname="JSR166TestCase"
178 +          failonerror="true"
179 +          jvm="${java@{target}}"
180 +          fork="true">
181 +        <jvmarg value="-Xbootclasspath/p:@{product.jar}"/>
182 +        <jvmarg line="@{jvmflags}"/>
183 +        <classpath>
184 +          <pathelement location="${junit.jar}"/>
185 +          <pathelement location="@{workdir}/tck-classes"/>
186 +        </classpath>
187 +    </java>
188 +
189 +    </sequential>
190 +  </macrodef>
191 +
192    <!-- ALoops classpath -->
193    <path id="loops.classpath">
194      <pathelement location="${build.loops.dir}"/>
# Line 190 | Line 225
225             fork="true">
226  
227        <include name="**/*.java"/>
193      <compilerarg line="${build.args}"/>
228        <compilerarg value="-XDignore.symbol.file=true"/>
229        <compilerarg value="-Xlint:all"/>
196
197 <!--
198      <exclude name="java/lang/**"/>
230        <compilerarg line="${build.args}"/>
200      <compilerarg line="-Xlint -Xmaxwarns 1000"/>
201 -->
231  
232      </javac>
204
233    </target>
234  
235  
208
236    <target name="jar"
237            depends="compile"
238            description="Builds library jar from compiled sources">
# Line 213 | Line 240
240      <jar destfile="${product.jar}">
241        <fileset dir="${build.classes.dir}"/>
242      </jar>
216
243    </target>
244  
245  
220
246    <target name="test"
247            depends="configure-tests, report-tests"
248            description="Runs all tests (requires JUnit 3.8.1 in ${ant.home}/lib)" />
249  
250  
226
251    <target name="docs"
252            description="Builds javadocs for src/main to dist dir">
253  
# Line 240 | Line 264
264               sourcepath="${src.dir}:${jdk8src.dir}"
265               classpath=""
266               executable="${javadoc8}">
243      <arg value="-XDignore.symbol.file=true"/>
244      <arg value="-tag"/>
245      <arg value="${javadoc.jls.option}"/>
267        <fileset dir="${src.dir}" defaultexcludes="yes">
268          <include name="**/*.java"/>
269        </fileset>
270 +      <arg value="-XDignore.symbol.file=true"/>
271 +      <arg value="-tag"/>
272 +      <arg value="${javadoc.jls.option}"/>
273      </javadoc>
250
274    </target>
275  
276  
254
277    <target name="dist"
278            depends="dist-clean, dist-jar, docs"
279            description="Puts all distributable products in single hierarchy"/>
# Line 272 | Line 294
294        <exclude name="**/SyntaxTest.java"/>
295        <exclude name="**/SuperfluousAbstract.java"/>
296      </jar>
275
297    </target>
298  
299  
279
300    <target name="clean"
301            description="Removes all build products">
302  
# Line 285 | Line 305
305    </target>
306  
307  
288
308    <target name="dist-clean"
309            description="Removes all build and distribution products">
310  
# Line 294 | Line 313
313    </target>
314  
315  
297
316    <!-- Internal targets -->
317  
318  
# Line 318 | Line 336
336             deprecation="${build.deprecation}"
337             source="6"
338             classpath="${junit.jar}"
339 <           bootclasspath="${product.jar}:${bootclasspath6}"
339 >           bootclasspath="@{product.jar}:${bootclasspath6}"
340             includeAntRuntime="false"
341             includeJavaRuntime="false"
342             executable="${javac8}"
343             fork="true">
344  
345        <include name="**/*.java"/>
328      <compilerarg line="${build.args}"/>
346        <compilerarg value="-XDignore.symbol.file=true"/>
347        <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation"/>
348 +      <compilerarg line="${build.args}"/>
349  
350      </javac>
351  
# Line 338 | Line 356
356             deprecation="${build.deprecation}"
357             source="6"
358             classpath=""
359 <           bootclasspath="${product.jar}:${bootclasspath6}"
359 >           bootclasspath="@{product.jar}:${bootclasspath6}"
360             includeAntRuntime="false"
361             includeJavaRuntime="false"
362             executable="${javac8}"
363             fork="true">
364  
365        <include name="jsr166/test/**/*.java"/>
348
349      <compilerarg line="${build.args}"/>
366        <compilerarg value="-XDignore.symbol.file=true"/>
367        <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation"/>
368 +      <compilerarg line="${build.args}"/>
369  
370      </javac>
371  
# Line 361 | Line 378
378             source="${build.sourcelevel}"
379               fork="true">
380  
381 <      <compilerarg value="${bootclasspath.args}"/>
365 <      <compilerarg line="${build.args}"/>
381 >      <compilerarg value="-Xbootclasspath/p:${product.jar}"/>
382        <compilerarg value="-XDignore.symbol.file=true"/>
383 +      <compilerarg line="${build.args}"/>
384  
385      </javac>
386   -->
# Line 516 | Line 533
533  
534    <!-- jsr166 4jdk7 -->
535  
519
536    <target name="4jdk7compile"
537            depends="configure-compiler"
538            description="Compiles src/jdk7 sources, targeting jdk7">
# Line 537 | Line 553
553             fork="true">
554  
555        <include name="**/*.java"/>
540      <compilerarg line="${build.args}"/>
556        <compilerarg value="-XDignore.symbol.file=true"/>
557        <compilerarg value="-Xlint:all"/>
558 +      <compilerarg line="${build.args}"/>
559  
560      </javac>
561 +  </target>
562  
546    <jar destfile="${4jdk7product.jar}" index="true">
547      <fileset dir="${build.4jdk7.classes.dir}"/>
548    </jar>
549
550    <mkdir dir="${build.4jdk7.tck.classes.dir}"/>
551
552    <javac srcdir="${tck.src.dir}"
553           destdir="${build.4jdk7.tck.classes.dir}"
554           debug="${build.debug}"
555           debuglevel="${build.debuglevel}"
556           deprecation="${build.deprecation}"
557           source="6"
558           classpath="${junit.jar}"
559           bootclasspath="${4jdk7product.jar}:${bootclasspath6}"
560           includeAntRuntime="false"
561           includeJavaRuntime="false"
562           executable="${javac7}"
563           fork="true">
563  
564 <      <include name="**/*.java"/>
565 <      <compilerarg line="${build.args}"/>
566 <      <compilerarg value="-XDignore.symbol.file=true"/>
568 <      <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation"/>
564 >  <target name="4jdk7-jar"
565 >          depends="4jdk7compile"
566 >          description="Builds library jar from compiled sources">
567  
568 <    </javac>
568 >    <jar destfile="${4jdk7product.jar}">
569 >      <fileset dir="${build.4jdk7.classes.dir}"/>
570 >    </jar>
571  
572    </target>
573  
574  
575    <target name="4jdk7-test-tck"
576 <          depends="4jdk7compile"
576 >          depends="4jdk7-jar"
577            description="Runs tck tests for jsr166-4jdk7 directly">
578 +
579      <run-tck-tests
580 <      jvm="${java7}"
581 <      tck.classes="${build.4jdk7.tck.classes.dir}"
580 >      target="7"
581 >      workdir="${build.4jdk7.dir}"
582        product.jar="${4jdk7product.jar}"/>
583    </target>
584  
# Line 610 | Line 611
611      </junit>
612    </target>
613  
614 +  <target name="4jdk7-test-jtreg"
615 +          depends="4jdk7compile"
616 +          description="Runs jtreg tests for jsr166-4jdk7 using the jtreg ant task">
617 +    <delete dir="${build.4jdk7.dir}/JTwork"   quiet="true"/>
618 +    <delete dir="${build.4jdk7.dir}/JTreport" quiet="true"/>
619 +    <mkdir dir="${build.4jdk7.dir}/JTwork/scratch"/>
620 +    <mkdir dir="${build.4jdk7.dir}/JTreport"/>
621 +    <jtreg dir="${jtreg.src.dir}"
622 +           jdk="${jdk7.home}"
623 +           workDir="${build.4jdk7.dir}/JTwork"
624 +           reportDir="${build.4jdk7.dir}/JTreport">
625 +
626 +      <arg value="-Xbootclasspath/p:${4jdk7product.jar}"/>
627 +      <arg value="-agentvm"/>
628 +      <arg value="-v:nopass,fail"/>
629 +      <arg value="-vmoptions:-esa -ea"/>
630 +      <arg value="-automatic"/>
631 +      <arg value="-k:!ignore"/>
632 +    </jtreg>
633 +  </target>
634 +
635 +
636 +  <target name="4jdk7-test"
637 +          depends="4jdk7-test-tck, 4jdk7-test-jtreg"
638 +          description="Runs tck and jtreg tests for jsr166-4jdk7">
639 +  </target>
640 +
641  
642    <target name="4jdk7docs"
643            description="Builds javadocs for src/jdk7 to dist dir">
# Line 624 | Line 652
652               sourcepath="${4jdk7src.dir}:${jdk7src.dir}"
653               classpath=""
654               executable="${javadoc7}">
627      <arg value="-XDignore.symbol.file=true"/>
655        <fileset dir="${4jdk7src.dir}" defaultexcludes="yes">
656          <include name="**/*.java"/>
657        </fileset>
658 +      <arg value="-XDignore.symbol.file=true"/>
659      </javadoc>
632
660    </target>
661  
662  
# Line 638 | Line 665
665            description="Puts all distributable products in single hierarchy"/>
666  
667  
641
668    <target name="4jdk7clean"
669            description="Removes all 4jdk7 build products">
670  
# Line 647 | Line 673
673    </target>
674  
675  
650
676    <target name="4jdk7dist-clean"
677            description="Removes all build and distribution products">
678  
679    </target>
680  
681    <target name="4jdk7dist-jar"
682 <          depends="4jdk7clean, 4jdk7compile">
682 >          depends="4jdk7clean, 4jdk7-jar">
683  
684      <copy file="${4jdk7product.jar}" todir="${dist.dir}"/>
685  
# Line 675 | Line 700
700             debuglevel="${build.debuglevel}"
701             deprecation="${build.deprecation}"
702             classpath=""
678           source="5"
703             bootclasspath="${bootclasspath6}"
704 +           source="5"
705             includeAntRuntime="false"
706             includeJavaRuntime="false"
707             executable="${javac7}"
708             fork="true">
709  
710        <include name="jsr166x/**/*.java"/>
686      <compilerarg line="${build.args}"/>
711        <compilerarg value="-XDignore.symbol.file=true"/>
712        <compilerarg value="-Xlint:all,-unchecked,-rawtypes"/>
713 +      <compilerarg line="${build.args}"/>
714  
715      </javac>
691
716    </target>
717  
718  
719 <
696 <  <target name="jsr166xjar"
719 >  <target name="jsr166x-jar"
720            depends="jsr166xcompile"
721            description="Builds library jar from compiled sources">
722  
# Line 704 | Line 727
727    </target>
728  
729  
707
730    <target name="jsr166xdocs"
731            description="Builds javadocs to dist dir">
732  
# Line 714 | Line 736
736      <javadoc destdir="${dist.jsr166xjavadocs.dir}"
737               packagenames="jsr166x.*"
738               link="${jdkapidocs.url}"
717             source="5"
718             bootclasspath="${bootclasspath6}"
739               sourcepath="${topsrc.dir}:${jdk6src.dir}"
740 <             executable="${javadoc7}"
741 <             additionalparam="-XDignore.symbol.file=true" />
740 >             bootclasspath="${bootclasspath6}"
741 >             source="5"
742 >             executable="${javadoc7}">
743 >      <arg value="-XDignore.symbol.file=true"/>
744  
745 +    </javadoc>
746    </target>
747  
748  
# Line 728 | Line 751
751            description="Puts all distributable products in single hierarchy"/>
752  
753  
731
754    <target name="jsr166xclean"
755            description="Removes all jsr166x build products">
756  
# Line 737 | Line 759
759    </target>
760  
761  
740
762    <target name="jsr166xdist-clean"
763            description="Removes all build and distribution products">
764  
# Line 745 | Line 766
766  
767  
768    <target name="jsr166xdist-jar"
769 <          depends="jsr166xclean, jsr166xjar">
769 >          depends="jsr166xclean, jsr166x-jar">
770  
771      <copy file="${jsr166x.jar}" todir="${dist.dir}"/>
772  
# Line 774 | Line 795
795             fork="true">
796  
797        <include name="jsr166y/**/*.java"/>
777      <compilerarg line="${build.args}"/>
798        <compilerarg value="-XDignore.symbol.file=true"/>
799        <compilerarg value="-Xlint:all"/>
800 +      <compilerarg line="${build.args}"/>
801 +
802      </javac>
803    </target>
804  
805  
806 <  <target name="jsr166yjar"
806 >  <target name="jsr166y-jar"
807            depends="jsr166ycompile"
808            description="Builds library jar from compiled sources">
809  
# Line 792 | Line 814
814    </target>
815  
816  
795
817    <target name="jsr166ydocs"
818            description="Builds javadocs to dist dir">
819  
# Line 802 | Line 823
823      <javadoc destdir="${dist.jsr166yjavadocs.dir}"
824               packagenames="jsr166y.*"
825               link="${jdkapidocs.url}"
805             source="6"
806             bootclasspath="${bootclasspath6}"
826               sourcepath="${topsrc.dir}:${jdk6src.dir}"
827 <             executable="${javadoc7}"
828 <             additionalparam="-XDignore.symbol.file=true" />
827 >             bootclasspath="${bootclasspath6}"
828 >             source="6"
829 >             executable="${javadoc7}">
830 >      <arg value="-XDignore.symbol.file=true"/>
831  
832 +    </javadoc>
833    </target>
834  
835  
# Line 816 | Line 838
838            description="Puts all distributable products in single hierarchy"/>
839  
840  
819
841    <target name="jsr166yclean"
842            description="Removes all jsr166y build products">
843  
# Line 825 | Line 846
846    </target>
847  
848  
828
849    <target name="jsr166ydist-clean"
850            description="Removes all build and distribution products">
851  
852    </target>
853  
854    <target name="jsr166ydist-jar"
855 <          depends="jsr166yclean, jsr166yjar">
855 >          depends="jsr166yclean, jsr166y-jar">
856  
857      <copy file="${jsr166y.jar}" todir="${dist.dir}"/>
858  
# Line 843 | Line 863
863  
864  
865    <target name="extra166ycompile"
866 <          depends="configure-compiler, jsr166yjar"
866 >          depends="configure-compiler, jsr166y-jar"
867            description="Compiles extra166y sources">
868  
869      <mkdir dir="${build.extra166y.classes.dir}"/>
# Line 853 | Line 873
873             debug="${build.debug}"
874             debuglevel="${build.debuglevel}"
875             deprecation="${build.deprecation}"
876 +           bootclasspath="@{jsr166y.jar}:${bootclasspath6}"
877             classpath=""
878             source="6"
858           bootclasspath="${jsr166y.jar}:${bootclasspath6}"
879             includeAntRuntime="false"
880             includeJavaRuntime="false"
881             executable="${javac7}"
882             fork="true">
883  
884        <include name="extra166y/**/*.java"/>
865      <compilerarg line="${build.args}"/>
885        <compilerarg value="-XDignore.symbol.file=true"/>
886        <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial"/>
887 +      <compilerarg line="${build.args}"/>
888  
889      </javac>
870
890    </target>
891  
892  
893 <
875 <  <target name="extra166yjar"
893 >  <target name="extra166y-jar"
894            depends="extra166ycompile"
895            description="Builds library jar from compiled sources">
896  
# Line 883 | Line 901
901    </target>
902  
903  
886
904    <target name="extra166ydocs"
905            description="Builds javadocs to build dir">
906  
# Line 893 | Line 910
910      <javadoc destdir="${dist.extra166yjavadocs.dir}"
911               packagenames="extra166y.*"
912               link="${jdkapidocs.url}"
896             source="6"
897             bootclasspath="${bootclasspath6}"
913               sourcepath="${topsrc.dir}:${jdk6src.dir}"
914 <             executable="${javadoc7}"
915 <             additionalparam="-XDignore.symbol.file=true" />
914 >             bootclasspath="${bootclasspath6}"
915 >             source="6"
916 >             executable="${javadoc7}">
917 >      <arg value="-XDignore.symbol.file=true"/>
918  
919 +    </javadoc>
920    </target>
921  
922  
# Line 907 | Line 925
925            description="Puts all distributable products in single hierarchy"/>
926  
927  
910
928    <target name="extra166yclean"
929            description="Removes all extra166y build products">
930  
# Line 916 | Line 933
933    </target>
934  
935  
919
936    <target name="extra166ydist-clean"
937            description="Removes all build and distribution products">
938  
939    </target>
940  
941    <target name="extra166ydist-jar"
942 <          depends="extra166yclean, extra166yjar">
942 >          depends="extra166yclean, extra166y-jar">
943  
944      <copy file="${extra166y.jar}" todir="${dist.dir}"/>
945  
# Line 950 | Line 966
966             fork="true">
967  
968        <include name="jsr166e/**/*.java"/>
953      <compilerarg line="${build.args}"/>
969        <compilerarg value="-XDignore.symbol.file=true"/>
970        <compilerarg value="-Xlint:all"/>
971 +      <compilerarg line="${build.args}"/>
972  
973      </javac>
958
974    </target>
975  
976  
977 <
963 <  <target name="jsr166ejar"
977 >  <target name="jsr166e-jar"
978            depends="jsr166ecompile"
979            description="Builds library jar from compiled sources">
980  
# Line 971 | Line 985
985    </target>
986  
987  
974
988    <target name="jsr166edocs"
989            description="Builds javadocs to build dir">
990  
# Line 981 | Line 994
994      <javadoc destdir="${dist.jsr166ejavadocs.dir}"
995               packagenames="jsr166e.*"
996               link="${jdkapidocs.url}"
984             source="7"
997               sourcepath="${topsrc.dir}:${jdk7src.dir}"
998 <             executable="${javadoc7}"
999 <             additionalparam="-XDignore.symbol.file=true" >
1000 <    </javadoc>
998 >             source="7"
999 >             executable="${javadoc7}">
1000 >      <arg value="-XDignore.symbol.file=true"/>
1001  
1002 +    </javadoc>
1003    </target>
1004  
1005  
# Line 995 | Line 1008
1008            description="Puts all distributable products in single hierarchy"/>
1009  
1010  
998
1011    <target name="jsr166eclean"
1012            description="Removes all jsr166e build products">
1013  
# Line 1010 | Line 1022
1022    </target>
1023  
1024    <target name="jsr166edist-jar"
1025 <          depends="jsr166eclean, jsr166ejar">
1025 >          depends="jsr166eclean, jsr166e-jar">
1026  
1027      <copy file="${jsr166e.jar}" todir="${dist.dir}"/>
1028  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines