diff --git a/SuperBuild/Packaging/PackageMacros.cmake b/SuperBuild/Packaging/PackageMacros.cmake
index 9cd0783d2891b611cd5616683655d5ae5d100a1a..a2283f28807f9ef8f6b9ac45788ea8b2b5fef2f5 100755
--- a/SuperBuild/Packaging/PackageMacros.cmake
+++ b/SuperBuild/Packaging/PackageMacros.cmake
@@ -75,12 +75,32 @@ function(search_library input_file pkg_searchdirs result)
 endfunction()
 
 macro(add_to_symlink_list src_file target_file)
+  #TODO: avoid code duplication here and later in install_rule
+
+  set(SKIP_INSTALL FALSE)
+  if(PKG_GENERATE_XDK)
+    get_filename_component(src_file_NAME ${src_file} NAME)
+    setif_value_in_list(is_gtk_lib "${src_file_NAME}" ALLOWED_SYSTEM_DLLS)
+    if ("${src_file_NAME}"
+	MATCHES
+	"libOTB|libotb|otbApp|otbapp_|otbTest|libMonteverdi|monteverdi|mapla|iceViewer"
+	)
+      set(SKIP_INSTALL TRUE)
+    endif()
+
+    if(is_gtk_lib)
+      set(SKIP_INSTALL TRUE)
+    endif()
+    
+  endif(PKG_GENERATE_XDK)
   # NOTE: $OUT_DIR is set actually in pkgsetup.in. So don't try
   # any pre-mature optimization on that variable names
+  if(NOT SKIP_INSTALL)
   file(APPEND 
     ${CMAKE_BINARY_DIR}/make_symlinks_temp
-    "ln -sf $OUT_DIR/lib/${src_file} $OUT_DIR/lib/${target_file}\n"
-  )
+    "if [ -f \"\$OUT_DIR/lib/${src_file}\" ]; then \n ln -sf \"$OUT_DIR/lib/${src_file}\" \"$OUT_DIR/lib/${target_file}\" \n fi;\n"
+    )
+  endif()
 endmacro()
 
 function(check_for_gtk_libs input_file result)