[gjs] Add a version property to System



commit aab113ea7ad0863dd9dce589610782b0c0c837b4
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Mon May 6 23:21:30 2013 +0200

    Add a version property to System
    
    To allow dynamic checks for new API and features, expose the GJS
    version in the System module. For additional convenience,
    it is provided as a number (major * 10000 + minor * 100 + micro)
    that can be directly comparated to a reference value.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=699784

 configure.ac                          |    1 +
 installed-tests/test/js/testSystem.js |    4 ++++
 modules/system.c                      |   28 +++++++++++++++++++---------
 3 files changed, 24 insertions(+), 9 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 04bd775..84b9047 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,6 +5,7 @@ m4_define(pkg_major_version, 1)
 m4_define(pkg_minor_version, 36)
 m4_define(pkg_micro_version, 0)
 m4_define(pkg_version, pkg_major_version.pkg_minor_version.pkg_micro_version)
+m4_define(pkg_int_version, (pkg_major_version * 100 + pkg_minor_version) * 100 + pkg_micro_version)
 
 AC_PREREQ(2.61)
 AC_INIT([gjs], pkg_version, [http://bugzilla.gnome.org/enter_bug.cgi?product=gjs])
diff --git a/installed-tests/test/js/testSystem.js b/installed-tests/test/js/testSystem.js
index f87a325..54b838f 100644
--- a/installed-tests/test/js/testSystem.js
+++ b/installed-tests/test/js/testSystem.js
@@ -11,5 +11,9 @@ function testAddressOf() {
     JSUnit.assert(System.addressOf(o1) != System.addressOf(o2));
 }
 
+function testVersion() {
+    JSUnit.assert(System.version >= 13600);
+}
+
 JSUnit.gjstestRun(this, JSUnit.setUp, JSUnit.tearDown);
 
diff --git a/modules/system.c b/modules/system.c
index 36270db..1626bb0 100644
--- a/modules/system.c
+++ b/modules/system.c
@@ -126,6 +126,7 @@ gjs_js_define_system_stuff(JSContext *context,
     GjsContext *gjs_context;
     char *program_name;
     jsval value;
+    JSBool retval;
 
     if (!JS_DefineFunction(context, module,
                            "addressOf",
@@ -157,16 +158,16 @@ gjs_js_define_system_stuff(JSContext *context,
                            0, GJS_MODULE_PROP_FLAGS))
         return JS_FALSE;
 
+    retval = JS_FALSE;
+
     gjs_context = JS_GetContextPrivate(context);
     g_object_get(gjs_context,
                  "program-name", &program_name,
                  NULL);
 
     if (!gjs_string_from_utf8(context, program_name,
-                              -1, &value)) {
-        g_free(program_name);
-        return JS_FALSE;
-    }
+                              -1, &value))
+        goto out;
 
     /* The name is modeled after program_invocation_name,
        part of the glibc */
@@ -175,12 +176,21 @@ gjs_js_define_system_stuff(JSContext *context,
                            value,
                            JS_PropertyStub,
                            JS_StrictPropertyStub,
-                           GJS_MODULE_PROP_FLAGS | JSPROP_READONLY)) {
-        g_free(program_name);
-        return JS_FALSE;
-    }
+                           GJS_MODULE_PROP_FLAGS | JSPROP_READONLY))
+        goto out;
 
+    if (!JS_DefineProperty(context, module,
+                           "version",
+                           INT_TO_JSVAL(GJS_VERSION),
+                           JS_PropertyStub,
+                           JS_StrictPropertyStub,
+                           GJS_MODULE_PROP_FLAGS | JSPROP_READONLY))
+        goto out;
+
+    retval = JS_TRUE;
+
+ out:
     g_free(program_name);
 
-    return JS_TRUE;
+    return retval;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]