You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by je...@apache.org on 2009/02/28 18:24:35 UTC

svn commit: r748888 - /apr/apr/trunk/build/jlibtool.c

Author: jerenkrantz
Date: Sat Feb 28 17:24:35 2009
New Revision: 748888

URL: http://svn.apache.org/viewvc?rev=748888&view=rev
Log:
jlibtool: improve bundle support on Mac OS X so that Subversion's SWIG Python
bindings can be built (albeit with wrong extension, but that's not our fault).

* build/jlibtool.c
  (MODULE_OPTS): Pass -dynamic when using -bundle.
  (jlibtool_basename, nameof): Move earlier in file.
  (gen_library_name): Add one more character to avoid running over (ouch!);
  if we're using a module, take the basename of it.
  (parse_args): Take in 'release' parameter.
  (run_mode): Clean up if/else clauses.

Modified:
    apr/apr/trunk/build/jlibtool.c

Modified: apr/apr/trunk/build/jlibtool.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/build/jlibtool.c?rev=748888&r1=748887&r2=748888&view=diff
==============================================================================
--- apr/apr/trunk/build/jlibtool.c (original)
+++ apr/apr/trunk/build/jlibtool.c Sat Feb 28 17:24:35 2009
@@ -64,7 +64,7 @@
 #  define RANLIB "ranlib"
 #  define PIC_FLAG "-fPIC -fno-common"
 #  define SHARED_OPTS "-dynamiclib"
-#  define MODULE_OPTS "-bundle"
+#  define MODULE_OPTS "-bundle -dynamic"
 #  define DYNAMIC_LINK_OPTS "-flat_namespace"
 #  define DYNAMIC_LINK_UNDEFINED "-undefined suppress"
 #  define dynamic_link_version_func darwin_dynamic_link_function
@@ -697,6 +697,44 @@
 #endif
 }
 
+/* returns just a file's name without the path */
+const char *jlibtool_basename(const char *fullpath)
+{
+    const char *name = strrchr(fullpath, '/');
+
+    if (name == NULL) {
+        name = strrchr(fullpath, '\\');
+    }
+
+    if (name == NULL) {
+        name = fullpath;
+    } else {
+        name++;
+    }
+
+    return name;
+}
+
+/* returns just a file's name without path or extension */
+const char *nameof(const char *fullpath)
+{
+    const char *name;
+    const char *ext;
+
+    name = jlibtool_basename(fullpath);
+    ext = strrchr(name, '.');
+
+    if (ext) {
+        char *trimmed;
+        trimmed = malloc(ext - name + 1);
+        strncpy(trimmed, name, ext - name);
+        trimmed[ext-name] = 0;
+        return trimmed;
+    }
+
+    return name;
+}
+
 /* version_info is in the form of MAJOR:MINOR:PATCH */
 const char *darwin_dynamic_link_function(const char *version_info)
 {
@@ -749,14 +787,19 @@
 {
     char *newarg, *newext;
 
-    newarg = (char *)malloc(strlen(name) + 10);
+    newarg = (char *)malloc(strlen(name) + 11);
     strcpy(newarg, ".libs/");
 
     if (genlib == 2 && strncmp(name, "lib", 3) == 0) {
         name += 3;
     }
 
-    strcat(newarg, name);
+    if (genlib == 2) {
+        strcat(newarg, jlibtool_basename(name));
+    }
+    else {
+        strcat(newarg, name);
+    }
 
     newext = strrchr(newarg, '.') + 1;
 
@@ -1138,44 +1181,6 @@
 #endif
 }
 
-/* returns just a file's name without the path */
-const char *jlibtool_basename(const char *fullpath)
-{
-    const char *name = strrchr(fullpath, '/');
-
-    if (name == NULL) {
-        name = strrchr(fullpath, '\\');
-    }
-
-    if (name == NULL) {
-        name = fullpath;
-    } else {
-        name++;
-    }
-
-    return name;
-}
-
-/* returns just a file's name without path or extension */
-const char *nameof(const char *fullpath)
-{
-    const char *name;
-    const char *ext;
-
-    name = jlibtool_basename(fullpath);
-    ext = strrchr(name, '.');
-
-    if (ext) {
-        char *trimmed;
-        trimmed = malloc(ext - name + 1);
-        strncpy(trimmed, name, ext - name);
-        trimmed[ext-name] = 0;
-        return trimmed;
-    }
-
-    return name;
-}
-
 int explode_static_lib(command_t *cmd_data, const char *lib)
 {
     count_chars tmpdir_cc, libname_cc;
@@ -1528,6 +1533,10 @@
                     /* Aha, we should try to link both! */
                     cmd_data->install_path = argv[++a];
                     argused = 1;
+                } else if (strcmp(arg+1, "release") == 0) {
+                    /* Store for later deciphering */
+                    cmd_data->version_info = argv[++a];
+                    argused = 1;
                 } else if (strcmp(arg+1, "version-info") == 0) {
                     /* Store for later deciphering */
                     cmd_data->version_info = argv[++a];
@@ -1894,7 +1903,11 @@
             clear_count_chars(cmd_data->program_opts);
 
             append_count_chars(cmd_data->program_opts, cmd_data->arglist);
-            if (cmd_data->output != otModule) {
+            if (cmd_data->output == otModule) {
+#ifdef MODULE_OPTS
+                push_count_chars(cmd_data->program_opts, MODULE_OPTS);
+#endif
+            } else {
 #ifdef SHARED_OPTS
                 push_count_chars(cmd_data->program_opts, SHARED_OPTS);
 #endif
@@ -1903,11 +1916,6 @@
                              dynamic_link_version_func(cmd_data->version_info));
 #endif
             }
-            if (cmd_data->output == otModule) {
-#ifdef MODULE_OPTS
-                push_count_chars(cmd_data->program_opts, MODULE_OPTS);
-#endif
-            }
             add_dynamic_link_opts(cmd_data, cmd_data->program_opts);
 
             rv = run_command(cmd_data, cmd_data->shared_opts.normal);