@ -1,5 +1,9 @@
cmake_minimum_required ( VERSION 3.4 )
if ( ${ CMAKE_VERSION } VERSION_LESS "3.11.4" )
message ( "Please consider switching to CMake 3.11.4 or newer" )
endif ( )
set ( JNI_NATIVE_SOURCES
r o c k s j n i / b a c k u p a b l e j n i . c c
r o c k s j n i / b a c k u p e n g i n e j n i . c c
@ -72,125 +76,9 @@ set(JNI_NATIVE_SOURCES
r o c k s j n i / w r i t e _ b u f f e r _ m a n a g e r . c c
)
set ( NATIVE_JAVA_CLASSES
o r g . r o c k s d b . A b s t r a c t C o m p a c t i o n F i l t e r
o r g . r o c k s d b . A b s t r a c t C o m p a c t i o n F i l t e r F a c t o r y
o r g . r o c k s d b . A b s t r a c t C o m p a r a t o r
o r g . r o c k s d b . A b s t r a c t I m m u t a b l e N a t i v e R e f e r e n c e
o r g . r o c k s d b . A b s t r a c t N a t i v e R e f e r e n c e
o r g . r o c k s d b . A b s t r a c t R o c k s I t e r a t o r
o r g . r o c k s d b . A b s t r a c t S l i c e
o r g . r o c k s d b . A b s t r a c t T a b l e F i l t e r
o r g . r o c k s d b . A b s t r a c t T r a c e W r i t e r
o r g . r o c k s d b . A b s t r a c t T r a n s a c t i o n N o t i f i e r
o r g . r o c k s d b . A b s t r a c t W a l F i l t e r
o r g . r o c k s d b . B a c k u p a b l e D B O p t i o n s
o r g . r o c k s d b . B a c k u p E n g i n e
o r g . r o c k s d b . B l o c k B a s e d T a b l e C o n f i g
o r g . r o c k s d b . B l o o m F i l t e r
o r g . r o c k s d b . C a s s a n d r a C o m p a c t i o n F i l t e r
o r g . r o c k s d b . C a s s a n d r a V a l u e M e r g e O p e r a t o r
o r g . r o c k s d b . C h e c k p o i n t
o r g . r o c k s d b . C l o c k C a c h e
o r g . r o c k s d b . C o l u m n F a m i l y H a n d l e
o r g . r o c k s d b . C o l u m n F a m i l y O p t i o n s
o r g . r o c k s d b . C o m p a c t i o n J o b I n f o
o r g . r o c k s d b . C o m p a c t i o n J o b S t a t s
o r g . r o c k s d b . C o m p a c t i o n O p t i o n s
o r g . r o c k s d b . C o m p a c t i o n O p t i o n s F I F O
o r g . r o c k s d b . C o m p a c t i o n O p t i o n s U n i v e r s a l
o r g . r o c k s d b . C o m p a c t R a n g e O p t i o n s
o r g . r o c k s d b . C o m p a r a t o r
o r g . r o c k s d b . C o m p a r a t o r O p t i o n s
o r g . r o c k s d b . C o m p r e s s i o n O p t i o n s
o r g . r o c k s d b . D B O p t i o n s
o r g . r o c k s d b . D i r e c t C o m p a r a t o r
o r g . r o c k s d b . D i r e c t S l i c e
o r g . r o c k s d b . E n v
o r g . r o c k s d b . E n v O p t i o n s
o r g . r o c k s d b . F i l t e r
o r g . r o c k s d b . F l u s h O p t i o n s
o r g . r o c k s d b . H a s h L i n k e d L i s t M e m T a b l e C o n f i g
o r g . r o c k s d b . H a s h S k i p L i s t M e m T a b l e C o n f i g
o r g . r o c k s d b . H d f s E n v
o r g . r o c k s d b . I n g e s t E x t e r n a l F i l e O p t i o n s
o r g . r o c k s d b . L o g g e r
o r g . r o c k s d b . L R U C a c h e
o r g . r o c k s d b . M e m o r y U t i l
o r g . r o c k s d b . M e m T a b l e C o n f i g
o r g . r o c k s d b . N a t i v e C o m p a r a t o r W r a p p e r
o r g . r o c k s d b . N a t i v e L i b r a r y L o a d e r
o r g . r o c k s d b . O p t i m i s t i c T r a n s a c t i o n D B
o r g . r o c k s d b . O p t i m i s t i c T r a n s a c t i o n O p t i o n s
o r g . r o c k s d b . O p t i o n s
o r g . r o c k s d b . O p t i o n s U t i l
o r g . r o c k s d b . P e r s i s t e n t C a c h e
o r g . r o c k s d b . P l a i n T a b l e C o n f i g
o r g . r o c k s d b . R a t e L i m i t e r
o r g . r o c k s d b . R e a d O p t i o n s
o r g . r o c k s d b . R e m o v e E m p t y V a l u e C o m p a c t i o n F i l t e r
o r g . r o c k s d b . R e s t o r e O p t i o n s
o r g . r o c k s d b . R o c k s C a l l b a c k O b j e c t
o r g . r o c k s d b . R o c k s D B
o r g . r o c k s d b . R o c k s E n v
o r g . r o c k s d b . R o c k s I t e r a t o r
o r g . r o c k s d b . R o c k s I t e r a t o r I n t e r f a c e
o r g . r o c k s d b . R o c k s M e m E n v
o r g . r o c k s d b . R o c k s M u t a b l e O b j e c t
o r g . r o c k s d b . R o c k s O b j e c t
o r g . r o c k s d b . S k i p L i s t M e m T a b l e C o n f i g
o r g . r o c k s d b . S l i c e
o r g . r o c k s d b . S n a p s h o t
o r g . r o c k s d b . S s t F i l e M a n a g e r
o r g . r o c k s d b . S s t F i l e W r i t e r
o r g . r o c k s d b . S t a t i s t i c s
o r g . r o c k s d b . S t r i n g A p p e n d O p e r a t o r
o r g . r o c k s d b . T a b l e F o r m a t C o n f i g
o r g . r o c k s d b . T h r e a d S t a t u s
o r g . r o c k s d b . T i m e d E n v
o r g . r o c k s d b . T r a n s a c t i o n
o r g . r o c k s d b . T r a n s a c t i o n D B
o r g . r o c k s d b . T r a n s a c t i o n D B O p t i o n s
o r g . r o c k s d b . T r a n s a c t i o n L o g I t e r a t o r
o r g . r o c k s d b . T r a n s a c t i o n O p t i o n s
o r g . r o c k s d b . T t l D B
o r g . r o c k s d b . U I n t 6 4 A d d O p e r a t o r
o r g . r o c k s d b . V e c t o r M e m T a b l e C o n f i g
o r g . r o c k s d b . W B W I R o c k s I t e r a t o r
o r g . r o c k s d b . W r i t e B a t c h
o r g . r o c k s d b . W r i t e B a t c h . H a n d l e r
o r g . r o c k s d b . W r i t e B a t c h I n t e r f a c e
o r g . r o c k s d b . W r i t e B a t c h W i t h I n d e x
o r g . r o c k s d b . W r i t e O p t i o n s
o r g . r o c k s d b . N a t i v e C o m p a r a t o r W r a p p e r T e s t
o r g . r o c k s d b . R o c k s D B E x c e p t i o n T e s t
o r g . r o c k s d b . S n a p s h o t T e s t
o r g . r o c k s d b . W r i t e B a t c h T e s t
o r g . r o c k s d b . W r i t e B a t c h T e s t I n t e r n a l H e l p e r
o r g . r o c k s d b . W r i t e B u f f e r M a n a g e r
)
include ( FindJava )
include ( UseJava )
include ( FindJNI )
include_directories ( ${ JNI_INCLUDE_DIRS } )
include_directories ( ${ PROJECT_SOURCE_DIR } /java )
set ( JAVA_TEST_LIBDIR ${ PROJECT_SOURCE_DIR } /java/test-libs )
set ( JAVA_TMP_JAR ${ JAVA_TEST_LIBDIR } /tmp.jar )
set ( JAVA_JUNIT_JAR ${ JAVA_TEST_LIBDIR } /junit-4.12.jar )
set ( JAVA_HAMCR_JAR ${ JAVA_TEST_LIBDIR } /hamcrest-core-1.3.jar )
set ( JAVA_MOCKITO_JAR ${ JAVA_TEST_LIBDIR } /mockito-all-1.10.19.jar )
set ( JAVA_CGLIB_JAR ${ JAVA_TEST_LIBDIR } /cglib-2.2.2.jar )
set ( JAVA_ASSERTJ_JAR ${ JAVA_TEST_LIBDIR } /assertj-core-1.7.1.jar )
set ( JAVA_TESTCLASSPATH ${ JAVA_JUNIT_JAR } ${ JAVA_HAMCR_JAR } ${ JAVA_MOCKITO_JAR } ${ JAVA_CGLIB_JAR } ${ JAVA_ASSERTJ_JAR } )
add_jar (
r o c k s d b j n i _ c l a s s e s
S O U R C E S
s r c / m a i n / j a v a / o r g / r o c k s d b / A b s t r a c t C o m p a c t i o n F i l t e r F a c t o r y . j a v a
set ( JAVA_MAIN_CLASSES
s r c / m a i n / j a v a / o r g / r o c k s d b / A b s t r a c t C o m p a c t i o n F i l t e r . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / A b s t r a c t C o m p a c t i o n F i l t e r F a c t o r y . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / A b s t r a c t C o m p a r a t o r . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / A b s t r a c t I m m u t a b l e N a t i v e R e f e r e n c e . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / A b s t r a c t M u t a b l e O p t i o n s . j a v a
@ -338,8 +226,8 @@ add_jar(
s r c / m a i n / j a v a / o r g / r o c k s d b / W a l P r o c e s s i n g O p t i o n . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / W A L R e c o v e r y M o d e . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / W B W I R o c k s I t e r a t o r . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / W r i t e B a t c h I n t e r f a c e . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / W r i t e B a t c h . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / W r i t e B a t c h I n t e r f a c e . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / W r i t e B a t c h W i t h I n d e x . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / W r i t e O p t i o n s . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / W r i t e B u f f e r M a n a g e r . j a v a
@ -348,6 +236,10 @@ add_jar(
s r c / m a i n / j a v a / o r g / r o c k s d b / u t i l / E n v i r o n m e n t . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / u t i l / R e v e r s e B y t e w i s e C o m p a r a t o r . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / u t i l / S i z e U n i t . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / U I n t 6 4 A d d O p e r a t o r . j a v a
)
set ( JAVA_TEST_CLASSES
s r c / t e s t / j a v a / o r g / r o c k s d b / B a c k u p E n g i n e T e s t . j a v a
s r c / t e s t / j a v a / o r g / r o c k s d b / I n g e s t E x t e r n a l F i l e O p t i o n s T e s t . j a v a
s r c / t e s t / j a v a / o r g / r o c k s d b / N a t i v e C o m p a r a t o r W r a p p e r T e s t . j a v a
@ -355,13 +247,59 @@ add_jar(
s r c / t e s t / j a v a / o r g / r o c k s d b / R o c k s D B E x c e p t i o n T e s t . j a v a
s r c / t e s t / j a v a / o r g / r o c k s d b / R o c k s M e m o r y R e s o u r c e . j a v a
s r c / t e s t / j a v a / o r g / r o c k s d b / S n a p s h o t T e s t . j a v a
s r c / m a i n / j a v a / o r g / r o c k s d b / U I n t 6 4 A d d O p e r a t o r . j a v a
s r c / t e s t / j a v a / o r g / r o c k s d b / W r i t e B a t c h T e s t . j a v a
s r c / t e s t / j a v a / o r g / r o c k s d b / u t i l / C a p t u r i n g W r i t e B a t c h H a n d l e r . j a v a
s r c / t e s t / j a v a / o r g / r o c k s d b / u t i l / W r i t e B a t c h G e t t e r . j a v a
I N C L U D E _ J A R S $ { J A V A _ T E S T C L A S S P A T H }
)
include ( FindJava )
include ( UseJava )
find_package ( JNI )
include_directories ( ${ JNI_INCLUDE_DIRS } )
include_directories ( ${ PROJECT_SOURCE_DIR } /java )
set ( JAVA_TEST_LIBDIR ${ PROJECT_SOURCE_DIR } /java/test-libs )
set ( JAVA_TMP_JAR ${ JAVA_TEST_LIBDIR } /tmp.jar )
set ( JAVA_JUNIT_JAR ${ JAVA_TEST_LIBDIR } /junit-4.12.jar )
set ( JAVA_HAMCR_JAR ${ JAVA_TEST_LIBDIR } /hamcrest-core-1.3.jar )
set ( JAVA_MOCKITO_JAR ${ JAVA_TEST_LIBDIR } /mockito-all-1.10.19.jar )
set ( JAVA_CGLIB_JAR ${ JAVA_TEST_LIBDIR } /cglib-2.2.2.jar )
set ( JAVA_ASSERTJ_JAR ${ JAVA_TEST_LIBDIR } /assertj-core-1.7.1.jar )
set ( JAVA_TESTCLASSPATH ${ JAVA_JUNIT_JAR } ${ JAVA_HAMCR_JAR } ${ JAVA_MOCKITO_JAR } ${ JAVA_CGLIB_JAR } ${ JAVA_ASSERTJ_JAR } )
set ( JNI_OUTPUT_DIR ${ PROJECT_SOURCE_DIR } /java/include )
file ( MAKE_DIRECTORY ${ JNI_OUTPUT_DIR } )
if ( ${ Java_VERSION_MAJOR } VERSION_GREATER_EQUAL "10" AND ${ CMAKE_VERSION } VERSION_LESS "3.11.4" )
# J a v a 1 0 a n d n e w e r d o n ' t h a v e j a v a h , b u t t h e a l t e r n a t i v e G E N E R A T E _ N A T I V E _ H E A D E R S r e q u i r e s C M a k e 3 . 1 1 . 4 o r n e w e r
message ( FATAL_ERROR "Detected Java 10 or newer (${Java_VERSION_STRING}), to build with CMake please upgrade CMake to 3.11.4 or newer" )
elseif ( ${ CMAKE_VERSION } VERSION_LESS "3.11.4" OR ( ${ Java_VERSION_MINOR } STREQUAL "7" AND ${ Java_VERSION_MAJOR } STREQUAL "1" ) )
# O l d C M a k e o r J a v a 1 . 7 p r e p a r e t h e J A R . . .
message ( "Preparing Jar for Java 7" )
add_jar (
r o c k s d b j n i _ c l a s s e s
S O U R C E S
$ { J A V A _ M A I N _ C L A S S E S }
$ { J A V A _ T E S T _ C L A S S E S }
I N C L U D E _ J A R S $ { J A V A _ T E S T C L A S S P A T H }
)
else ( )
# J a v a 1 . 8 o r n e w e r p r e p a r e t h e J A R . . .
message ( "Preparing Jar for JDK ${Java_VERSION_STRING}" )
add_jar (
r o c k s d b j n i _ c l a s s e s
S O U R C E S
$ { J A V A _ M A I N _ C L A S S E S }
$ { J A V A _ T E S T _ C L A S S E S }
I N C L U D E _ J A R S $ { J A V A _ T E S T C L A S S P A T H }
G E N E R A T E _ N A T I V E _ H E A D E R S r o c k s d b j n i _ h e a d e r s D E S T I N A T I O N $ { J N I _ O U T P U T _ D I R }
)
endif ( )
if ( NOT EXISTS ${ PROJECT_SOURCE_DIR } /java/classes )
file ( MAKE_DIRECTORY ${ PROJECT_SOURCE_DIR } /java/classes )
endif ( )
@ -424,15 +362,114 @@ if(NOT EXISTS ${JAVA_ASSERTJ_JAR})
file ( RENAME ${ JAVA_TMP_JAR } ${ JAVA_ASSERTJ_JAR } )
endif ( )
set ( JNI_OUTPUT_DIR ${ PROJECT_SOURCE_DIR } /java/include )
if ( ${ CMAKE_VERSION } VERSION_LESS "3.11.4" OR ( ${ Java_VERSION_MINOR } STREQUAL "7" AND ${ Java_VERSION_MAJOR } STREQUAL "1" ) )
# O l d C M a k e o r J a v a 1 . 7 O N L Y g e n e r a t e J N I h e a d e r s , J a v a 1 . 8 + J N I i s h a n d l e d i n a d d _ j a r s t e p a b o v e
message ( "Preparing JNI headers for Java 7" )
set ( NATIVE_JAVA_CLASSES
o r g . r o c k s d b . A b s t r a c t C o m p a c t i o n F i l t e r
o r g . r o c k s d b . A b s t r a c t C o m p a c t i o n F i l t e r F a c t o r y
o r g . r o c k s d b . A b s t r a c t C o m p a r a t o r
o r g . r o c k s d b . A b s t r a c t I m m u t a b l e N a t i v e R e f e r e n c e
o r g . r o c k s d b . A b s t r a c t N a t i v e R e f e r e n c e
o r g . r o c k s d b . A b s t r a c t R o c k s I t e r a t o r
o r g . r o c k s d b . A b s t r a c t S l i c e
o r g . r o c k s d b . A b s t r a c t T a b l e F i l t e r
o r g . r o c k s d b . A b s t r a c t T r a c e W r i t e r
o r g . r o c k s d b . A b s t r a c t T r a n s a c t i o n N o t i f i e r
o r g . r o c k s d b . A b s t r a c t W a l F i l t e r
o r g . r o c k s d b . B a c k u p a b l e D B O p t i o n s
o r g . r o c k s d b . B a c k u p E n g i n e
o r g . r o c k s d b . B l o c k B a s e d T a b l e C o n f i g
o r g . r o c k s d b . B l o o m F i l t e r
o r g . r o c k s d b . C a s s a n d r a C o m p a c t i o n F i l t e r
o r g . r o c k s d b . C a s s a n d r a V a l u e M e r g e O p e r a t o r
o r g . r o c k s d b . C h e c k p o i n t
o r g . r o c k s d b . C l o c k C a c h e
o r g . r o c k s d b . C o l u m n F a m i l y H a n d l e
o r g . r o c k s d b . C o l u m n F a m i l y O p t i o n s
o r g . r o c k s d b . C o m p a c t i o n J o b I n f o
o r g . r o c k s d b . C o m p a c t i o n J o b S t a t s
o r g . r o c k s d b . C o m p a c t i o n O p t i o n s
o r g . r o c k s d b . C o m p a c t i o n O p t i o n s F I F O
o r g . r o c k s d b . C o m p a c t i o n O p t i o n s U n i v e r s a l
o r g . r o c k s d b . C o m p a c t R a n g e O p t i o n s
o r g . r o c k s d b . C o m p a r a t o r
o r g . r o c k s d b . C o m p a r a t o r O p t i o n s
o r g . r o c k s d b . C o m p r e s s i o n O p t i o n s
o r g . r o c k s d b . D B O p t i o n s
o r g . r o c k s d b . D i r e c t C o m p a r a t o r
o r g . r o c k s d b . D i r e c t S l i c e
o r g . r o c k s d b . E n v
o r g . r o c k s d b . E n v O p t i o n s
o r g . r o c k s d b . F i l t e r
o r g . r o c k s d b . F l u s h O p t i o n s
o r g . r o c k s d b . H a s h L i n k e d L i s t M e m T a b l e C o n f i g
o r g . r o c k s d b . H a s h S k i p L i s t M e m T a b l e C o n f i g
o r g . r o c k s d b . H d f s E n v
o r g . r o c k s d b . I n g e s t E x t e r n a l F i l e O p t i o n s
o r g . r o c k s d b . L o g g e r
o r g . r o c k s d b . L R U C a c h e
o r g . r o c k s d b . M e m o r y U t i l
o r g . r o c k s d b . M e m T a b l e C o n f i g
o r g . r o c k s d b . N a t i v e C o m p a r a t o r W r a p p e r
o r g . r o c k s d b . N a t i v e L i b r a r y L o a d e r
o r g . r o c k s d b . O p t i m i s t i c T r a n s a c t i o n D B
o r g . r o c k s d b . O p t i m i s t i c T r a n s a c t i o n O p t i o n s
o r g . r o c k s d b . O p t i o n s
o r g . r o c k s d b . O p t i o n s U t i l
o r g . r o c k s d b . P e r s i s t e n t C a c h e
o r g . r o c k s d b . P l a i n T a b l e C o n f i g
o r g . r o c k s d b . R a t e L i m i t e r
o r g . r o c k s d b . R e a d O p t i o n s
o r g . r o c k s d b . R e m o v e E m p t y V a l u e C o m p a c t i o n F i l t e r
o r g . r o c k s d b . R e s t o r e O p t i o n s
o r g . r o c k s d b . R o c k s C a l l b a c k O b j e c t
o r g . r o c k s d b . R o c k s D B
o r g . r o c k s d b . R o c k s E n v
o r g . r o c k s d b . R o c k s I t e r a t o r
o r g . r o c k s d b . R o c k s I t e r a t o r I n t e r f a c e
o r g . r o c k s d b . R o c k s M e m E n v
o r g . r o c k s d b . R o c k s M u t a b l e O b j e c t
o r g . r o c k s d b . R o c k s O b j e c t
o r g . r o c k s d b . S k i p L i s t M e m T a b l e C o n f i g
o r g . r o c k s d b . S l i c e
o r g . r o c k s d b . S n a p s h o t
o r g . r o c k s d b . S s t F i l e M a n a g e r
o r g . r o c k s d b . S s t F i l e W r i t e r
o r g . r o c k s d b . S t a t i s t i c s
o r g . r o c k s d b . S t r i n g A p p e n d O p e r a t o r
o r g . r o c k s d b . T a b l e F o r m a t C o n f i g
o r g . r o c k s d b . T h r e a d S t a t u s
o r g . r o c k s d b . T i m e d E n v
o r g . r o c k s d b . T r a n s a c t i o n
o r g . r o c k s d b . T r a n s a c t i o n D B
o r g . r o c k s d b . T r a n s a c t i o n D B O p t i o n s
o r g . r o c k s d b . T r a n s a c t i o n L o g I t e r a t o r
o r g . r o c k s d b . T r a n s a c t i o n O p t i o n s
o r g . r o c k s d b . T t l D B
o r g . r o c k s d b . U I n t 6 4 A d d O p e r a t o r
o r g . r o c k s d b . V e c t o r M e m T a b l e C o n f i g
o r g . r o c k s d b . W B W I R o c k s I t e r a t o r
o r g . r o c k s d b . W r i t e B a t c h
o r g . r o c k s d b . W r i t e B a t c h . H a n d l e r
o r g . r o c k s d b . W r i t e B a t c h I n t e r f a c e
o r g . r o c k s d b . W r i t e B a t c h W i t h I n d e x
o r g . r o c k s d b . W r i t e O p t i o n s
o r g . r o c k s d b . N a t i v e C o m p a r a t o r W r a p p e r T e s t
o r g . r o c k s d b . R o c k s D B E x c e p t i o n T e s t
o r g . r o c k s d b . S n a p s h o t T e s t
o r g . r o c k s d b . W r i t e B a t c h T e s t
o r g . r o c k s d b . W r i t e B a t c h T e s t I n t e r n a l H e l p e r
o r g . r o c k s d b . W r i t e B u f f e r M a n a g e r
)
file ( MAKE_DIRECTORY ${ JNI_OUTPUT_DIR } )
create_javah (
create_javah (
T A R G E T r o c k s d b j n i _ h e a d e r s
C L A S S E S $ { N A T I V E _ J A V A _ C L A S S E S }
C L A S S P A T H r o c k s d b j n i _ c l a s s e s $ { J A V A _ T E S T C L A S S P A T H }
O U T P U T _ D I R $ { J N I _ O U T P U T _ D I R }
)
)
endif ( )
if ( NOT MSVC )
set_property ( TARGET ${ ROCKSDB_STATIC_LIB } PROPERTY POSITION_INDEPENDENT_CODE ON )