diff --git a/build/filemgr.py b/build/filemgr.py new file mode 100644 index 00000000..fa674f18 --- /dev/null +++ b/build/filemgr.py @@ -0,0 +1,135 @@ +# Revision history: +# 12 Apr 01 use os.path, shutil +# Initial version: R.W. Grosse-Kunstleve + +bpl_src = "/libs/python/src" +bpl_tst = "/libs/python/test" +bpl_exa = "/libs/python/example" +files = ( +bpl_src + "/classes.cpp", +bpl_src + "/conversions.cpp", +bpl_src + "/extension_class.cpp", +bpl_src + "/functions.cpp", +bpl_src + "/init_function.cpp", +bpl_src + "/module_builder.cpp", +bpl_src + "/objects.cpp", +bpl_src + "/types.cpp", +bpl_src + "/cross_module.cpp", +bpl_tst + "/comprehensive.cpp", +bpl_tst + "/comprehensive.hpp", +bpl_tst + "/comprehensive.py", +bpl_tst + "/doctest.py", +bpl_exa + "/abstract.cpp", +bpl_exa + "/getting_started1.cpp", +bpl_exa + "/getting_started2.cpp", +bpl_exa + "/getting_started3.cpp", +bpl_exa + "/simple_vector.cpp", +bpl_exa + "/do_it_yourself_converters.cpp", +bpl_exa + "/pickle1.cpp", +bpl_exa + "/pickle2.cpp", +bpl_exa + "/pickle3.cpp", +bpl_exa + "/test_abstract.py", +bpl_exa + "/test_getting_started1.py", +bpl_exa + "/test_getting_started2.py", +bpl_exa + "/test_getting_started3.py", +bpl_exa + "/test_simple_vector.py", +bpl_exa + "/test_do_it_yourself_converters.py", +bpl_exa + "/test_pickle1.py", +bpl_exa + "/test_pickle2.py", +bpl_exa + "/test_pickle3.py", +bpl_exa + "/noncopyable.h", +bpl_exa + "/noncopyable_export.cpp", +bpl_exa + "/noncopyable_import.cpp", +bpl_exa + "/dvect.h", +bpl_exa + "/dvect.cpp", +bpl_exa + "/dvect_conversions.cpp", +bpl_exa + "/dvect_defs.cpp", +bpl_exa + "/ivect.h", +bpl_exa + "/ivect.cpp", +bpl_exa + "/ivect_conversions.cpp", +bpl_exa + "/ivect_defs.cpp", +bpl_exa + "/tst_noncopyable.py", +bpl_exa + "/tst_dvect1.py", +bpl_exa + "/tst_dvect2.py", +bpl_exa + "/tst_ivect1.py", +bpl_exa + "/tst_ivect2.py", +bpl_exa + "/test_cross_module.py", +) + +defs = ( +"boost_python_test", +"abstract", +"getting_started1", +"getting_started2", +"getting_started3", +"simple_vector", +"do_it_yourself_converters", +"pickle1", +"pickle2", +"pickle3", +"noncopyable_export", +"noncopyable_import", +"ivect", +"dvect", +) + +if (__name__ == "__main__"): + + import sys, os, shutil + + path = sys.argv[1] + mode = sys.argv[2] + if (not mode in ("softlinks", "unlink", "cp", "rm", "copy", "del")): + raise RuntimeError, \ + "usage: python filemgr.py path " + + if (mode in ("cp", "copy")): + for fn in files: + f = os.path.basename(fn) + print "Copying: " + f + shutil.copy(path + fn, ".") + + elif (mode == "softlinks"): + for fn in files: + f = os.path.basename(fn) + if (os.path.exists(f)): + print "File exists: " + f + else: + print "Linking: " + f + os.symlink(path + fn, f) + + elif (mode in ("rm", "del")): + for fn in files: + f = os.path.basename(fn) + if (os.path.exists(f)): + print "Removing: " + f + try: os.unlink(f) + except: pass + + elif (mode == "unlink"): + for fn in files: + f = os.path.basename(fn) + if (os.path.exists(f)): + if (os.path.islink(f)): + print "Unlinking: " + f + try: os.unlink(f) + except: pass + else: + print "Not a softlink: " + f + + if (mode in ("softlinks", "cp", "copy")): + for d in defs: + fn = d + ".def" + print "Creating: " + fn + f = open(fn, "w") + f.write("EXPORTS\n") + f.write("\tinit" + d + "\n") + f.close() + + if (mode in ("unlink", "rm", "del")): + for d in defs: + fn = d + ".def" + if (os.path.exists(fn)): + print "Removing: " + fn + try: os.unlink(fn) + except: pass diff --git a/build/irix_CC.mak b/build/irix_CC.mak new file mode 100644 index 00000000..88d374d8 --- /dev/null +++ b/build/irix_CC.mak @@ -0,0 +1,165 @@ +# Usage: +# +# Create a new empty directory anywhere (preferably not in the boost tree). +# Copy this Makefile to that new directory and rename it to "Makefile" +# Adjust the pathnames below. +# +# make softlinks Create softlinks to source code and tests +# make Compile all sources +# make test Run doctest tests +# make clean Remove all object files +# make unlink Remove softlinks +# +# Revision history: +# 12 Apr 01 new macro ROOT to simplify configuration (R.W. Grosse-Kunstleve) +# Initial version: R.W. Grosse-Kunstleve + +ROOT=$(HOME) +BOOST=$(ROOT)/boost + +PYEXE=/usr/local/Python-1.5.2/bin/python +PYINC=-I/usr/local/Python-1.5.2/include/python1.5 +#PYEXE=/usr/local/Python-2.0/bin/python +#PYINC=-I/usr/local/Python-2.0/include/python2.0 +STLPORTINC=-I$(BOOST)/boost/compatibility/cpp_c_headers + +STDOPTS= +WARNOPTS=-woff 1001,1234,1682 +OPTOPTS=-g + +CPP=CC -LANG:std -n32 -mips4 +CPPOPTS=$(STLPORTINC) $(STLPORTOPTS) -I$(BOOST) $(PYINC) \ + $(STDOPTS) $(WARNOPTS) $(OPTOPTS) +MAKEDEP=-M + +LD=CC -LANG:std -n32 -mips4 +LDOPTS=-shared + +OBJ=classes.o conversions.o extension_class.o functions.o \ + init_function.o module_builder.o \ + objects.o types.o cross_module.o +DEPOBJ=$(OBJ) \ + comprehensive.o \ + abstract.o \ + getting_started1.o getting_started2.o getting_started3.o \ + simple_vector.o \ + do_it_yourself_converters.o \ + pickle1.o pickle2.o pickle3.o \ + noncopyable_export.o noncopyable_import.o \ + ivect.o dvect.o + +.SUFFIXES: .o .cpp + +all: libboost_python.a \ + boost_python_test.so \ + abstract.so \ + getting_started1.so getting_started2.so getting_started3.so \ + simple_vector.so \ + do_it_yourself_converters.so \ + pickle1.so pickle2.so pickle3.so \ + noncopyable_export.so noncopyable_import.so \ + ivect.so dvect.so + +libboost_python.a: $(OBJ) + rm -f libboost_python.a + $(CPP) -ar -o libboost_python.a $(OBJ) + +boost_python_test.so: $(OBJ) comprehensive.o + $(LD) $(LDOPTS) $(OBJ) comprehensive.o -o boost_python_test.so -lm + +abstract.so: $(OBJ) abstract.o + $(LD) $(LDOPTS) $(OBJ) abstract.o -o abstract.so + +getting_started1.so: $(OBJ) getting_started1.o + $(LD) $(LDOPTS) $(OBJ) getting_started1.o -o getting_started1.so + +getting_started2.so: $(OBJ) getting_started2.o + $(LD) $(LDOPTS) $(OBJ) getting_started2.o -o getting_started2.so + +getting_started3.so: $(OBJ) getting_started3.o + $(LD) $(LDOPTS) $(OBJ) getting_started3.o -o getting_started3.so + +simple_vector.so: $(OBJ) simple_vector.o + $(LD) $(LDOPTS) $(OBJ) simple_vector.o -o simple_vector.so + +do_it_yourself_converters.so: $(OBJ) do_it_yourself_converters.o + $(LD) $(LDOPTS) $(OBJ) do_it_yourself_converters.o -o do_it_yourself_converters.so + +pickle1.so: $(OBJ) pickle1.o + $(LD) $(LDOPTS) $(OBJ) pickle1.o -o pickle1.so + +pickle2.so: $(OBJ) pickle2.o + $(LD) $(LDOPTS) $(OBJ) pickle2.o -o pickle2.so + +pickle3.so: $(OBJ) pickle3.o + $(LD) $(LDOPTS) $(OBJ) pickle3.o -o pickle3.so + +noncopyable_export.so: $(OBJ) noncopyable_export.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \ + noncopyable_export.o -o noncopyable_export.so + +noncopyable_import.so: $(OBJ) noncopyable_import.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \ + noncopyable_import.o -o noncopyable_import.so + +ivect.so: $(OBJ) ivect.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) ivect.o -o ivect.so + +dvect.so: $(OBJ) dvect.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) dvect.o -o dvect.so + +.cpp.o: + $(CPP) $(CPPOPTS) -c $*.cpp + +test: + $(PYEXE) comprehensive.py + $(PYEXE) test_abstract.py + $(PYEXE) test_getting_started1.py + $(PYEXE) test_getting_started2.py + $(PYEXE) test_getting_started3.py + $(PYEXE) test_simple_vector.py + $(PYEXE) test_do_it_yourself_converters.py + $(PYEXE) test_pickle1.py + $(PYEXE) test_pickle2.py + $(PYEXE) test_pickle3.py + $(PYEXE) test_cross_module.py + +clean: + rm -f $(OBJ) libboost_python.a libboost_python.a.input + rm -f comprehensive.o boost_python_test.so + rm -f abstract.o abstract.so + rm -f getting_started1.o getting_started1.so + rm -f getting_started2.o getting_started2.so + rm -f getting_started3.o getting_started3.so + rm -f simple_vector.o simple_vector.so + rm -f do_it_yourself_converters.o do_it_yourself_converters.so + rm -f pickle1.o pickle1.so + rm -f pickle2.o pickle2.so + rm -f pickle3.o pickle3.so + rm -f noncopyable_export.o noncopyable_export.so + rm -f noncopyable_import.o noncopyable_import.so + rm -f ivect.o ivect.so + rm -f dvect.o dvect.so + rm -f so_locations *.pyc + rm -rf ii_files + +softlinks: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) softlinks + +unlink: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) unlink + +cp: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) cp + +rm: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) rm + +depend: + @ cat Makefile.nodepend; \ + for obj in $(DEPOBJ); \ + do \ + bn=`echo "$$obj" | cut -d. -f1`; \ + $(CPP) $(CPPOPTS) $(MAKEDEP) "$$bn".cpp; \ + done + diff --git a/build/linux_gcc.mak b/build/linux_gcc.mak index a07bb5da..9be8f1cb 100644 --- a/build/linux_gcc.mak +++ b/build/linux_gcc.mak @@ -2,110 +2,64 @@ # # Create a new empty directory anywhere (preferably not in the boost tree). # Copy this Makefile to that new directory and rename it to "Makefile" -# Set the BOOST pathname below. +# Adjust the pathnames below. # # make softlinks Create softlinks to source code and tests # make Compile all sources # make test Run doctest tests # make clean Remove all object files # make unlink Remove softlinks +# +# Revision history: +# 12 Apr 01 new macro ROOT to simplify configuration (R.W. Grosse-Kunstleve) +# Initial version: R.W. Grosse-Kunstleve -BOOST= /net/cci/rwgk/boost +ROOT=$(HOME) +BOOST=$(ROOT)/boost -PYEXE= /usr/local/Python-1.5.2/bin/python -PYINC= -I/usr/local/Python-1.5.2/include/python1.5 -#PYEXE= /usr/local/Python-2.0/bin/python -#PYINC= -I/usr/local/Python-2.0/include/python2.0 -#STLPORTINC= -I/usr/local/STLport-4.1b3/stlport -#STLPORTOPTS= \ -# -D__USE_STD_IOSTREAM \ -# -D__STL_NO_SGI_IOSTREAMS \ -# -D__STL_USE_NATIVE_STRING \ -# -D__STL_NO_NEW_C_HEADERS \ -# -D_RWSTD_COMPILE_INSTANTIATE=1 -#STLPORTINC= -I/usr/local/STLport-4.1b4/stlport -#STLPORTOPTS= -D__NO_USE_STD_IOSTREAM -D__STL_NO_SGI_IOSTREAMS -#STLPORTINC= -I/net/cci/xp/C++_C_headers +PYEXE=/usr/bin/python +PYINC=-I/usr/include/python1.5 +#PYEXE=/usr/local/Python-1.5.2/bin/python +#PYINC=-I/usr/local/Python-1.5.2/include/python1.5 +#PYEXE=/usr/local/Python-2.0/bin/python +#PYINC=-I/usr/local/Python-2.0/include/python2.0 -STDOPTS= -ftemplate-depth-21 +STDOPTS=-ftemplate-depth-21 WARNOPTS= -# use -msg_display_number to obtain integer tags for -msg_disable +OPTOPTS=-g -CPP= g++ -CPPOPTS= $(STLPORTINC) $(STLPORTOPTS) -I$(BOOST) $(PYINC) \ - $(STDOPTS) $(WARNOPTS) -g -MAKEDEP= -M +CPP=g++ +CPPOPTS=$(STLPORTINC) $(STLPORTOPTS) -I$(BOOST) $(PYINC) \ + $(STDOPTS) $(WARNOPTS) $(OPTOPTS) +MAKEDEP=-M -LD= g++ -LDOPTS= -shared +LD=g++ +LDOPTS=-shared -#HIDDEN= -hidden - -BPL_SRC = $(BOOST)/libs/python/src -BPL_TST = $(BOOST)/libs/python/test -BPL_EXA = $(BOOST)/libs/python/example -SOFTLINKS = \ -$(BPL_SRC)/classes.cpp \ -$(BPL_SRC)/conversions.cpp \ -$(BPL_SRC)/extension_class.cpp \ -$(BPL_SRC)/functions.cpp \ -$(BPL_SRC)/init_function.cpp \ -$(BPL_SRC)/module_builder.cpp \ -$(BPL_SRC)/objects.cpp \ -$(BPL_SRC)/types.cpp \ -$(BPL_TST)/comprehensive.cpp \ -$(BPL_TST)/comprehensive.hpp \ -$(BPL_TST)/comprehensive.py \ -$(BPL_TST)/doctest.py \ -$(BPL_EXA)/abstract.cpp \ -$(BPL_EXA)/getting_started1.cpp \ -$(BPL_EXA)/getting_started2.cpp \ -$(BPL_EXA)/getting_started3.cpp \ -$(BPL_EXA)/getting_started4.cpp \ -$(BPL_EXA)/getting_started5.cpp \ -$(BPL_EXA)/test_abstract.py \ -$(BPL_EXA)/test_getting_started1.py \ -$(BPL_EXA)/test_getting_started2.py \ -$(BPL_EXA)/test_getting_started3.py \ -$(BPL_EXA)/test_getting_started4.py \ -$(BPL_EXA)/test_getting_started5.py - -OBJ = classes.o conversions.o extension_class.o functions.o \ - init_function.o module_builder.o \ - objects.o types.o -DEPOBJ= $(OBJ) comprehensive.o abstract.o \ - getting_started1.o getting_started2.o getting_started3.o \ - getting_started4.o getting_started5.o +OBJ=classes.o conversions.o extension_class.o functions.o \ + init_function.o module_builder.o \ + objects.o types.o cross_module.o +DEPOBJ=$(OBJ) \ + comprehensive.o \ + abstract.o \ + getting_started1.o getting_started2.o getting_started3.o \ + simple_vector.o \ + do_it_yourself_converters.o \ + pickle1.o pickle2.o pickle3.o \ + noncopyable_export.o noncopyable_import.o \ + ivect.o dvect.o .SUFFIXES: .o .cpp -all: libboost_python.a boost_python_test.so abstract.so \ +all: libboost_python.a \ + boost_python_test.so \ + abstract.so \ getting_started1.so getting_started2.so getting_started3.so \ - getting_started4.so getting_started5.so - -softlinks: - @ for pn in $(SOFTLINKS); \ - do \ - bn=`basename "$$pn"`; \ - if [ ! -e "$$bn" ]; then \ - echo "ln -s $$pn ."; \ - ln -s "$$pn" .; \ - else \ - echo "info: no softlink created (file exists): $$bn"; \ - fi; \ - done - -unlink: - @ for pn in $(SOFTLINKS); \ - do \ - bn=`basename "$$pn"`; \ - if [ -L "$$bn" ]; then \ - echo "rm $$bn"; \ - rm "$$bn"; \ - elif [ -e "$$bn" ]; then \ - echo "info: not a softlink: $$bn"; \ - fi; \ - done + simple_vector.so \ + do_it_yourself_converters.so \ + pickle1.so pickle2.so pickle3.so \ + noncopyable_export.so noncopyable_import.so \ + ivect.so dvect.so libboost_python.a: $(OBJ) rm -f libboost_python.a @@ -126,11 +80,34 @@ getting_started2.so: $(OBJ) getting_started2.o getting_started3.so: $(OBJ) getting_started3.o $(LD) $(LDOPTS) $(OBJ) getting_started3.o -o getting_started3.so -getting_started4.so: $(OBJ) getting_started4.o - $(LD) $(LDOPTS) $(OBJ) getting_started4.o -o getting_started4.so +simple_vector.so: $(OBJ) simple_vector.o + $(LD) $(LDOPTS) $(OBJ) simple_vector.o -o simple_vector.so -getting_started5.so: $(OBJ) getting_started5.o - $(LD) $(LDOPTS) $(OBJ) getting_started5.o -o getting_started5.so +do_it_yourself_converters.so: $(OBJ) do_it_yourself_converters.o + $(LD) $(LDOPTS) $(OBJ) do_it_yourself_converters.o -o do_it_yourself_converters.so + +pickle1.so: $(OBJ) pickle1.o + $(LD) $(LDOPTS) $(OBJ) pickle1.o -o pickle1.so + +pickle2.so: $(OBJ) pickle2.o + $(LD) $(LDOPTS) $(OBJ) pickle2.o -o pickle2.so + +pickle3.so: $(OBJ) pickle3.o + $(LD) $(LDOPTS) $(OBJ) pickle3.o -o pickle3.so + +noncopyable_export.so: $(OBJ) noncopyable_export.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \ + noncopyable_export.o -o noncopyable_export.so + +noncopyable_import.so: $(OBJ) noncopyable_import.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \ + noncopyable_import.o -o noncopyable_import.so + +ivect.so: $(OBJ) ivect.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) ivect.o -o ivect.so + +dvect.so: $(OBJ) dvect.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) dvect.o -o dvect.so .cpp.o: $(CPP) $(CPPOPTS) -c $*.cpp @@ -141,8 +118,12 @@ test: $(PYEXE) test_getting_started1.py $(PYEXE) test_getting_started2.py $(PYEXE) test_getting_started3.py - $(PYEXE) test_getting_started4.py - $(PYEXE) test_getting_started5.py + $(PYEXE) test_simple_vector.py + $(PYEXE) test_do_it_yourself_converters.py + $(PYEXE) test_pickle1.py + $(PYEXE) test_pickle2.py + $(PYEXE) test_pickle3.py + $(PYEXE) test_cross_module.py clean: rm -f $(OBJ) libboost_python.a libboost_python.a.input @@ -151,10 +132,28 @@ clean: rm -f getting_started1.o getting_started1.so rm -f getting_started2.o getting_started2.so rm -f getting_started3.o getting_started3.so - rm -f getting_started4.o getting_started4.so - rm -f getting_started5.o getting_started5.so + rm -f simple_vector.o simple_vector.so + rm -f do_it_yourself_converters.o do_it_yourself_converters.so + rm -f pickle1.o pickle1.so + rm -f pickle2.o pickle2.so + rm -f pickle3.o pickle3.so + rm -f noncopyable_export.o noncopyable_export.so + rm -f noncopyable_import.o noncopyable_import.so + rm -f ivect.o ivect.so + rm -f dvect.o dvect.so rm -f so_locations *.pyc - rm -rf cxx_repository + +softlinks: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) softlinks + +unlink: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) unlink + +cp: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) cp + +rm: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) rm depend: @ cat Makefile.nodepend; \ diff --git a/build/mingw32.mak b/build/mingw32.mak index 014af132..98a26735 100644 --- a/build/mingw32.mak +++ b/build/mingw32.mak @@ -1,18 +1,14 @@ # Usage: # -# Create a new empty directory anywhere (preferably not in the boost tree). -# Copy this Makefile to that new directory and rename it to "Makefile" -# Set the BOOST_* pathnames below. +# make copy Copy the sources and tests +# make Compile all sources +# make test Run doctest tests +# make clean Remove all object files +# make del Remove the sources and tests # -# The idea is that the build directory is on a Unix filesystem that -# is mounted on a PC using SAMBA. Use this makefile under both Unix -# and Windows: -# -# Unix: make softlinks Create softlinks to source code and tests -# Win: make Compile all sources -# Win: make test Run doctest tests -# Unix: make clean Remove all object files -# Unix: make unlink Remove softlinks +# Revision history: +# 12 Apr 01 new macro ROOT to simplify configuration (R.W. Grosse-Kunstleve) +# Initial version: R.W. Grosse-Kunstleve # To install mingw32, follow instructions at: # http://starship.python.net/crew/kernr/mingw32/Notes.html @@ -31,117 +27,49 @@ # Could this be fixed with compiler options? # -fhuge-objects looks interesting, but requires recompiling the C++ library. # (what exactly does that mean?) -# -fvtable-thunks eliminates the compiler warning, -# but "import boost_python_test" still causes a crash. +# -fvtable-thunks eliminates the compiler warning, but +# "import boost_python_test" still causes a crash. -BOOST_UNIX= /net/cci/rwgk/boost -BOOST_WIN= "L:\boost" +ROOT=L: +BOOST_WIN="$(ROOT)\boost" +BOOST_UNIX=$(HOME)/boost -PYEXE= "C:\Program files\Python\python.exe" -PYINC= -I"C:\usr\include\python1.5" -PYLIB= "C:\usr\lib\libpython15.a" +PYEXE="C:\Program files\Python\python.exe" +PYINC=-I"C:\usr\include\python1.5" +PYLIB="C:\usr\lib\libpython15.a" -STDOPTS= -ftemplate-depth-21 +STDOPTS=-ftemplate-depth-21 WARNOPTS= +OPTOPTS=-g -CPP= g++ -CPPOPTS= $(STLPORTINC) $(STLPORTOPTS) -I$(BOOST_WIN) $(PYINC) \ - $(STDOPTS) $(WARNOPTS) -g +CPP=g++ +CPPOPTS=$(STLPORTINC) $(STLPORTOPTS) -I$(BOOST_WIN) $(PYINC) \ + $(STDOPTS) $(WARNOPTS) $(OPTOPTS) -LD= g++ -LDOPTS= -shared +LD=g++ +LDOPTS=-shared -BPL_SRC = $(BOOST_UNIX)/libs/python/src -BPL_TST = $(BOOST_UNIX)/libs/python/test -BPL_EXA = $(BOOST_UNIX)/libs/python/example -SOFTLINKS = \ -$(BPL_SRC)/classes.cpp \ -$(BPL_SRC)/conversions.cpp \ -$(BPL_SRC)/extension_class.cpp \ -$(BPL_SRC)/functions.cpp \ -$(BPL_SRC)/init_function.cpp \ -$(BPL_SRC)/module_builder.cpp \ -$(BPL_SRC)/objects.cpp \ -$(BPL_SRC)/types.cpp \ -$(BPL_TST)/comprehensive.cpp \ -$(BPL_TST)/comprehensive.hpp \ -$(BPL_TST)/comprehensive.py \ -$(BPL_TST)/doctest.py \ -$(BPL_EXA)/abstract.cpp \ -$(BPL_EXA)/getting_started1.cpp \ -$(BPL_EXA)/getting_started2.cpp \ -$(BPL_EXA)/getting_started3.cpp \ -$(BPL_EXA)/getting_started4.cpp \ -$(BPL_EXA)/getting_started5.cpp \ -$(BPL_EXA)/passing_char.cpp \ -$(BPL_EXA)/test_abstract.py \ -$(BPL_EXA)/test_getting_started1.py \ -$(BPL_EXA)/test_getting_started2.py \ -$(BPL_EXA)/test_getting_started3.py \ -$(BPL_EXA)/test_getting_started4.py \ -$(BPL_EXA)/test_getting_started5.py - -DEFS= \ -boost_python_test \ -abstract \ -getting_started1 \ -getting_started2 \ -getting_started3 \ -getting_started4 \ -getting_started5 - -OBJ = classes.o conversions.o extension_class.o functions.o \ - init_function.o module_builder.o \ - objects.o types.o +OBJ=classes.o conversions.o extension_class.o functions.o \ + init_function.o module_builder.o \ + objects.o types.o cross_module.o .SUFFIXES: .o .cpp -all: libboost_python.a boost_python_test.pyd abstract.pyd \ +all: libboost_python.a \ + abstract.pyd \ getting_started1.pyd getting_started2.pyd getting_started3.pyd \ - getting_started4.pyd getting_started5.pyd - -softlinks: defs - @ for pn in $(SOFTLINKS); \ - do \ - bn=`basename "$$pn"`; \ - if [ ! -e "$$bn" ]; then \ - echo "ln -s $$pn ."; \ - ln -s "$$pn" .; \ - else \ - echo "info: no softlink created (file exists): $$bn"; \ - fi; \ - done - -unlink: rmdefs - @ for pn in $(SOFTLINKS); \ - do \ - bn=`basename "$$pn"`; \ - if [ -L "$$bn" ]; then \ - echo "rm $$bn"; \ - rm "$$bn"; \ - elif [ -e "$$bn" ]; then \ - echo "info: not a softlink: $$bn"; \ - fi; \ - done - -defs: - @ for def in $(DEFS); \ - do \ - echo "EXPORTS\n\tinit$$def" > $$def.def; \ - done - -rmdefs: - @ for def in $(DEFS); \ - do \ - rm $$def.def; \ - done + simple_vector.pyd \ + do_it_yourself_converters.pyd \ + pickle1.pyd pickle2.pyd pickle3.pyd \ + noncopyable_export.pyd noncopyable_import.pyd \ + ivect.pyd dvect.pyd libboost_python.a: $(OBJ) del libboost_python.a ar r libboost_python.a $(OBJ) -DLLWRAPOPTS= -s --driver-name g++ -s - --entry _DllMainCRTStartup@12 --target=i386-mingw32 +DLLWRAPOPTS=-s --driver-name g++ -s \ + --entry _DllMainCRTStartup@12 --target=i386-mingw32 boost_python_test.pyd: $(OBJ) comprehensive.o dllwrap $(DLLWRAPOPTS) \ @@ -173,38 +101,96 @@ getting_started3.pyd: $(OBJ) getting_started3.o --def getting_started3.def \ $(OBJ) getting_started3.o $(PYLIB) -getting_started4.pyd: $(OBJ) getting_started4.o +simple_vector.pyd: $(OBJ) simple_vector.o dllwrap $(DLLWRAPOPTS) \ - --dllname getting_started4.pyd \ - --def getting_started4.def \ - $(OBJ) getting_started4.o $(PYLIB) + --dllname simple_vector.pyd \ + --def simple_vector.def \ + $(OBJ) simple_vector.o $(PYLIB) -getting_started5.pyd: $(OBJ) getting_started5.o +do_it_yourself_converters.pyd: $(OBJ) do_it_yourself_converters.o dllwrap $(DLLWRAPOPTS) \ - --dllname getting_started5.pyd \ - --def getting_started5.def \ - $(OBJ) getting_started5.o $(PYLIB) + --dllname do_it_yourself_converters.pyd \ + --def do_it_yourself_converters.def \ + $(OBJ) do_it_yourself_converters.o $(PYLIB) + +pickle1.pyd: $(OBJ) pickle1.o + dllwrap $(DLLWRAPOPTS) \ + --dllname pickle1.pyd \ + --def pickle1.def \ + $(OBJ) pickle1.o $(PYLIB) + +pickle2.pyd: $(OBJ) pickle2.o + dllwrap $(DLLWRAPOPTS) \ + --dllname pickle2.pyd \ + --def pickle2.def \ + $(OBJ) pickle2.o $(PYLIB) + +pickle3.pyd: $(OBJ) pickle3.o + dllwrap $(DLLWRAPOPTS) \ + --dllname pickle3.pyd \ + --def pickle3.def \ + $(OBJ) pickle3.o $(PYLIB) + +noncopyable_export.pyd: $(OBJ) noncopyable_export.o + dllwrap $(DLLWRAPOPTS) \ + --dllname noncopyable_export.pyd \ + --def noncopyable_export.def \ + $(OBJ) noncopyable_export.o $(PYLIB) + +noncopyable_import.pyd: $(OBJ) noncopyable_import.o + dllwrap $(DLLWRAPOPTS) \ + --dllname noncopyable_import.pyd \ + --def noncopyable_import.def \ + $(OBJ) noncopyable_import.o $(PYLIB) + +ivect.pyd: $(OBJ) ivect.o + dllwrap $(DLLWRAPOPTS) \ + --dllname ivect.pyd \ + --def ivect.def \ + $(OBJ) ivect.o $(PYLIB) + +dvect.pyd: $(OBJ) dvect.o + dllwrap $(DLLWRAPOPTS) \ + --dllname dvect.pyd \ + --def dvect.def \ + $(OBJ) dvect.o $(PYLIB) .cpp.o: $(CPP) $(CPPOPTS) -c $*.cpp test: - $(PYEXE) comprehensive.py +# $(PYEXE) comprehensive.py $(PYEXE) test_abstract.py $(PYEXE) test_getting_started1.py $(PYEXE) test_getting_started2.py $(PYEXE) test_getting_started3.py - $(PYEXE) test_getting_started4.py - $(PYEXE) test_getting_started5.py + $(PYEXE) test_simple_vector.py + $(PYEXE) test_do_it_yourself_converters.py + $(PYEXE) test_pickle1.py + $(PYEXE) test_pickle2.py + $(PYEXE) test_pickle3.py + $(PYEXE) test_cross_module.py clean: - rm -f $(OBJ) libboost_python.a libboost_python.a.input - rm -f comprehensive.o boost_python_test.pyd - rm -f abstract.o abstract.pyd - rm -f getting_started1.o getting_started1.pyd - rm -f getting_started2.o getting_started2.pyd - rm -f getting_started3.o getting_started3.pyd - rm -f getting_started4.o getting_started4.pyd - rm -f getting_started5.o getting_started5.pyd - rm -f so_locations *.pyc - rm -rf cxx_repository + del *.o + del *.a + del *.pyd + del *.pyc + +softlinks: + python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) softlinks + +unlink: + python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) unlink + +cp: + python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) cp + +rm: + python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) rm + +copy: + $(PYEXE) $(BOOST_WIN)\libs\python\build\filemgr.py $(BOOST_WIN) copy + +del: + $(PYEXE) $(BOOST_WIN)\libs\python\build\filemgr.py $(BOOST_WIN) del diff --git a/build/tru64_cxx.mak b/build/tru64_cxx.mak index 3fd584b7..41f7a554 100644 --- a/build/tru64_cxx.mak +++ b/build/tru64_cxx.mak @@ -2,110 +2,74 @@ # # Create a new empty directory anywhere (preferably not in the boost tree). # Copy this Makefile to that new directory and rename it to "Makefile" -# Set the BOOST pathname below. +# Adjust the pathnames below. # # make softlinks Create softlinks to source code and tests # make Compile all sources # make test Run doctest tests # make clean Remove all object files # make unlink Remove softlinks +# +# Revision history: +# 12 Apr 01 new macro ROOT to simplify configuration (R.W. Grosse-Kunstleve) +# Initial version: R.W. Grosse-Kunstleve -BOOST= /net/cci/rwgk/boost +ROOT=$(HOME) +BOOST=$(ROOT)/boost -PYEXE= /usr/local/Python-1.5.2/bin/python -PYINC= -I/usr/local/Python-1.5.2/include/python1.5 -#PYEXE= /usr/local/Python-2.0/bin/python -#PYINC= -I/usr/local/Python-2.0/include/python2.0 -#STLPORTINC= -I/usr/local/STLport-4.1b3/stlport +PYEXE=/usr/local/Python-1.5.2/bin/python +PYINC=-I/usr/local/Python-1.5.2/include/python1.5 +#PYEXE=/usr/local/Python-2.0/bin/python +#PYINC=-I/usr/local/Python-2.0/include/python2.0 +#STLPORTINC=-I/usr/local/STLport-4.1b3/stlport +#STLPORTINC=-I/usr/local/STLport-4.1b4/stlport #STLPORTOPTS= \ # -D__USE_STD_IOSTREAM \ # -D__STL_NO_SGI_IOSTREAMS \ # -D__STL_USE_NATIVE_STRING \ # -D__STL_NO_NEW_C_HEADERS \ # -D_RWSTD_COMPILE_INSTANTIATE=1 -#STLPORTINC= -I/usr/local/STLport-4.1b4/stlport -#STLPORTOPTS= -D__NO_USE_STD_IOSTREAM -D__STL_NO_SGI_IOSTREAMS -STLPORTINC= -I/net/cci/xp/C++_C_headers +STLPORTINC=-I$(BOOST)/boost/compatibility/cpp_c_headers -STDOPTS= -std strict_ansi -WARNOPTS= -msg_disable 186,450,1115 +STDOPTS=-std strict_ansi # use -msg_display_number to obtain integer tags for -msg_disable +WARNOPTS=-msg_disable 186,450,1115 +OPTOPTS=-g -CPP= cxx -CPPOPTS= $(STLPORTINC) $(STLPORTOPTS) -I$(BOOST) $(PYINC) \ - $(STDOPTS) $(WARNOPTS) -g -MAKEDEP= -Em +CPP=cxx +CPPOPTS=$(STLPORTINC) $(STLPORTOPTS) -I$(BOOST) $(PYINC) \ + $(STDOPTS) $(WARNOPTS) $(OPTOPTS) +MAKEDEP=-Em -LD= cxx -LDOPTS= -shared -expect_unresolved 'Py*' -expect_unresolved '_Py*' +LD=cxx +LDOPTS=-shared -expect_unresolved 'Py*' -expect_unresolved '_Py*' -#HIDDEN= -hidden +#HIDDEN=-hidden -BPL_SRC = $(BOOST)/libs/python/src -BPL_TST = $(BOOST)/libs/python/test -BPL_EXA = $(BOOST)/libs/python/example -SOFTLINKS = \ -$(BPL_SRC)/classes.cpp \ -$(BPL_SRC)/conversions.cpp \ -$(BPL_SRC)/extension_class.cpp \ -$(BPL_SRC)/functions.cpp \ -$(BPL_SRC)/init_function.cpp \ -$(BPL_SRC)/module_builder.cpp \ -$(BPL_SRC)/objects.cpp \ -$(BPL_SRC)/types.cpp \ -$(BPL_TST)/comprehensive.cpp \ -$(BPL_TST)/comprehensive.hpp \ -$(BPL_TST)/comprehensive.py \ -$(BPL_TST)/doctest.py \ -$(BPL_EXA)/abstract.cpp \ -$(BPL_EXA)/getting_started1.cpp \ -$(BPL_EXA)/getting_started2.cpp \ -$(BPL_EXA)/getting_started3.cpp \ -$(BPL_EXA)/getting_started4.cpp \ -$(BPL_EXA)/getting_started5.cpp \ -$(BPL_EXA)/test_abstract.py \ -$(BPL_EXA)/test_getting_started1.py \ -$(BPL_EXA)/test_getting_started2.py \ -$(BPL_EXA)/test_getting_started3.py \ -$(BPL_EXA)/test_getting_started4.py \ -$(BPL_EXA)/test_getting_started5.py - -OBJ = classes.o conversions.o extension_class.o functions.o \ - init_function.o module_builder.o \ - objects.o types.o -DEPOBJ= $(OBJ) comprehensive.o abstract.o \ - getting_started1.o getting_started2.o getting_started3.o \ - getting_started4.o getting_started5.o +OBJ=classes.o conversions.o extension_class.o functions.o \ + init_function.o module_builder.o \ + objects.o types.o cross_module.o +DEPOBJ=$(OBJ) \ + comprehensive.o \ + abstract.o \ + getting_started1.o getting_started2.o getting_started3.o \ + simple_vector.o \ + do_it_yourself_converters.o \ + pickle1.o pickle2.o pickle3.o \ + noncopyable_export.o noncopyable_import.o \ + ivect.o dvect.o .SUFFIXES: .o .cpp -all: libboost_python.a boost_python_test.so abstract.so \ +all: libboost_python.a \ + boost_python_test.so \ + abstract.so \ getting_started1.so getting_started2.so getting_started3.so \ - getting_started4.so getting_started5.so - -softlinks: - @ for pn in $(SOFTLINKS); \ - do \ - bn=`basename "$$pn"`; \ - if [ ! -e "$$bn" ]; then \ - echo "ln -s $$pn ."; \ - ln -s "$$pn" .; \ - else \ - echo "info: no softlink created (file exists): $$bn"; \ - fi; \ - done - -unlink: - @ for pn in $(SOFTLINKS); \ - do \ - bn=`basename "$$pn"`; \ - if [ -L "$$bn" ]; then \ - echo "rm $$bn"; \ - rm "$$bn"; \ - elif [ -e "$$bn" ]; then \ - echo "info: not a softlink: $$bn"; \ - fi; \ - done + simple_vector.so \ + do_it_yourself_converters.so \ + pickle1.so pickle2.so pickle3.so \ + noncopyable_export.so noncopyable_import.so \ + ivect.so dvect.so libboost_python.a: $(OBJ) rm -f libboost_python.a @@ -130,11 +94,34 @@ getting_started2.so: $(OBJ) getting_started2.o getting_started3.so: $(OBJ) getting_started3.o $(LD) $(LDOPTS) $(OBJ) getting_started3.o -o getting_started3.so -getting_started4.so: $(OBJ) getting_started4.o - $(LD) $(LDOPTS) $(OBJ) getting_started4.o -o getting_started4.so +simple_vector.so: $(OBJ) simple_vector.o + $(LD) $(LDOPTS) $(OBJ) simple_vector.o -o simple_vector.so -getting_started5.so: $(OBJ) getting_started5.o - $(LD) $(LDOPTS) $(OBJ) getting_started5.o -o getting_started5.so +do_it_yourself_converters.so: $(OBJ) do_it_yourself_converters.o + $(LD) $(LDOPTS) $(OBJ) do_it_yourself_converters.o -o do_it_yourself_converters.so + +pickle1.so: $(OBJ) pickle1.o + $(LD) $(LDOPTS) $(OBJ) pickle1.o -o pickle1.so + +pickle2.so: $(OBJ) pickle2.o + $(LD) $(LDOPTS) $(OBJ) pickle2.o -o pickle2.so + +pickle3.so: $(OBJ) pickle3.o + $(LD) $(LDOPTS) $(OBJ) pickle3.o -o pickle3.so + +noncopyable_export.so: $(OBJ) noncopyable_export.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \ + noncopyable_export.o -o noncopyable_export.so + +noncopyable_import.so: $(OBJ) noncopyable_import.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \ + noncopyable_import.o -o noncopyable_import.so + +ivect.so: $(OBJ) ivect.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) ivect.o -o ivect.so + +dvect.so: $(OBJ) dvect.o + $(LD) $(LDOPTS) $(OBJ) $(HIDDEN) dvect.o -o dvect.so .cpp.o: $(CPP) $(CPPOPTS) -c $*.cpp @@ -145,8 +132,12 @@ test: $(PYEXE) test_getting_started1.py $(PYEXE) test_getting_started2.py $(PYEXE) test_getting_started3.py - $(PYEXE) test_getting_started4.py - $(PYEXE) test_getting_started5.py + $(PYEXE) test_simple_vector.py + $(PYEXE) test_do_it_yourself_converters.py + $(PYEXE) test_pickle1.py + $(PYEXE) test_pickle2.py + $(PYEXE) test_pickle3.py + $(PYEXE) test_cross_module.py clean: rm -f $(OBJ) libboost_python.a libboost_python.a.input @@ -155,11 +146,30 @@ clean: rm -f getting_started1.o getting_started1.so rm -f getting_started2.o getting_started2.so rm -f getting_started3.o getting_started3.so - rm -f getting_started4.o getting_started4.so - rm -f getting_started5.o getting_started5.so + rm -f simple_vector.o simple_vector.so + rm -f do_it_yourself_converters.o do_it_yourself_converters.so + rm -f pickle1.o pickle1.so + rm -f pickle2.o pickle2.so + rm -f pickle3.o pickle3.so + rm -f noncopyable_export.o noncopyable_export.so + rm -f noncopyable_import.o noncopyable_import.so + rm -f ivect.o ivect.so + rm -f dvect.o dvect.so rm -f so_locations *.pyc rm -rf cxx_repository +softlinks: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) softlinks + +unlink: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) unlink + +cp: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) cp + +rm: + $(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) rm + depend: @ cat Makefile.nodepend; \ for obj in $(DEPOBJ); \ diff --git a/build/vc60.mak b/build/vc60.mak new file mode 100644 index 00000000..64e0b9df --- /dev/null +++ b/build/vc60.mak @@ -0,0 +1,133 @@ +# Usage: +# +# make copy Copy the sources and tests +# make Compile all sources +# make test Run doctest tests +# make clean Remove all object files +# make del Remove the sources and tests +# +# Revision history: +# 12 Apr 01 new macro ROOT to simplify configuration (R.W. Grosse-Kunstleve) +# Initial version: R.W. Grosse-Kunstleve + +ROOT=L: +BOOST_WIN="$(ROOT)\boost" +BOOST_UNIX=$(HOME)/boost + +PYEXE="C:\Program files\Python\python.exe" +PYINC=/I"C:\Program files\Python\include" +PYLIB="C:\Program files\Python\libs\python15.lib" + +STDOPTS=/nologo /MD /GR /GX /Zm200 +WARNOPTS= +OPTOPTS= + +CPP=cl.exe +CPPOPTS=$(STLPORTINC) $(STLPORTOPTS) /I$(BOOST_WIN) $(PYINC) \ + $(STDOPTS) $(WARNOPTS) $(OPTOPTS) + +LD=link.exe +LDOPTS=/nologo /dll /incremental:no + +OBJ=classes.obj conversions.obj extension_class.obj functions.obj \ + init_function.obj module_builder.obj \ + objects.obj types.obj cross_module.obj + +.SUFFIXES: .obj .cpp + +all: boost_python.lib \ + boost_python_test.pyd \ + abstract.pyd \ + getting_started1.pyd getting_started2.pyd getting_started3.pyd \ + simple_vector.pyd \ + do_it_yourself_converters.pyd \ + pickle1.pyd pickle2.pyd pickle3.pyd \ + noncopyable_export.pyd noncopyable_import.pyd \ + ivect.pyd dvect.pyd + +boost_python.lib: $(OBJ) + $(LD) -lib /nologo /out:boost_python.lib $(OBJ) + +boost_python_test.pyd: $(OBJ) comprehensive.obj + $(LD) $(LDOPTS) $(OBJ) comprehensive.obj $(PYLIB) /export:initboost_python_test /out:"boost_python_test.pyd" + +abstract.pyd: $(OBJ) abstract.obj + $(LD) $(LDOPTS) $(OBJ) abstract.obj $(PYLIB) /export:initabstract /out:"abstract.pyd" + +getting_started1.pyd: $(OBJ) getting_started1.obj + $(LD) $(LDOPTS) $(OBJ) getting_started1.obj $(PYLIB) /export:initgetting_started1 /out:"getting_started1.pyd" + +getting_started2.pyd: $(OBJ) getting_started2.obj + $(LD) $(LDOPTS) $(OBJ) getting_started2.obj $(PYLIB) /export:initgetting_started2 /out:"getting_started2.pyd" + +getting_started3.pyd: $(OBJ) getting_started3.obj + $(LD) $(LDOPTS) $(OBJ) getting_started3.obj $(PYLIB) /export:initgetting_started3 /out:"getting_started3.pyd" + +simple_vector.pyd: $(OBJ) simple_vector.obj + $(LD) $(LDOPTS) $(OBJ) simple_vector.obj $(PYLIB) /export:initsimple_vector /out:"simple_vector.pyd" + +do_it_yourself_converters.pyd: $(OBJ) do_it_yourself_converters.obj + $(LD) $(LDOPTS) $(OBJ) do_it_yourself_converters.obj $(PYLIB) /export:initdo_it_yourself_converters /out:"do_it_yourself_converters.pyd" + +pickle1.pyd: $(OBJ) pickle1.obj + $(LD) $(LDOPTS) $(OBJ) pickle1.obj $(PYLIB) /export:initpickle1 /out:"pickle1.pyd" + +pickle2.pyd: $(OBJ) pickle2.obj + $(LD) $(LDOPTS) $(OBJ) pickle2.obj $(PYLIB) /export:initpickle2 /out:"pickle2.pyd" + +pickle3.pyd: $(OBJ) pickle3.obj + $(LD) $(LDOPTS) $(OBJ) pickle3.obj $(PYLIB) /export:initpickle3 /out:"pickle3.pyd" + +noncopyable_export.pyd: $(OBJ) noncopyable_export.obj + $(LD) $(LDOPTS) $(OBJ) noncopyable_export.obj $(PYLIB) /export:initnoncopyable_export /out:"noncopyable_export.pyd" + +noncopyable_import.pyd: $(OBJ) noncopyable_import.obj + $(LD) $(LDOPTS) $(OBJ) noncopyable_import.obj $(PYLIB) /export:initnoncopyable_import /out:"noncopyable_import.pyd" + +ivect.pyd: $(OBJ) ivect.obj + $(LD) $(LDOPTS) $(OBJ) ivect.obj $(PYLIB) /export:initivect /out:"ivect.pyd" + +dvect.pyd: $(OBJ) dvect.obj + $(LD) $(LDOPTS) $(OBJ) dvect.obj $(PYLIB) /export:initdvect /out:"dvect.pyd" + +.cpp.obj: + $(CPP) $(CPPOPTS) /c $*.cpp + +test: + $(PYEXE) comprehensive.py --broken-auto-ptr + $(PYEXE) test_abstract.py + $(PYEXE) test_getting_started1.py + $(PYEXE) test_getting_started2.py + $(PYEXE) test_getting_started3.py + $(PYEXE) test_simple_vector.py + $(PYEXE) test_do_it_yourself_converters.py + $(PYEXE) test_pickle1.py + $(PYEXE) test_pickle2.py + $(PYEXE) test_pickle3.py + $(PYEXE) test_cross_module.py --broken-auto-ptr + +clean: + del *.obj + del *.lib + del *.exp + del *.idb + del *.pyd + del *.pyc + +softlinks: + python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) softlinks + +unlink: + python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) unlink + +cp: + python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) cp + +rm: + python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) rm + +copy: + $(PYEXE) $(BOOST_WIN)\libs\python\build\filemgr.py $(BOOST_WIN) copy + +del: + $(PYEXE) $(BOOST_WIN)\libs\python\build\filemgr.py $(BOOST_WIN) del