project( Python2.7 ) cmake_minimum_required( VERSION 2.6 ) IF (NOT WIN32) message(FATAL_ERROR "this cmakelists is only designed for windows!") ENDIF() macro(add_python_module modulename) add_library( ${${modulename}_MODULE} SHARED ${${modulename}_MODULE_SOURCES}) set_target_properties(${${modulename}_MODULE} PROPERTIES SUFFIX .pyd) target_link_libraries( ${${modulename}_MODULE} ${PYTHONCORE} ${ARGN}) install(TARGETS ${${modulename}_MODULE} RUNTIME DESTINATION DLLs ARCHIVE DESTINATION libs) endmacro(add_python_module) set(CMAKE_BUILD_TYPE Release) #add common definitions add_definitions(-DPy_ENABLE_SHARED -DXML_NS -DXML_DTD -DBYTEORDER=1234 -DXML_CONTEXT_BYTES=1024 -DUSE_PYEXPAT_CAPI -DXML_STATIC -DHAVE_MEMMOVE) include_directories(include PC Python ${ZLIB_INCLUDE_DIRS} Modules/_ctypes/libffi_msvc Modules/expat Modules/_sqlite) #no manifest set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /MANIFEST:NO") #here we check for the prerequisites Find_Package( ZLIB REQUIRED ) Find_Package( OpenSSL REQUIRED ) #define the names of the targets set(PYTHONCORE python27) #core python lib set(PYTHON python) #main executable set(PYTHONW pythonw) #main windows executable set(W9XPOPEN w9xpopen) #workaround for 16 bit programs on win9x set(_CTYPES_MODULE _ctypes) set(_CTYPES_TEST_MODULE _ctypes_test) set(_ELEMENTTREE_MODULE _elementtree) set(_HASHLIB_MODULE _hashlib) set(_MSI_MODULE _msi) set(_MULTIPROCESSING_MODULE _multiprocessing) set(_SOCKET_MODULE _socket) set(_SQLITE3_MODULE _sqlite3) set(_SSL_MODULE _ssl) set(_TESTCAPI_MODULE _testcapi) set(BZ2_MODULE bz2) set(PYEXPAT_MODULE pyexpat) set(SELECT_MODULE select) set(UNICODEDATA_MODULE unicodedata) set(WINSOUND_MODULE winsound) set(PYTHONCORE_SOURCES Modules/_io/_iomodule.c Modules/_io/bufferedio.c Modules/_io/bytesio.c Modules/_io/fileio.c Modules/_io/iobase.c Modules/_io/stringio.c Modules/_io/textio.c Modules/cjkcodecs/_codecs_cn.c Modules/cjkcodecs/_codecs_hk.c Modules/cjkcodecs/_codecs_iso2022.c Modules/cjkcodecs/_codecs_jp.c Modules/cjkcodecs/_codecs_kr.c Modules/cjkcodecs/_codecs_tw.c Modules/cjkcodecs/multibytecodec.c Modules/_bisectmodule.c Modules/_codecsmodule.c Modules/_collectionsmodule.c Modules/_csv.c Modules/_functoolsmodule.c Modules/_heapqmodule.c Modules/_hotshot.c Modules/_json.c Modules/_localemodule.c Modules/_lsprof.c Modules/_math.c Modules/_randommodule.c Modules/_sre.c Modules/_struct.c Modules/_weakref.c Modules/arraymodule.c Modules/audioop.c Modules/binascii.c Modules/cmathmodule.c Modules/cPickle.c Modules/cstringIO.c Modules/datetimemodule.c Modules/errnomodule.c Modules/future_builtins.c Modules/gcmodule.c Modules/getbuildinfo.c Modules/imageop.c Modules/itertoolsmodule.c Modules/main.c Modules/mathmodule.c Modules/md5.c Modules/md5module.c Modules/mmapmodule.c Modules/operator.c Modules/parsermodule.c Modules/posixmodule.c Modules/rotatingtree.c Modules/sha256module.c Modules/sha512module.c Modules/shamodule.c Modules/signalmodule.c Modules/stropmodule.c Modules/symtablemodule.c Modules/threadmodule.c Modules/timemodule.c Modules/xxsubtype.c Modules/zipimport.c Modules/zlibmodule.c Modules/_fwnative.c Objects/abstract.c Objects/boolobject.c Objects/bufferobject.c Objects/bytearrayobject.c Objects/bytes_methods.c Objects/capsule.c Objects/cellobject.c Objects/classobject.c Objects/cobject.c Objects/codeobject.c Objects/complexobject.c Objects/descrobject.c Objects/dictobject.c Objects/enumobject.c Objects/exceptions.c Objects/fileobject.c Objects/floatobject.c Objects/frameobject.c Objects/funcobject.c Objects/genobject.c Objects/intobject.c Objects/iterobject.c Objects/listobject.c Objects/longobject.c Objects/memoryobject.c Objects/methodobject.c Objects/moduleobject.c Objects/object.c Objects/obmalloc.c Objects/rangeobject.c Objects/setobject.c Objects/sliceobject.c Objects/stringobject.c Objects/structseq.c Objects/tupleobject.c Objects/typeobject.c Objects/unicodectype.c Objects/unicodeobject.c Objects/weakrefobject.c Parser/acceler.c Parser/bitset.c Parser/firstsets.c Parser/grammar.c Parser/grammar1.c Parser/listnode.c Parser/metagrammar.c Parser/myreadline.c Parser/node.c Parser/parser.c Parser/parsetok.c Parser/tokenizer.c PC/_subprocess.c PC/_winreg.c PC/config.c PC/dl_nt.c PC/getpathp.c PC/import_nt.c PC/msvcrtmodule.c Python/_warnings.c Python/asdl.c Python/ast.c Python/bltinmodule.c Python/ceval.c Python/codecs.c Python/compile.c Python/dtoa.c Python/dynload_win.c Python/errors.c Python/formatter_string.c Python/formatter_unicode.c Python/frozen.c Python/future.c Python/getargs.c Python/getcompiler.c Python/getcopyright.c Python/getopt.c Python/getplatform.c Python/getversion.c Python/graminit.c Python/import.c Python/importdl.c Python/marshal.c Python/modsupport.c Python/mysnprintf.c Python/mystrtoul.c Python/peephole.c Python/pyarena.c Python/pyctype.c Python/pyfpe.c Python/pymath.c Python/pystate.c Python/pystrcmp.c Python/pystrtod.c Python/Python-ast.c Python/pythonrun.c Python/structmember.c Python/symtable.c Python/sysmodule.c Python/thread.c Python/traceback.c ) #here follows the dynamic the modules set(_CTYPES_MODULE_SOURCES Modules/_ctypes/_ctypes.c Modules/_ctypes/callbacks.c Modules/_ctypes/callproc.c Modules/_ctypes/cfield.c Modules/_ctypes/malloc_closure.c Modules/_ctypes/stgdict.c Modules/_ctypes/libffi_msvc/ffi.c Modules/_ctypes/libffi_msvc/prep_cif.c Modules/_ctypes/libffi_msvc/win32.c ) set(_CTYPES_TEST_MODULE_SOURCES Modules/_ctypes/_ctypes_test.c) set(_ELEMENTTREE_MODULE_SOURCES Modules/_elementtree.c Modules/expat/xmlparse.c Modules/expat/xmlrole.c Modules/expat/xmltok.c ) set(_HASHLIB_MODULE_SOURCES Modules/_hashopenssl.c) set(_MSI_MODULE_SOURCES PC/_msi.c) set(_MULTIPROCESSING_MODULE_SOURCES Modules/_multiprocessing/multiprocessing.c Modules/_multiprocessing/pipe_connection.c Modules/_multiprocessing/semaphore.c Modules/_multiprocessing/socket_connection.c Modules/_multiprocessing/win32_functions.c ) set(_SOCKET_MODULE_SOURCES Modules/socketmodule.c) set(_SQLITE3_MODULE_SOURCES Modules/_sqlite/cache.c Modules/_sqlite/connection.c Modules/_sqlite/cursor.c Modules/_sqlite/microprotocols.c Modules/_sqlite/module.c Modules/_sqlite/prepare_protocol.c Modules/_sqlite/row.c Modules/_sqlite/statement.c Modules/_sqlite/util.c ) set(_SSL_MODULE_SOURCES Modules/_ssl.c) set(_TESTCAPI_MODULE_SOURCES Modules/_testcapimodule.c) set(BZ2_MODULE_SOURCES Modules/bz2module.c) set(PYEXPAT_MODULE_SOURCES Modules/pyexpat.c Modules/expat/xmlparse.c Modules/expat/xmlrole.c Modules/expat/xmltok.c ) set(SELECT_MODULE_SOURCES Modules/selectmodule.c) set(UNICODEDATA_MODULE_SOURCES Modules/unicodedata.c) set(WINSOUND_MODULE_SOURCES PC/winsound.c) add_library( ${PYTHONCORE} SHARED ${PYTHONCORE_SOURCES}) set_Target_properties(${PYTHONCORE} PROPERTIES COMPILE_DEFINITIONS Py_BUILD_CORE) target_link_libraries( ${PYTHONCORE} ${ZLIB_LIBRARY}) add_executable( ${PYTHON} Modules/python.c) target_link_libraries( ${PYTHON} ${PYTHONCORE}) add_executable( ${PYTHONW} WIN32 PC/WinMain.c) target_link_libraries( ${PYTHONW} ${PYTHONCORE}) add_executable( ${W9XPOPEN} PC/w9xpopen.c) target_link_libraries( ${W9XPOPEN} ${PYTHONCORE}) add_python_module(_CTYPES) add_python_module(_CTYPES_TEST) add_python_module(_ELEMENTTREE) add_python_module(_HASHLIB ${OPENSSL_LIBRARIES}) add_python_module(_MSI fci msi rpcrt4) add_python_module(_MULTIPROCESSING ws2_32) add_python_module(_SOCKET ws2_32) add_python_module(_SQLITE3 sqlite3) set_target_properties(${_SQLITE3_MODULE} PROPERTIES COMPILE_DEFINITIONS MODULE_NAME=\"sqlite3\") add_python_module(_SSL ${OPENSSL_LIBRARIES} ws2_32) add_python_module(_TESTCAPI) add_python_module(BZ2 bz2.lib) add_python_module(PYEXPAT) add_python_module(SELECT ws2_32) add_python_module(UNICODEDATA) add_python_module(WINSOUND winmm) #installation (python modules are automatically installed by 'add_python_module') install(TARGETS ${PYTHON} ${PYTHONW} ${PYTHONCORE} ${W9XPOPEN} RUNTIME DESTINATION . ARCHIVE DESTINATION libs) install(DIRECTORY Include Lib Tools DESTINATION . PATTERN "plat-*" EXCLUDE PATTERN "bsddb" EXCLUDE) install(FILES PC/pyconfig.h DESTINATION Include) install(FILES LICENSE README DESTINATION .)