From: Matt L. <mat...@gm...> - 2008-03-13 17:38:25
|
I've checked in my changes to vcl as described earlier (excluding emulation). For now, the option VCL_INCLUDE_CXX_0X will appear in CMake only if vcl_shared_ptr is found in either <memory> or <tr1/memory>. When it does appear the default value is OFF for normal builds and ON for dashboard builds. I've also added a few simple tests in test_memory.cxx, but these are mostly a placeholder since many more tests are needed. I will also make an announcement to the vxl-users mailing list. --Matt On Wed, Mar 12, 2008 at 4:48 PM, Matt Leotta <mat...@gm...> wrote: > I'm happy to report that I have a working solution to the renaming > problem (thanks to all of your suggestions). It also avoids the issue > of folding std::tr1 into std. Here is a summary: > > vcl/generic contains vcl_blah.hhh (for old symbols) and > vcl_blah_tr1.hhh (for new symbols). These generate the .h files. > > vcl/iso contains vcl_blah.h (which includes <blah> and > "generic/vcl_blah.h" and refers to namespace std) and vcl_blah_tr1.h > (which includes <blah> and "generic/vcl_blah_tr1.h" and refers to > namespace std) > > vcl/tr1 contains vcl_blah.h (which includes <tr1/blah> and > "generic/vcl_blah_tr1.h" and refers to namespace std::tr1) > > for ISO compilers the top level vcl_blah.h does the following: > > #include "iso/vcl_blah.h" > #if VCL_INCLUDE_CXX_0X > # if VCL_BLAH_HAS_0X > # include "iso/vcl_blah_tr1.h" > # elif VCL_BLAH_HAS_TR1 > # include "tr1/vcl_blah.h" > # else > # include "emulation/vcl_files_to_emulate_blah_0x.h" > # endif > #endif > > Now the only problem is how to emulate shared_ptr. This is much more > complicated than I originally thought. The gcc implementation is > dependent on a lot of gcc internals (like namespace __gnu_cxx). The > Boost implementation is dependent on a LARGE base of Boost code for > cross platform compatibility. Obviously vcl duplicates a portion of > this, but vcl-ifying Boost will not be trivial, even for a single > class like shared_ptr. We could probably write a simplified version > that drops all of the exception and thread safety handling, but even > this would be a big project. Any suggestions on how to handle this? > > Thanks, > Matt > > P.S. below is a list of all Boost files that boost/shared_ptr.hpp > depends on (recursively) > > boost/assert.hpp > boost/checked_delete.hpp > boost/config.hpp > boost/config/no_tr1/utility.hpp > boost/config/posix_features.hpp > boost/config/select_compiler_config.hpp > boost/config/select_platform_config.hpp > boost/config/select_stdlib_config.hpp > boost/config/suffix.hpp > boost/current_function.hpp > boost/detail/atomic_count.hpp > boost/detail/atomic_count_gcc.hpp > boost/detail/atomic_count_pthreads.hpp > boost/detail/atomic_count_win32.hpp > boost/detail/bad_weak_ptr.hpp > boost/detail/interlocked.hpp > boost/detail/lightweight_mutex.hpp > boost/detail/lwm_nop.hpp > boost/detail/lwm_pthreads.hpp > boost/detail/lwm_win32_cs.hpp > boost/detail/quick_allocator.hpp > boost/detail/shared_count.hpp > boost/detail/shared_ptr_nmt.hpp > boost/detail/sp_counted_base.hpp > boost/detail/sp_counted_base_cw_ppc.hpp > boost/detail/sp_counted_base_gcc_ia64.hpp > boost/detail/sp_counted_base_gcc_ppc.hpp > boost/detail/sp_counted_base_gcc_x86.hpp > boost/detail/sp_counted_base_nt.hpp > boost/detail/sp_counted_base_pt.hpp > boost/detail/sp_counted_base_w32.hpp > boost/detail/sp_counted_impl.hpp > boost/detail/workaround.hpp > boost/mpl/aux_/adl_barrier.hpp > boost/mpl/aux_/arity.hpp > boost/mpl/aux_/config/adl.hpp > boost/mpl/aux_/config/arrays.hpp > boost/mpl/aux_/config/ctps.hpp > boost/mpl/aux_/config/dtp.hpp > boost/mpl/aux_/config/eti.hpp > boost/mpl/aux_/config/gcc.hpp > boost/mpl/aux_/config/integral.hpp > boost/mpl/aux_/config/intel.hpp > boost/mpl/aux_/config/lambda.hpp > boost/mpl/aux_/config/msvc.hpp > boost/mpl/aux_/config/nttp.hpp > boost/mpl/aux_/config/overload_resolution.hpp > boost/mpl/aux_/config/preprocessor.hpp > boost/mpl/aux_/config/static_constant.hpp > boost/mpl/aux_/config/ttp.hpp > boost/mpl/aux_/config/workaround.hpp > boost/mpl/aux_/integral_wrapper.hpp > boost/mpl/aux_/lambda_arity_param.hpp > boost/mpl/aux_/lambda_support.hpp > boost/mpl/aux_/na.hpp > boost/mpl/aux_/na_fwd.hpp > boost/mpl/aux_/na_spec.hpp > boost/mpl/aux_/nttp_decl.hpp > boost/mpl/aux_/preprocessor/def_params_tail.hpp > boost/mpl/aux_/preprocessor/enum.hpp > boost/mpl/aux_/preprocessor/filter_params.hpp > boost/mpl/aux_/preprocessor/params.hpp > boost/mpl/aux_/preprocessor/sub.hpp > boost/mpl/aux_/preprocessor/tuple.hpp > boost/mpl/aux_/static_cast.hpp > boost/mpl/aux_/template_arity_fwd.hpp > boost/mpl/aux_/value_wknd.hpp > boost/mpl/aux_/yes_no.hpp > boost/mpl/bool.hpp > boost/mpl/bool_fwd.hpp > boost/mpl/if.hpp > boost/mpl/int.hpp > boost/mpl/int_fwd.hpp > boost/mpl/integral_c.hpp > boost/mpl/integral_c_fwd.hpp > boost/mpl/integral_c_tag.hpp > boost/mpl/lambda_fwd.hpp > boost/mpl/limits/arity.hpp > boost/mpl/size_t.hpp > boost/mpl/size_t_fwd.hpp > boost/mpl/void_fwd.hpp > boost/non_type.hpp > boost/preprocessor/arithmetic/add.hpp > boost/preprocessor/arithmetic/dec.hpp > boost/preprocessor/arithmetic/inc.hpp > boost/preprocessor/arithmetic/sub.hpp > boost/preprocessor/array/data.hpp > boost/preprocessor/array/elem.hpp > boost/preprocessor/array/size.hpp > boost/preprocessor/cat.hpp > boost/preprocessor/comma_if.hpp > boost/preprocessor/config/config.hpp > boost/preprocessor/control/detail/dmc/while.hpp > boost/preprocessor/control/detail/edg/while.hpp > boost/preprocessor/control/detail/msvc/while.hpp > boost/preprocessor/control/detail/while.hpp > boost/preprocessor/control/expr_iif.hpp > boost/preprocessor/control/if.hpp > boost/preprocessor/control/iif.hpp > boost/preprocessor/control/while.hpp > boost/preprocessor/debug/error.hpp > boost/preprocessor/detail/auto_rec.hpp > boost/preprocessor/detail/check.hpp > boost/preprocessor/detail/dmc/auto_rec.hpp > boost/preprocessor/detail/is_binary.hpp > boost/preprocessor/empty.hpp > boost/preprocessor/enum_params.hpp > boost/preprocessor/facilities/empty.hpp > boost/preprocessor/facilities/identity.hpp > boost/preprocessor/identity.hpp > boost/preprocessor/inc.hpp > boost/preprocessor/iterate.hpp > boost/preprocessor/iteration/iterate.hpp > boost/preprocessor/list/adt.hpp > boost/preprocessor/list/append.hpp > boost/preprocessor/list/detail/dmc/fold_left.hpp > boost/preprocessor/list/detail/edg/fold_left.hpp > boost/preprocessor/list/detail/edg/fold_right.hpp > boost/preprocessor/list/detail/fold_left.hpp > boost/preprocessor/list/detail/fold_right.hpp > boost/preprocessor/list/fold_left.hpp > boost/preprocessor/list/fold_right.hpp > boost/preprocessor/list/for_each_i.hpp > boost/preprocessor/list/reverse.hpp > boost/preprocessor/list/transform.hpp > boost/preprocessor/logical/and.hpp > boost/preprocessor/logical/bitand.hpp > boost/preprocessor/logical/bool.hpp > boost/preprocessor/logical/compl.hpp > boost/preprocessor/punctuation/comma.hpp > boost/preprocessor/punctuation/comma_if.hpp > boost/preprocessor/repeat.hpp > boost/preprocessor/repetition/detail/dmc/for.hpp > boost/preprocessor/repetition/detail/edg/for.hpp > boost/preprocessor/repetition/detail/for.hpp > boost/preprocessor/repetition/detail/msvc/for.hpp > boost/preprocessor/repetition/enum_params.hpp > boost/preprocessor/repetition/for.hpp > boost/preprocessor/repetition/repeat.hpp > boost/preprocessor/slot/detail/def.hpp > boost/preprocessor/slot/slot.hpp > boost/preprocessor/tuple/eat.hpp > boost/preprocessor/tuple/elem.hpp > boost/preprocessor/tuple/rem.hpp > boost/preprocessor/tuple/to_list.hpp > boost/shared_ptr.hpp > boost/static_assert.hpp > boost/throw_exception.hpp > boost/type.hpp > boost/type_traits/add_reference.hpp > boost/type_traits/alignment_of.hpp > boost/type_traits/broken_compiler_spec.hpp > boost/type_traits/config.hpp > boost/type_traits/detail/bool_trait_def.hpp > boost/type_traits/detail/bool_trait_undef.hpp > boost/type_traits/detail/cv_traits_impl.hpp > boost/type_traits/detail/false_result.hpp > boost/type_traits/detail/ice_and.hpp > boost/type_traits/detail/ice_eq.hpp > boost/type_traits/detail/ice_not.hpp > boost/type_traits/detail/ice_or.hpp > boost/type_traits/detail/is_function_ptr_helper.hpp > boost/type_traits/detail/is_function_ptr_tester.hpp > boost/type_traits/detail/is_mem_fun_pointer_impl.hpp > boost/type_traits/detail/is_mem_fun_pointer_tester.hpp > boost/type_traits/detail/size_t_trait_def.hpp > boost/type_traits/detail/size_t_trait_undef.hpp > boost/type_traits/detail/template_arity_spec.hpp > boost/type_traits/detail/type_trait_def.hpp > boost/type_traits/detail/type_trait_undef.hpp > boost/type_traits/detail/wrap.hpp > boost/type_traits/detail/yes_no_type.hpp > boost/type_traits/ice.hpp > boost/type_traits/integral_constant.hpp > boost/type_traits/intrinsics.hpp > boost/type_traits/is_abstract.hpp > boost/type_traits/is_arithmetic.hpp > boost/type_traits/is_array.hpp > boost/type_traits/is_class.hpp > boost/type_traits/is_const.hpp > boost/type_traits/is_convertible.hpp > boost/type_traits/is_enum.hpp > boost/type_traits/is_float.hpp > boost/type_traits/is_function.hpp > boost/type_traits/is_integral.hpp > boost/type_traits/is_member_function_pointer.hpp > boost/type_traits/is_member_pointer.hpp > boost/type_traits/is_pod.hpp > boost/type_traits/is_pointer.hpp > boost/type_traits/is_polymorphic.hpp > boost/type_traits/is_reference.hpp > boost/type_traits/is_same.hpp > boost/type_traits/is_scalar.hpp > boost/type_traits/is_union.hpp > boost/type_traits/is_void.hpp > boost/type_traits/is_volatile.hpp > boost/type_traits/msvc/remove_bounds.hpp > boost/type_traits/msvc/remove_cv.hpp > boost/type_traits/msvc/remove_reference.hpp > boost/type_traits/msvc/typeof.hpp > boost/type_traits/remove_bounds.hpp > boost/type_traits/remove_cv.hpp > boost/type_traits/remove_reference.hpp > boost/type_traits/type_with_alignment.hpp > > > > On Wed, Mar 12, 2008 at 1:57 PM, Amitha Perera > > <ami...@us...> wrote: > > > > Matt, > > > > In the interest of getting things rolling *and* you graduating, I think > > it'd be okay to have a manual, semi-automatic, or automatic solution. I > > think the experience in getting that to work on all the platforms will > > tell us a lot about how we can and cannot approach the full generic > > solution. I (and perhaps others) can take it from there. > > > > A clean, default "off" for the feature would make a branch unnecessary. > > Moreover, I think a branch in this case will be counter-productive, > > because we won't be able to use the dashboard to test all the different > > OS/compiler combinations. > > > > If you could also document failures, and outline your thoughts on how it > > should or could be done generically, that'll help when I pick up from > > where you leave off. > > > > Amitha. > > > |