Advertisement
OstermanA

Python 3.7.3 makefile

May 25th, 2019
1,214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 13.70 KB | None | 0 0
  1. # Initialize env vars
  2. ifeq ($(strip $(PREFIX)),)
  3. PREFIX=/opt/utils/python3/$(revision)
  4. endif
  5. LDFLAGS=-Wl,-rpath,$(PREFIX)/lib:$(PREFIX)/lib64 -L$(PREFIX)/lib:$(PREFIX)/lib64
  6. CFLAGS=-Wl,-rpath,$(PREFIX)/lib:$(PREFIX)/lib64 -I$(PREFIX)/include
  7. CPPFLAGS=$(CFLAGS)
  8.  
  9. export LDFLAGS CFLAGS CPPFLAGS PREFIX
  10.  
  11. # Software Package Versions
  12. revision=1
  13. expat=2.2.6
  14. ffi=3.2.1
  15. mpdec=2.4.2
  16. ncurses=6.1
  17. openssl=1.0.2r
  18. python3=3.7.3
  19. readline=8.0
  20. sqlite3=3.28.0
  21. zlib=1.2.11
  22.  
  23. #Global vars
  24. PYTHON_LIBS=-ltinfo -lncurses
  25.  
  26. #Software Sources
  27. expatsource=https://github.com/libexpat/libexpat/releases/download/R_$(subst .,_,$(expat))/$(expatfile)
  28. ffisource=ftp://sourceware.org/pub/libffi/$(ffifile)
  29. mpdecsource=https://www.bytereef.org/software/mpdecimal/releases/$(mpdecfile)
  30. ncursessource=ftp://ftp.gnu.org/gnu/ncurses/$(ncursesfile)
  31. opensslsource=https://www.openssl.org/source/$(opensslfile)
  32. python3source=https://www.python.org/ftp/python/$(python3)/$(python3file)
  33. readlinesource=ftp://ftp.gnu.org/gnu/readline/$(readlinefile)
  34. sqlite3source=https://www.sqlite.org/2019/$(sqlite3file)
  35. zlibsource=https://zlib.net/$(zlibfile)
  36.  
  37. # Derived global vars
  38. expatfile=expat-$(expat).tar.bz2
  39. ffifile=libffi-$(ffi).tar.gz
  40. mpdecfile=mpdecimal-$(mpdec).tar.gz
  41. ncursesfile=ncurses-$(ncurses).tar.gz
  42. opensslfile=openssl-$(openssl).tar.gz
  43. readlinefile=readline-$(readline).tar.gz
  44. sqlite3file=sqlite-autoconf-$(shell printf '%d%02d%02d%02d' $(subst ., ,$(sqlite3))).tar.gz
  45. python3file=Python-$(python3).tgz
  46. zlibfile=zlib-$(zlib).tar.gz
  47.  
  48. expatdir=$(basename $(basename $(expatfile)))
  49. ffidir=$(basename $(basename $(ffifile)))
  50. mpdecdir=$(basename $(basename $(mpdecfile)))
  51. ncursesdir=$(basename $(basename $(ncursesfile)))
  52. openssldir=$(basename $(basename $(opensslfile)))
  53. readlinedir=$(basename $(basename $(readlinefile)))
  54. sqlite3dir=$(basename $(basename $(sqlite3file)))
  55. python3dir=$(basename $(python3file))
  56. zlibdir=$(basename $(basename $(zlibfile)))
  57.  
  58. cleanexpat=$(wildcard $(expatdir)/.)
  59. cleanffi=$(wildcard $(ffidir)/.)
  60. cleanmpdec=$(wildcard $(mpdecdir)/.)
  61. cleanncurses=$(wildcard $(ncursesdir)/.)
  62. cleanopenssl=$(wildcard $(openssldir)/.)
  63. cleanreadline=$(wildcard $(readlinedir)/.)
  64. cleansqlite3=$(wildcard $(sqlite3dir)/.)
  65. cleanpython3=$(wildcard $(python3dir)/.)
  66. cleanzlib=$(wildcard $(zlibdir)/.)
  67.  
  68. help:
  69.         echo "makefile for Python $(python3) and dependancies."
  70.         echo "Will build artifacts and install them to PREFIX=$(PREFIX)"
  71.         echo "If PREFIX is set as an environment variable this makefile will use it."
  72.         echo
  73.         echo "Any source code needed will be retrieved."
  74.         echo "Any target will automatically build and install dependancies."
  75.         echo "Note: OpenSSL is compiled without compression support for additional security"
  76.         echo
  77.         printf "%-8s %-7s %s\n" "TARGET" "VERSION" "DEPENDENCIES"
  78.         printf "%-8s %-7s %s\n" "expat" "$(expat)" "none"
  79.         printf "%-8s %-7s %s\n" "ffi" "$(ffi)" "none"
  80.         printf "%-8s %-7s %s\n" "mpdec" "$(mpdec)" "none"
  81.         printf "%-8s %-7s %s\n" "ncurses" "$(ncurses)" "none"
  82.         printf "%-8s %-7s %s\n" "openssl" "$(openssl)" "none"
  83.         printf "%-8s %-7s %s\n" "python3" "$(python3)" "expat ffi mpdec openssl sqlite3"
  84.         printf "%-8s %-7s %s\n" "readline" "$(readline)" "ncurses"
  85.         printf "%-8s %-7s %s\n" "sqlite3" "$(sqlite3)" "readline zlib"
  86.         printf "%-8s %-7s %s\n" "zlib" "$(zlib)" "none"
  87.         echo
  88.         echo "Special build targets:"
  89.         echo "all   - Synonym for python3"
  90.         echo "help  - Displays this message"
  91.         echo "clean - Removes temp directories"
  92.         echo
  93.         echo "Set VERBOSE to any non-null value to see debug messages"
  94.  
  95. $(VERBOSE).SILENT:
  96.  
  97. .PHONY: \
  98.         help \
  99.         expat \
  100.         ffi \
  101.         mpdec \
  102.         ncurses \
  103.         openssl \
  104.         python3 \
  105.         readline \
  106.         sqlite3 \
  107.         zlib \
  108.         $(cleanexpat) \
  109.         $(cleanffi) \
  110.         $(cleanmpdec) \
  111.         $(cleanncurses) \
  112.         $(cleanopenssl) \
  113.         $(cleanpython3) \
  114.         $(cleanreadline) \
  115.         $(cleansqlite3) \
  116.         $(cleanzlib)
  117.  
  118. all: python3
  119.  
  120. expat:
  121.         echo "INFO: CFLAGS=$(CFLAGS)"
  122.         echo "INFO: CPPFLAGS=$(CPPFLAGS)"
  123.         echo "INFO: PREFIX=$(PREFIX)"
  124.         echo "INFO: expatfile=$(expatfile)"
  125.         echo "INFO: expatsource=$(expatsource)"
  126.         test -f "$(expatfile)" \
  127.                 && echo "INFO: Found $(expatfile)" \
  128.                 || (echo "INFO: Retrieving $(expatsource)"; curl -Lso "$(expatfile)" "$(expatsource)")
  129.         tar -xf "$(expatfile)"
  130.         cd "$(expatdir)" && \
  131.         ./configure \
  132.                 --prefix="$(PREFIX)" \
  133.                 --enable-shared \
  134.                 --enable-static \
  135.                 --without-docbook && \
  136.         make && \
  137.         make install
  138.         echo "expat $(expat)" >> $(PREFIX)/version
  139.  
  140. ffi:
  141.         echo "INFO: CFLAGS=$(CFLAGS)"
  142.         echo "INFO: CPPFLAGS=$(CPPFLAGS)"
  143.         echo "INFO: PREFIX=$(PREFIX)"
  144.         echo "INFO: ffifile=$(ffifile)"
  145.         echo "INFO: ffisource=$(ffisource)"
  146.         test -f "$(ffifile)" \
  147.                 && echo "INFO: Found $(ffifile)" \
  148.                 || (echo "INFO: Retrieving $(ffisource)"; curl -Lso "$(ffifile)" "$(ffisource)")
  149.         tar -xf "$(ffifile)"
  150.         cd "$(ffidir)" && \
  151.         ./configure \
  152.                 --prefix="$(PREFIX)" \
  153.                 --enable-shared \
  154.                 --enable-static && \
  155.         make && \
  156.         make install
  157.         echo "ffi $(ffi)" >> $(PREFIX)/version
  158.  
  159. mpdec:
  160.         echo "INFO: CFLAGS=$(CFLAGS)"
  161.         echo "INFO: CPPFLAGS=$(CPPFLAGS)"
  162.         echo "INFO: PREFIX=$(PREFIX)"
  163.         echo "INFO: mpdecfile=$(mpdecfile)"
  164.         echo "INFO: mpdecsource=$(mpdecsource)"
  165.         test -f "$(mpdecfile)" \
  166.                 && echo "INFO: Found $(mpdecfile)" \
  167.                 || (echo "INFO: Retrieving $(mpdecsource)"; curl -Lso "$(mpdecfile)" "$(mpdecsource)")
  168.         tar -xf "$(mpdecfile)"
  169.         cd "$(mpdecdir)" && \
  170.         ./configure \
  171.                 --prefix="$(PREFIX)" && \
  172.         make && \
  173.         make install
  174.         echo "mpdec $(mpdec)" >> $(PREFIX)/version
  175.  
  176. ncurses:
  177.         echo "INFO: CFLAGS=$(CFLAGS)"
  178.         echo "INFO: CPPFLAGS=$(CPPFLAGS)"
  179.         echo "INFO: PREFIX=$(PREFIX)"
  180.         echo "INFO: ncursesfile=$(ncursesfile)"
  181.         echo "INFO: ncursessource=$(ncursessource)"
  182.         test -f "$(ncursesfile)" \
  183.                 && echo "INFO: Found $(ncursesfile)" \
  184.                 || (echo "INFO: Retrieving $(ncursessource)"; curl -Lso "$(ncursesfile)" "$(ncursessource)")
  185.         tar -xf "$(ncursesfile)"
  186.         cd "$(ncursesdir)" && \
  187.         ./configure \
  188.                 --prefix="$(PREFIX)" \
  189.                 --with-cxx-shared \
  190.                 --with-profile \
  191.                 --with-pthread \
  192.                 --with-shared \
  193.                 --with-termlib \
  194.                 --enable-broken_linker \
  195.                 --enable-ext-colors \
  196.                 --enable-ext-mouse \
  197.                 --enable-ext-putwin \
  198.                 --enable-hard-tabs \
  199.                 --enable-no-padding \
  200.                 --enable-opaque-curses \
  201.                 --enable-opaque-form \
  202.                 --enable-opaque-menu \
  203.                 --enable-opaque-panel \
  204.                 --enable-pthreads-eintr \
  205.                 --enable-reentrant \
  206.                 --enable-rpath \
  207.                 --enable-signed-char \
  208.                 --enable-sigwinch \
  209.                 --enable-symlinks \
  210.                 --enable-tcap-names \
  211.                 --enable-termcap \
  212.                 --enable-weak-symbols \
  213.                 --enable-widec \
  214.                 --enable-xmc-glitch && \
  215.         make && \
  216.         make install
  217.         echo "ncurses $(ncurses)" >> $(PREFIX)/version
  218.  
  219. openssl:
  220.         echo "INFO: CFLAGS=$(CFLAGS)"
  221.         echo "INFO: CPPFLAGS=$(CPPFLAGS)"
  222.         echo "INFO: PREFIX=$(PREFIX)"
  223.         echo "INFO: opensslfile=$(opensslfile)"
  224.         echo "INFO: opensslsource=$(opensslsource)"
  225.         test -f "$(opensslfile)" \
  226.                 && echo "INFO: Found $(opensslfile)" \
  227.                 || (echo "INFO: Retrieving $(opensslsource)"; curl -Lso "$(opensslfile)" "$(opensslsource)")
  228.         tar -xf "$(opensslfile)"
  229.         cd "$(openssldir)" && \
  230.         ./config \
  231.                 --prefix="$(PREFIX)" \
  232.                 --openssldir="$(PREFIX)" \
  233.                 threads \
  234.                 shared \
  235.                 no-comp \
  236.                 "$(CFLAGS)" && \
  237.         make depend && \
  238.         make && \
  239.         make install
  240.         echo "OpenSSL $(openssl)" >> $(PREFIX)/version
  241.  
  242. #python3: expat ffi mpdec openssl sqlite3
  243. python3:
  244.         echo "INFO: CFLAGS=$(CFLAGS)"
  245.         echo "INFO: CPPFLAGS=$(CPPFLAGS)"
  246.         echo "INFO: PREFIX=$(PREFIX)"
  247.         echo "INFO: python3file=$(python3file)"
  248.         echo "INFO: python3source=$(python3source)"
  249.         test -f "$(python3file)" \
  250.                 && echo "INFO: Found $(python3file)" \
  251.                 || (echo "INFO: Retreiving $(python3source)"; curl -Lso "$(python3file)" "$(python3source)")
  252.         tar -xf "$(python3file)"
  253.         cd "$(python3dir)" && \
  254.         ./configure \
  255.                 --prefix="$(PREFIX)" \
  256.                 --enable-shared \
  257.                 --enable-optimizations \
  258.                 --enable-profiling \
  259.                 --enable-loadable-sqlite-extensions \
  260.                 --enable-ipv6 \
  261.                 --with-system-expat=$(PREFIX) \
  262.                 --with-system-ffi=$(PREFIX) \
  263.                 --with-system-libmpdec=$(PREFIX) \
  264.                 --with-openssl=$(PREFIX) \
  265.                 --with-ensurepip=upgrade \
  266.                 "CFLAGS=$(CFLAGS) $(PYTHON_LIBS)" \
  267.                 "CPPFLAGS=$(CPPFLAGS) $(PYTHON_LIBS)" \
  268.                 "LDFLAGS=$(LDFLAGS) $(PYTHON_LIBS)" && \
  269.         make \
  270.                 "CFLAGS=$(CFLAGS) $(PYTHON_LIBS)" \
  271.                 "CPPFLAGS=$(CPPFLAGS) $(PYTHON_LIBS)" \
  272.                 "LDFLAGS=$(LDFLAGS) $(PYTHON_LIBS)" && \
  273.         make install
  274.         echo -n "INFO: Testing if Python runs: "
  275.         $(PREFIX)/bin/python3 --version
  276.         [[ -x find_deps.sh ]] && echo "Testing binary dependancies:" && ./find_deps.sh
  277.         echo "python3 $(python3)" >> $(PREFIX)/version
  278.  
  279. readline: ncurses
  280.         echo "INFO: CFLAGS=$(CFLAGS)"
  281.         echo "INFO: CPPFLAGS=$(CPPFLAGS)"
  282.         echo "INFO: PREFIX=$(PREFIX)"
  283.         echo "INFO: readlinefile=$(readlinefile)"
  284.         echo "INFO: readlinesource=$(readlinesource)"
  285.         test -f "$(readlinefile)" \
  286.                 && echo "INFO: Found $(readlinefile)" \
  287.                 || (echo "INFO: Retrieving $(readlinesource)"; curl -Lso "$(readlinefile)" "$(readlinesource)")
  288.         tar -xf "$(readlinefile)"
  289.         cd "$(readlinedir)" && \
  290.         ./configure \
  291.                 --prefix="$(PREFIX)" \
  292.                 --with-curses="$(PREFIX)" \
  293.                 --enable-shared \
  294.                 --enable-static && \
  295.         make && \
  296.         make install
  297.         echo "readline $(readline)" >> $(PREFIX)/version
  298.  
  299. sqlite3: readline zlib
  300.         echo "INFO: CFLAGS=$(CFLAGS)"
  301.         echo "INFO: CPPFLAGS=$(CPPFLAGS)"
  302.         echo "INFO: PREFIX=$(PREFIX)"
  303.         echo "INFO: sqlite3file=$(sqlite3file)"
  304.         echo "INFO: sqlite3source=$(sqlite3source)"
  305.         test -f "$(sqlite3file)" \
  306.                 && echo "INFO: Found $(sqlite3file)" \
  307.                 || (echo "INFO: Retreiving $(sqlite3source)"; curl -Lso "$(sqlite3file)" "$(sqlite3source)")
  308.         tar -xf "$(sqlite3file)"
  309.         cd "$(sqlite3dir)" && \
  310.         ./configure \
  311.                 --prefix="$(PREFIX)" \
  312.                 --enable-shared \
  313.                 --enable-static \
  314.                 --enable-readline \
  315.                 --enable-threadsafe \
  316.                 --enable-dynamic-extensions && \
  317.         make && \
  318.         make install
  319.         echo "sqlite3 $(sqlite3)" >> $(PREFIX)/version
  320.  
  321. zlib:
  322.         echo "INFO: CFLAGS=$(CFLAGS)"
  323.         echo "INFO: CPPFLAGS=$(CPPFLAGS)"
  324.         echo "INFO: PREFIX=$(PREFIX)"
  325.         echo "INFO: zlibfile=$(zlibfile)"
  326.         echo "INFO: zlibsource=$(zlibsource)"
  327.         test -f "$(zlibfile)" \
  328.                 && echo "INFO: Found $(zlibfile)" \
  329.                 || (echo "INFO: Retrieving $(zlibsource)"; curl -Lso "$(zlibfile)" "$(zlibsource)")
  330.         tar -xf "$(zlibfile)"
  331.         cd "$(zlibdir)" && \
  332.         ./configure \
  333.                 --prefix="$(PREFIX)" \
  334.                 --64 \
  335.                 --shared \
  336.                 --libdir="$(PREFIX)/lib" \
  337.                 --sharedlibdir="$(PREFIX)/lib" && \
  338.         make && \
  339.         make install
  340.         echo "zlib $(zlib)" >> $(PREFIX)/version
  341.  
  342.  
  343. clean: | \
  344.         $(cleanexpat) \
  345.         $(cleanffi) \
  346.         $(cleanmpdec) \
  347.         $(cleanncurses) \
  348.         $(cleanopenssl) \
  349.         $(cleanpython3) \
  350.         $(cleanreadline) \
  351.         $(cleansqlite3) \
  352.         $(cleanzlib)
  353.         @echo "INFO: Done cleaning"
  354.  
  355. $(cleanexpat):
  356.         @echo "INFO: Removing $(expatdir)"
  357.         rm -rf "$(expatdir)"
  358.  
  359. $(cleanffi):
  360.         @echo "INFO: Removing $(ffidir)"
  361.         rm -rf "$(ffidir)"
  362.  
  363. $(cleanmpdec):
  364.         @echo "INFO: Removing $(mpdecdir)"
  365.         rm -rf "$(mpdecdir)"
  366.  
  367. $(cleanncurses):
  368.         @echo "INFO: Removing $(ncursesdir)"
  369.         rm -rf "$(ncursesdir)"
  370.  
  371. $(cleanopenssl):
  372.         @echo "INFO: Removing $(openssldir)"
  373.         rm -rf "$(openssldir)"
  374.  
  375. $(cleanpython3):
  376.         @echo "INFO: Removing $(python3dir)"
  377.         rm -rf "$(python3dir)"
  378.  
  379. $(cleanreadline):
  380.         @echo "INFO: Removing $(readlinedir)"
  381.         rm -rf "$(readlinedir)"
  382.  
  383. $(cleansqlite3):
  384.         @echo "INFO: Removing $(sqlite3dir)"
  385.         rm -rf "$(sqlite3dir)"
  386.  
  387. $(cleanzlib):
  388.         @echo "INFO: Removing $(zlibdir)"
  389.         rm -rf "$(zlibdir)"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement