makepack 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. #!/usr/bin/env bash
  2. #
  3. # Shell script to make a FPC .tar package for Linux
  4. # Copyright 1996-2004 Michael Van Canneyt and Peter Vreman
  5. #
  6. set -e
  7. # Set this to "yes" if you want to force making the documentation.
  8. # if it is not equal to yes, the documentation is assumed present in a file docs.tar.gz
  9. MAKEDOCS=no
  10. # Set this to "no" if you want don't want to check for libgdb.a
  11. CHECKLIBGDB=yes
  12. unset FPCDIR
  13. # Goto the toplevel if necessary
  14. [ -d install ] || cd ..
  15. # Retrieve version from compiler/Makefile.fpc
  16. VERSION=`grep '^version' compiler/Makefile.fpc | sed 's+[^=]*= *\(.*\)+\1+'`
  17. # Retrieve current system info by calling FPC. We need
  18. # to use the | head -n1 to fix a bug in fpc 1.9.4 and earlier
  19. # that uses exitcode 1 also when printing info resulting in
  20. # fpc binary to print an error line (PFV)
  21. SOURCECPU=`fpc -iSP | head -n1`
  22. SOURCEOS=`fpc -iSO | head -n1`
  23. # retrieve real OS.
  24. HOSTOS=`uname -s | tr "[:upper:]" "[:lower:]"`
  25. MAKE=make
  26. case "$HOSTOS" in
  27. *BSD*) MAKE=gmake
  28. ;;
  29. *bsd*) MAKE=gmake
  30. ;;
  31. esac
  32. if [ $# -ne 0 ]; then
  33. if [ $# -ne 1 ]; then
  34. echo "Usage: makepack [<cpu>-<os>]"
  35. exit 1
  36. fi
  37. TARGETCPU=`echo $1 | sed 's+\([^-]*\)-.*+\1+'`
  38. TARGETOS=`echo $1 | sed 's+[^-]*-\(.*\)+\1+'`
  39. else
  40. TARGETCPU=$SOURCECPU
  41. TARGETOS=$SOURCEOS
  42. fi
  43. FULLTARGET=$TARGETCPU-$TARGETOS
  44. FULLSOURCE=$SOURCECPU-$SOURCEOS
  45. echo "FPC Source: $FULLSOURCE"
  46. echo "FPC Target: $FULLTARGET"
  47. # Cross building
  48. # - add prefix
  49. # - no IDE
  50. if [ "$FULLTARGET" != "$FULLSOURCE" ]; then
  51. CROSS="cross"
  52. CROSSPREFIX=$FULLTARGET-
  53. IDE=
  54. else
  55. CROSS=
  56. CROSSPREFIX=
  57. IDE=ide
  58. fi
  59. # Check for libgdb.a
  60. if [ ! "$CROSS" = "cross" ]; then
  61. if [ "$CHECKLIBGDB" = "yes" ]; then
  62. if [ "$GDBLIBDIR" = "" ]; then
  63. GDBLIBDIR=libgdb/$TARGETOS/$TARGETCPU
  64. fi
  65. if [ ! -e "$GDBLIBDIR/libgdb.a" ]; then
  66. echo "Libgdb ($GDBLIBDIR/libgdb.a) not found, aborting"
  67. exit 1
  68. fi
  69. fi
  70. fi
  71. # First check for docs.tar.gz before building anything
  72. if [ "$CROSS" = "" ]; then
  73. if [ ! -f docs.tar.gz ]; then
  74. if [ "$MAKEDOCS" != "yes" ]; then
  75. echo "No documentation available. Please copy the file docs.tar.gz to this directory."
  76. exit 1
  77. else
  78. ${MAKE} makepackdocs
  79. if [ $? != 0 ]; then
  80. echo "Failed to make documentation archive."
  81. exit 1
  82. fi
  83. fi
  84. fi
  85. ${MAKE} demozip CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS FPC_VERSION=$VERSION
  86. if [ $? != 0 ]; then
  87. echo "Failed to make demo source archive."
  88. exit 1
  89. fi
  90. fi
  91. # Build everything using the makefiles
  92. ${MAKE} distclean CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS
  93. ${MAKE} ${CROSS}zipinstall CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS
  94. if [ $? != 0 ]; then
  95. echo "Failed to make distribution archive."
  96. exit 1
  97. fi
  98. # Files to be in the release
  99. RELFILES="install.sh"
  100. # install.sh
  101. echo "Copying install.sh"
  102. sed s+%version%+$VERSION+ install/install.sh > install.sh
  103. chmod 755 install.sh
  104. # binary.*.tar
  105. BINARYTAR=${CROSSPREFIX}binary.$FULLTARGET.tar
  106. echo "Creating $BINARYTAR"
  107. BINPACKAGES="base $IDE units utils"
  108. BINFILES=
  109. for p in $BINPACKAGES; do
  110. BINFILES="$BINFILES ${CROSSPREFIX}$p*.$FULLSOURCE.tar.gz"
  111. done
  112. tar cf $BINARYTAR $BINFILES
  113. if [ $? != 0 ]; then
  114. echo "Failed to create $BINARYTAR"
  115. exit 1
  116. fi
  117. RELFILES="$RELFILES $BINARYTAR"
  118. if [ "$CROSS" = "" ]; then
  119. # demo, docs
  120. RELFILES="$RELFILES demo.tar.gz docs.tar.gz"
  121. fi
  122. # Files to be added to the .tar
  123. TARNAME=${CROSSPREFIX}fpc-$VERSION.$FULLSOURCE.tar
  124. echo "Creating $TARNAME"
  125. tar cf $TARNAME $RELFILES
  126. if [ $? != 0 ]; then
  127. echo "Failed to create $TARNAME"
  128. exit 1
  129. fi