Hello Adam, > > First, some great news: Salomé was accepted into unstable! Now we can > file multiple independent bugs and track all of these issues separately. Excellent! I am really glad to hear it. > > > I feel really sorry for the wrong patch that I sent you, the reason > > is that I forgot to add the CXXFLAGS="-g" in the configure command, I was > > building VISU without optimizations. I hope that I did not make you > > loose too much time. > > Aha! That makes a lot of sense. Don't worry, it didn't take me a lot > of time to rebuild the package a couple of times. > > But this suggests that it might be best to compile only that file using > -g so the rest of VISU can still be optimized. What do you think? In fact g++ can be controlled on function inlining. > > > Since my last successful build, I have looked > > deeper into the problem and I found that g++ inline small template > > function with -O2. Here I imitate the GetIDMapper definition found in > > src/CONVERTOR/VISU_MergeFilterUtilities.cxx:705: ... > > Very interesting! It sounds like with a lot of hard work you've found > an important g++ optimization bug... I am not sure if it is a bug. I guess that template function inlining should be controlled when optimizing. I have enclosed you a tested patch for removing template function inlining of GetIDMapper but it should be applied after the commit:
f57b74db488c91754eadbca263c065ff2022ac71 Thu May 27 21:56:53 2010 -0400 Timestamp the changelog It means that the last commit should be reverted. I made a successful build of Salome with VISU by using the corresponding Debian rules (that I have enclosed in case you would like to check) but you will see that VISU is configured in the for loop like others modules. Finally I have sent my patch to bug 584172 where a better solution has already been suggested by Denis but requires a new complete build. Now I will try to improve the package organizations and wait for your Salome bug entries on which I can help. > > > By the way, is the 'git-builpackage' command that exports CXXFLAGS > > to '-O2 -g'? I could not yet understand that step. > > I believe dpkg-buildpackage sets those flags. But it should be possible > to set them locally within debian/rules or Makefile.am. Thank you for the explanation, I have just discovered dpkg-buildflags used by dpkg-buildpackage: $ dpkg-buildflags --get CXXFLAGS -g -O2 Best regards, André
commit 73f793cb0076b6847fc17750a5e1511af502e06c Author: André Espaze <andre.esp...@logilab.fr> Date: Tue Jun 1 16:53:53 2010 +0200 No GetIDMapper inlining when building VISU The template function GetIDMapper should not be inlined by g++ when compiling with optimizations (the Debian build system used -O2) because the VISUConvertor command needs to link with the resulting symbol contained in libVisuConvertor.so. The patch is provided in: debian/patches/visu-no-template-inline.patch and will be applied by quilt thanks to the list: debian/patches/series diff --git a/debian/patches/series b/debian/patches/series index 524b45d..d280ec5 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -26,6 +26,7 @@ med-fix-clean.patch visu-hdf5-needs-mpi.patch visu-build-in-tree.patch visu-flags-typo.patch +visu-no-template-inline.patch visu-fix-clean.patch smesh-hdf5-needs-mpi.patch smesh-use-gui-check.patch diff --git a/debian/patches/visu-no-template-inline.patch b/debian/patches/visu-no-template-inline.patch new file mode 100644 index 0000000..ead1d55 --- /dev/null +++ b/debian/patches/visu-no-template-inline.patch @@ -0,0 +1,28 @@ +The template function GetIDMapper should not be inlined by g++ when +compiling with optimizations (the Debian build system used -O2) because +the VISUConvertor command needs to link with the resulting symbol +contained in libVisuConvertor.so. + +diff --git a/VISU_SRC_5.1.3/src/CONVERTOR/VISU_MergeFilterUtilities.hxx b/VISU_SRC_5.1.3/src/CONVERTOR/VISU_MergeFilterUtilities.hxx +index 52f7440..e4f63ae 100755 +--- a/VISU_SRC_5.1.3/src/CONVERTOR/VISU_MergeFilterUtilities.hxx ++++ b/VISU_SRC_5.1.3/src/CONVERTOR/VISU_MergeFilterUtilities.hxx +@@ -93,12 +93,18 @@ namespace VISU + TObjectId2TupleGaussIdMap& theObjectId2TupleGaussIdMap); + + template<class TGetFieldData> ++#if (__GNUG__ && __OPTIMIZE__) ++ __attribute__((noinline)) ++#endif + vtkIntArray* + GetIDMapper(VISU::TFieldList* theFieldList, + TGetFieldData theGetFieldData, + const char* theFieldName); + + template<class TGetFieldData> ++#if (__GNUG__ && __OPTIMIZE__) ++ __attribute__((noinline)) ++#endif + vtkIntArray* + GetIDMapper(vtkDataSet* theIDMapperDataSet, + TGetFieldData theGetFieldData,
#!/usr/bin/make -f # Made with the aid of debmake, by Christoph Lameter, # based on the sample debian/rules file for GNU hello by Ian Jackson. package=salome SALOME_VERSION=5.1.3 # Support multiple makes at once ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) NJOBS := $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) else NJOBS := 1 endif # These are the modules which require build_configure to build. They are # ordered by priority and then dependency: KERNEL through NETGENPLUGIN are # core; MULTIPR through SIERPINSKY are optional # modules; LIGHT and PYLIGHT are alternate non-CORBA interface shells; # HELLO through PYCALCULATOR are module examples; HXX2SALOME # and XDATA are module development tools. In terms of dependency, KERNEL and # HXX2SALOME are at the bottom, GUI depends on KERNEL, GEOM and MED also depend # on GUI, VISU on MED and GUI, SMESH on GEOM MED and GUI, etc. # Notes: # - See ChangeLog regarding VISU, NETGENPLUGIN and SIERPINSKY modules. # - XDATA is not a normal module, it needs special treatment. # - BLSURFPLUGIN, GHS3D[PRL]PLUGIN and HexoticPLUGIN require non-free # libraries, and will not be part of the Debian package. SALOME_MODULES = KERNEL_SRC_$(SALOME_VERSION) \ GUI_SRC_$(SALOME_VERSION) \ GEOM_SRC_$(SALOME_VERSION) \ MED_SRC_$(SALOME_VERSION) \ VISU_SRC_$(SALOME_VERSION) \ SMESH_SRC_$(SALOME_VERSION) \ YACS_SRC_$(SALOME_VERSION) \ MULTIPR_SRC_$(SALOME_VERSION) \ COMPONENT_SRC_$(SALOME_VERSION) \ RANDOMIZER_SRC_$(SALOME_VERSION) \ LIGHT_SRC_$(SALOME_VERSION) \ PYLIGHT_SRC_$(SALOME_VERSION) \ HELLO_SRC_$(SALOME_VERSION) \ PYHELLO_SRC_$(SALOME_VERSION) \ CALCULATOR_SRC_$(SALOME_VERSION) \ PYCALCULATOR_SRC_$(SALOME_VERSION) \ HXX2SALOME_SRC_$(SALOME_VERSION) # XDATA_SRC_$(SALOME_VERSION) \ BLSURFPLUGIN_SRC_$(SALOME_VERSION) \ GHS3DPLUGIN_SRC_$(SALOME_VERSION) \ GHS3DPRLPLUGIN_SRC_$(SALOME_VERSION) \ HexoticPLUGIN_SRC_$(SALOME_VERSION) clean: dh_testdir for skipfile in GEOM_SRC_$(SALOME_VERSION)/src/PARTITION/Makefile.in \ KERNEL_SRC_$(SALOME_VERSION)/DEPRECATED/Makefile.in; do \ mv $$skipfile $$skipfile.skip; \ done for salomodule in $(SALOME_MODULES); do \ if [ -e $$salomodule/Makefile ]; then \ $(MAKE) -C $$salomodule maintainer-clean; \ fi; \ rm -f `find $$salomodule -name Makefile.in -print`; \ done if [ -e XDATA_SRC_$(SALOME_VERSION)/Makefile ]; then \ make -C XDATA_SRC_$(SALOME_VERSION) maintainer-clean; \ fi for skipfile in GEOM_SRC_$(SALOME_VERSION)/src/PARTITION/Makefile.in \ KERNEL_SRC_$(SALOME_VERSION)/DEPRECATED/Makefile.in; do \ mv $$skipfile.skip $$skipfile; \ done # Remove new .in files rm -f KERNEL_SRC_$(SALOME_VERSION)/bin/runSalome.in \ KERNEL_SRC_$(SALOME_VERSION)/bin/killSalome.in \ KERNEL_SRC_$(SALOME_VERSION)/bin/appliskel/env.d/envProducts.sh.in # Restore obsolete files for obsoletefile in `find . -name \*.obs -print`; do \ mv -f $$obsoletefile `echo $$obsoletefile | sed s/.obs//`; \ done if [ -d .pc ]; then \ QUILT_PATCHES=debian/patches quilt pop -a; \ rm -rf .pc; \ fi rm -f *-stamp dh_clean configure-stamp: dh_testdir # Move aside obsolete files for obsoletefile in KERNEL_SRC_$(SALOME_VERSION)/bin/runSalome \ KERNEL_SRC_$(SALOME_VERSION)/bin/appliskel/env.d/envProducts.sh \ YACS_SRC_$(SALOME_VERSION)/doc/Doxyfile \ XDATA_SRC_$(SALOME_VERSION)/aclocal.m4 \ XDATA_SRC_$(SALOME_VERSION)/configure \ `find XDATA_SRC_$(SALOME_VERSION) -name Makefile.in -print`; do \ if [ ! -e $$obsoletefile.obs ]; then \ mv $$obsoletefile $$obsoletefile.obs; \ fi; \ done # Install new .in files cp -fp debian/runSalome.in debian/killSalome.in KERNEL_SRC_$(SALOME_VERSION)/bin/ cp -fp debian/envProducts.sh.in KERNEL_SRC_$(SALOME_VERSION)/bin/appliskel/env.d/ for salomodule in $(SALOME_MODULES); do \ echo; echo CONFIGURING SALOME MODULE $$salomodule; echo; \ (cd $$salomodule && \ KERNEL_ROOT_DIR=$(CURDIR)/KERNEL_SRC_$(SALOME_VERSION) \ GUI_ROOT_DIR=$(CURDIR)/GUI_SRC_$(SALOME_VERSION) \ MED_ROOT_DIR=$(CURDIR)/MED_SRC_$(SALOME_VERSION) \ GEOM_ROOT_DIR=$(CURDIR)/GEOM_SRC_$(SALOME_VERSION) \ RANDOMIZER_ROOT_DIR=$(CURDIR)/RANDOMIZER_SRC_$(SALOME_VERSION) \ COMPONENT_ROOT_DIR=$(CURDIR)/COMPONENT_SRC_$(SALOME_VERSION) \ CALCULATOR_ROOT_DIR=$(CURDIR)/CALCULATOR_SRC_$(SALOME_VERSION) \ PYCALCULATOR_ROOT_DIR=$(CURDIR)/PYCALCULATOR_SRC_$(SALOME_VERSION) \ SMESH_ROOT_DIR=$(CURDIR)/SMESH_SRC_$(SALOME_VERSION) \ SIERPINSKY_ROOT_DIR=$(CURDIR)/SMESH_SRC_$(SALOME_VERSION) \ ./build_configure && \ ./configure --prefix=/usr CASROOT=/usr VTKSUFFIX=-5.4 \ NETGENHOME=/usr \ --with-mpi=/usr --with-mpi_include=/usr/include/mpi \ KERNEL_ROOT_DIR=$(CURDIR)/KERNEL_SRC_$(SALOME_VERSION) \ GUI_ROOT_DIR=$(CURDIR)/GUI_SRC_$(SALOME_VERSION) \ MED_ROOT_DIR=$(CURDIR)/MED_SRC_$(SALOME_VERSION) \ GEOM_ROOT_DIR=$(CURDIR)/GEOM_SRC_$(SALOME_VERSION) \ RANDOMIZER_ROOT_DIR=$(CURDIR)/RANDOMIZER_SRC_$(SALOME_VERSION) \ COMPONENT_ROOT_DIR=$(CURDIR)/COMPONENT_SRC_$(SALOME_VERSION) \ CALCULATOR_ROOT_DIR=$(CURDIR)/CALCULATOR_SRC_$(SALOME_VERSION) \ PYCALCULATOR_ROOT_DIR=$(CURDIR)/PYCALCULATOR_SRC_$(SALOME_VERSION) \ SMESH_ROOT_DIR=$(CURDIR)/SMESH_SRC_$(SALOME_VERSION) \ SIERPINSKY_ROOT_DIR=$(CURDIR)/SMESH_SRC_$(SALOME_VERSION)); \ done # Restore these when the XDATA clean target actually works # echo; echo CONFIGURING SALOME MODULE XDATA; echo # (cd XDATA_SRC_$(SALOME_VERSION) && \ aclocal -I adm/unix/config_files && autoconf && automake && \ ./configure --prefix=/usr VTKSUFFIX=-5.4 \ KERNEL_ROOT_DIR=$(CURDIR)/KERNEL_SRC_$(SALOME_VERSION)) touch $@ build: build-arch build-indep build-arch: build-arch-stamp build-arch-stamp: configure-stamp # Add XDATA to list below when its clean target actually works for salomodule in $(SALOME_MODULES); do \ echo; echo COMPILING SALOME MODULE $$salomodule; echo; \ $(MAKE) -C $$salomodule -j $(NJOBS) bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc; \ done touch $@ build-indep: build-indep-stamp build-indep-stamp: configure-stamp echo; echo GENERATING DOCUMENTATION IN MODULE KERNEL; echo make -C KERNEL_SRC_$(SALOME_VERSION)/doc usr_docs dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc echo; echo GENERATING DOCUMENTATION IN MODULE GUI; echo make -C GUI_SRC_$(SALOME_VERSION)/doc usr_docs dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc echo; echo GENERATING DOCUMENTATION IN MODULE GEOM; echo make -C GEOM_SRC_$(SALOME_VERSION)/doc usr_docs dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc echo; echo GENERATING DOCUMENTATION IN MODULE MED; echo make -C MED_SRC_$(SALOME_VERSION)/doc dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc echo; echo GENERATING DOCUMENTATION IN MODULE VISU; echo make -C VISU_SRC_$(SALOME_VERSION)/doc usr_docs dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc echo; echo GENERATING DOCUMENTATION IN MODULE HELLO; echo make -C HELLO_SRC_$(SALOME_VERSION)/doc usr_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc echo; echo GENERATING DOCUMENTATION IN MODULE PYHELLO; echo make -C PYHELLO_SRC_$(SALOME_VERSION)/doc usr_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc echo; echo GENERATING DOCUMENTATION IN MODULE PYCALCULATOR; echo make -C PYCALCULATOR_SRC_$(SALOME_VERSION)/doc dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc echo; echo GENERATING DOCUMENTATION IN MODULE SMESH; echo make -C SMESH_SRC_$(SALOME_VERSION)/doc usr_docs dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc echo; echo GENERATING DOCUMENTATION IN MODULE YACS; echo make -C YACS_SRC_$(SALOME_VERSION)/doc dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc touch $@ install: build install-stamp install-arch: build-arch install-stamp install-indep: install-indep-stamp # Later maybe make this run make install only in the doc directories, so it # doesn't try to build everything else install-indep-stamp: build-indep install-stamp touch $@ # This installs everything, so it's not really install-arch-stamp install-stamp: dh_testdir # Add XDATA to list below when its clean target actually works for salomodule in $(SALOME_MODULES); do \ echo; echo INSTALLING SALOME MODULE $$salomodule; echo; \ $(MAKE) -C $$salomodule install DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/bin libdir=/usr/lib docdir=/usr/share/doc/salome-doc; \ done mv debian/tmp/usr/idl debian/tmp/usr/share/ install -d debian/tmp/usr/share/aclocal mv debian/tmp/usr/salome_adm/unix/config_files/check_Kernel.m4 debian/tmp/usr/share/aclocal/salome.m4 for m4file in check_GUI.m4 check_GEOM.m4 check_Med.m4 check_RANDOMIZER.m4 check_SMESH.m4; do \ cat debian/tmp/usr/adm_local/unix/config_files/$$m4file >> debian/tmp/usr/share/aclocal/salome.m4; \ done # Temporary kludge until there's a more permanent way to install this cp KERNEL_SRC_$(SALOME_VERSION)/bin/killSalome debian/tmp/usr/bin/ chmod +x debian/tmp/usr/bin/killSalome install -d debian/tmp/usr/share/applications cp -a debian/salome.desktop debian/tmp/usr/share/applications/ rm -f debian/tmp/usr/bin/appliskel/env.d/*.in \ debian/tmp/usr/bin/appliskel/env.d/*.obs mv debian/tmp/usr/lib/SalomePyQt.so debian/tmp/usr/lib/SalomePyQt.so.0 ln -s SalomePyQt.so.0 debian/tmp/usr/lib/SalomePyQt.so mv debian/tmp/usr/Tests debian/tmp/usr/share/salome/ rm -rf debian/tmp/usr/lib64 rm -rf debian/tmp/usr/doc rm -rf debian/tmp/usr/bin/appliskel rm -rf debian/tmp/usr/bin/styles rm -rf debian/tmp/usr/bin/HXX2SALOME_GENERIC_CLASS* rm -f debian/tmp/usr/bin/*.pyo debian/tmp/usr/bin/*.pyc rm -f debian/tmp/usr/bin/*.csh debian/tmp/usr/bin/*.ksh debian/tmp/usr/bin/*.bat for shscript in `ls debian/tmp/usr/bin/*.sh`; do \ shbase=`basename $$shscript .sh`; \ mv debian/tmp/usr/bin/$$shbase.sh debian/tmp/usr/bin/$$shbase; \ done mv debian/tmp/usr/bin/*.xml debian/tmp/usr/bin/VERSION \ debian/tmp/usr/bin/*.tgz debian/tmp/usr/bin/*.awk \ debian/tmp/usr/share/salome/ mv debian/tmp/usr/bin/SALOME_ContainerPy.py debian/tmp/usr/bin/SALOME_Container mv debian/tmp/usr/bin/*.py debian/tmp/usr/lib/python2.5/*-packages/salome/ chmod -x debian/tmp/usr/lib/python2.5/*-packages/salome/* install -d debian/python2.5-salome/usr/bin for pyscript in avs2med med2sauv salomeloader sauv2med SALOME_Container; do \ mv debian/tmp/usr/bin/$$pyscript debian/python2.5-salome/usr/bin/; \ done (cd debian/tmp/usr/share/salome && \ chmod -x resources/*/*.xml *.awk *.tgz) install -d debian/salome-examples/usr/share/salome/examples cp -a SAMPLES_SRC_$(SALOME_VERSION)/* debian/salome-examples/usr/share/salome/examples/ chmod -x `find debian/salome-examples/usr/share/salome/examples -type f` # This installs everything that install-indep-stamp is supposed to install touch install-indep-stamp touch $@ binary-indep: install-indep dh_testdir -i dh_testroot -i dh_installdirs -i dh_movefiles -i dh_installdocs -i dh_installchangelogs -i dh_compress -i dh_fixperms -i dh_installdeb -i dh_gencontrol -i dh_md5sums -i dh_builddeb -i binary-arch: install-arch dh_testdir -a dh_testroot -a dh_installdirs -a dh_movefiles -a dh_installdocs -a dh_installchangelogs -a dh_installmenu -a dh_strip -a dh_makeshlibs -a dh_compress -a dh_pycentral -ppython2.5-salome dh_fixperms -a dh_installdeb -a dh_shlibdeps -a dh_gencontrol -a dh_md5sums -a dh_builddeb -a binary: binary-arch binary-indep .PHONY: binary binary-arch binary-indep clean install install-arch install-indep build build-arch build-indep