diff -u -r -w -x .svn gnustep-make-orig/Instance/framework.make gnustep-make/Instance/framework.make --- gnustep-make-orig/Instance/framework.make Thu Sep 2 11:14:21 2004 +++ gnustep-make/Instance/framework.make Tue Jul 5 12:04:07 2005 @@ -90,6 +90,12 @@ ifeq ($(MAKE_CURRENT_VERSION),) MAKE_CURRENT_VERSION = yes endif +ifeq ($(HAS_LN_S),no) + MAKE_CURRENT_VERSION = no + HEADERS_DIR_SUFFIX = /$(GNUSTEP_INSTANCE) +else + HEADERS_DIR_SUFFIX = +endif # Set VERSION from xxx_VERSION ifneq ($($(GNUSTEP_INSTANCE)_VERSION),) @@ -108,7 +114,12 @@ FRAMEWORK_DIR_NAME = $(GNUSTEP_INSTANCE).framework FRAMEWORK_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_DIR_NAME) +# On windows where we have no symlinks, there is no good way to do the Versions +ifeq ($(HAS_LN_S),no) +FRAMEWORK_VERSION_DIR_NAME = $(FRAMEWORK_DIR_NAME) +else FRAMEWORK_VERSION_DIR_NAME = $(FRAMEWORK_DIR_NAME)/Versions/$(CURRENT_VERSION_NAME) +endif FRAMEWORK_VERSION_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_VERSION_DIR_NAME) # This is not doing much at the moment, but at least is defining @@ -156,7 +167,7 @@ DUMMY_FRAMEWORK_CLASS_LIST = $(DERIVED_SOURCES_DIR)/$(GNUSTEP_INSTANCE)-class-list endif -FRAMEWORK_HEADER_FILES := $(addprefix $(FRAMEWORK_VERSION_DIR)/Headers/,$(HEADER_FILES)) +FRAMEWORK_HEADER_FILES := $(addprefix $(FRAMEWORK_VERSION_DIR)/Headers$(HEADERS_DIR_SUFFIX)/,$(HEADER_FILES)) ifneq ($(BUILD_DLL),yes) @@ -266,6 +277,7 @@ $(FRAMEWORK_VERSION_DIR)/Resources \ $(FRAMEWORK_RESOURCE_DIRS) \ $(UPDATE_CURRENT_SYMLINK_RULE) +ifneq ($(HAS_LN_S),no) $(ECHO_NOTHING)cd $(FRAMEWORK_DIR); \ if [ ! -h "Resources" ]; then \ rm -f Resources; \ @@ -283,23 +295,28 @@ ./$(HEADER_FILES_INSTALL_DIR); \ fi$(END_ECHO) endif +endif $(FRAMEWORK_LIBRARY_DIR): $(ECHO_CREATING)$(MKDIRS) address@hidden(END_ECHO) $(FRAMEWORK_VERSION_DIR)/Headers: $(ECHO_CREATING)$(MKDIRS) address@hidden(END_ECHO) +ifeq ($(HAS_LN_S),no) + $(ECHO_CREATING)$(MKDIRS) address@hidden(HEADERS_DIR_SUFFIX)$(END_ECHO) +endif $(DERIVED_SOURCES_DIR): $(ECHO_CREATING)$(MKDIRS) address@hidden(END_ECHO) # Need to share this code with the headers code ... but how. -$(FRAMEWORK_HEADER_FILES):: $(HEADER_FILES) +$(FRAMEWORK_HEADER_FILES): internal-framework-copy-headers-target +internal-framework-copy-headers-target: $(HEADER_FILES) ifneq ($(HEADER_FILES),) $(ECHO_NOTHING)for file in $(HEADER_FILES) __done; do \ if [ $$file != __done ]; then \ $(INSTALL_DATA) $(HEADER_FILES_DIR)/$$file \ - $(FRAMEWORK_VERSION_DIR)/Headers/$$file ; \ + $(FRAMEWORK_VERSION_DIR)/Headers$(HEADERS_DIR_SUFFIX)/$$file ; \ fi; \ done$(END_ECHO) endif @@ -421,11 +438,14 @@ ifeq ($(WITH_DLL),yes) +$(DERIVED_SOURCES)/$(GNUSTEP_INSTANCE).def: $(DUMMY_FRAMEWORK_OBJ_FILE) $(OBJ_FILES_TO_LINK) + $(DLLTOOL) --export-all-symbols --output-def $(DERIVED_SOURCES)/$(GNUSTEP_INSTANCE).def \ + $(DUMMY_FRAMEWORK_OBJ_FILE) $(OBJ_FILES_TO_LINK) -$(FRAMEWORK_FILE) : $(DUMMY_FRAMEWORK_OBJ_FILE) $(OBJ_FILES_TO_LINK) +$(FRAMEWORK_FILE) : $(DUMMY_FRAMEWORK_OBJ_FILE) $(OBJ_FILES_TO_LINK) $(DERIVED_SOURCES)/$(GNUSTEP_INSTANCE).def $(ECHO_LINKING)$(DLLWRAP) --driver-name $(CC) \ - -o $(LDOUT)$(FRAMEWORK_FILE) \ - $(OBJ_FILES_TO_LINK) \ + --def $(DERIVED_SOURCES)/$(GNUSTEP_INSTANCE).def -o $(LDOUT)$(FRAMEWORK_FILE) \ + $(DUMMY_FRAMEWORK_OBJ_FILE) $(OBJ_FILES_TO_LINK) \ $(ALL_LDFLAGS) \ $(ALL_FRAMEWORK_LIBS)$(END_ECHO) diff -u -r -w -x .svn gnustep-make-orig/Instance/subproject.make gnustep-make/Instance/subproject.make --- gnustep-make-orig/Instance/subproject.make Mon Oct 13 18:25:23 2003 +++ gnustep-make/Instance/subproject.make Tue Jul 5 12:04:23 2005 @@ -76,24 +76,28 @@ OWNING_PROJECT_HEADER_DIR = $(GNUSTEP_BUILD_DIR)/$(OWNING_PROJECT_HEADER_DIR_NAME) HEADER_FILES = $($(GNUSTEP_INSTANCE)_HEADER_FILES) -OWNING_PROJECT_HEADER_FILES = $(patsubst %.h,$(OWNING_PROJECT_HEADER_DIR)/%.h,$(HEADER_FILES)) +OWNING_PROJECT_HEADER_FILES = $(patsubst %.h,$(OWNING_PROJECT_HEADER_DIR)$(HEADERS_DIR_SUFFIX)/%.h,$(HEADER_FILES)) internal-subproject-build-headers:: $(OWNING_PROJECT_HEADER_FILES) # We need to build the OWNING_PROJECT_HEADER_DIR directory here # because this rule could be executed before the top-level framework # has built his dirs -$(OWNING_PROJECT_HEADER_FILES):: $(HEADER_FILES) $(OWNING_PROJECT_HEADER_DIR) +$(OWNING_PROJECT_HEADER_FILES): internal-subproject-copy-headers-target +internal-subproject-copy-headers-target: $(HEADER_FILES) $(OWNING_PROJECT_HEADER_DIR) ifneq ($(HEADER_FILES),) $(ECHO_NOTHING)for file in $(HEADER_FILES) __done; do \ if [ $$file != __done ]; then \ - $(INSTALL_DATA) ./$$file $(OWNING_PROJECT_HEADER_DIR)/$$file ; \ + $(INSTALL_DATA) ./$$file $(OWNING_PROJECT_HEADER_DIR)$(HEADERS_DIR_SUFFIX)/$$file ; \ fi; \ done$(END_ECHO) endif # we got HEADER_FILES $(OWNING_PROJECT_HEADER_DIR): $(ECHO_CREATING)$(MKDIRS) address@hidden(END_ECHO) +ifneq ($(HEADERS_DIR_SUFFIX),) + $(ECHO_CREATING)$(MKDIRS) address@hidden(HEADERS_DIR_SUFFIX)$(END_ECHO) +endif # End FRAMEWORK code else diff -u -r -w -x .svn gnustep-make-orig/Master/framework.make gnustep-make/Master/framework.make --- gnustep-make-orig/Master/framework.make Tue Jun 21 13:49:36 2005 +++ gnustep-make/Master/framework.make Tue Jun 28 07:52:18 2005 @@ -25,6 +25,11 @@ endif FRAMEWORK_NAME := $(strip $(FRAMEWORK_NAME)) +ifeq ($(HAS_LN_S),no) + HEADERS_DIR_SUFFIX = /$(FRAMEWORK_NAME) +else + HEADERS_DIR_SUFFIX = +endif # A framework has a special task to do before-all, which is to build # the public framework headers. diff -u -r -w -x .svn gnustep-make-orig/Master/rules.make gnustep-make/Master/rules.make --- gnustep-make-orig/Master/rules.make Fri May 7 04:33:34 2004 +++ gnustep-make/Master/rules.make Tue Jun 28 07:56:29 2005 @@ -295,9 +295,13 @@ fi; \ if [ "$(OWNING_PROJECT_HEADER_DIR_NAME)" = "" ]; then \ if [ "$$type" = "framework" ]; then \ + if [ "$(HAS_LN_S)" = "no" ]; then \ + owning_project_header_dir="../$${instance}.framework/Headers" ; \ + else \ framework_version="$($(basename $(basename $*))_CURRENT_VERSION_NAME)"; \ if [ "$$framework_version" = "" ]; then framework_version="A"; fi; \ owning_project_header_dir="../$${instance}.framework/Versions/$${framework_version}/Headers"; \ + fi; \ else owning_project_header_dir=""; \ fi; \ else \ @@ -306,6 +310,7 @@ if $(MAKE) -C $$f -f $$mf --no-keep-going $$operation \ OWNING_PROJECT_HEADER_DIR_NAME="$${owning_project_header_dir}" \ DERIVED_SOURCES="../$(DERIVED_SOURCES)" \ + HEADERS_DIR_SUFFIX="$(HEADERS_DIR_SUFFIX)" \ GNUSTEP_BUILD_DIR="$$gsbuild" \ ; then \ :; \ @@ -360,9 +365,13 @@ fi; \ if [ "$(OWNING_PROJECT_HEADER_DIR_NAME)" = "" ]; then \ if [ "$$type" = "framework" ]; then \ + if [ "$(HAS_LN_S)" = "no" ]; then \ + owning_project_header_dir="../$${instance}.framework/Headers" ; \ + else \ framework_version="$($(basename $(basename $*))_CURRENT_VERSION_NAME)"; \ if [ "$$framework_version" = "" ]; then framework_version="A"; fi; \ owning_project_header_dir="../$${instance}.framework/Versions/$${framework_version}/Headers"; \ + fi; \ else owning_project_header_dir=""; \ fi; \ else \ @@ -371,6 +380,7 @@ if $(MAKE) -C $$f -f $$mf --no-keep-going $$operation \ OWNING_PROJECT_HEADER_DIR_NAME="$${owning_project_header_dir}" \ DERIVED_SOURCES="../$(DERIVED_SOURCES)" \ + HEADERS_DIR_SUFFIX="$(HEADERS_DIR_SUFFIX)" \ GNUSTEP_BUILD_DIR="$$gsbuild" \ ; then \ :; \ diff -u -r -w -x .svn gnustep-make-orig/configure.ac gnustep-make/configure.ac --- gnustep-make-orig/configure.ac Mon Sep 6 22:12:32 2004 +++ gnustep-make/configure.ac Mon Jun 27 13:42:04 2005 @@ -115,6 +115,8 @@ export AR=${AR:-ar} export RANLIB=${RANLIB:-ranlib} export DLLTOOL=${DLLTOOL:-dlltool} + as_ln_s='cp -rp' + LN_S='cp -rp' elif test "$CYGWIN" = yes; then echo "hosted on cygwin .." export CC=${CC:-gcc} diff -u -r -w -x .svn gnustep-make-orig/rules.make gnustep-make/rules.make --- gnustep-make-orig/rules.make Fri Apr 2 01:28:02 2004 +++ gnustep-make/rules.make Mon Jun 27 21:30:09 2005 @@ -145,9 +145,18 @@ # it's a framework subproject, OWNING_PROJECT_HEADER_DIR_NAME will be # non-empty. # +ifeq ($(HAS_LN_S),no) +ifneq ($(FRAMEWORK_NAME),) + DERIVED_SOURCES_HEADERS_FLAG = -I$(FRAMEWORK_VERSION_DIR)/Headers +endif +ifneq ($(OWNING_PROJECT_HEADER_DIR_NAME),) + DERIVED_SOURCES_HEADERS_FLAG = -I$(OWNING_PROJECT_HEADER_DIR_NAME) +endif +else ifneq ($(FRAMEWORK_NAME)$(OWNING_PROJECT_HEADER_DIR_NAME),) DERIVED_SOURCES_HEADERS_FLAG = -I$(DERIVED_SOURCES_DIR) endif +endif # # Include rules to built the instance @@ -319,6 +328,9 @@ # Then define our own. .SUFFIXES: .m .c .psw .java .h .cpp .cxx .C .cc .cp +ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32) +.SUFFIXES: .rc +endif .PRECIOUS: %.c %.h $(GNUSTEP_OBJ_DIR)/%${OEXT} @@ -422,6 +434,11 @@ $(ALL_CFLAGS) \ $(ALL_CCFLAGS)) \ $($<_FILE_FLAGS) -o address@hidden(END_ECHO) + +ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32) +$(GNUSTEP_OBJ_DIR)/%${OEXT} : %.rc + $(ECHO_COMPILING)windres $< address@hidden(END_ECHO) +endif %.class : %.java $(ECHO_COMPILING)$(JAVAC) \ diff -u -r -w -x .svn gnustep-make-orig/target.make gnustep-make/target.make --- gnustep-make-orig/target.make Tue Sep 7 05:53:51 2004 +++ gnustep-make/target.make Wed Jun 22 15:10:47 2005 @@ -857,7 +857,10 @@ SHARED_LIBEXT = .a DLL_LIBEXT = .dll DLLTOOL = dlltool -DLLWRAP = dllwrap +DLLWRAP = dllwrap -Wl,--enable-auto-import +# even though there is a ln -s, it is just a cp -rp +HAS_LN_S = no +LN_S = cp -rp #SHARED_CFLAGS += OBJ_MERGE_CMD = \ @@ -866,6 +869,7 @@ HAVE_BUNDLES = yes BUNDLE_LD = $(CC) BUNDLE_LDFLAGS += -nodefaultlibs -Xlinker -r +ADDITIONAL_LDFLAGS += -Wl,--enable-auto-import endif # end Mingw32 diff -u -r -w -x .svn gnustep-make-orig/which_lib.c gnustep-make/which_lib.c --- gnustep-make-orig/which_lib.c Tue Jun 21 13:49:51 2005 +++ gnustep-make/which_lib.c Thu Dec 23 12:46:36 2004 @@ -282,10 +282,19 @@ struct stat statbuf; strcpy (full_filename, library_paths[i]); +#ifdef __MINGW32__ + /* Mingw can link against dlls directly, so we should look for library_name.dll then liblibrary_name.a */ + strcat (full_filename, "/"); +#else strcat (full_filename, "/lib"); +#endif strcat (full_filename, library_name); strcat (full_filename, suffix); +#ifdef __MINGW32__ + strcat (full_filename, ".dll"); +#else strcat (full_filename, ext); +#endif if (show_all) { @@ -295,6 +304,20 @@ if (stat (full_filename, &statbuf) < 0) /* Error - likely that file doesn't exist. */ { +#ifdef __MINGW32__ + // On windows a shared library probably has a static "import" library + strcpy (full_filename, library_paths[i]); + strcat (full_filename, "/lib"); + strcat (full_filename, library_name); + strcat (full_filename, suffix); + strcat (full_filename, ext); + + if (show_all) + { + fprintf (stderr, " %s\n", full_filename); + } + if (stat (full_filename, &statbuf) < 0) +#endif continue; }