makepack 3.4 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. # Build everything using the makefiles
  72. ${MAKE} distclean CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS
  73. ${MAKE} ${CROSS}zipinstall CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS
  74. if [ $? != 0 ]; then
  75. echo "Failed to make distribution archive."
  76. exit 1
  77. fi
  78. if [ "$CROSS" = "" ]; then
  79. if [ ! -f docs.tar.gz ]; then
  80. if [ "$MAKEDOCS" != "yes" ]; then
  81. echo "No documentation available. Please copy the file docs.tar.gz to this directory."
  82. exit 1
  83. else
  84. ${MAKE} makepackdocs
  85. if [ $? != 0 ]; then
  86. echo "Failed to make documentation archive."
  87. exit 1
  88. fi
  89. fi
  90. fi
  91. ${MAKE} demozip CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS FPC_VERSION=$VERSION
  92. if [ $? != 0 ]; then
  93. echo "Failed to make demo source archive."
  94. exit 1
  95. fi
  96. fi
  97. # Files to be in the release
  98. RELFILES="install.sh"
  99. # install.sh
  100. echo "Copying install.sh"
  101. sed s+%version%+$VERSION+ install/install.sh > install.sh
  102. chmod 755 install.sh
  103. # binary.*.tar
  104. BINARYTAR=${CROSSPREFIX}binary.$FULLTARGET.tar
  105. echo "Creating $BINARYTAR"
  106. BINPACKAGES="base $IDE units utils"
  107. BINFILES=
  108. for p in $BINPACKAGES; do
  109. BINFILES="$BINFILES ${CROSSPREFIX}$p*.$FULLSOURCE.tar.gz"
  110. done
  111. tar cf $BINARYTAR $BINFILES
  112. if [ $? != 0 ]; then
  113. echo "Failed to create $BINARYTAR"
  114. exit 1
  115. fi
  116. RELFILES="$RELFILES $BINARYTAR"
  117. if [ "$CROSS" = "" ]; then
  118. # demo, docs
  119. RELFILES="$RELFILES demo.tar.gz docs.tar.gz"
  120. fi
  121. # Files to be added to the .tar
  122. TARNAME=${CROSSPREFIX}fpc-$VERSION.$FULLSOURCE.tar
  123. echo "Creating $TARNAME"
  124. tar cf $TARNAME $RELFILES
  125. if [ $? != 0 ]; then
  126. echo "Failed to create $TARNAME"
  127. exit 1
  128. fi