diff options
Diffstat (limited to 'build')
-rw-r--r-- | build/jlibtool.c | 102 |
1 files changed, 55 insertions, 47 deletions
diff --git a/build/jlibtool.c b/build/jlibtool.c index 3db1efcd5..9bd01d041 100644 --- a/build/jlibtool.c +++ b/build/jlibtool.c @@ -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 @@ void safe_mkdir(const char *path) #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 *gen_library_name(const char *name, int genlib) { 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 @@ void add_linker_flag_prefix(count_chars *cc, const char *arg) #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 @@ void parse_args(int argc, char *argv[], command_t *cmd_data) /* 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 @@ int run_mode(command_t *cmd_data) 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 @@ int run_mode(command_t *cmd_data) 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); |