bug 4853
Allan CORNET [Fri, 2 Oct 2009 08:32:35 +0000 (10:32 +0200)]
scilab/CHANGES_5.2.X
scilab/modules/dynamic_link/macros/ilib_for_link.sci
scilab/modules/dynamic_link/macros/ilib_gen_Make.sci
scilab/modules/dynamic_link/src/scripts/Makedll.incl
scilab/modules/dynamic_link/src/scripts/Makefile.incl.mak
scilab/modules/dynamic_link/src/scripts/TEMPLATE_MAKEFILE.VC
scilab/modules/dynamic_link/tests/nonreg_tests/bug_4853.dia.ref [new file with mode: 0644]
scilab/modules/dynamic_link/tests/nonreg_tests/bug_4853.tst [new file with mode: 0644]

index 7762b2a..ff6af0b 100644 (file)
@@ -479,3 +479,6 @@ Bug fixes:
 * bug 4817 fixed - macro savedefaultbrowser (internal) removed (not used in scilab 5.x)
 
 * bug 4832 fixed - wavread returns a non explicit error if RIFF have some 'smpl' chunck.
+
+* bug 4853 fixed - C,C++ dlls generated by scilab had a dependency on fortran runtime (windows).
+
index 566c021..6f94688 100644 (file)
@@ -166,6 +166,8 @@ function ilib_link_gen_Make_msvc(names, ..
   FILES_SRC = '';
   OBJS = '';
   OBJS_WITH_PATH = '';
+  CPP_RUNTIME = '';
+  FORTRAN_RUNTIME = '';
   OTHERLIBS = '';
   CC = cc;
   CFLAGS = cflags;
@@ -216,6 +218,22 @@ function ilib_link_gen_Make_msvc(names, ..
     OBJS_WITH_PATH_MATRIX = [OBJS_WITH_PATH_MATRIX, OBJ_DEST_PATH + path_f + file_f + '.obj'];
   end
   
+  if ( or(fileext(FILES_SRC_MATRIX) == '.cpp') | or(fileext(FILES_SRC_MATRIX) == '.cxx') ) then
+    if (getenv("DEBUG_SCILAB_DYNAMIC_LINK","NO") == "NO") then
+      CPP_RUNTIME = 'LIBCPMT.LIB';
+    else
+      CPP_RUNTIME = 'LIBCPMTD.LIB';
+    end
+  end
+
+  if ( or(fileext(FILES_SRC_MATRIX) == '.f90') | or(fileext(FILES_SRC_MATRIX) == '.f') ) then
+    if (getenv("DEBUG_SCILAB_DYNAMIC_LINK","NO") == "NO") then
+      FORTRAN_RUNTIME = 'libifcoremd.lib libmmd.lib';
+    else
+      FORTRAN_RUNTIME = 'libifcoremdd.lib libmmdd.lib';
+    end
+  end
+  
   OBJS = strcat(OBJS_MATRIX, ' ');
   OBJS_WITH_PATH =  strcat(OBJS_WITH_PATH_MATRIX, ' ');
 
@@ -245,6 +263,8 @@ function ilib_link_gen_Make_msvc(names, ..
   MAKEFILE_VC = strsubst(MAKEFILE_VC, "__FILES_SRC__", FILES_SRC);
   MAKEFILE_VC = strsubst(MAKEFILE_VC, "__OBJS__", OBJS);
   MAKEFILE_VC = strsubst(MAKEFILE_VC, "__OBJS_WITH_PATH__", OBJS_WITH_PATH);
+  MAKEFILE_VC = strsubst(MAKEFILE_VC, "__CPP_RUNTIME__", CPP_RUNTIME);
+  MAKEFILE_VC = strsubst(MAKEFILE_VC, "__FORTRAN_RUNTIME__", FORTRAN_RUNTIME);
   MAKEFILE_VC = strsubst(MAKEFILE_VC, "__OTHERSLIBS__", OTHERLIBS);
   
   if CC <> '' then
index 96504a8..8914f73 100644 (file)
@@ -84,6 +84,8 @@ function ilib_gen_Make_win32(name,table,files,libs,Makename,with_gateway,ldflags
   FILES_SRC = '';
   OBJS = '';
   OBJS_WITH_PATH = '';
+  CPP_RUNTIME = '';
+  FORTRAN_RUNTIME = '';
   OTHERLIBS = '';
   CC = '';
   CFLAGS = cflags;
@@ -173,6 +175,22 @@ function ilib_gen_Make_win32(name,table,files,libs,Makename,with_gateway,ldflags
   
   OBJS = strcat(OBJS_MATRIX, ' ');
   OBJS_WITH_PATH =  strcat(OBJS_WITH_PATH_MATRIX, ' ');
+
+  if ( or(fileext(FILES_SRC_MATRIX) == '.cpp') | or(fileext(FILES_SRC_MATRIX) == '.cxx') ) then
+    if (getenv("DEBUG_SCILAB_DYNAMIC_LINK","NO") == "NO") then
+      CPP_RUNTIME = 'LIBCPMT.LIB';
+    else
+      CPP_RUNTIME = 'LIBCPMTD.LIB';
+    end
+  end
+
+  if ( or(fileext(FILES_SRC_MATRIX) == '.f90') | or(fileext(FILES_SRC_MATRIX) == '.f') ) then
+    if (getenv("DEBUG_SCILAB_DYNAMIC_LINK","NO") == "NO") then
+      FORTRAN_RUNTIME = 'libifcoremd.lib libmmd.lib';
+    else
+      FORTRAN_RUNTIME = 'libifcoremdd.lib libmmdd.lib';
+    end
+  end
   
   for x=libs(:)'
      if OTHERLIBS <> '' then
@@ -194,6 +212,8 @@ function ilib_gen_Make_win32(name,table,files,libs,Makename,with_gateway,ldflags
   MAKEFILE_VC = strsubst(MAKEFILE_VC, "__FILES_SRC__", FILES_SRC);
   MAKEFILE_VC = strsubst(MAKEFILE_VC, "__OBJS__", OBJS);
   MAKEFILE_VC = strsubst(MAKEFILE_VC, "__OBJS_WITH_PATH__", OBJS_WITH_PATH);
+  MAKEFILE_VC = strsubst(MAKEFILE_VC, "__CPP_RUNTIME__", CPP_RUNTIME);
+  MAKEFILE_VC = strsubst(MAKEFILE_VC, "__FORTRAN_RUNTIME__", FORTRAN_RUNTIME);
   MAKEFILE_VC = strsubst(MAKEFILE_VC, "__OTHERSLIBS__", OTHERLIBS);
   
   if CC <> '' then
index 83d0f22..90b8022 100644 (file)
@@ -10,7 +10,7 @@ $(LIBRARY).dll: $(OBJS_WITH_PATH)
        @echo $(OBJS)
        @$(DUMPEXTS) -o "$*.def" "$*.dll" $(OBJS_WITH_PATH)
        @$(LINKER) $(LINKER_FLAGS) $(OBJS_WITH_PATH) $(OTHERLIBS) \
-$(SCIIMPLIB) $(FORTRAN_RUNTIME_LIBRARIES) $(SCILAB_LIBS) \
+$(SCIIMPLIB) $(SCILAB_LIBS) $(CPP_RUNTIME_LIBRARIES) $(FORTRAN_RUNTIME_LIBRARIES) \
 $(EXTRA_LDFLAGS) /nologo /dll /out:"$*.dll" /implib:"$*.lib" /def:"$*.def"
 
 clean  ::
index 82c727e..6191568 100644 (file)
@@ -48,8 +48,7 @@ INCLUDES=-I"$(SCIDIR)/libs/MALLOC/includes" \
 -I"$(SCIDIR)/modules/time/includes" \
 -I"$(SCIDIR)/libs/f2c" \
 -I"$(SCIDIR)/libs/intl"
-
-
+#==================================================
 CC_LDFLAGS = 
 #==================================================
 # Fortran Compiler 
@@ -73,11 +72,9 @@ FC_OPTIONS_COMMON=/nologo /DFORDLL /assume:underscore \
 #==================================================
 !IF "$(DEBUG_SCILAB_DYNAMIC_LINK)" == "YES"
 FC_OPTIONS=$(FC_OPTIONS_COMMON) /Zi /Od /debug /dbglibs
-FORTRAN_RUNTIME_LIBRARIES = libifcoremdd.lib libmmdd.lib /NODEFAULTLIB:LIBCMT.lib
 #==================================================
 !ELSE
 FC_OPTIONS=$(FC_OPTIONS_COMMON)
-FORTRAN_RUNTIME_LIBRARIES = libifcoremd.lib libmmd.lib
 !ENDIF
 #==================================================
 LINKER_FLAGS=$(LINKER_FLAGS) /force:multiple
index c5ec9ce..a2ed057 100644 (file)
@@ -17,6 +17,8 @@ OBJS = __OBJS__
 OBJS_WITH_PATH = __OBJS_WITH_PATH__
 # ------------------------------------------------------
 # added libraries
+CPP_RUNTIME_LIBRARIES = __CPP_RUNTIME__
+FORTRAN_RUNTIME_LIBRARIES = __FORTRAN_RUNTIME__
 OTHERLIBS = __OTHERSLIBS__
 # ------------------------------------------------------
 !include $(SCIDIR1)\modules\dynamic_link\src\scripts\Makefile.incl.mak
diff --git a/scilab/modules/dynamic_link/tests/nonreg_tests/bug_4853.dia.ref b/scilab/modules/dynamic_link/tests/nonreg_tests/bug_4853.dia.ref
new file mode 100644 (file)
index 0000000..18d03c1
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2008 - DIGITEO - Allan CORNET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- ENGLISH IMPOSED -->
+// <-- JVM NOT MANDATORY -->
+// <-- Non-regression test for bug 4853 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=4853
+// <-- Short Description -->
+// dll generated by scilab have a wrong dependency on fortran runtime libs
+// test only for windows
+if MSDOS then
+  ilib_verbose(0);
+  exec SCI/modules/dynamic_link/tests/unit_tests/addinter.tst;
+  r = dllinfo(TMPDIR + '/libintertest.dll','imports');
+  if (r(1)(1) == 'libmmd.dll') | (r(2)(1) == 'libmmd.dll') then bugmes();quit;end
+end
+// =============================================================================
diff --git a/scilab/modules/dynamic_link/tests/nonreg_tests/bug_4853.tst b/scilab/modules/dynamic_link/tests/nonreg_tests/bug_4853.tst
new file mode 100644 (file)
index 0000000..2bd5fff
--- /dev/null
@@ -0,0 +1,27 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2008 - DIGITEO - Allan CORNET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- ENGLISH IMPOSED -->
+// <-- JVM NOT MANDATORY -->
+
+// <-- Non-regression test for bug 4853 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=4853
+// <-- Short Description -->
+// dll generated by scilab have a wrong dependency on fortran runtime libs
+
+// test only for windows
+
+if MSDOS then
+  ilib_verbose(0);
+  exec SCI/modules/dynamic_link/tests/unit_tests/addinter.tst;
+  r = dllinfo(TMPDIR + '/libintertest.dll','imports');
+  if (r(1)(1) == 'libmmd.dll') | (r(2)(1) == 'libmmd.dll') then pause,end
+end
+
+// =============================================================================