|  | 
| 3 | 3 |   stdenv, | 
| 4 | 4 |   fetchFromGitHub, | 
| 5 | 5 |   postgresql, | 
|  | 6 | +  buildEnv, | 
| 6 | 7 | }: | 
| 7 |  | - | 
| 8 |  | -stdenv.mkDerivation rec { | 
|  | 8 | +let | 
| 9 | 9 |   pname = "pg_hashids"; | 
| 10 |  | -  version = "cd0e1b31d52b394a0df64079406a14a4f7387cd6"; | 
|  | 10 | +  build = | 
|  | 11 | +    version: hash: revision: | 
|  | 12 | +    stdenv.mkDerivation rec { | 
|  | 13 | +      inherit pname version; | 
| 11 | 14 | 
 | 
| 12 |  | -  buildInputs = [ postgresql ]; | 
|  | 15 | +      buildInputs = [ postgresql ]; | 
| 13 | 16 | 
 | 
| 14 |  | -  src = fetchFromGitHub { | 
| 15 |  | -    owner = "iCyberon"; | 
| 16 |  | -    repo = pname; | 
| 17 |  | -    rev = "${version}"; | 
| 18 |  | -    hash = "sha256-Nmb7XLqQflYZfqj0yrewfb1Hl5YgEB5wfjBunPwIuOU="; | 
| 19 |  | -  }; | 
|  | 17 | +      src = fetchFromGitHub { | 
|  | 18 | +        owner = "iCyberon"; | 
|  | 19 | +        repo = pname; | 
|  | 20 | +        rev = revision; | 
|  | 21 | +        inherit hash; | 
|  | 22 | +      }; | 
|  | 23 | + | 
|  | 24 | +      installPhase = '' | 
|  | 25 | +        mkdir -p $out/{lib,share/postgresql/extension} | 
|  | 26 | +
 | 
|  | 27 | +        mv ${pname}${postgresql.dlSuffix} $out/lib/${pname}-${version}${postgresql.dlSuffix} | 
|  | 28 | +
 | 
|  | 29 | +        create_sql_files() { | 
|  | 30 | +          if test -f ${pname}--${version}.sql; then | 
|  | 31 | +            cp ${pname}--${version}.sql $out/share/postgresql/extension | 
|  | 32 | +          fi | 
|  | 33 | +          echo "Creating SQL files for previous versions..." | 
|  | 34 | +          if [[ "${version}" == "${latestVersion}" ]]; then | 
|  | 35 | +            cp *.sql $out/share/postgresql/extension | 
|  | 36 | +
 | 
|  | 37 | +            # anything after 1.2.1 is unreleased | 
|  | 38 | +            cp pg_hashids--1.3.sql $out/share/postgresql/extension/pg_hashids--${version}.sql | 
|  | 39 | +            cp pg_hashids--1.2.1--1.3.sql $out/share/postgresql/extension/pg_hashids--1.2.1--${version}.sql | 
|  | 40 | +          fi | 
|  | 41 | +        } | 
|  | 42 | +
 | 
|  | 43 | +        create_control_files() { | 
|  | 44 | +          sed -e "/^default_version =/d" \ | 
|  | 45 | +              -e "s|^module_pathname = .*|module_pathname = '\$libdir/${pname}'|" \ | 
|  | 46 | +            ${pname}.control > $out/share/postgresql/extension/${pname}--${version}.control | 
|  | 47 | +
 | 
|  | 48 | +          if [[ "${version}" == "${latestVersion}" ]]; then | 
|  | 49 | +            { | 
|  | 50 | +              echo "default_version = '${latestVersion}'" | 
|  | 51 | +              cat $out/share/postgresql/extension/${pname}--${latestVersion}.control | 
|  | 52 | +            } > $out/share/postgresql/extension/${pname}.control | 
|  | 53 | +            ln -sfn ${pname}-${latestVersion}${postgresql.dlSuffix} $out/lib/${pname}${postgresql.dlSuffix} | 
|  | 54 | +          fi | 
|  | 55 | +        } | 
| 20 | 56 | 
 | 
| 21 |  | -  installPhase = '' | 
| 22 |  | -    mkdir -p $out/{lib,share/postgresql/extension} | 
|  | 57 | +        create_sql_files | 
|  | 58 | +        create_control_files | 
|  | 59 | +      ''; | 
| 23 | 60 | 
 | 
| 24 |  | -    cp *${postgresql.dlSuffix}      $out/lib | 
| 25 |  | -    cp *.sql     $out/share/postgresql/extension | 
| 26 |  | -    cp *.control $out/share/postgresql/extension | 
|  | 61 | +      meta = with lib; { | 
|  | 62 | +        description = "Generate short unique IDs in PostgreSQL"; | 
|  | 63 | +        homepage = "https://github.com/iCyberon/pg_hashids"; | 
|  | 64 | +        license = licenses.postgresql; | 
|  | 65 | +        inherit (postgresql.meta) platforms; | 
|  | 66 | +      }; | 
|  | 67 | +    }; | 
|  | 68 | +  allVersions = (builtins.fromJSON (builtins.readFile ./versions.json)).pg_hashids; | 
|  | 69 | +  supportedVersions = lib.filterAttrs ( | 
|  | 70 | +    _: value: builtins.elem (lib.versions.major postgresql.version) value.postgresql | 
|  | 71 | +  ) allVersions; | 
|  | 72 | +  versions = lib.naturalSort (lib.attrNames supportedVersions); | 
|  | 73 | +  latestVersion = lib.last versions; | 
|  | 74 | +  numberOfVersions = builtins.length versions; | 
|  | 75 | +  packages = builtins.attrValues ( | 
|  | 76 | +    lib.mapAttrs (name: value: build name value.hash (value.revision or name)) supportedVersions | 
|  | 77 | +  ); | 
|  | 78 | +in | 
|  | 79 | +buildEnv { | 
|  | 80 | +  name = pname; | 
|  | 81 | +  paths = packages; | 
|  | 82 | +  pathsToLink = [ | 
|  | 83 | +    "/lib" | 
|  | 84 | +    "/share/postgresql/extension" | 
|  | 85 | +  ]; | 
|  | 86 | +  postBuild = '' | 
|  | 87 | +    # checks | 
|  | 88 | +    (set -x | 
|  | 89 | +       test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ | 
|  | 90 | +         toString (numberOfVersions + 1) | 
|  | 91 | +       }" | 
|  | 92 | +    ) | 
| 27 | 93 |   ''; | 
| 28 | 94 | 
 | 
| 29 |  | -  meta = with lib; { | 
| 30 |  | -    description = "Generate short unique IDs in PostgreSQL"; | 
| 31 |  | -    homepage = "https://github.com/iCyberon/pg_hashids"; | 
| 32 |  | -    platforms = postgresql.meta.platforms; | 
| 33 |  | -    license = licenses.postgresql; | 
|  | 95 | +  passthru = { | 
|  | 96 | +    inherit versions numberOfVersions; | 
|  | 97 | +    pname = "${pname}-all"; | 
|  | 98 | +    version = | 
|  | 99 | +      "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); | 
| 34 | 100 |   }; | 
| 35 | 101 | } | 
0 commit comments